以下可视化的数据分别来源为地区所在名对应的的文件,以北京为例。对应文件名为:"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. 6. begin = datetime.date(2021, 1, 1) 7. end = datetime.date(2021, 12, 31) 8. beijing = pd.read_excel("D:/桌面/大作业/air_beijing_2021.xlsx") 9. chongqing = pd.read_excel("D:/桌面/大作业/air_chongqing_2021.xlsx") 10. guangzhou = pd.read_excel("D:/桌面/大作业/air_guangzhou_2021.xlsx") 11. shanghai = pd.read_excel("D:/桌面/大作业/air_shanghai_2021.xlsx") 12. tianjin = pd.read_excel("D:/桌面/大作业/air_tianjin_2021.xlsx") 13. 14. def func(df,name): 15. values = df.iloc[::, 4:5:].to_numpy() 16. data = df.iloc[::, 0:1:].to_numpy() 17. data_1 = [str(i)[2:12:] for i in data] 18. count = 0 19. fin_data =[] 20. for i in range(0, len(values)): 21. fin_data.append([data_1[i], int(values[i][0])]) 22. count += 1 23. c = ( 24. Calendar() 25. .add( 26. "", 27. fin_data, 28. calendar_opts=opts.CalendarOpts( 29. range_="2021", 30. daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"), 31. monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn"), 32. ), 33. ) 34. .set_global_opts( 35. title_opts=opts.TitleOpts(title=f"{name}2021年PM2.5情况日历图"), 36. visualmap_opts=opts.VisualMapOpts( 37. max_=0, 38. min_=250, 39. orient="horizontal", 40. is_piecewise=True, # 这里是True 表示可以选择是否出现。 41. pos_top="230px", 42. pos_left="100px", 43. ), 44. ) 45. 46. ) 47. c.render(f"{name}.html") 48. 49. func(beijing,"北京") 50. func(chongqing,"重庆") 51. func(guangzhou,"广州") 52. func(shanghai,"上海") 53. 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. 6. beijing = pd.read_excel("D:/桌面/大作业/air_beijing_2021.xlsx") 7. chongqing = pd.read_excel("D:/桌面/大作业/air_chongqing_2021.xlsx") 8. guangzhou = pd.read_excel("D:/桌面/大作业/air_guangzhou_2021.xlsx") 9. shanghai = pd.read_excel("D:/桌面/大作业/air_shanghai_2021.xlsx") 10. tianjin = pd.read_excel("D:/桌面/大作业/air_tianjin_2021.xlsx") 11. beijing_AQI = beijing["AQI指数"] 12. chongqing_AQI = chongqing["AQI指数"] 13. guangzhou_AQI = guangzhou["AQI指数"] 14. shanghai_AQI = shanghai["AQI指数"] 15. tianjin_AQI = tianjin["AQI指数"] 16. def average(A): 17. return round(sum(A)/len(A),2) 18. 19. area_list = ["北京","重庆","广州","上海","天津"] 20. average_list = [average(beijing_AQI),average(chongqing_AQI),average(guangzhou_AQI),average(shanghai_AQI),average(tianjin_AQI)] 21. fin_dic = {} 22. for i in range(0,len(average_list)): 23. fin_dic[area_list[i]] = average_list[i] 24. print(fin_dic) 25. Num = sum(list(fin_dic.values())) 26. data = list(fin_dic.values()) 27. labels = list(fin_dic.keys()) 28. colors = ['red', 'orange', 'yellow', 'green', 'purple', 'blue', 'black'] 29. sizes = [data[0] / Num * 100, data[1] / Num * 100, data[2] / Num * 100, data[3] / Num * 100, data[4] / Num * 100] 30. expodes = (0, 0, 0.1, 0,0) 31. plt.pie(sizes, explode=expodes, autopct='%1.1f%%',labels=labels, shadow=True, colors=colors) 32. plt.title("五地2021年全年的空气质量情况进行对比",fontsize=20) 33. plt.axis('equal') 34. # 保存并显示 35. plt.savefig('饼状图.png') 36. plt.show()
结果如下:
三、总结
(1)日历图总结
- 第一问要求绘制日历图,想到pyecharts.charts里面的 Calendar,求五个地区的日历图,只需求出一个地区的日历,将过程用函数封装,函数设置读取不同地区表格的形参,使得代码逻辑更加清晰。
- 读取文件,使用df.iloc[::, 4:5:].to_numpy()指定读取固定列,之后用列表生成式和字符串切片的方法,将日期转换成标准的字符串日期形式。对应的PM2.5值直接指定读取就可以。将这两列值,用for循环一行一行传入fin_list里面,方便最终使用。
- 接下来就用Calendar()进行日历图的绘制,注意到这里name_map = "cn" ,name_map="cn" 使用的是中文标签,最小值设置为0,最大值设置为250,图标的标题用函数传入的形参去命名。
- c.render(f"{name}.html")保存为name命名的html文件,在浏览器中打开就可以。最后传入不同实参,调用五次该函数就可以得到五个地区的日历图了。
(2)饼图总结
- 读取五地的AQI指数,求平均值作为该地的空气质量情况评判依据。以北京为例,beijing = pd.read_excel("D:/桌面/大作业/air_beijing_2021.xlsx")读取北京的文件,beijing_AQI = beijing["AQI指数"]读取北京的AQI,定义函数average,返回平均值。调用该函数,将北京AQI传染,则可以得到全年的平均AQI。
- 将地名和对应平均AQI作为值和键传入字典中,起到一一对应的作用,方便之后获取。先计算总数据,即将五个地区的平均API加在一起,labels即为地区名,colors即为每个饼图的颜色。Size即为占比,与前面地名一一对应,最后设置突出模块偏移值。