再见 Excel,你好 Python Spreadsheets!⛵

10,028 阅读7分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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官方GitHubgithub.com/ShowMeAI-Hu…

自动生成代码

除了导入之外,还会自动生成下面的代码。(这本是需要熟悉 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官方GitHubgithub.com/ShowMeAI-Hu…

和 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),然后再提取属性。操作动图演示如下:

参考资料