教程 | 一文入門Python數據分析庫Pandas


首先要給那些不熟悉 Pandas 的人簡單介紹一下,Pandas 是 Python 生態系統中最流行的數據分析庫。它能夠完成許多任務,包括:

 

  • 讀/寫不同格式的數據

  • 選擇數據的子集

  • 跨行/列計算

  • 尋找並填寫缺失的數據

  • 在數據的獨立組中應用操作

  • 重塑數據成不同格式

  • 合並多個數據集

  • 先進的時序功能

  • 通過 matplotlib 和 seaborn 進行可視化操作

 

盡管 Pandas 功能強大,但它並不為整個數據科學流程提供完整功能。Pandas 通常是被用在數據采集和存儲以及數據建模和預測中間的工具,作用是數據挖掘和清理。

 

數據科學管道

 

對於典型的數據科學家而言,Pandas 在數據管道傳輸過程中扮演着非常重要的角色。其中一個量化指標是通過社區討論頻率趨勢(Stack Overflow trends app (https://insights.stackoverflow.com/trends))。

 

 

現在,Pandas 在 Stack Overflow 上的活動居 Python 數據科學庫之首,占整個站點新問題提交總數的 1%。

 

Stack Overflow 的濫用

 

從上面的圖標中,我們發現很多人都在使用 Pandas,但同時也對此很困惑。我在 Stack Overflow 上回答了關於 Pandas 的約 400 個問題,親眼目睹了大家對這個庫理解得多糟。Stack Overflow 給程序員提供了極大的便捷,但同時也產生了一個巨大的缺點。因為程序員能瞬間找到問題的答案並獲得滿足感,導致人們不願意仔細閱讀自己擁有的文獻和其他資源了。其實我建議程序員每年花幾個星期的時間不用 Stack Overflow 解決問題。

 

手把手教你學 Pandas

 

幾個星期前有人詢問我如何練習使用 Pandas,因此我在 r/datascience subreddit 上發布了一個簡單的指南。下面的內容將詳細說明那篇文章表達的信息。

 

首先,你應該擺正目標。你的目標不是真的要「學習 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 代碼括號當中時,被指對象就會彈出一個小滾動框顯示其文檔。這個小框對我來說十分有用,因為記住所有的參數名稱和它們的輸入類型是不可能的。

 

按下 shift + tab + tab,開啟 stack 方式的文檔

 

你也可以在「.」之后直接按下 tab 鍵,得到全部有效對象的下拉菜單

 

在 DataFrame(df.) 后按下 tab,獲得 200+ 有效對象列表

 

官方文檔的主要缺點

 

雖然官方文檔描述得非常詳盡,但它並不能很好地指導如何正確使用真實數據進行數據分析。所有數據都是人為設計或者隨機生成的。真正的數據分析會涉及好幾個、甚至幾十個 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 有多種功能和多種方式去實現同樣的結果。編寫簡單的程序也很容易得到你的結果,但其實效率非常低。

 

如果你是一個使用 Python 的數據科學家,你可能已經頻繁使用 Pandas。所以你應該把掌握 Pandas 這件事擺在重要的位置上,它能夠為你創造很多價值。

 

你可以在下面的鏈接中獲得許多有趣的技巧:https://stackoverflow.com/questions/17095101/outputting-difference-in-two-pandas-dataframes-side-by-side-highlighting-the-d/47112033#47112033

 

使用 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 上檢驗你的知識。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM