python大作业:天气数据分析

有偿分享源码和.docx格式文档

  • 一、设计要求
    • 1.1 csv文件的存储
    • 1.2 日平均气温趋势分析
    • 1.3 城市天气种类统计分析
    • 1.4 月平均气温趋势分析
    • 1.5 气温风力天气统计
    • 1.6 城市旅游季分析
  • 二、设计方案
    • 2.1 整体思路
    • 2.2 库的使用
    • 2.3 工作分解结构
    • 2.4 自定义标准详解
  • 三、设计代码
  • 四、实现效果
    • 4.1 csv文件的处理
    • 4.2 日平均气温趋势分析
    • 4.3 城市天气种类统计分析
    • 4.4 月平均气温趋势分析
    • 4.5 气温风力天气统计
    • 4.6 城市旅游季分析
  • 五、设计总结
    • 5.1 matplotlib可视化
      • 5.1.1 绘图方法
      • 5.1.2 结构关系
    • 5.1.3 绘图流程
    • 5.2 pandas数据清洗
      • 5.2.1 处理数据中的空值
      • 5.2.2 删除空格
      • 5.2.3 大小写转换
      • 5.2.4 更改数据格式
      • 5.2.5 更改列名称
      • 5.2.6 删除重复值
      • 5.2.7 修改及替换数据
    • 5.3 参考文献

一、设计要求

1.1 csv文件的存储

首先,根据GitHub开源数据集进行数据清洗,获得题目要求csv数据;其次,将获取的数据信息利用电脑自带Excel功能存储到csv格式的文件中;然后,将文件命名为”城市名称.csv”;最后,其中每行数据格式要求为“日期(date),最高温(T_max),最低温(T_min),天气(weather),风向(wind)”;
(将获取的数据信息存储到csv格式的文件中,文件命名为”城市名称.csv”,其中每行数据格式为“日期,最高温,最低温,天气,风向”)

1.2 日平均气温趋势分析

首先,在csv文件中增加“平均温度(T_Average)”一列,平均温度=(最高温+最低温)/2,此处可以利用numpy库的np.mean()方法求解找到平均值后追加一列数据;然后通过matplotlib库的plt.plot()的方法在同一张图中绘制两个城市(南京、成都)一年的平均气温走势折线图;
(在数据中增加“平均温度”一列,其中:平均温度=(最高温+最低温)/2,在同一张图中绘制两个城市一年平均气温走势折线图)

1.3 城市天气种类统计分析

首先根据csv文件的天气(weather)一列统计两个城市各类天气的天数,将天气按照.split(“/”)分割成列表,利用set()方法去重统计出天气的种类;然后,根据天气的质量进行人工排序增加图表的可视化,再对每座城市的天数进行统计;最后绘制matplotlib条形图对比两座城市的天气情况;
(统计两个城市各类天气的天数,并绘制条形图进行对比)

1.4 月平均气温趋势分析

首先统计这两个城市每个月天数,由于在程序的开头已经实现了年份的统计,此处可以通过判断平闰年来统计每月天数,或者通过csv文件的天数进行统计;然后统计每个月的平均气温,将平均气温放在图表对象中;最后根据图表对象绘制月平均气温折线图;
(统计这两个城市每个月的平均气温,绘制折线图)

1.5 气温风力天气统计

首先,将风向进行分割split分割,分别判断白天夜间的风力是否小于5级别;同时判断平均气温(T_Average)是否大于10并且小于5;最后根据结果在控制台打印天数即可
(统计出这两个城市一年中,平均气温在10~25度,风力小于5级的天数)

1.6 城市旅游季分析

基于天气自然应用结合题目要求数据集,本此实验共自定义四大标准:
(1)风力大小,风力越小代表当地的天气情况相对较好
(2)温差,昼夜温差越小则代表当地天气状况良好
(3)平均温度,平均温度越靠近20℃,人体感到舒适程度越高
(4)适宜天气数,天气为晴天或者多云的天数,代表适合出游的天气数量
为四大标准进行权重分配,对每一标准的权重比例进行赋值,标准的值进行降序排序,权重从高到低依次为4 3 2 1。注意,如果标准值相同则赋值相同,以前一权重为准。
(自定义标准,分析这两个城市适合旅游的季节)

二、设计方案

2.1 整体思路

通过选取中国东西部两座代表性城市南京、成都分析两地天气状况,通过可视化技术呈现出两地气候的差异,为人们的旅游出现提供建议。

2.2 库的使用

针对关键问题,本次设计共利用到如下表1所示库以及库的解决的问题

2.3 工作分解结构

2.4 自定义标准详解

按照设计要求,共有四大标准,实现方法如下:
(1)列表字典citySeason存储城市的季节
为了方便后期数据的处理,标准的使用了列表字典的数据结构进行存储

(2)for循环设置citySeason值
通过一次遍历csv文件可以找到全部的标准,实现代码见三设计代码
(3)sorted方法设置权重
将列表字典按照标准用sorted方法排序,赋以权重即可实现权重的设置
(4)寻找权重最大
利用numpy的np.max()方法寻找权重的最大值
(5)函数的封装
将代码重构实现函数封装,传入参数为城市的csv数据,返回值为空,功能:寻找并打印适宜季节

三、设计代码

有偿分享源码和.docx格式文档(可编辑)

四、实现效果

4.1 csv文件的处理

两个csv文件分别为NanJing.csv和ChengDu.csv,每一列分别是
①日期date,
②最高温T_max
③最低温T_min
④天气weather
⑤风向wind_direction
处理结果如下图2所示

