回覆列表
-
1 # 機器之心Pro
-
2 # 加米穀大資料
pandas 是基於NumPy 的一種工具,該工具是為了解決資料分析任務而建立的。Pandas 納入了大量庫和一些標準的資料模型,提供了高效地操作大型資料集所需的工具。pandas提供了大量能使我們快速便捷地處理資料的函式和方法,它是使Python成為強大而高效的資料分析環境的重要因素之一。
Pandas 是python的一個數據分析包, Pandas的名稱來自於面板資料(panel data)和python資料分析(data analysis)。
使用可以參考文章
pandas指南:
https://www.toutiao.com/i6650277512960016900/
在這篇文章中,我將概述如何學習 Pandas。首先要給那些不熟悉 Pandas 的人簡單介紹一下,Pandas 是 Python 生態系統中最流行的資料分析庫。它能夠完成許多工,包括:
* 讀/寫不同格式的資料
* 選擇資料的子集
* 跨行/列計算
* 尋找並填寫缺失的資料
* 在資料的獨立組中應用操作
* 重塑資料成不同格式
* 合併多個數據集
* 先進的時序功能
* 透過 matplotlib 和 seaborn 進行視覺化操作
儘管 Pandas 功能強大,但它並不為整個資料科學流程提供完整功能。Pandas 通常是被用在資料採集和儲存以及資料建模和預測中間的工具,作用是資料探勘和清理。
資料科學管道
現在,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 之後,你可以迴歸文件然後閱讀其他部分。下面是我建議的閱讀順序:
* 處理丟失的資料
* 分組: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 上檢驗你的知識。