💡 作者:韩信子@ShowMeAI 📘 数据分析◉技能提升系列:https://www.showmeai.tech/tutorials/33 📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40 📘 本文地址:https://www.showmeai.tech/article-detail/294 📢 声明:版权所有,转载请联系平台与作者并注明出处 📢 收藏ShowMeAI查看更多精彩内容
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官方GitHub:https://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官方GitHub:https://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
),然后再提取属性。操作动图演示如下:
参考资料
- 🏆 实战数据集下载(百度网盘):公众号『ShowMeAI研究中心』回复『实战』,或者点击 这里 获取本文 [7] 使用 Mito 和 Bamboolib 进行超大量数据的处理(Python) 『Spreadsheets 数据集』
- ⭐ ShowMeAI官方GitHub:https://github.com/ShowMeAI-Hub
- 📘 Mito 官方文档 https://docs.trymito.io/
- 📘 Mito Github https://github.com/mito-ds/monorepo
- 📘 Mito 使用示例 https://github.com/mito-ds/mito-demo
- 📘 Bamboolib官方文档 https://bamboolib.8080labs.com/
- 📘 Bamboolib Github https://github.com/tkrabel/bamboolib