其他
Python绘制饼表,帮你分析西安天气!
from pyecharts import options as opts
from pyecharts.charts import Pie
import pandas as pd
https://pyecharts.org/#/zh-cn/intro
读取数据
#读取西安2021天气数据
df = pd.read_excel('C:/Users/eleven/Desktop/XA2021.xls')
#都取前5行数据
print(df.head(5))
'''
city date tianqi fengxiang max min
0 西安 2021-01-01 多云 东北风 3-4级 21℃ 10℃
1 西安 2021-01-02 小雨 西南风 1-2级 18℃ 12℃
2 西安 2021-01-03 阴 北风 1-2级 24℃ 12℃
3 西安 2021-01-04 晴 东北风 1-2级 26℃ 10℃
4 西安 2021-01-05 多云 东北风 1-2级 20℃ 10℃
'''
绘图函数
接下来我们写专门负责绘图的函数:
#创建一个饼图对象,最后返回该对象
def create_pie(datas, title):
'''
:param datas: 表示各种天气状况各自出现了多少次[('晴天',12),('雨',25)] 等数据
:param title: 绘图标题
:return:
'''
pie = Pie() #实例化pie对象
pie.add('', datas)
pie.set_global_opts( #设置全局参数title_opts 和 legend_opts
title_opts = opts.TitleOpts(title = title), #标题显示
legend_opts = opts.LegendOpts(pos_right='right') # 各项数据具体说明
)
pie.set_series_opts(label_opts = opts.LabelOpts(formatter = '{b}:{c}:%{d}')) #扇形图内展示名称、数量、百分比
return pie
绘制天气类型数据饼图
先获取数据,再传给我们刚才返回的pie函数。最后一步展示饼图。
1.按照天气类型分组降序排列。
df_tianqi = df.groupby('tianqi').size().sort_values(ascending = False) #按照天气类型分组降序排列
print(df_tianqi)
'''
多云 /多云 16
晴 /晴 15
晴 /多云 14
阴 /阴 10
阴 9
多云 8
多云 /晴 7
多云 /阴 7
小雨 7
晴 5
阴 /多云 5
小雨 /阴 3
小雨 /小雨 3
多云 /小雨 2
晴 /阴 2
中雨 /小雨 1 .......
'''
2.但是我们函数需要的数据类型是元组,这里获取到的是一个series。所以就要转换数据类型使其我们函数所需数据。
#天气类型并饼图对比
df_tianqi = df.groupby('tianqi').size().sort_values(ascending = False) #按照天气类型分组降序排列
datas = list(zip(df_tianqi.index.to_list(), df_tianqi.to_list())) #series->list 多云:8天;下雨10天
print(datas)
'''
[('多云 /多云', 16), ('晴 /晴', 15), ('晴 /多云', 14), ('阴 /阴', 10), ('\xa0阴', 9), ('\xa0多云', 8), ('多云 /晴', 7), ('多云 /阴', 7), ('\xa0小雨', 7), ('\xa0晴', 5), ('阴 /多云', 5), ('小雨 /阴', 3), ('小雨 /小雨', 3), ('多云 /小雨', 2), ('晴 /阴', 2), ('中雨 /小雨', 1), ('小雨 /多云', 1), ('小雨 /晴', 1), ('小雪 /小雪', 1), ('\xa0阵雨', 1), ('阴 /小雨', 1), ('阴 /晴', 1)]
'''
3.最后一步就是调用函数展示图形了
pie = create_pie(datas, '西安2021-天气饼图') #调用画图函数
pie.render() #图像展示
结果如下:
绘制风向类型数据饼图
类似于上,在此不多赘述哈
df_tianqi = df.groupby('fengxiang').size().sort_values(ascending = False) #按照天气一列降序排列
datas = list(zip(df_tianqi.index.to_list(), df_tianqi.to_list())) #series->list 多云:8天;下雨10天
pie = create_pie(datas, '西安2021-风向饼图')
pie.render()
结果如下:
这样看起来是不是比看Excel要清晰很多呢?
所需数据和源码均已打包
需要联系的小伙伴公众号回复'天气'即可!