機器學習之前,讓「大熊貓」先嘗一嘗數據的味道

大熊貓是全竹宴美食家中的饕餮,亦是十足的瞌睡蟲。不過它們還身懷一項隱秘技能:(不遺餘力吞噬下)大量的數據。今天將要介紹的就是數據處理中最強有力也最流行的工具之一: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] 得到該行數據。

索引為 5,表示這是第 6 行

記住 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文件導入表中

TAG:机器学习 | 数据分析 | 性能优化 |