python基础学习之空气质量可视化(六)数据可视化

本文通过使用JupyterLab和PyEcharts库对郑州从2014年至2019年的空气质量数据进行可视化分析,包括AQI指数的平行折线图、年度变化趋势图以及O3浓度的月度对比图,揭示了不同年份间空气质量的变化规律。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次使用jupyter lab 进行数据可视化
import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB

import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Parallel
import pymysql

导入数据

conn = pymysql.connect(
host=“127.0.0.1”,
port=3306,
user=“root”,
password=“root”,
database=“chai”,
)

qu_sql = “select *from aq”
data= pd.read_sql_query(qu_sql, conn)
data = df[(df[‘year’] == (‘2019’))]
df_final = data[[‘AQI’, ‘PM2’, ‘PM10’,‘SO2’,‘CO’,‘NO2’,‘O3’,‘grade’]].values.tolist()

关闭链接

conn.close()

parallel = (
Parallel(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_schema(
[
opts.ParallelAxisOpts(dim=0, name=“AQI”),
opts.ParallelAxisOpts(dim=1, name=“PM2”),
opts.ParallelAxisOpts(dim=2, name=“PM10”),
opts.ParallelAxisOpts(dim=3, name=“SO2”),
opts.ParallelAxisOpts(dim=4, name=“CO”),
opts.ParallelAxisOpts(dim=5, name=“NO2”),
opts.ParallelAxisOpts(dim=6, name=“O3”),
#opts.ParallelAxisOpts(dim=5, name=“PM10”),
opts.ParallelAxisOpts(
dim=7,
name=“grade”,
type_=“category”,
data=[“优”, “良”, “轻度污染”, “中度污染”, “重度污染”, “严重污染”],
),
]
)
.add(“2019年郑州”, df_final[:365])
.set_global_opts(title_opts=opts.TitleOpts(title=“郑州19年空气质量平行折线图”))
)
parallel.load_javascript()
parallel.render_notebook()
parallel.render(‘郑州空气质量平行折线图.html’)
在这里插入图片描述#AQI走势图
import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB

import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Parallel
from pyecharts.charts import Line
import pymysql

导入数据

conn = pymysql.connect(
host=“127.0.0.1”,
port=3306,
user=“root”,
password=“root”,
database=“chai”,
)

qu_sql = “select *from aq”
df = pd.read_sql_query(qu_sql, conn)

关闭链接

conn.close()

attr = df[‘date’].values.tolist()
v1 = df[‘AQI’].values.tolist()

line = (
Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis(attr)
.add_yaxis(“AQI值”, v1,
markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_=‘average’)]),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_=‘max’),
opts.MarkPointItem(type_=‘min’)])
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title=‘郑州14-19年AQI走势图’))
)
line.render_notebook()
line.render(‘郑州14-19年AQI走势图.html’)

在这里插入图片描述#饼状图
import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB

import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Parallel
from pyecharts.charts import Line
import pymysql
import numpy as np
from pyecharts.charts import Pie

导入数据

conn = pymysql.connect(
host=“127.0.0.1”,
port=3306,
user=“root”,
password=“root”,
database=“chai”,
)

qu_sql = “select *from aq”
df = pd.read_sql_query(qu_sql, conn)

关闭链接

conn.close()

rank_message = df.groupby([‘grade’])
rank_com = rank_message[‘grade’].agg([‘count’])
rank_com.reset_index(inplace=True)
rank_com_last = rank_com.sort_values(‘count’, ascending=False)

attr = rank_com_last[‘grade’]
v1 = rank_com_last[‘count’]

pie = (
Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add(“空气质量”, [list(z) for z in zip(attr, v1)], radius=[130, 180],
tooltip_opts=opts.TooltipOpts(textstyle_opts=opts.TextStyleOpts(align=‘center’),
formatter=’{a}’+’
’+’{b}: {c} ({d}%)’))
.set_global_opts(title_opts=opts.TitleOpts(title=‘郑州14-19年空气质量情况’, pos_left=‘center’),
legend_opts=opts.LegendOpts(orient=‘vertical’, pos_top=‘5%’, pos_left=‘2%’)
)
)
pie.render_notebook()
pie.render(‘郑州14-19年空气质量情况.html’)
在这里插入图片描述import pandas as pd
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB

import pyecharts.options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Parallel
from pyecharts.charts import Line
import pymysql
import numpy as np
from pyecharts.charts import Pie
import pandas as pd
import numpy as np
from pandas import Series, DataFrame
import matplotlib as mpl
import matplotlib.pyplot as plt

导入数据

conn = pymysql.connect(
host=“127.0.0.1”,
port=3306,
user=“root”,
password=“root”,
database=“chai”,
)

qu_sql = “select *from aq”
df = pd.read_sql_query(qu_sql, conn)

