python pyecharts数据可视化 折线图 箱形图

人生漫长转瞬即逝,有人见尘埃,有人见星辰。——《月亮与六便士》

一、数据获取

数据来源:http://www.tianqihoubao.com/aqi/chengdu-201901.html

爬取2019年全年成都空气质量数据

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指数走势图

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')

运行效果如下:

在这里插入图片描述

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]

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')

运行效果如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fyfugoyfa/article/details/108305520