当前位置: 首页 > 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 opts

citys = ['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')

结果如下:

相关文章:

  • Kafka之Consumer原理
  • 软光敏的程序实现
  • 顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-同振与顺振的用法
  • [office] 如何才能用EXCEL打开dat文件- #微信#学习方法
  • 植物大战僵尸杂交版2.0.88最新版安装包
  • 【C语言】学生管理系统:完整模拟与实现
  • C++ CMake FetchContent用法介绍
  • BGP基础实验
  • 三维可视化技术在厂区人员、车辆定位中的设计与应用效益
  • 正则表达式三
  • sqlilabs靶场安装
  • python + selenium 实现浏览器的基本操作
  • 上传图片并显示#Vue3#后端接口数据
  • Datetime,一个 Python 的时间掌控者
  • 乙二醇水溶液物性参数
  • 将SU模型导入ARCGIS,并获取高度信息,多面体转SHP文件(ARCMAP)
  • Spring boot 集成mybatis-plus
  • 【MMU】——MMU 相关的 CP15 寄存器
  • uniapp通过Canvas绘制网格(心电图,坐标纸等可用)
  • 联合(union)和枚举(enum)学习(c语言)
  • 美政府称不再对哈佛大学提供联邦资助
  • 媒体:西安62岁男子当街殴打妻子,警方称打人者已被行拘
  • 五一假期上海虹桥边检站出入境近4.7万人次,韩国入境旅客同比增118%
  • 媒体:南京秦淮区卫健委回应一医院涉嫌违规提供试管婴儿服务
  • 特朗普关税风暴中的“稳”与“变”:新加坡国会选举观察
  • 我的诗歌阅读史