機器學習之前,讓「大熊貓」先嘗一嘗數據的味道
大熊貓是全竹宴美食家中的饕餮,亦是十足的瞌睡蟲。不過它們還身懷一項隱秘技能:(不遺餘力吞噬下)大量的數據。今天將要介紹的就是數據處理中最強有力也最流行的工具之一:Pandas!
這是一個系列視頻/文章 「AI Adventures」中的第十二篇,由 Google 的開發技術推廣工程師 Yufeng Guo 主講,用通俗易懂的語言幫助你了解人工智慧和機器學習。在這一系列視頻/文章中,我們將一起探秘人工智慧的世界,共同品味藝術、探索科學以及掌握機器學習的工具。
第一篇:機器學習是什麼?第二篇:機器學習「七步走」第三篇:用評估器給花卉分類第四篇:彈性伸縮的雲端託管服務
第五篇:通過 TensorBoard 將模型可視化第六篇:通過深度神經網路再識評估器第七篇:雲端訓練模型的大數據解決方案第八篇:跟著 Google Research 體驗自然語言生成第九篇:雲上的機器學習引擎第十篇:使用 MNIST 數據集訓練模型第十一篇:機器學習工程師用 Python 開發環境的最佳實踐所有的內容和視頻都會首發在「機智如你」專欄,目標是發布最新與谷歌相關的機器學習、TensorFlow 相關內容,如果你有任何問題,也歡迎在留言區向我們提出反饋。
https://www.zhihu.com/video/939169884786085888
當人們談到數據科學,往往不會立即想到 Pandas。這些黑白相間憨態可掬的大熊貓總是把時間消耗在吃和睡上面,而不是鑽研數據相關的研究。但今天我們就是要用 Pandas 對付候選數據集,然後準備好下一步用於機器學習。我沒法在一期視頻中介紹整個 Pandas 庫,但是所幸我能在這期概述中給你一些幫助,讓你能自行去深入探索 Pandas 的世界。
Pandas 是一個低學習成本高性能的數據結構和數據分析工具。拋開大熊貓憨態可掬的樣子不說,「 Pandas」這個名字來源於術語「 panel data」,指的是統計和計量經濟學上的多維數據。
要安裝 Pandas,只需在 Python 環境中執行 pip install pandas
命令就可以了。之後只需要在代碼中引入 Pandas:import pandas as pd
。
人們用 Pandas 時往往都會用到 pd.read_csv
來讀入 CSV 文件中的數據。這也常常是人們使用時落筆的第一點墨。
pd.read_csv
會將數據載入一個 DataFrame 中。它本質上是一張電子表格或是數據表。我們可以通過在 DataFrame 調用 head()
來粗略察看數據集中的概況。
DataFrames 中有一行一行數據,這些數據的列首都是經過命名的,這些命名後的列又被稱為「 序列」。
我最喜歡的 DataFrames 的一些特性當中,有一個函數叫做 describe()
,這個函數會羅列出你的 DataFrame 的一些相關數據。這個函數有助於你檢查數據集,思考其中的數據分布是否合理,也可以檢驗是否各項屬性都符合預期。
有時候我會用 Pandas 來擾亂數據。有時候你想要打亂所有數據,而不是僅僅釋出數據時取用首部那一點點數據,那麼這時 Pandas 就很有用了。比如,假使你的數據處於完全有序的狀態,沒有絲毫混亂,此時你可能就需要進行一些額外的混合、擾亂操作了。
然而,對於那些無法放進內存里的大型數據集,這麼做實在不太明智。也許應該試試更高明點的法子來處理。
▍處理列
要處理數據集中單獨的某一列,只需使用括弧來標註出那一列,將該列的名字作為參數傳入即可。如果你不清楚有哪些具體的列名稱,那麼可以回過頭看看 .describe()
輸出的內容或者用 .columns
以數組形式輸出 DataFrame 中所有的列名稱。
▍處理行
處理行的方法與處理列不盡相同。比如,如果我們要想得到某個 DataFrame 中索引為 i
的行,需要使用 .iloc[i]
得到該行數據。
記住 Pandas 是以 0 作為索引起點的,所以數據中的第一行對應著索引 0。
▍同時處理行和列
有時你會想要得到某一指定的行、列的數據。由於行列的訪問方式不同,我們需要結合上面講到的兩種方式:
當然,你也可以交換兩者的訪問順序,比如 csv_data.iloc[5][『sepal_len』]
。不過,相較之下我覺得這樣一來可讀性就變差了。
▍某個行/列範圍
真正有意思的是當你要處理某個行列範圍內數據的時候。
對於列,一個列範圍只需要用一個列名稱的數組來指定。
如果要挨著輸入的列名字太多太複雜,那麼可以直接使用 csv_data.columns
得到列名稱數組後,取數組中某個範圍作為列索引的值即可。
如果要得到某個範圍內的行怎麼辦?我們用冒號作為 .iloc
之後的括弧內中的分隔符來表達即可。
起始索引已經被包括在內了,而終止索引卻被忽略了。注意,返回的是索引為 5、6、7、8、9 的行,而不包含索引為 10 的行。
▍混合行、列範圍選擇
我們想要的是行的一個子集和列的一個子集,該怎麼做?我們把上面談到的各類方法結合起來:
首先,得到所需的列名數組:
cols_2_4 = csv_data.column[2:4]
然後是所有所需的列:
df_cols_2_4 = df[cols_2_4]
選擇這些列中的指定行:
df_cols_2_4.iloc[5:10]
如果你非常熟練了,完全可以把上面三步結合成一步:
csv_data[csv_data.columns[2:4]].iloc[5:10]
我希望你能先暫停視頻回頭想想這個表達式的等價形式。我不會走開,一直在這兒等你。
▍小結幾句
Pandas 中的鏈式操作不僅會讓數據處理更快,同時當你熟練之後,代碼可讀性也會顯著提高。
我們已經看過一些 DataFrame 的處理了,但是 Pandas 所衍生的一整套工具卻遠遠不止這些。從高效的 PyTables 和 HDF5 式文件存儲到進行統計學分析,處處遍布 Pandas 的身影。
稍後就試著去用一下 Pandas 吧,定會讓你滿意!
感謝閱讀本期 Cloud AI Adventures。如果喜歡本系列,請點個贊,關注我或者「機智如你 」專欄。如果想得到更豐富的資訊,還可以關注 Yufeng G 的 Medium 及 AIA 系列的 YouTube 頻道。更多精彩等著你哦!
▏原文出處:Medium - Wrangling data with Pandas
▏封面來源:YouTube 視頻縮略圖
▏視頻出處:YouTube - Wrangling data with Pandas
▏字幕翻譯:谷創字幕組
▏文章編輯: @楊棟
推薦閱讀:
※數據分析的魅力和坑
※數據化管理在餐飲業中的應用
※如何用大數據軟體分析金融數據,目前哪個領域最有分析價值,以及發展方向?
※有了這些數據指標,讓活動「運營」起來!
※Mysql——將CSV文件導入表中