再見 Excel,你好 Python Spreadsheets!⛵

語言: CN / TW / HK

highlight: a11y-dark

攜手創作,共同成長!這是我參與「掘金日新計劃 · 8 月更文挑戰」的第9天,點擊查看活動詳情

Excel是大家最常用的數據分析工具之一,藉助它可以便捷地完成數據清理、統計計算、數據分析(數據透視圖)和圖表呈現等。

但是!大家有沒有用 Excel 處理過大一些的數據(比如幾十上百萬行的數據表),Excel 就會變得非常慢,甚至直接崩潰。

辛辛苦苦做一半的工作很有可能要重做!那就不只是 Excel 崩潰了,我們也得一邊崩潰一邊加班趕 deadline。

在本篇文中,ShowMeAI 將給大家介紹到 Python 中非常好用的交互式表格工具,它們的功能性和使用便捷度和 Excel 相當,同時有很好的內存優化,非常適合處理大文件表格。

工具1:Mito

Mito 是 Python 中的電子表格,它同時擁有 Excel 電子表格的簡單易用性和 Python 的強大功能。我們可以像使用 Excel 一樣使用 Mito,並且在我們執行每個操作之後,Mito 將自動生成與每個操作對應的 Python 代碼。

使用 Mito 工具庫,我們首先需要安裝 Python 和 Jupyter Notebook 或 Jupyter Lab, 然後我們通過終端或命令行運行以下命令來安裝 Mito。

python -m pip install mitoinstaller python -m mitoinstaller install

下面我們來演示一下,如何在 Mito 中完成我們在 Excel 中的操作,如讀取文件、創建列、數據透視表、可視化等。

💡 Mito:文件讀取

Excel 默認對文件行數有限制。在內存足夠時,Excel 可以打開數百萬行的文件,但是隻顯示前 1048576 行。感興趣的話可以測試下這個數據~同樣在內存充足的情況下,Mito 打開文件的大小沒有限制。來看具體操作!

讀入表格文件

在讀取 CSV 文件之前,先導入工具庫,創建一個 Mito 電子表格對象,代碼如下:

import mitosheet mitosheet.sheet()

接下來的讀取操作就可以用鼠標完成了, 下圖的演示中,使用到的數據集是學校成績數據集,大家可以在ShowMeAI的百度網盤地址下載 。 下載文件後,單擊『+』或『導入』按鈕進行閲讀,如下圖所示:

🏆 實戰數據集下載(百度網盤):公眾號『ShowMeAI研究中心』回覆『實戰』,或者點擊 這裏 獲取本文 [7] 使用 Mito 和 Bamboolib 進行超大量數據的處理(Python)Spreadsheets 數據集

ShowMeAI官方GitHubhttp://github.com/ShowMeAI-Hub

自動生成代碼

除了導入之外,還會自動生成下面的代碼。(這本是需要熟悉 Pandas 工具庫的同學通過編碼完成的。但現在我們簡單操作之後,就可以自動生成了!)

import pandas as pd StudentsPerformance_csv = pd.read_csv(r'StudentsPerformance.csv')

💡 Mito:基本表格操作

在 Excel 中,我們會創建一個『宏』來記錄一組可以隨時執行的操作。對應到 Mito中,我們可以做同樣的事情,藉助於 Python 生態與各種開源庫,我們可以完成更多自動化的操作,比如處理完表格之後通過電子郵件發送報吿,使用微信發送文件,導入數據到數據庫中等。

下面我們用 Mito 執行一些操作,就好像我們在使用 Excel 一樣。

創建新列&重命名列

如果要創建新列,只需單擊『添加列』按鈕。默認情況下,『Add Col』按鈕將創建一個名為『new-column』的列,我們將通過雙擊列名將其重命名為『average』。

自動代碼生成

這一步結束後,Mito 又生成了與我們在電子表格上執行的操作相對應的 Python 代碼!

```

Added column new-column-uca5 to StudentsPerformance_csv

StudentsPerformance_csv.insert(8, 'new-column-uca5', 0)

Renamed new-column-uca5 to average in StudentsPerformance_csv

StudentsPerformance_csv.rename(columns={'new-column-uca5': 'average'}, inplace=True) ```

💡 Mito:統計分析

我們經常要對數據做統計分析,如果要對一行做統計計算,我們只需將公式寫在一個單元格中。

求平均統計

假設我們要計算數學、閲讀和寫作的平均分數。 我們只需要在『average』列的任何單元格中填入公式 (math score+reading score+writing score)/3,如下圖所示:

