查看原文
其他

Python绘制饼表,帮你分析西安天气!

是沐沐呀 GOGO数据 2022-08-01

Python使用Pandas读取Excel,使用Pyecharts绘制饼图,展示西安天气类别、风向的数据统计对比。

数据从2021.1.1-2021.4.21(Today),部分截图入下:


饼图,是一个划分为几个扇形区域的原型统计图表,能够直接以图形的方式显示各个组成部分的所占比例。
目的:查看2021年西安天气后报使用天气和风向的数据进行对比。
首先我们导入绘图所需的包 pyecharts 和读取数据的 pandas。
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℃
'''

可以看出读取数据是没有问题的,和Excel中的数据是一致的。





绘图函数




接下来我们写专门负责绘图的函数:

#创建一个饼图对象,最后返回该对象
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要清晰很多呢?


所需数据和源码均已打包

需要联系的小伙伴公众号回复'天气'即可!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存