今天跟大家唠唠我最近折腾的“斯塔克豪斯”。别误会,不是那位NBA球星,虽然我也挺喜欢看他当年打球的,我说的是我用Python搞的一个小玩意儿,用来整理和分析数据,灵感来源于他名字给我的感觉:坚固,高效,一锤定音。
最开始是因为手头一堆乱七八糟的CSV文件,什么销售数据、客户信息、产品清单,全堆一块儿,看着就头大。用Excel打开慢不说,想做个统计分析,那更是要命。寻思着得找个靠谱的法子,把这些数据都给理顺。
于是我就琢磨着自己写个脚本,能自动读取这些CSV,然后按照我的需求,把数据清洗干净,再做一些简单的统计分析。说干就干,先从最简单的读取CSV开始。Python的`pandas`库简直是神器,几行代码就能把CSV文件读成`DataFrame`,操作起来方便得不行。
python
import pandas as pd
# 读取CSV文件
df = *_csv('your_*')
# 打印前几行看看效果
print(*())
搞定读取之后,就开始琢磨数据清洗。这里面门道就多,什么缺失值处理、重复值删除、异常值修正,各种问题层出不穷。
是缺失值,有些列里面空空如也,影响分析。我一般先用`*().sum()`看看哪些列缺失值比较多,然后根据情况选择填充或者删除。
python
# 查看缺失值情况
print(*().sum())
# 填充缺失值,比如用平均值填充
df['column_with_missing_values'].fillna(df['column_with_missing_values'].mean(), inplace=True)
# 或者直接删除包含缺失值的行
*(inplace=True)
接着是重复值,有些数据重复录入,得删掉。`pandas`有个`drop_duplicates()`方法,直接搞定。
python
# 删除重复行
*_duplicates(inplace=True)
还有一些异常值,比如年龄出现负数,销售额出现负数,这些肯定是不对的,得想办法修正。我一般会根据业务逻辑,设置一个合理的范围,超出范围的就用平均值或者中位数替换。
python
# 修正年龄异常值
*[df['age'] < 0, 'age'] = df['age'].mean() # 用平均年龄替换
数据清洗完之后,就开始做一些简单的统计分析。比如计算销售额总和、客户平均年龄、产品销量排名等等。`pandas`提供各种各样的函数,`sum()`、`mean()`、`groupby()`、`sort_values()`,用起来得心应手。
python
# 计算销售额总和
total_sales = df['sales'].sum()
print(f'总销售额:{total_sales}')
# 计算客户平均年龄
average_age = df['age'].mean()
print(f'平均年龄:{average_age}')
# 产品销量排名
product_sales = *('product')['sales'].sum().sort_values(ascending=False)
print(product_sales)
为方便以后使用,我还把这些功能封装成一个个函数,然后写一个简单的命令行界面,这样就可以直接在命令行里输入命令,快速完成数据处理和分析。
只要把CSV文件放到指定目录,然后运行我的“斯塔克豪斯”,就能自动完成数据清洗和分析,生成各种报表,省时省力。虽然功能还比较简单,但已经能解决我大部分的需求。
这只是个开始。以后我还打算继续完善它,比如增加更多的数据可视化功能,支持更多的数据源,甚至可以搞个Web界面,让其他人也能方便地使用。慢慢来,一点一点把它打造成一个真正的数据分析利器。这就是我折腾“斯塔克豪斯”的全部过程,跟大家分享一下,希望能给大家带来一些启发。
还没有评论,来说两句吧...