回覆列表
  • 1 # 機器之心Pro

    在這篇文章中,我將概述如何學習 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 上檢驗你的知識。

  • 2 # 加米穀大資料

    pandas 是基於NumPy 的一種工具,該工具是為了解決資料分析任務而建立的。Pandas 納入了大量庫和一些標準的資料模型,提供了高效地操作大型資料集所需的工具。pandas提供了大量能使我們快速便捷地處理資料的函式和方法,它是使Python成為強大而高效的資料分析環境的重要因素之一。

    Pandas 是python的一個數據分析包, Pandas的名稱來自於面板資料(panel data)和python資料分析(data analysis)。

    使用可以參考文章

    pandas指南:

    https://www.toutiao.com/i6650277512960016900/

  • 中秋節和大豐收的關聯?
  • 賽爾號烏索技能表?