教程 | 一文入門Python資料分析庫Pandas
編輯|陳韻竹&李澤南 首發|機器之心
Pandas 通常用於快速簡單的資料操作、聚合和視覺化。在這篇文章中,我將概述如何學習這一工具的使用。
Pandas 官網連結:https://pandas.pydata.org/
首先要給那些不熟悉 Pandas 的人簡單介紹一下,Pandas 是 Python 生態系統中最流行的資料分析庫。它能夠完成許多工,包括:
讀/寫不同格式的資料
選擇資料的子集
跨行/列計算
尋找並填寫缺失的資料
在資料的獨立組中應用操作
重塑資料成不同格式
合併多個數據集
先進的時序功能
通過 matplotlib 和 seaborn 進行視覺化操作
儘管 Pandas 功能強大,但它並不為整個資料科學流程提供完整功能。Pandas 通常是被用在資料採集和儲存以及資料建模和預測中間的工具,作用是資料探勘和清理。
對於典型的資料科學家而言,Pandas 在資料管道傳輸過程中扮演著非常重要的角色。其中一個量化指標是通過社群討論頻率趨勢(Stack Overflow trends app (https://insights.stackoverflow.com/trends))。
手把手教你學 Pandas
首先,你應該擺正目標。你的目標不是真的要「學習 Pandas」。瞭解如何在庫中執行運算是很有用的,但這和你在實際資料分析中需要用到的 Pandas 知識並不一樣。你可以將你的學習分為兩類:
獨立於資料分析,學習 Pandas 庫
學習在實際資料分析中使用 Pandas
打個比方,這兩者的區別類似於,前者是學習如何將小樹枝鋸成兩半,後者是在森林裡砍一些樹。在我們詳細討論之前,讓我們先總結一下這兩種方法。
獨立於資料分析,學習 Pandas 庫:此方法主要包括閱讀、更關鍵的是探索 Pandas 官方文件。(http://pandas.pydata.org/pandas-docs/stable/)
學習在實際資料分析中使用 Pandas:此方法涉及查詢和收集真實世界的資料,並執行端到端的資料分析。Kaggle 資料集 是查詢資料的好地方。不過我強烈建議你避免在流暢使用 Pandas 前使用 Kaggle 的機器學習元件。
交替學習
在你學習如何使用 Pandas 進行資料分析的過程中,你應該交替學習 Pandas 文件的基礎以及在真實資料庫處理中的 Pandas 運用。這非常重要。否則,你很容易在掌握完成大部分任務所需的 Pandas 基礎知識之後對他們產生完全的依賴。但其實在更高階的運算存在時,這些基礎又顯得太笨重了。
從文件開始
如果你此前從沒有接觸過 Pandas 但是有著 Python 的足夠的基礎知識,我建議你從 Pandas 官方文件開始。文件寫得非常詳細,現在共有 2195 頁。即使文件的規模如此龐大,它還是沒有涵蓋每一個操作,當然也不涵蓋你在 Pandas 中能使用的函式/方法與引數的所有組合。
充分利用文件
為了充分利用文件,不要只閱讀它。我建議你閱讀其中的 15 個 部分。對每個部分,新建一個 Jupyter notebook。如果你對 Jupyter notebook 不太熟悉,請先閱讀來源於 Data Camp 的這篇文章:https://www.datacamp.com/community/tutorials/tutorial-jupyter-notebook
建立你的首個 Jupyter notebook
請從「資料結構入門(Intro to Data Structures)」這個章節開始。在你的 Jupyter notebook 旁邊開啟這個頁面。當你閱讀文件時,寫下(而不是複製)程式碼,並且在筆記本中執行。在執行程式碼的過程中,請探索這些操作,並嘗試探索使用它們的新方法。
然後選擇「索引和選擇資料(Indexing and Selecting Data)」這個部分。新建一個 Jupyter notebook,同樣編寫、執行程式碼,然後探索你學到的不同操作。選擇資料是初學者最難理解的部分,我專門在 .locvs .iloc 上寫了一個長篇文章(https://stackoverflow.com/questions/28757389/loc-vs-iloc-vs-ix-vs-at-vs-iat/47098873#47098873),你可能想從中看到另一個解釋。
在學習這兩個部分之後,你應該能瞭解一個 DataFrame 和一個 Series 的元件,也能明白如何從資料中選擇不同的子集。現在可以閱讀「10 minutes to pandas」,以獲得更加其他有用操作的廣泛概述。和學習所有部分一樣,請新建一個 notebook。
按下 shift + tab + tab 獲得幫助
我經常在使用 Pandas 時按下 shift + tab + tab。當指標放在名稱中或是在有效 Python 程式碼括號當中時,被指物件就會彈出一個小滾動框顯示其文件。這個小框對我來說十分有用,因為記住所有的引數名稱和它們的輸入型別是不可能的。
你也可以在「.」之後直接按下 tab 鍵,得到全部有效物件的下拉選單
官方文件的主要缺點
雖然官方文件描述得非常詳盡,但它並不能很好地指導如何正確使用真實資料進行資料分析。所有資料都是人為設計或者隨機生成的。真正的資料分析會涉及好幾個、甚至幾十個 Pandas 操作序列。如果你只看文件,你永遠不會接觸到這些。使用文件學習 Pandas 呆板而機械,各個方法學起來相互獨立沒有聯絡。
建立你的首次資料分析
在讀完上述三部分文件之後,就可以首次接觸真實資料了。如前所述,我建議你從 Kaggle 資料集開始。你可以通過大眾投票熱度進行挑選,例如選擇 TMDB 5000 Movie 資料集。下載資料,然後在該資料集上新建一個 Jupyter notebook。你可能目前並不能進行高階的資料處理,但你應該能聯絡你在文件的前三部分學到的知識。
檢視核心
每一個 Kaggle 資料集都有一個核心(kernel)部分。不要被「核心」這個名字迷惑了——它只是一個將 Kaggle 資料集放在 Python 或 R 語言處理的 Jupyter notebook。這是很好的學習機會。在你做了一些基本的資料分析之後,開啟一個比較流行的 Python kernel,通讀其中的幾個,把你感興趣的幾個程式碼片段插入到自己的程式碼裡。
如果對某些問題不能理解,你可以在評論區提問。其實你可以建立自己的 kernel,不過現在,我覺得你還是在本地筆記本上工作比較好。
迴歸官方文件
當你完成了你的第一個 kernel 之後,你可以迴歸文件然後閱讀其他部分。下面是我建議的閱讀順序:
處理丟失的資料
分組:split-apply-combine 模式
重塑和資料交叉表
資料合併和連線
輸入輸出工具(Text,CSV,HDF5…)
使用文字資料
視覺化
時間序列/日期功能
時間差
分類資料
計算工具
多重索引/高階索引
上述順序與文件主頁左側的順序明顯不同,其中涵蓋了我認為最重要的主題。文件中的某些部分沒有在上面列出,你可以在之後自行閱讀他們。
在閱讀上述部分的文件並完成大約 10 個 Kaggle kernel 之後,你應該可以無障礙地弄懂 Pandas 的機制,同時可以順利地進行實際資料分析。
學習探索性資料分析
通過閱讀許多流行的 Kaggle kernel,你會在建立良好資料分析方面收穫豐富。對於更加正式和嚴格的方法,我建議你閱讀 Howard Seltman 線上書籍的第四章節,「Exploratory Data Analysis」。(http://www.stat.cmu.edu/~hseltman/309/Book/chapter4.pdf)
建立自己的 Kernel
你應該考慮在 Kaggle 上建立自己的 kernel。這是強制自己將程式寫得清晰的好方法。通常,那些你自己寫的程式碼都亂糟糟的沒有順序,對他人(包括未來的自己)來說都毫無可讀性。但當你在網上發表 Kernel 的時候,我會建議你做得好一些,就像是期待你現在或未來老闆讀取那樣。你可以在開頭寫一個執行總結或摘要,然後用註釋解釋每個程式碼塊。我通常會寫一個探索性但混亂的程式,然後再寫一個完全獨立可讀的程式作為最終產品。這是我的一位學生在 HR analytics 資料集上寫的 kernel:https://www.kaggle.com/aselad/why-are-our-employees-leaving-prematurely
不要只是依賴 Pandas,試著掌握它
一個把 Pandas 用的過得去的人和一個掌握 Pandas 的人有很大的區別。Pandas 的常規使用者通常只能寫比較差的程式碼,因為 Pandas 有多種功能和多種方式去實現同樣的結果。編寫簡單的程式也很容易得到你的結果,但其實效率非常低。
使用 Stack Overflow 檢驗你的知識
如果你不能回答 Stack Overflow 的關於一個 Python 庫的大部分問題,你就不算真正瞭解它。這種論斷可能有點絕對,但是大體說來,Stack Overflow 為特定了解一個庫提供了很好的測試平臺。Stack Overflow 上有超過 50000 個帶有 Pandas 標籤的問題,所以你有一個無窮無盡的資料庫能建立你對 Pandas 的知識。
如果你從沒有在 Stack Overflow 上回答過問題,我建議你看看那些已有答案的來問題,並且嘗試只通過文件來回答他們。當你覺得你可以將高質量的回答整合起來的時候,我建議你回答一些沒有被解答的問題。在 Stack Overflow 回答問題是鍛鍊我的 Pandas 技能的最佳方式。
完成你自己的專案
Kaggle kernel 非常棒,但最終你需要處理一個獨一無二的任務。第一步是尋找資料。其中有許多資料資源,如:
data.gov
data.world
紐約公開資料,休斯頓公開資料,丹佛公開資料——大多數美國大城市都開放了資料門戶。
找到想要探索的資料集之後,繼續用相同的方式建立 Jupyter notebook,當你有一個很好的最終成果時,可以將它釋出到 github 上。
總結
總之,作為一個初學者,我們需要使用文件學習 Pandas 運算的主要機制,使用真實的資料集,從 Kaggle kernel 開始學習做資料分析,最後,在 Stack Overflow 上檢驗你的知識。
原文釋出時間為:2018-11-30
本文作者:Ted Petrou
本文來自雲棲社群合作伙伴“ ofollow,noindex">機器學習演算法與Python學習 ”,瞭解相關資訊可以關注“guodongwei1991”微信公眾號