数据可视化实战(二)

该篇文章展示了如何使用Python的pandas和matplotlib库对PM2.5数据进行处理,包括按城市和月份计算平均值并绘制折线图,以及按季节和时间分析最大风速。
摘要由CSDN通过智能技术生成

将每个城市在每个月份平均PM2.5绘制成折线图

import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_excel('./PM2.5.xlsx')
display(df.head(10))
df.shape #  (161630, 15)
城市年份月份日期小时季节PM2.5露点湿度压强温度风向累计风速降水量累计降水量
0北京20101123129-17.041.01020.0-5.0cv0.890.00.0
1北京2010120148-16.038.01020.0-4.0SE1.790.00.0
2北京2010121159-15.042.01020.0-4.0SE2.680.00.0
3北京2010122181-11.063.51021.0-5.0SE3.570.00.0
4北京2010123138-7.085.01022.0-5.0SE5.360.00.0
5北京2010124109-7.085.01022.0-5.0SE6.250.00.0
6北京2010125105-7.092.01022.0-6.0SE7.140.00.0
7北京2010126124-7.092.01023.0-6.0SE8.930.00.0
8北京2010127120-7.085.01024.0-5.0SE10.720.00.0
9北京2010128132-8.085.01024.0-6.0SE12.510.00.0
# 求PM2.5每个月份均值;根据城市和月份进行分组
df2 = df.groupby(by = ['城市','月份'])[['PM2.5']].mean().round(2)

# 数据重塑
df2 = df2.unstack(level = -1)
# 删除最外层列索引PM2.5
df2.columns = df2.columns.droplevel(level=0)
df2
月份123456789101112
城市
上海80.7759.5859.3855.3252.2341.4831.0326.6132.6942.2864.0286.54
北京113.80120.9396.3483.4076.6789.5688.4873.7578.75112.72108.47107.49
广州80.0358.7348.7567.0446.9535.3426.1438.6340.4760.1053.1361.99
成都161.32110.0496.7167.9968.5653.8154.0561.2660.2584.7682.13116.08
沈阳111.04103.1177.3965.5153.8947.8842.2543.9446.7989.03101.67112.61
df2.loc["上海"]
df2.index # Index(['上海', '北京', '广州', '成都', '沈阳'], dtype='object', name='城市')
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['font.size'] = 18

months = df2.columns

# 创建画布和子图
plt.figure(figsize=(12, 6))

# 绘制每个城市在每个月份的折线图
for city in df2.index:
#     print(city, df2.loc[city])
    plt.plot(months, df2.loc[city], marker='o', label=city)
    

# 设置标题和标签
plt.title('PM2.5 Variation by City and Month')
plt.xlabel('Month')
plt.ylabel('PM2.5')
plt.xticks(months)
plt.grid(True)

# 添加图例
plt.legend()

# 显示图形
plt.show()

在这里插入图片描述

将每个城市在每个季节最低温度绘制柱状图

df3 = df.groupby(by = ['城市','季节'])[['温度']].min().round(2)
df3 = df3.unstack(level=-1)
df3.columns = df3.columns.droplevel(level=0)
df3 = df3[list('春夏秋冬')]
df3 = df3.loc[['北京','上海','广州','成都','沈阳']]
df3
季节
城市
北京-9.013.0-12.0-19.0
上海-1.017.0-2.0-4.0
广州7.620.56.41.7
成都5.018.05.0-2.0
沈阳-14.010.0-18.0-25.0
fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(1,1,1)
df3.plot.bar(ax = ax)
plt.grid(color = 'gray',ls = '--')
plt.ylabel('温度')
# 在中文字体下, 默认的负号, 会显示不正常
plt.rcParams['axes.unicode_minus'] = False

在这里插入图片描述

各个城市最大风速随时间变化趋势

import numpy as np


fig,axes = plt.subplots(2,2,figsize = (16,12)) # 添加子视图

df4 = df.groupby(by = ['城市','年份'])[['累计风速']].max().round(2)
# 数据重塑
df4 = df4.unstack(level = 0)
df4.columns = df4.columns.droplevel(0)
df4 = df4[['北京','上海','广州','沈阳','成都']]

# 在第一幅子图上绘制年份与风速
df4.plot(ax = axes[0,0])
axes[0, 0].set_ylabel("风速")



df5= df.groupby(by = ['城市','月份'])[['累计风速']].max().round(2)
# 数据重塑
df5 = df5.unstack(level = 0)
df5.columns = df5.columns.droplevel(0)
df5 = df5[['北京','上海','广州','沈阳','成都']]
ax = df5.plot(ax = axes[1,0]) # 子视图索引:第二行,第一列(左下角)

# 设置
months = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']
ax.set_xticks(np.arange(1,13)) # 刻度
_ = ax.set_xticklabels(months,rotation = 60)


df6 = df.groupby(by = ['城市','季节'])[['累计风速']].max().round(2)
# 数据重塑
df6= df6.unstack(level = 0)
# 调整行索引顺序
df6 = df6.loc[list('春夏秋冬')]
# 删除列索引
df6.columns = df6.columns.droplevel(0)
# 调整列索引顺序
df6 = df6[['北京','上海','广州','沈阳','成都']]
# ax 指定了使用第一行,第二列的子视图:右上角
df6.plot(ax = axes[0,1])


df7 = df.groupby(by = ['城市','小时'])[['累计风速']].max().round(2)
# 数据重塑
df7= df7.unstack(level = 0)
df7.columns = df7.columns.droplevel(0)

df7 = df7[['北京','上海','广州','沈阳','成都']]

# 子视图索引1,1 == 第二行、第二列右下角
ax = df7.plot(ax = axes[1,1])

# 设置
_ = ax.set_xticks(np.arange(0,24))

# 保存
plt.savefig('./各个城市最大风速随时间变化趋势.png')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值