自動代碼生成

同樣 Mito 生成了pandas的統計代碼:

```

Set new-column-uca5 in StudentsPerformance_csv to =(math score+reading score+writing score)/3

StudentsPerformance_csv['average'] = (StudentsPerformance_csv['math score']+StudentsPerformance_csv['reading score']+StudentsPerformance_csv['writing score'])/3 ```

💡 Mito:數據透視表

在Mito中創建數據透視表同樣非常簡單,單擊『數據透視』按鈕, 然後選擇行、列和值。

創建數據透視表

下圖演示了我們創建一個數據透視表,在『種族/民族』列中顯示 A、B、C、D 和 E 組的數學和閲讀分數的平均值。

自動生成代碼

同樣在Mito操作過後,我們生成了如下的 Python 代碼。

```

Imported StudentsPerformance.csv

import pandas as pd StudentsPerformance_csv = pd.read_csv(r'StudentsPerformance.csv')

Pivoted StudentsPerformance_csv into df2

unused_columns = StudentsPerformance_csv.columns.difference(set(['race/ethnicity']).union(set([])).union(set({'math score', 'reading score'}))) tmp_df = StudentsPerformance_csv.drop(unused_columns, axis=1) pivot_table = tmp_df.pivot_table( index=['race/ethnicity'], values=['math score', 'reading score'], aggfunc={'math score': ['mean'], 'reading score': ['mean']} ) pivot_table.columns = [flatten_column_header(col) for col in pivot_table.columns.values] df2 = pivot_table.reset_index() ```

💡 Mito:可視化&繪圖

使用 Mito 可以輕鬆創建餅圖和條形圖等基本圖例用於可視化, 我們只需要點擊『圖表』並選擇圖表類型。

條形圖示例

讓我們為之前創建的數據透視表創建一個條形圖,在 X 軸上顯示『種族/民族』,在 Y 軸上顯示『數學分數平均值』。

很炫酷有沒有!而且 a、b、c 和 d 中生成的代碼行相當於 Excel 宏, 每次我們運行代碼時,我們都會執行所有記錄下來的操作。

工具2:Bamboolib

當我們在Excel工作簿中進行內存密集型計算時,它非常容易卡頓感和崩潰,但這些計算在 Python 中是非常簡單可以完成的,我們可以結合另一個名為bamboolib 的 Python 庫完成一系列數據操作。

大家可以通過命令 pip install --upgrade bamboolib --user安裝 bamboolib。

安裝完成之後,我們運行以下命令來讀取 CSV 或 Excel 文件。

import bamboolib as bam bam

📢 Bamboolib:大文件讀取

在這裏,我們使用包含超過 100 萬行的 CSV 大文件sales-data-1M來講解操作和計算實現,大家可以在ShowMeAI的百度網盤地址下載。

🏆 實戰數據集下載(百度網盤):公眾號『ShowMeAI研究中心』回覆『實戰』,或者點擊 這裏 獲取本文 [7] 使用 Mito 和 Bamboolib 進行超大量數據的處理(Python)Spreadsheets 數據集

ShowMeAI官方GitHubhttp://github.com/ShowMeAI-Hub

和 Mito 工具庫一樣,Bamboolib 也為我們生成代碼如下

後續內容中我們只演示步驟,但會隱藏生成的代碼,大家可以實際操作來查看生成的代碼

import pandas as pd df = pd.read_csv('./data/sales-data.csv', sep=',', decimal='.', nrows=100000) df

📢 Bamboolib:新建列&統計計算

如果我們要創建一個新列,我們可以在搜索欄上搜索『列命名』操作,然後鍵入列公式。下圖演示我們使用公式創建一個『價格』列 (revenue/quantity).

📢 Bamboolib:數據透視表

下面我們在搜索欄中輸入『數據透視表』。 然後我們在數據行中按產品對數據進行分組,並使用『sum』作為聚合函數,整個操作如下圖所示:

📢 Bamboolib:可視化&繪圖

接下來,我們創建一個餅圖。 我們點擊『Create Plot』按鈕,選擇圖形類型,然後選擇我們想要顯示的值。

📢 Bamboolib:信息/屬性抽取

下面我們從『日期』列中提取屬性,我們希望提取出月份,要完成這個操作,我們會將『日期』列的數據類型更改為 date(現在類型為 str),然後再提取屬性。操作動圖演示如下:

參考資料

「其他文章」