人生漫长转瞬即逝,有人见尘埃,有人见星辰。——《月亮与六便士》
文章目录
- 一、数据获取
- 二、折线图
- 三、箱形图
一、数据获取
数据来源:http://www.tianqihoubao.com/aqi/chengdu-201901.html
爬取2019年全年成都空气质量数据
代码语言:txt复制import pandas as pd
dates = pd.date_range('20190101', '20191201', freq='MS').strftime('%Y%m') # 构造出日期序列 便于之后构造url
for i in range(len(dates)):
df = pd.read_html(f'http://www.tianqihoubao.com/aqi/chengdu-{dates[i]}.html', encoding='gbk', header=0)[0]
if i == 0:
df.to_csv('2019年成都空气质量数据.csv', mode='a ', index=False) # 追加写入
i = 1
else:
df.to_csv('2019年成都空气质量数据.csv', mode='a ', index=False, header=False)
查看爬取的数据
二、折线图
折线图是排列在工作表的列或行中的数据可以绘制到折线图中。折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势。
绘制2019年成都AQI指数走势图
代码语言:txt复制import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.globals import CurrentConfig
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_csv('2019年成都空气质量数据.csv')
date = [x for x in range(len(df['日期']))]
value = [int(i) for i in df['AQI指数']]
# 绘制折线图
line = Line()
line.add_xaxis(xaxis_data=date)
line.add_yaxis(
"AQI指数", # 系列数据项
value, # y轴数据
areastyle_opts=opts.AreaStyleOpts(opacity=0.5, color='#00FFFF'), # 设置图形透明度 填充颜色
label_opts=opts.LabelOpts(is_show=False), # 标签配置项
markpoint_opts=opts.MarkPointOpts( # 标记点配置项
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
opts.MarkPointItem(type_="average", name="平均值")
]
),
markline_opts=opts.MarkLineOpts( # 标记线配置项
data=[opts.MarkLineItem(type_="average", name="平均值")])
)
line.set_global_opts(
title_opts=opts.TitleOpts(title='2019成都AQI指数走势图(按日统计)')
)
line.render('2019成都AQI指数走势图(按日统计).html')
运行效果如下:
代码语言:txt复制import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.globals import CurrentConfig, ThemeType
import math
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_csv('2019年成都空气质量数据.csv')[['日期', 'AQI指数']]
data = df['日期'].str.split('-', expand=True)[1]
df['月份'] = data
# 按月份分组 聚合 统计每月AQI指数平均值
counts = df.groupby('月份').agg({'AQI指数': 'mean'})
date = [f'{x}月' for x in range(1, 13)]
value = [math.ceil(i) for i in counts['AQI指数']]
line = Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
line.set_colors(['red'])
line.add_xaxis(xaxis_data=date)
line.add_yaxis(
"AQI指数均值", # 系列数据项 用于图例筛选
value, # y轴数据
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts( # 标记点配置项
data=[
opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值"),
opts.MarkPointItem(type_="average", name="平均值")
]
),
markline_opts=opts.MarkLineOpts( # 标记线配置项
data=[opts.MarkLineItem(type_="average", name="平均值")])
)
line.set_global_opts( # 全局配置项
title_opts=opts.TitleOpts(
title='2019成都AQI全年走势图(按月统计)',
pos_left='32%', pos_top='3%',
title_textstyle_opts=opts.TextStyleOpts(
font_family='SimHei', font_size=20, color='#F0FFF0'
)
),
xaxis_opts=opts.AxisOpts(name='月份'), # x轴标签
yaxis_opts=opts.AxisOpts(name='AQI指数均值') # y轴标签
)
line.render('2019成都AQI指数走势图(按月统计).html')
运行效果如下:
三、箱形图
箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较。箱线图的绘制方法是:先找出一组数据的上边缘、下边缘、中位数和两个四分位数;然后, 连接两个四分位数画出箱体;再将上边缘和下边缘与箱体相连接,中位数在箱体中间。
利用pyecharts绘制箱线图需要用 prepare_data() 方法将传入的列表中的数据转换为的 min, Q1, median (or Q2), Q3, max
代码语言:txt复制import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.globals import CurrentConfig, ThemeType
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
df = pd.read_csv('2019年成都空气质量数据.csv')[['日期', 'AQI指数']]
df.sort_values(by='AQI指数', inplace=True) # 按AQI指数大小排序 升序
data = df['日期'].str.split('-', expand=True)[1]
df['月份'] = data
item1, item2, item3, item4 = [], [], [], []
# 分为4个季度
for i, j in zip(df['月份'], df['AQI指数']):
if i in ['01', '02', '03']:
item1.append(j)
elif i in ['04', '05', '06']:
item2.append(j)
elif i in ['07', '08', '09']:
item3.append(j)
elif i in ['10', '11', '12']:
item4.append(j)
x_data = [f'第{i}季度' for i in range(1, 5)]
y_data = [item1, item2, item3, item4]
boxplot = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
boxplot.set_colors(['red'])
boxplot.add_xaxis(xaxis_data=x_data)
boxplot.add_yaxis(series_name='', y_axis=boxplot.prepare_data(y_data))
boxplot.set_global_opts(
title_opts=opts.TitleOpts(
title='2019年成都季度AQI指数箱型图',
pos_left='300', pos_top='5',
title_textstyle_opts=opts.TextStyleOpts(
font_family='KaiTi', font_size=20, color='black'
)
),
xaxis_opts=opts.AxisOpts(name='季度'),
yaxis_opts=opts.AxisOpts(name='AQI指数')
)
boxplot.render('2019年成都季度AQI指数箱型图.html')
运行效果如下:
作者:叶庭云 微信公众号:修炼Python CSDN:https://yetingyun.blog.csdn.net/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。 觉得文章对你有帮助、让你有所收获的话,期待你的点赞呀,不足之处,也可以在评论区多多指正。