关闭链接

cityes_PM = []
for i in range(1):

df = pd.read_sql_query(qu_sql, conn)
pm_data = df[(df['year'] == ('2014'))]
get_data = pm_data[['month', 'O3']]

求每个月PM平均值

month_data = get_data.groupby(['month'])
month_PM = month_data['O3'].agg(['mean'])
month_PM.reset_index(inplace = True)
month_PM_average = month_PM.sort_index()

获取每个城市月均PM的数据,转化为int数据类型

month_PM_data = np.array(month_PM_average['mean'])
month_PM_data_int = [int(i) for i in month_PM_data]
cityes_PM.append(month_PM_data_int)

months = [’{}’.format(str(i) + ‘月’) for i in range(1, 13)]
for i in range(1):

df = pd.read_sql_query(qu_sql, conn)
pm_data = df[(df['year'] == ('2015'))]
get_data = pm_data[['month', 'O3']]

求每个月PM平均值

month_data = get_data.groupby(['month'])
month_PM = month_data['O3'].agg(['mean'])
month_PM.reset_index(inplace = True)
month_PM_average = month_PM.sort_index()

获取每个城市月均PM的数据,转化为int数据类型

month_PM_data = np.array(month_PM_average['mean'])
month_PM_data_int = [int(i) for i in month_PM_data]
cityes_PM.append(month_PM_data_int)

months = [’{}’.format(str(i) + ‘月’) for i in range(1, 13)]
for i in range(1):

df = pd.read_sql_query(qu_sql, conn)
pm_data = df[(df['year'] == ('2016'))]
get_data = pm_data[['month', 'O3']]

求每个月PM平均值

month_data = get_data.groupby(['month'])
month_PM = month_data['O3'].agg(['mean'])
month_PM.reset_index(inplace = True)
month_PM_average = month_PM.sort_index()

获取每个城市月均PM的数据,转化为int数据类型

month_PM_data = np.array(month_PM_average['mean'])
month_PM_data_int = [int(i) for i in month_PM_data]
cityes_PM.append(month_PM_data_int)

months = [’{}’.format(str(i) + ‘月’) for i in range(1, 13)]
for i in range(1):

df = pd.read_sql_query(qu_sql, conn)
pm_data = df[(df['year'] == ('2017'))]
get_data = pm_data[['month', 'O3']]

求每个月PM平均值

month_data = get_data.groupby(['month'])
month_PM = month_data['O3'].agg(['mean'])
month_PM.reset_index(inplace = True)
month_PM_average = month_PM.sort_index()

获取每个城市月均PM的数据,转化为int数据类型

month_PM_data = np.array(month_PM_average['mean'])
month_PM_data_int = [int(i) for i in month_PM_data]
cityes_PM.append(month_PM_data_int)

months = [’{}’.format(str(i) + ‘月’) for i in range(1, 13)]
for i in range(1):

df = pd.read_sql_query(qu_sql, conn)
pm_data = df[(df['year'] == ('2018'))]
get_data = pm_data[['month', 'O3']]

求每个月PM平均值

month_data = get_data.groupby(['month'])
month_PM = month_data['O3'].agg(['mean'])
month_PM.reset_index(inplace = True)
month_PM_average = month_PM.sort_index()

获取每个城市月均PM的数据,转化为int数据类型

month_PM_data = np.array(month_PM_average['mean'])
month_PM_data_int = [int(i) for i in month_PM_data]
cityes_PM.append(month_PM_data_int)

months = [’{}’.format(str(i) + ‘月’) for i in range(1, 13)]
for i in range(1):

df = pd.read_sql_query(qu_sql, conn)
pm_data = df[(df['year'] == ('2019'))]
get_data = pm_data[['month', 'O3']]

求每个月PM平均值

month_data = get_data.groupby(['month'])
month_PM = month_data['O3'].agg(['mean'])
month_PM.reset_index(inplace = True)
month_PM_average = month_PM.sort_index()

获取每个城市月均PM的数据,转化为int数据类型

month_PM_data = np.array(month_PM_average['mean'])
month_PM_data_int = [int(i) for i in month_PM_data]
cityes_PM.append(month_PM_data_int)

months = [’{}’.format(str(i) + ‘月’) for i in range(1, 13)]

line = (
Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis(months)
.add_yaxis(“2014”, cityes_PM[0])
.add_yaxis(“2015”, cityes_PM[1])
.add_yaxis(“2016”, cityes_PM[2])
.add_yaxis(“2017”, cityes_PM[3])
.add_yaxis(“2018”, cityes_PM[4])
.add_yaxis(“2019”, cityes_PM[5])
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title=‘郑州14-19年O3全年走势图’),
legend_opts=opts.LegendOpts(pos_top=‘8%’)
)
)
line.render_notebook()
line.render(‘1415.html’)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值