search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

你和大數據只差了一個Python的距離

Python語法簡潔清晰,開發效率高,容易學習,在數據處理的各個場景中具有廣泛應用,本期作者通過數據處理實例,展示了Python在海量數據處理方面具有的優勢。

1.Python在數據挖掘中的應用

Python常被昵稱為「膠水」語言,其特點是可以輕鬆的連接各種編程語言,粘在各個應用場景,不管是建站、爬蟲、運維還是數據挖掘,都有它的身影。與其它語言相比,Python的語法簡潔清晰,開發效率十分高效,通過完善的「包」往往一行代碼可以實現其他語言N行代碼的功能(但是某些場景執行效率不如C、Java等)。對於學習成本來講,相對其它編程語言來講,只要找對教程,一個對編程沒有太多概念的初學者也可以輕鬆入門。

對於數據挖掘來講,Python對數據清洗、數據探索、建立寬表、變數篩選、建模、模型參數優化、模型輸出、模型投產等等一系列環節均有成熟的「包」進行支持。

而在建模環節,除了對傳統時序、Logistic、決策樹等演算法的支持,Python也在不斷湧現和迭代著各種最前沿且實用的演算法包供用戶免費使用,如:微軟開源的回歸/分類包LightGBM、FaceBook開源的時序包Prophet、Google開源的神經網路包TensorFlow,廣泛應用於各大比賽的Xgboost等等等等。上述開源的包中,全部都支持Python。而對於其它語言來講,上述包並不一定全部支持。由此也可以看到Python在數據挖掘領域中舉足輕重的地位。

從實際使用的角度來講,通過筆者對部分包的實際使用,對於分類、Logistics回歸、傳統回歸等問題,上述包對效率和準確率均有十分大的提升。僅從效率角度比較,之前某項目寬表共40餘萬樣本,480個欄位,逐步回歸用時2個小時,而另外一個項目通過使用xgboost的logistic Object,30餘萬樣本,1700個欄位,建模時間用時不到2分鐘。(由於xgboost在各個數據挖掘競賽中已經被廣泛證實效果十分優秀,而且模型比較需要很長篇幅進行描述。所以本文僅從效率角度進行了比較,後續可以就模型比較單獨寫一篇公眾號文,但就經驗而言xgboost等演算法效果通常不會比傳統演算法差)同時,與傳統數據挖掘軟體相比,Python還廣泛應用於圖像識別、語音識別、NLP等更豐富的數據挖掘領域。

可以看到,Python擁有應用場景廣泛、開源免費、前沿演算法支持、學習成本低、開發效率高等優質特點。通過這些特點,Python把遙不可及高高在上的大數據、數據挖掘、機器學習、深度學習等概念轉化為每個人都可以學習、每個企業都可以實際應用的項目和程序。通過低成本的投入,可以滿足更豐富的業務場景的需求、對現有業務場景的優化,幫助企業獲得更高的利潤並降低風險。

2.數據處理實例

對於大數據、數據挖掘的各種概念已經被炒的稀爛,類似上面寫的軟文一百度一大堆。作為一個乾貨滿滿的公眾號,下面將從數據處理出發,從效率角度將Python及MySQL進行實際對比,展示Python對數據處理的強大能力。

  • 背景

在數據挖掘第一步,通常會面臨海量的貼源數據,也就是說一張表就有可能有上億行數據。對於這種數據集的處理,在非集群的情況下,使用傳統SQL資料庫,需要通過建立索引、分表等技術才可能進行下一步處理,且效率很難保證。

如筆者曾經試圖用單機MySQL(配置在下面測試中有截圖,一個乞丐版的2014年mac pro)處理15g的單張表,共3億+數據。但是發現導入進MySQL資料庫都效率極低,而進行加索引或者簡單的Groupby等操作更是基本無法完成。當然,通過分表處理理論上可以解決上述問題,但是代碼量和效率也並不會十分迅捷。

對於上述問題,筆者最終採用Python的pandas包對數據進行分塊讀取,並使用pandas自帶的Groupby、merge實現了與MySQL同樣的功能,運行速度相比MySQL有了質的飛躍。

同時,Python在處理數據過程中,可以直接完成類似Excel的透視表功能,這個功能在建立寬表過程中十分有用,且是SQL並不支持的功能。

下面,將分別使用Python和MySQL對數據進行相同的處理,同時對MySQL是否加索引分別計算時間。由於本部分涉及代碼,為了方便閱讀,會先介紹軟硬體配置及數據集,然後給出測試結果和結論,附錄中會展示測試過程及代碼。(由於時間和能力有限,也許筆者對Python和MySQL不能進行最優優化,結論不能十分嚴謹,但是結論也能適用於絕大多數企業的實際數據和硬體場景)

  • 數據及環境介紹

使用數據取自網路公開數據,經過簡單加工,數據集共3.79G, 5060w行,13列的csv文件。硬體配置:

涉及軟體版本:Python 3.5,pandas(0.19.2),MySQL Community Server (GPL) 5.7.16。

下面筆者將分別從數據讀取和SQL常用操作對數據進行對比。

  • 測試結果及結論

測試結論:在測試中,Python對於數據的處理速度均極大的超過了MySQL資料庫。由於在測試中只是對數據進行了簡單的處理,同時數據量也僅僅5000w量級,所以Python對數據的處理能力也只是展露了一小部分。而在實際的挖掘項目中,在面臨著需要計算幾千甚至上萬特徵值的情況下,通過Python將可以從代碼量和運算速度兩方面極大提高寬表製作效率,甚至完成傳統SQL資料庫難以完成的工作。

寫在最後

通過文章第二部分的實驗,可以看到身為免費開源的Python,在數據挖掘最基礎的數據處理部分,已經遠超傳統方法。而這裡展示的只是Python在數據挖掘中運用的冰山一角。從傳統的統計模型到前沿的深度學習,從實際的生產環境到Kaggle競賽,都充斥著Python的身影,這些都足以證明Python在數據挖掘領域的應用是多麼廣泛。

Google對TensorFlow的開源和社區化,讓它成為深度學習里一顆璀璨的明珠,也讓深度學習向前前進了一大步。如果您的企業想對數據挖掘想了解更多,歡迎您在公眾號直接回復與我們聯繫,我們十分願意和您共享我們知道的一切。

註:對於數據處理,Python的pandas包文檔給出了十分詳細的實例,其中包括與R、SQL和SAS語句的對比,如果您已經掌握R、SQL或者SAS,上手pandas將會是一件十分簡單的事情。

與SQL對比的網址:http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html

附錄:過程及代碼截圖
  • 數據讀取

MySQL

Python

  • 不加索引MySQL

where

groupby

left join

加索引MySQL

where

groupby

left join

  • Python

where

group by

left join

關於我們

我們是KPMG專業數據挖掘團隊,)中,我們會在每周六晚8點準時推送一篇原創文章。文章都是由項目經驗豐富的博士以及資深顧問精心準備,內容也是結合實際業務的理論應用和心得體會等乾貨。歡迎大家關注我們的微信公眾號,關注原創數據挖掘精品文章。如果想要聯繫我們,也可以在公眾號中直接發送想說的話與我們聯繫交流。

即可關注!也請隨手推薦我們給你的小夥伴 ↓↓↓↓



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