4.2 日平均气温趋势分析

在日平均气温趋势分析中,用到了折线图来反映温度趋势,在同一图中呈现两地趋势进行对比。如下图3所示,横纵代表日期,纵轴代表温度,区间为-5~30℃;蓝色折线代表南京,橙色折线代表成都;据图可分析出在冬季成都的气温比南京要高,夏季成都比南京的气温低,即所谓的成都冬暖夏凉的来由。

4.3 城市天气种类统计分析

在城市天气种类统计分析中,共有12类天气,质量从好到坏依次为 ‘晴’, ‘多云’, ‘阴’, ‘小雨’, ‘小到中雨’, ‘中雨’, ‘中到大雨’, ‘大雨’, ‘阵雨’, ‘雷阵雨’, ‘大暴雨’, ‘雨夹雪’,利用双柱状图实现两地天气种类的对比。如下图4所示,横轴代表天气种类,纵轴代表天数数量,区间为0~175days,蓝色折线代表南京,橙色折线代表成都;据图可分析出,南京的高质量天气数量与成都持平,成都的阴天或者小于远高于南京,若分析降雨量应该还要加入降雨量的统计

4.4 月平均气温趋势分析

早月平均气温趋势分析中,将每月的平均气温通过折线图呈现,在同一图中呈现两地平均气温对比。如图5所示,横纵代表日期,纵轴代表温度,区间为-5~30℃;蓝色折线代表南京,橙色折线代表成都;据图可分析出成都2 3 4 12月的气温要高于南京,4到11月要低于南京,再次验证了成都是冬暖夏凉的城市。

4.5 气温风力天气统计

根据题目要求设计方案编码统计出平均气温在10~25度,风力小于5级南京为134天,成都为203天,运行结果如下图6所示

4.6 城市旅游季分析

根据自定义四大标准统计出南京的四季情况如下,分别为序号,季节,风力,温差,平均气温。适合天气数量,天数,权重。按照权重分配得出秋季的权重最高,故南京的适合旅游的季节为秋季。

五、设计总结

5.1 matplotlib可视化

5.1.1 绘图方法

通过这次绘图过程,对matplotlib图表绘制所使用的函数和方法印象加深。
plot()函数包含了很多基础的绘图功能,用它来绘制线图;
scatter()函数用以绘制散点图;
xlim() / ylim()用于设置坐标轴的数值显示范围;
xlabel() / ylabel()用于设置坐标轴的标签;
grid()函数用于设置图形中的网格线;
axhline() / axvline():用于设置水平参考线和垂直参考线。
axhspan() / axvspan()用于设置平行于x轴/y轴的参考区域;
annotate():添加指向性注释文本,灵活调整注释的位置以及指示箭头的样式,
text():图形中的注释,但它跟annotate()的区别是它用于添加不带指向性箭头的文本注释; title():形的标题;

5.1.2 结构关系

理解了figure与asex之间的关系,先建画板再建子图,再赋值给对象
fig=plt.figure(figsize=(6,6),dpi=100,facecolor=’#dfd7d7’)
#用add_subplot划分子图ax
ax=fig.add_subplot(1,1,1)
学习了子图之间并列关系,若无先赋值给对象,那么就要按代码顺序plt.绘图。赋值给对象后,对象没有包含的方法就需要用set_函数调用。

5.1.3 绘图流程

5.2 pandas数据清洗

本次实验用到了pandas数据清洗部分方法,在此进行简单的技术总结(表格代码在jupyter notebook中实现)

5.2.1 处理数据中的空值

我们在处理真实的数据时,往往会有很多缺少的的特征数据,就是所谓的空值,必须要进行处理才能进行下一步分析
空值的处理方式有很多种,一般是删除或者填充
(1)使用dropna函数删除空值

import pandas as pd
data=pd.read_csv('成绩表.csv',encoding='gbk')
data.dropna(how='any')

(2)用fillna函数实现空值的填充
①使用数字0填充数据表中的空值

data.fillna(value=0) 

②使用平均值填充数据表中的空值

data['语文'].fillna(data['语文'].mean())

5.2.2 删除空格

pandas删除空格也很方便,主要使用map函数

data['姓名']=data['姓名'].map(str.strip)
data

5.2.3 大小写转换

pandas中转换函数也为upper()和lower()

data['拼音']=data['拼音'].str.upper()
data

data['拼音']=data['拼音'].str.lower()
data

5.2.4 更改数据格式

pandas使用astype来修改数据格式,以将“语文”列改成整数为例

data['语文'].dropna(how='any').astype('int')

5.2.5 更改列名称

pandas使用rename函数更改列名称,代码如下:

data.rename(columns={'语文':'语文成绩'})

5.2.6 删除重复值

pandas使用drop_duplicates函数删除重复值

data['数学'].drop_duplicates()  #默认删除后面的重复值

5.2.7 修改及替换数据

pandas中使用replace函数实现数据替换

data['姓名'].replace('成  功','失  败')

5.3 参考文献

[1]韦依洋,吴一凡,李永远.Python技术在数据可视化中的应用研究[J].福建电脑,2022,38(01):27-31.DOI:10.16707/j.cnki.fjpc.2022.01.007.
[2]李成渊,俞越,彭伟明.大数据环境下北京冬奥、杭州亚运历史同期气候可视化设计——以数据抓取部分为例[J].江苏科技信息,2019,36(31):75-77.

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月19日
下一篇 2023年12月19日

相关推荐