Pandas数据分析实战01
Pandas数据分析实战01
要求
绘制"北京", “成都”, “广州”, “上海”, "沈阳"五个城市,从2010年1月至2015年12月的PM2.5环境质量变化情况
代码实现
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 用pandas读取csv文件
# 设定城市名称
cities = ["Beijing", "Chengdu","Guangzhou", "Shanghai", "Shenyang"]
# 设定文件名称
file_name = [city + "PM20100101_20151231.csv" for city in cities]
# 设定文件路径
file_path = "D:\\Coding\\Python\\LogicCoding\\Data Analyze\\PM2.5\\"
# 用df_pm保存文件读取结果
df_pm = pd.DataFrame()
for i in range(len(file_name)):
# 用切片的方式取出关键数据
df = pd.read_csv(file_path+file_name[i]).loc[:,["year","month","day","hour","PM_US Post"]]
# 在df中添加一列城市,作为分组依据
df["city"] = cities[i]
# 使用concat()方法拼接
df_pm = pd.concat([df_pm, df])
df_pm.head()
# 在df_pm中,将年月日小时凭借成时间段索引,同时增加一列timeStamp
df_pm["timeStamp"] = pd.PeriodIndex(year = df_pm["year"], month = df_pm["month"],
day = df_pm["day"], hour = df_pm["hour"],freq = "H")
df_pm.head()
# 将df_pm["timeStamp"]设置为时间索引
df_pm.set_index("timeStamp", inplace=True)
df_pm.head()
# 定义一个绘制折线图的函数
def draw_plot(x, y, c, m):
plt.plot(range(len(x)),y,color=c,marker=m)
# 将时间序列格式化
x = [i.strftime("%Y-%m-%d") for i in x]
# 设置刻度标签,为避免过于密集,进行切片,步长为10
plt.xticks(range(0,len(x),10),list(x)[::10],rotation=45)
# 取得各个城市的x, y坐标点
pm = []
for city in cities:
# 使用布尔索引取出每个城市的数据
df_city = df_pm[df_pm["city"] == city]
# 以月度为单位降采样,求均值
df_city = df_city.resample("M").mean()
# PM2.5的值对应PM_US Post 这一列
pm_data = df_city["PM_US Post"]
x, y = pm_data.index, pm_data.values
pm.append((x, y))
# 准备绘图
colors = ['r', 'g' ,'b', 'm', 'c'] # 设置线的颜色
markers = ['>', '<' ,'^', 'v', 'o'] # 标记样式
plt.figure(figsize=(14,9))
for i in range(len(cities)):
draw_plot(pm[i][0],pm[i][1],colors[i],markers[i])
plt.legend(["北京", "成都", "广州", "上海", "沈阳"])
plt.show()
大概观察一下,结论如下:
1,每年的秋冬季节是环境质量较差的,因为冬天比较干燥,气温较低,气压较高,空气中的污染物容易聚集不易驱散;
2,总体来说,除了沈阳,各个城市的PM2.5在逐步下降;
3,北方城市污染比南方城市要严重许多,应该跟地理环境和重工业分布情况相关;
4,空气污染跟城市发达情况关联不大,比如沈阳,经济一般,但是污染严重;
广州经济比较发达,人口众多,但是污染度远小于北京。
5,除北京外,其他城市的数据缺失较为严重。