当前位置: 首页 > news >正文

基于Python的北京天气数据可视化分析

项目用到库

import numpy as np
import pandas as pd
import datetime
from pyecharts.charts import Line
from pyecharts.charts import Boxplot
from pyecharts.charts import Pie,Grid
from pyecharts import options as opts
from pyecharts.charts import Calendar

1.2018 年北京AQI全年走势图

代码如下:

# 读取数据
df = pd.read_csv('beijing_AQI_2018.csv')
attr = df['Date'].tolist()  # 将 Date 转换为列表
v1 = df['AQI'].tolist()  # 将 AQI 转换为列表# 创建折线图
line = (Line().add_xaxis(attr).add_yaxis("AQI值:", v1, is_smooth=True, areastyle_opts=opts.AreaStyleOpts(opacity=0.3, color="#000"), markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值")])).set_global_opts(title_opts=opts.TitleOpts(title="2018年北京AQI全年走势图", pos_top='5%', pos_left='center'),xaxis_opts=opts.AxisOpts(type_="category"),yaxis_opts=opts.AxisOpts(type_="value"))
)# 将图表渲染到 HTML 文件
line.render("./2018年北京AQI全年走势图.html")

结果如下: 

2.2018 年北京PM2.5全年走势图

代码如下:

# 读取数据
df = pd.read_csv('beijing_AQI_2018.csv')
attr = df['Date'].tolist()  # 将 Date 转换为列表
v1 = df['PM'].tolist()  # 将 PM 转换为列表# 创建折线图
line = (Line().add_xaxis(attr).add_yaxis("PM2.5值:", v1, is_smooth=True, areastyle_opts=opts.AreaStyleOpts(opacity=0.3, color="#000"), markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值")])).set_global_opts(title_opts=opts.TitleOpts(title="2018年北京PM2.5全年走势图", pos_top='5%', pos_left='center'),xaxis_opts=opts.AxisOpts(type_="category"),yaxis_opts=opts.AxisOpts(type_="value"))
)# 将图表渲染到 HTML 文件
line.render("./2018年北京PM2.5全年走势图.html")

结果如下:

3.2018 年北京月均AQI走势图

代码如下:

# 读取数据
df = pd.read_csv('beijing_AQI_2018.csv')# 提取 Date 和 AQI 的值
dom = df[['Date', 'AQI']]# 提取月份
df['month'] = df['Date'].apply(lambda x: x.split('/')[1])# 根据月份分组并计算每月的 AQI 平均值
month_com = df.groupby('month')['AQI'].mean().reset_index()# 排序月份
month_com = month_com.sort_values(by='month')# 构造月份标签
attr = ["{}月".format(i) for i in range(1, 13)]# 获取每月的 AQI 平均值
v1 = month_com['AQI'].tolist()
v1 = ["{}".format(int(i)) for i in v1]# 创建折线图
line = (Line().add_xaxis(attr).add_yaxis("AQI月均值", v1, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值")])).set_global_opts(title_opts=opts.TitleOpts(title="2018年北京月均AQI走势图", pos_top='5%', pos_left='center'),xaxis_opts=opts.AxisOpts(type_="category"),yaxis_opts=opts.AxisOpts(type_="value"))
)# 渲染图表到 HTML 文件
line.render("./2018年北京月均AQI走势图.html")

结果如下:

4.2018 年北京月均PM2.5走势图

代码如下:

# 读取数据
df = pd.read_csv('beijing_AQI_2018.csv')# 提取 Date 和 PM 的值
dom = df[['Date', 'PM']]# 提取月份
df['month'] = df['Date'].apply(lambda x: x.split('/')[1])# 根据月份分组并计算每月的 PM 平均值
month_com = df.groupby('month')['PM'].mean().reset_index()# 排序月份
month_com = month_com.sort_values(by='month')# 构造月份标签
attr = ["{}月".format(i) for i in range(1, 13)]# 获取每月的 PM 平均值
v1 = month_com['PM'].tolist()
v1 = ["{}".format(int(i)) for i in v1]# 创建折线图
line = (Line().add_xaxis(attr).add_yaxis("PM2.5月均值", v1, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值")])).set_global_opts(title_opts=opts.TitleOpts(title="2018年北京月均PM2.5走势图", pos_top='5%', pos_left='center'),xaxis_opts=opts.AxisOpts(type_="category"),yaxis_opts=opts.AxisOpts(type_="value"))
)# 渲染图表到 HTML 文件
line.render("./2018年北京月均PM2.5走势图.html")

结果如下:

5.2018年北京季度AQI箱形图

代码如下:

# 读取数据
df = pd.read_csv('beijing_AQI_2018.csv')# 提取 Date 和 AQI 的值
dom = df[['Date', 'AQI']]
data = [[], [], [], []]
dom1, dom2, dom3, dom4 = data# 根据季度提取 AQI 值
for date, aqi in zip(dom['Date'], dom['AQI']):month = int(date.split('/')[1])if month in [1, 2, 3]:dom1.append(aqi)elif month in [4, 5, 6]:dom2.append(aqi)elif month in [7, 8, 9]:dom3.append(aqi)else:dom4.append(aqi)# 创建箱形图
boxplot = Boxplot()# 设置 x 轴和 y 轴数据
x_axis = ['第一季度', '第二季度', '第三季度', '第四季度']
y_axis = [dom1, dom2, dom3, dom4]
y_axis = boxplot.prepare_data(y_axis)# 添加数据到箱形图
boxplot.add_xaxis(x_axis)
boxplot.add_yaxis("AQI", y_axis)# 设置图表全局选项
boxplot.set_global_opts(title_opts=opts.TitleOpts(title="2018年北京季度AQI箱形图", pos_left='center', pos_top='6%'))# 渲染图表到 HTML 文件
boxplot.render("./2018年北京季度AQI箱形图.html")

结果如下:

6.2018年北京季度PM2.5箱形图

代码如下:

# 读取数据
df = pd.read_csv('beijing_AQI_2018.csv')# 提取 Date 和 PM 的值
dom = df[['Date', 'PM']]
data = [[], [], [], []]
dom1, dom2, dom3, dom4 = data# 根据季度提取 PM 值
for date, pm in zip(dom['Date'], dom['PM']):month = int(date.split('/')[1])if month in [1, 2, 3]:dom1.append(pm)elif month in [4, 5, 6]:dom2.append(pm)elif month in [7, 8, 9]:dom3.append(pm)else:dom4.append(pm)# 创建箱形图
boxplot = Boxplot()# 设置 x 轴和 y 轴数据
x_axis = ['第一季度', '第二季度', '第三季度', '第四季度']
y_axis = [dom1, dom2, dom3, dom4]
y_axis = boxplot.prepare_data(y_axis)# 添加数据到箱形图
boxplot.add_xaxis(x_axis)
boxplot.add_yaxis("PM2.5", y_axis)# 设置图表全局选项
boxplot.set_global_opts(title_opts=opts.TitleOpts(title="2018年北京季度PM2.5箱形图", pos_left='center', pos_top='6%'))# 渲染图表到 HTML 文件
boxplot.render("./2018年北京季度PM2.5箱形图.html")

结果如下:

7.2018年北京全年空气质量情况

代码如下:

# 读取数据
df = pd.read_csv('beijing_AQI_2018.csv')# 根据 Quality_grade 分组
rank_message = df.groupby(['Quality_grade'])# 计算每个 Quality_grade 的频数
rank_com = rank_message['Quality_grade'].agg(['count'])
rank_com.reset_index(inplace=True)  # 重置索引
rank_com_last = rank_com.sort_values('count', ascending=False)  # 从大到小排序# 提取 Quality_grade 和对应的频数
attr = rank_com_last['Quality_grade'].tolist()
v1 = rank_com_last['count'].tolist()# 创建饼图
pie = (Pie().add("", [list(z) for z in zip(attr, v1)], radius=["40%", "75%"], label_opts=opts.LabelOpts(is_show=True, formatter="{b}: {d}%")).set_global_opts(title_opts=opts.TitleOpts(title="2018年北京全年空气质量情况", pos_left='center', pos_top='0'),legend_opts=opts.LegendOpts(is_show=True, orient="vertical", pos_left="left", pos_top="10%"))
)# 渲染图表到 HTML 文件
pie.render('./2018年北京全年空气质量情况.html')

结果如下:

8.2018年北京PM2.5指数日历图

代码如下:

# Read data from 'beijing_AQI_2018.csv'
df = pd.read_csv('beijing_AQI_2018.csv')# Extract 'Date' and 'PM' columns
dom = df[['Date', 'PM']]list1 = []# Compress the date and PM values into a list of lists
for i, j in zip(dom['Date'], dom['PM']):time_list = i.split('/')time = datetime.date(int(time_list[0]), int(time_list[1]), int(time_list[2]))PM = int(j)list1.append([str(time), PM])# Create a calendar chart
calendar = (Calendar(init_opts=opts.InitOpts(width="800px", height="400px")).add(series_name="2018年北京PM2.5指数日历图",yaxis_data=list1,calendar_opts=opts.CalendarOpts(range_="2018"),).set_global_opts(title_opts=opts.TitleOpts(title="2018年北京PM2.5指数日历图", pos_left="center",pos_top='50%'),visualmap_opts=opts.VisualMapOpts(max_=300, min_=0, orient="horizontal", is_piecewise=True,pos_top='60%',  # 将视觉映射放置在图表的顶部pos_left='center'  # 将视觉映射放置在图表的水平居中位置),)
)# Render the chart to an HTML file
calendar.render('./2018年北京PM2.5指数日历图.html')

结果如下:

9.2018 年北上广深AQI全年走势图

代码如下:


citys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
cityes_AQI = []# 遍历四个城市的数据
for city in citys:filename = city + '_AQI' + '_2018.csv'aqi_data = pd.read_csv(filename)# 提取日期和AQI指数两列内容get_data = aqi_data[['Date', 'AQI']]# 获取每行数据的月份month_for_data = [j.split('/')[1] for j in get_data['Date']]aqi_data['Month'] = month_for_data# 求每个月AQI平均值month_AQI = aqi_data.groupby(['Month'])['AQI'].mean().reset_index()# 获取每个城市月均AQI的数据,转化为int数据类型city_AQI_data_int = month_AQI['AQI'].astype(int).tolist()cityes_AQI.append(city_AQI_data_int)months = [str(i) + '月' for i in range(1, 13)]line = (Line(init_opts=opts.InitOpts(width="800px", height="400px")).add_xaxis(months).add_yaxis("北京", cityes_AQI[0], color='red', label_opts=opts.LabelOpts(is_show=False)).add_yaxis("上海", cityes_AQI[1], color='purple', label_opts=opts.LabelOpts(is_show=False)).add_yaxis("广州", cityes_AQI[2], color='blue', label_opts=opts.LabelOpts(is_show=False)).add_yaxis("深圳", cityes_AQI[3], color='orange', label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="2018年北上广深AQI全年走势图", pos_left='center', pos_top='0'),legend_opts=opts.LegendOpts(orient="horizontal", pos_top="8%"),)
)line.render('./2018年北上广深AQI全年走势图.html')  # 生成HTML文件,保存在当前目录下

结果如下:

10.2018 年北上广深PM2.5全年走势图

代码如下:

import numpy as np
import pandas as pd
from pyecharts.charts import Line
from pyecharts import options as optscitys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
cityes_AQI = []# 遍历四个城市的数据
for city in citys:filename = city + '_AQI' + '_2018.csv'aqi_data = pd.read_csv(filename)# 提取日期和PM2.5指数两列内容get_data = aqi_data[['Date', 'PM']]# 获取每行数据的月份month_for_data = [j.split('/')[1] for j in get_data['Date']]aqi_data['Month'] = month_for_data# 求每个月PM2.5平均值month_AQI = aqi_data.groupby(['Month'])['PM'].mean().reset_index()# 获取每个城市月均PM2.5的数据,转化为int数据类型city_AQI_data_int = month_AQI['PM'].astype(int).tolist()cityes_AQI.append(city_AQI_data_int)months = [str(i) + '月' for i in range(1, 13)]line = (Line(init_opts=opts.InitOpts(width="800px", height="400px")).add_xaxis(months).add_yaxis("北京", cityes_AQI[0], color='red', label_opts=opts.LabelOpts(is_show=False)).add_yaxis("上海", cityes_AQI[1], color='purple', label_opts=opts.LabelOpts(is_show=False)).add_yaxis("广州", cityes_AQI[2], color='blue', label_opts=opts.LabelOpts(is_show=False)).add_yaxis("深圳", cityes_AQI[3], color='orange', label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="2018年北上广深PM2.5全年走势图", pos_left='center', pos_top='0'),legend_opts=opts.LegendOpts(orient="horizontal", pos_top="8%"),)
)line.render('./2018年北上广深PM2.5全年走势图.html')  # 生成HTML文件,保存在当前目录下

结果如下:

11.2018 年北上广深全年空气质量情况

代码如下:

citys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
v = []
attrs = []
for i in range(4):filename =  citys[i] + '_AQI' + '_2018.csv'df = pd.read_csv(filename)# 根据 Quality_grade 分组Quality_grade_message = df.groupby(['Quality_grade'])# 每组的频数Quality_grade_com = Quality_grade_message['Quality_grade'].agg(['count'])Quality_grade_com.reset_index(inplace=True)Quality_grade_com_last = Quality_grade_com.sort_values('count', ascending=False)# 取 Quality_grade 的值Quality_grade_array = Quality_grade_com_last['Quality_grade'].values.tolist()attrs.append(Quality_grade_array)Quality_grade_count = Quality_grade_com_last['count'].values.tolist()v.append(Quality_grade_count)# 创建饼图并设置属性
pie1 = (Pie().add("北京", [list(z) for z in zip(attrs[0], v[0])], radius=["20%", "40%"], center=["30%", "27%"],).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")).set_global_opts(title_opts=opts.TitleOpts(title="北京", pos_left='27%', pos_top='25%'),legend_opts=opts.LegendOpts(orient="vertical", pos_right="5%", pos_top="35%"))
)pie2 = (Pie().add("上海", [list(z) for z in zip(attrs[1], v[1])], radius=["20%", "40%"], center=["70%", "27%"],).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")).set_global_opts(title_opts=opts.TitleOpts(title="上海", pos_left='67%', pos_top='25%'),legend_opts=opts.LegendOpts(is_show=False))
)pie3 = (Pie().add("广州", [list(z) for z in zip(attrs[2], v[2])], radius=["20%", "40%"], center=["30%", "77%"],).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")).set_global_opts(title_opts=opts.TitleOpts(title="广州", pos_left='27%', pos_top='75%'),legend_opts=opts.LegendOpts(is_show=False))
)pie4 = (Pie().add("深圳", [list(z) for z in zip(attrs[3], v[3])], radius=["20%", "40%"], center=["70%", "77%"],).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")).set_global_opts(title_opts=opts.TitleOpts(title="深圳", pos_left='67%', pos_top='75%'),legend_opts=opts.LegendOpts(is_show=False))
)# 创建 Grid 并添加饼图
grid = (Grid().add(pie1, grid_opts=opts.GridOpts(pos_left="5%", pos_right="50%", pos_top="10%")).add(pie2, grid_opts=opts.GridOpts(pos_left="55%", pos_right="5%", pos_top="10%")).add(pie3, grid_opts=opts.GridOpts(pos_left="5%", pos_right="50%", pos_top="50%")).add(pie4, grid_opts=opts.GridOpts(pos_left="55%", pos_right="5%", pos_top="50%"))
)grid.render('./2018年北上广深全年空气质量情况.html')

结果如下:

http://www.lryc.cn/news/366972.html

相关文章:

  • Linux编译器-gcc或g++的使用
  • 一条sql的执行流程
  • Android音乐播放器的思路处理
  • 算法课程笔记——可撤销并查集
  • 【排序算法】快速排序
  • OS复习笔记ch7-2
  • 4.通用编程概念
  • iBeacon赋能AR导航:室内定位技术的原理与优势
  • 【sklearn】【逻辑回归1】
  • java(kotlin)和 python 通过DoubleCloud的kafka进行线程间通信
  • vivado DIAGRAM、HW_AXI
  • 学习分享-为什么把后台的用户验证和认证逻辑放到网关
  • 27 ssh+scp+nfs+yum进阶
  • LabVIEW液压伺服压力机控制系统与控制频率选择
  • 阿里云(域名解析) certbot 证书配置
  • Web LLM 攻击技术
  • Java等待异步线程池跑完再执行指定方法的三种方式(condition、CountDownLatch、CyclicBarrier)
  • 秒杀优化+秒杀安全
  • 48、Flink 的 Data Source API 详解
  • 深入解析Java扩展机制:SPI与Spring.factories
  • Vue2之模板语法
  • java基础练习题
  • unity中通过实现底层接口实现非按钮(图片)的事件监听
  • 重庆耶非凡科技有限公司的选品师项目加盟靠谱吗?
  • 《青少年编程与数学》课程方案:4、课程策略
  • 用爬虫实现---模拟填志愿
  • vscode Run Code输出出现中文乱码情况问题解决方案
  • 代码随想录训练营Day30
  • Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二)
  • STM32F103C8T6基于HAL库移植uC/OS-III