数据分析告诉你,兰州气温转凉了_数据

距离“立秋”秋天的第一杯奶茶已经过了很多时日,在兰州经历了长期高温天气,此刻终于要释放了,主观上我们已经觉得气温下降了,那么有没有具体的数据来佐证气温下降呢?本文使用pandas和pyecharts做数据分析,看看兰州的气温是不是真的下降了。

pandas我们很熟悉,啥是pyecharts?Echarts 是由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可,而 Python 是一门富有表达力的语言,很适合用于数据处理,当数据分析遇上数据可视化时,pyecharts 诞生了。



示例工具:anconda3.7

本文讲解内容:兰州气温是否真的下降了

适用范围:pandas和pyecharts库的使用




Python库安装

本节我们使用的是pyecharts库,安装指定版本1.9.0版本。

#首先先检查自己有没有安装
!pip show pyecharts
#安装指定版本:
!pip install pyecharts==1.9.0

数据分析告诉你,兰州气温转凉了_字段_02

用代码行下载pyecharts库,出现Successfully installed字样时,表明pyecharts库安装完成,可以导入包进行使用。

数据获取

打开天气后报网站,该网站可以查询涵盖34个省、市所属的2290个城市、县、地区历史天气预报信息,主要指标包括每天最高气温、最低气温、天气状况、风向等。

数据分析告诉你,兰州气温转凉了_数据分析_03

使用read_html函数爬取网页上的天气数据。

import pandas as pd


df=pd.read_html("http://www.tianqihoubao.com/weather/top/lanzhou.html",encoding='gbk',header=0)[0]
df=df.iloc[1:,:]
df

数据分析告诉你,兰州气温转凉了_数据_04

数据预处理

爬取原始数据后发现有些列字段有问题,打印列字段。

df.columns

Index(['城市', '日期', '白天', '夜间', 'Unnamed: 4', 'Unnamed: 5', 'Unnamed: 6','Unnamed: 7'],dtype='object')

将列字段有问题的字段使用rename进行重命名,修改后的列字段名如下所示。

df_rename=df.rename(columns={"白天": "白天天气状况", "夜间": "白天风力方向", "Unnamed: 4": "白天最高温度", "Unnamed: 5": "夜间天气状况", "Unnamed: 6": "夜间风力方向", "Unnamed: 7": "夜间最低温度"})
df_rename

数据分析告诉你,兰州气温转凉了_数据分析_05

爬取数据发现有的日期后面带着(星期六) (星期日),这个字段是多余不需要的字段,可以使用str进行字符提取,提取前10位。

#提取日期的前10位
df_rename['日期']=df_rename['日期'].str[0:10]
df_rename

数据分析告诉你,兰州气温转凉了_字段_06

数据分析及可视化

我们爬取的是近30天的气温数据,要研究这30天白天不同的天气状况有多少天?夜间不同的天气状况有多少天?这30天白天的风力方向是怎样的?夜间的风力方向是怎样的?

借助pyecharts库做条形图,研究白天的天气状况,由图像可看出,这30天内晴天有14天,而中雨天只有1天,典型的高温少雨天气。

from pyecharts import options as opts
from pyecharts.charts import Bar


