时间序列数据可视化:Pyecharts日历图

Hallo,各位小伙伴大家好啊!这个专栏是用来分享数据处理以及数据可视化的一些常见操作,以及自己的一些学习笔记,希望能给大家带来帮助呀!感兴趣的小伙伴也欢迎私信或者评论区交流呀!

 以下可视化的数据分别来源为地区所在名对应的的文件,以北京为例。对应文件名为:"air_beijing_2021",它有五列,分别是日期质量等级AQI指数AQI排名PM2.5。基于这个数据表,进行数据处理和可视化操作。 

一、日历图 

日历图,是指按照日历的布局,用颜色展现每一天的数据,从而比较直观地看到全年的数据情况。 

代码如下:

import pandas as pd
import datetime
from pyecharts import options as opts
from pyecharts.charts import Calendar

begin = datetime.date(2021, 1, 1)
end = datetime.date(2021, 12, 31)
beijing = pd.read_excel("D:/桌面/大作业/air_beijing_2021.xlsx")
chongqing = pd.read_excel("D:/桌面/大作业/air_chongqing_2021.xlsx")
guangzhou = pd.read_excel("D:/桌面/大作业/air_guangzhou_2021.xlsx")
shanghai = pd.read_excel("D:/桌面/大作业/air_shanghai_2021.xlsx")
tianjin = pd.read_excel("D:/桌面/大作业/air_tianjin_2021.xlsx")

def func(df,name):
    values = df.iloc[::, 4:5:].to_numpy()
    data = df.iloc[::, 0:1:].to_numpy()
    data_1 = [str(i)[2:12:] for i in data]
    count = 0
    fin_data =[]
    for i in range(0, len(values)):
        fin_data.append([data_1[i], int(values[i][0])])
        count += 1
    c = (
        Calendar()
        .add(
            "",
            fin_data,
            calendar_opts=opts.CalendarOpts(
                range_="2021",
                daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"),
                monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn"),
            ),
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(title=f"{name}2021年PM2.5情况日历图"),
            visualmap_opts=opts.VisualMapOpts(
                max_=0,
                min_=250,
                orient="horizontal",
                is_piecewise=True,  # 这里是True 表示可以选择是否出现。
                pos_top="230px",
                pos_left="100px",
            ),
        )

    )
    c.render(f"{name}.html")

func(beijing,"北京")
func(chongqing,"重庆")
func(guangzhou,"广州")
func(shanghai,"上海")
func(tianjin,"天津")

效果如下:

二、 甜麦圈图(饼图)

饼图英文学名为Sector Graph,又名Pie Graph。常用于统计学模块。2D饼图为圆形,手画时,常用圆规作图。仅排列在工作表的一列或一行中的数据可以绘制到饼图中。饼图显示一个数据系列 (数据系列:在图表中绘制的相关数据点,这些数据源自数据表的行或列。图表中的每个数据系列具有唯一的颜色或图案并且在图表的图例中表示。可以在图表中绘制一个或多个数据系列。饼图只有一个数据系列。)中各项的大小与各项总和的比例。饼图中的数据点 (数据点:在图表中绘制的单个值,这些值由条形、柱形、折线、饼图或圆环图的扇面、圆点和其他被称为数据标记的图形表示。相同颜色的数据标记组成一个数据系列。)显示为整个饼图的百分比

代码如下: 

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

beijing = pd.read_excel("D:/桌面/大作业/air_beijing_2021.xlsx")
chongqing = pd.read_excel("D:/桌面/大作业/air_chongqing_2021.xlsx")
guangzhou = pd.read_excel("D:/桌面/大作业/air_guangzhou_2021.xlsx")
shanghai = pd.read_excel("D:/桌面/大作业/air_shanghai_2021.xlsx")
tianjin = pd.read_excel("D:/桌面/大作业/air_tianjin_2021.xlsx")
beijing_AQI = beijing["AQI指数"]
chongqing_AQI = chongqing["AQI指数"]
guangzhou_AQI = guangzhou["AQI指数"]
shanghai_AQI = shanghai["AQI指数"]
tianjin_AQI = tianjin["AQI指数"]
def average(A):
    return round(sum(A)/len(A),2)

