数据分析实战案例:使用 Pandas 和 Matplotlib 进行居民用水

原创 IT小本本 IT小本本 2025年04月15日 18:31 北京

本文将使用 MatplotlibSeaborn 进行数据可视化。探索如何清理数据、计算月度用水量并生成有价值的统计图表,以便更好地理解居民的用水情况。


数据处理与清理

读取 Excel 文件

首先,我们使用 pandas 读取 Excel 文件,以获取居民每日用水数据:

复制代码
excel_file = '居民用水统计.xlsx'
water_usage_df = pd.read_excel(excel_file)

居民用水统计.xlsx:

为了确保日期数据正确解析,我们转换 日期 列为日期格式,并处理异常值:

复制代码
water_usage_df['日期'] = pd.to_datetime(water_usage_df['日期'], errors='coerce')

如果有无效日期,系统会标记为 NaT (Not a Time),并进行检查:

复制代码
if water_usage_df['日期'].isnull().any():
    print("发现无效日期,已将其处理为 NaT。请检查数据。")
    print(water_usage_df[water_usage_df['日期'].isnull()])

这样,我们就能确保数据的完整性,为后续分析做好准备。


计算居民每月用水量

为了分析不同月份的用水情况,我们按照月份对数据进行分组,并计算每月的总用水量:

复制代码
monthly_usage_df = water_usage_df.groupby(pd.to_datetime(water_usage_df['日期']).dt.to_period('M')).sum(numeric_only=True)
monthly_usage_df = monthly_usage_df.reset_index()
monthly_usage_df['月份'] = monthly_usage_df['日期'].dt.strftime('%Y-%m')
monthly_usage_df = monthly_usage_df.drop(columns=['日期'])

最终,我们可以打印月度汇总数据:

复制代码
print("\n每月居民用水量:\n", monthly_usage_df)

此外,我们可以使用 describe() 生成数据的基本统计信息,如均值、中位数等:

复制代码
summary_stats = monthly_usage_df.describe()
print("\n统计分析:\n", summary_stats)

这些统计数据能够帮助我们发现居民的用水趋势,例如是否有用水高峰期或异常用水情况。


数据可视化

设置 Matplotlib 字体

由于数据中包含中文,需要在 Matplotlib 里指定字体:

复制代码
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False  # 处理负号显示

每月用水量柱状图

为了更直观地展示用水情况,我们绘制柱状图:

复制代码
plt.figure(figsize=(12, 6))
monthly_usage_df.set_index('月份').plot(kind='bar', figsize=(12, 6), alpha=0.7)
plt.title('居民每月总用水量 (2023年)')
plt.xlabel('月份')
plt.ylabel('总用水量 (升)')
plt.xticks(rotation=45)
plt.legend(title='居民')
plt.grid(axis='y')
plt.tight_layout()
plt.savefig('每月用水统计图.png')
plt.show()

这张图能够帮助我们快速识别哪几个月的用水量最高或最低,为城市管理者提供参考。

用水量分布图

除了柱状图,我们还可以使用 Seaborn 绘制每日用水量的分布情况:

复制代码
plt.figure(figsize=(12, 6))
sns.boxplot(data=water_usage_df.iloc[:, 1:])  # 提取居民用水数据
plt.title('居民每日用水量分布图')
plt.xlabel('居民')
plt.ylabel('用水量 (升)')
plt.xticks(rotation=45)
plt.grid(axis='y')
plt.tight_layout()
plt.savefig('居民每日用水量分布图.png')
plt.show()

箱型图可以帮助我们发现不同居民用水习惯的变化,并检测是否存在异常值。


🔮 源码获取

相关推荐
java1234_小锋1 小时前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情数据可视化分析-热词情感趋势树形图
python·信息可视化·自然语言处理
木木子999921 小时前
【2】专业自定义图表创建及应用方法
信息可视化·数据挖掘·数据分析
java1234_小锋1 天前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论数据可视化分析-用户评论词云图实现
python·信息可视化·自然语言处理
小一亿1 天前
【0基础PS】PS工具详解--仿制图章工具
学习·平面·adobe·信息可视化·媒体·photoshop
界面开发小八哥3 天前
.NET报表控件ActiveReports发布v19.0——正式兼容 .NET 9
信息可视化·.net·报表·报表工具·activereports
Leo.yuan3 天前
国内数据集成厂商有哪些?如何选择最适合的数据集成平台?
大数据·人工智能·信息可视化·数据挖掘·数据分析
云天徽上3 天前
【数据可视化-74】电信用户流失数据可视化分析:Python + Pyecharts 炫酷大屏(含完整的数据,代码)
开发语言·python·信息可视化·数据挖掘·数据分析·数据可视化·pyecharts
云天徽上4 天前
【数据可视化-75】北京密云区2025年7月暴雨深度分析:Python + Pyecharts 炫酷大屏可视化(含完整数据、代码)
开发语言·python·信息可视化·数据可视化·pyecharts
Bigemap软件4 天前
BigemapPro吸附功能 | 绘图共点共边,标绘从此无缝衔接!
arcgis·信息可视化·软件需求·地图·bigemappro
小一亿5 天前
【0基础PS】PS工具详解--选择工具--对象选择工具
学习·平面·adobe·信息可视化·传媒·photoshop