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


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

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

    一、日历图 

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

    代码如下:

    1. import pandas as pd
    2. import datetime
    3. from pyecharts import options as opts
    4. from pyecharts.charts import Calendar
    5. begin = datetime.date(2021, 1, 1)
    6. end = datetime.date(2021, 12, 31)
    7. beijing = pd.read_excel("D:/桌面/大作业/air_beijing_2021.xlsx")
    8. chongqing = pd.read_excel("D:/桌面/大作业/air_chongqing_2021.xlsx")
    9. guangzhou = pd.read_excel("D:/桌面/大作业/air_guangzhou_2021.xlsx")
    10. shanghai = pd.read_excel("D:/桌面/大作业/air_shanghai_2021.xlsx")
    11. tianjin = pd.read_excel("D:/桌面/大作业/air_tianjin_2021.xlsx")
    12. def func(df,name):
    13. values = df.iloc[::, 4:5:].to_numpy()
    14. data = df.iloc[::, 0:1:].to_numpy()
    15. data_1 = [str(i)[2:12:] for i in data]
    16. count = 0
    17. fin_data =[]
    18. for i in range(0, len(values)):
    19. fin_data.append([data_1[i], int(values[i][0])])
    20. count += 1
    21. c = (
    22. Calendar()
    23. .add(
    24. "",
    25. fin_data,
    26. calendar_opts=opts.CalendarOpts(
    27. range_="2021",
    28. daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"),
    29. monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn"),
    30. ),
    31. )
    32. .set_global_opts(
    33. title_opts=opts.TitleOpts(title=f"{name}2021年PM2.5情况日历图"),
    34. visualmap_opts=opts.VisualMapOpts(
    35. max_=0,
    36. min_=250,
    37. orient="horizontal",
    38. is_piecewise=True, # 这里是True 表示可以选择是否出现。
    39. pos_top="230px",
    40. pos_left="100px",
    41. ),
    42. )
    43. )
    44. c.render(f"{name}.html")
    45. func(beijing,"北京")
    46. func(chongqing,"重庆")
    47. func(guangzhou,"广州")
    48. func(shanghai,"上海")
    49. func(tianjin,"天津")

    效果如下:

    二、 甜麦圈图(饼图

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

    代码如下: 

    1. import pandas as pd
    2. import matplotlib.pyplot as plt
    3. plt.rcParams['font.sans-serif']=['SimHei']
    4. plt.rcParams['axes.unicode_minus']=False
    5. beijing = pd.read_excel("D:/桌面/大作业/air_beijing_2021.xlsx")
    6. chongqing = pd.read_excel("D:/桌面/大作业/air_chongqing_2021.xlsx")
    7. guangzhou = pd.read_excel("D:/桌面/大作业/air_guangzhou_2021.xlsx")
    8. shanghai = pd.read_excel("D:/桌面/大作业/air_shanghai_2021.xlsx")
    9. tianjin = pd.read_excel("D:/桌面/大作业/air_tianjin_2021.xlsx")
    10. beijing_AQI = beijing["AQI指数"]
    11. chongqing_AQI = chongqing["AQI指数"]
    12. guangzhou_AQI = guangzhou["AQI指数"]
    13. shanghai_AQI = shanghai["AQI指数"]
    14. tianjin_AQI = tianjin["AQI指数"]
    15. def average(A):
    16. return round(sum(A)/len(A),2)
    17. area_list = ["北京","重庆","广州","上海","天津"]
    18. average_list = [average(beijing_AQI),average(chongqing_AQI),average(guangzhou_AQI),average(shanghai_AQI),average(tianjin_AQI)]
    19. fin_dic = {}
    20. for i in range(0,len(average_list)):
    21. fin_dic[area_list[i]] = average_list[i]
    22. print(fin_dic)
    23. Num = sum(list(fin_dic.values()))
    24. data = list(fin_dic.values())
    25. labels = list(fin_dic.keys())
    26. colors = ['red', 'orange', 'yellow', 'green', 'purple', 'blue', 'black']
    27. sizes = [data[0] / Num * 100, data[1] / Num * 100, data[2] / Num * 100, data[3] / Num * 100, data[4] / Num * 100]
    28. expodes = (0, 0, 0.1, 0,0)
    29. plt.pie(sizes, explode=expodes, autopct='%1.1f%%',labels=labels, shadow=True, colors=colors)
    30. plt.title("五地2021年全年的空气质量情况进行对比",fontsize=20)
    31. plt.axis('equal')
    32. # 保存并显示
    33. plt.savefig('饼状图.png')
    34. 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即为占比,与前面地名一一对应,最后设置突出模块偏移值。
  • 相关阅读:
    腾讯薪酬改革:晋升不再直接调薪;iPhone 4S 和 6S 将被列入过时产品;Perl 5.36.0发布|极客头条
    【运维面试100问】(四)说说你对硬件运维的了解
    【Python】Matplotlib可视化50例
    flink状态后端和检查点的关系
    Python大作业——爬虫+可视化+数据分析+数据库(可视化篇)
    JAVA中解析package、import、class、this关键字
    MySQL备份与恢复
    BD Rhapsody单细胞分析系统
    yolov8-OBB检测角度问题
    网工内推 | 国企专场,网络运维工程师,华为/思科认证优先
  • 原文地址:https://blog.csdn.net/weixin_63866037/article/details/127744616