area_list = ["北京","重庆","广州","上海","天津"]
average_list = [average(beijing_AQI),average(chongqing_AQI),average(guangzhou_AQI),average(shanghai_AQI),average(tianjin_AQI)]
fin_dic = {}
for i in range(0,len(average_list)):
    fin_dic[area_list[i]] = average_list[i]
print(fin_dic)
Num = sum(list(fin_dic.values()))
data = list(fin_dic.values())
labels = list(fin_dic.keys())
colors = ['red', 'orange', 'yellow', 'green', 'purple', 'blue', 'black']
sizes = [data[0] / Num * 100, data[1] / Num * 100, data[2] / Num * 100, data[3] / Num * 100, data[4] / Num * 100]
expodes = (0, 0, 0.1, 0,0)
plt.pie(sizes, explode=expodes, autopct='%1.1f%%',labels=labels, shadow=True, colors=colors)
plt.title("五地2021年全年的空气质量情况进行对比",fontsize=20)
plt.axis('equal')
# 保存并显示
plt.savefig('饼状图.png')
plt.show()

结果如下:

 三、总结

(1)日历图总结

  1. 第一问要求绘制日历图,想到pyecharts.charts里面的 Calendar,求五个地区的日历图,只需求出一个地区的日历,将过程用函数封装,函数设置读取不同地区表格的形参,使得代码逻辑更加清晰。
  2. 读取文件,使用df.iloc[::, 4:5:].to_numpy()指定读取固定列,之后用列表生成式和字符串切片的方法,将日期转换成标准的字符串日期形式。对应的PM2.5值直接指定读取就可以。将这两列值,用for循环一行一行传入fin_list里面,方便最终使用。
  3. 接下来就用Calendar()进行日历图的绘制,注意到这里name_map = "cn" ,name_map="cn" 使用的是中文标签,最小值设置为0,最大值设置为250,图标的标题用函数传入的形参去命名。
  4. c.render(f"{name}.html")保存为name命名的html文件,在浏览器中打开就可以。最后传入不同实参,调用五次该函数就可以得到五个地区的日历图了。

(2)饼图总结

  1. 读取五地的AQI指数,求平均值作为该地的空气质量情况评判依据。以北京为例,beijing = pd.read_excel("D:/桌面/大作业/air_beijing_2021.xlsx")读取北京的文件,beijing_AQI = beijing["AQI指数"]读取北京的AQI,定义函数average,返回平均值。调用该函数,将北京AQI传染,则可以得到全年的平均AQI。
  2. 将地名和对应平均AQI作为值和键传入字典中,起到一一对应的作用,方便之后获取。先计算总数据,即将五个地区的平均API加在一起,labels即为地区名,colors即为每个饼图的颜色。Size即为占比,与前面地名一一对应,最后设置突出模块偏移值。
Pyecharts日历是一种用于展示时间序列数据的表类型。它可以通过设置日期和对应的值来创建一个日历。在Pyecharts中,可以使用`class pyecharts.charts.Calendar`来配置日历的相关参数,使用`func pyeachrts.charts.Calendar.add`来添加数据,使用`CalendarOpts`来配置日历坐标系组件的参数。\[1\] 要创建一个日历,首先需要使用datetime包创建日期,然后使用推导式生成一个由时间和值组成的元组序列的数据列表。接下来,可以使用`Calendar`类来创建一个日历对象,并使用`add`方法将数据添加到表中。同时,可以使用`calendar_opts`参数来设置日历的范围。最后,使用`set_global_opts`方法来设置全局参数,如视觉映射组件的最大最小值、组件的位置等。最终,可以使用`render_notebook`方法将表渲染到Jupyter Notebook中。\[3\] 以上是关于Pyecharts日历的基本操作和案例的介绍。希望对您有帮助! #### 引用[.reference_title] - *1* *2* [Pyecharts基本日历](https://blog.csdn.net/Tomandjava/article/details/117188299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [基于pyecharts数据可视化(四):1.基本表之日历](https://blog.csdn.net/qq_41027398/article/details/118081514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的咋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值