c1 = (
Bar()
.add_xaxis(df_rename.groupby(['白天天气状况'])['日期'].count().reset_index().sort_values(by='日期',ascending=True)['白天天气状况'].tolist())
.add_yaxis("天数",df_rename.groupby(['白天天气状况'])['日期'].count().reset_index().sort_values(by='日期',ascending=True)['日期'].tolist())
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(positinotallow="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="白天天气状况"))
)
c1.render_notebook()

数据分析告诉你,兰州气温转凉了_字段_07

研究夜间的天气状况,由图像可以看出,这30天内晴天有13天,阴天有1天,而中雨天只有2天,相较于白天,晚上下雨的天数更多。

from pyecharts import options as opts
from pyecharts.charts import Bar


c2 = (
Bar()
.add_xaxis(df_rename.groupby(['夜间天气状况'])['日期'].count().reset_index().sort_values(by='日期',ascending=True)['夜间天气状况'].tolist())
.add_yaxis("天数", df_rename.groupby(['夜间天气状况'])['日期'].count().reset_index().sort_values(by='日期',ascending=True)['日期'].tolist())
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(positinotallow="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="夜间天气状况"))
)
c2.render_notebook()

数据分析告诉你,兰州气温转凉了_字段_08

研究白天的风力方向,由图像可以看出,这30天内东风1-2级、东北风1-2级共有20天, 天数占比较多,北风1-2级只有1天。

from pyecharts import options as opts
from pyecharts.charts import Bar


c3 = (
Bar()
.add_xaxis(df_rename.groupby(['白天风力方向'])['日期'].count().reset_index().sort_values(by='日期',ascending=True)['白天风力方向'].tolist())
.add_yaxis("天数", df_rename.groupby(['白天风力方向'])['日期'].count().reset_index().sort_values(by='日期',ascending=True)['日期'].tolist())
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(positinotallow="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="白天风力方向"))
)
c3.render_notebook()

数据分析告诉你,兰州气温转凉了_字段_09

研究夜间的风力方向,由图像可以看出,这30天内东风1-2级、东北风1-2级共有20天,天数占比较多,北风1-2级只有1天,从风力方向来看,白天和黑夜的差别不大。

from pyecharts import options as opts
from pyecharts.charts import Bar


c4 = (
Bar()
.add_xaxis(df_rename.groupby(['夜间风力方向'])['日期'].count().reset_index().sort_values(by='日期',ascending=True)['夜间风力方向'].tolist())
.add_yaxis("天数", df_rename.groupby(['夜间风力方向'])['日期'].count().reset_index().sort_values(by='日期',ascending=True)['日期'].tolist())
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(positinotallow="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="夜间风力方向"))
)
c4.render_notebook()

数据分析告诉你,兰州气温转凉了_数据_10

研究白天—最高温度与黑夜—最低温度随时间的变化趋势,在原始的数据中,爬取的温度是文本字段,需要提取℃之前的数字部分,然后转化为数值进行分析,这里使用str提取指定字符,使用astype用于数据类型转化。

df_rename['白天—最高温度']=df_rename['白天最高温度'].str[0:2].astype(int)
df_rename['黑夜—最低温度']=df_rename['夜间最低温度'].str[0:2].astype(int)

对白天—最高温度做描述统计分析,平均温度为32.7℃,最高温度为37℃,最低温度为24℃。

df_rename['白天—最高温度'].describe()

数据分析告诉你,兰州气温转凉了_字段_11

对黑夜—最低温度做描述统计分析,平均温度为19.87℃,最高温度为25℃,最低温度为15℃。

df_rename['黑夜—最低温度'].describe()

数据分析告诉你,兰州气温转凉了_字段_12

我们用折线图来研究其趋势变化,借助pyecharts库绘制折线图,由图可以得出与数据描述统计相一致的数据结果,由整体趋势来看,气温有下降趋势,进入立秋以来,天气逐渐转凉,酷暑难耐的日子已经远去。

from pyecharts.charts import Line
from pyecharts import options as opts


# 示例数据
cate = df_rename['日期'].sort_values().tolist()
data1 = df_rename['白天—最高温度'].tolist()
data2 = df_rename['黑夜—最低温度'].tolist()


line = (
Line()
.add_xaxis(cate)
.add_yaxis('白天', data1,is_smooth=True,markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
.add_yaxis('黑夜', data2,is_smooth=True,
#可以自定义数据标签
#markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(name="自定义标记点", coord=[cate[8], data2[8]], value=data2[2])]))
)
.set_global_opts(title_opts=opts.TitleOpts(title="兰州市气温折线图", subtitle="取白天最高气温与黑夜最低气温"),tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),#加十字提示光标
#toolbox_opts = opts.ToolboxOpts(is_show = True),#加工具箱
#datazoom_opts=[opts.DataZoomOpts()])#加水平滚动轴
)
# 设置系列配置
.set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值")]),
markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="平均值")]),)
)


line.render_notebook()
#line.render(r'C:\尚天强\Desktop\兰州市气温折线图.html')

数据分析告诉你,兰州气温转凉了_字段_13

以上我们使用具体的实例,通过数据爬取、数据清洗、数据可视化,借助可视化结果进行分析,得出近一个月的天气状况,风力方向以及气温的趋势,我们得出这30天的天气状况以晴天为主,黑夜的气温比白天的气温低,且气温是呈下降趋势,综合得出兰州气温下降了,是时候短袖换长袖了~

后台回复数据分析入门,获取数据分析入门资料

加入数据分析资料群,一起交流数据分析知识

和作者一起学习数据分析!


👆点击关注干货速递👆


三年互联网数据分析经验,擅长Excel、SQL、Python、PowerBI数据处理工具,数据可视化、商业数据分析技能,统计学、机器学习知识,持续创作数据分析内容,点赞关注,不迷路。