转载⼀篇基于天⽓预报数据可视化项⽬的原创⽂章:,已征得作者同意~
在此基础上,本数据分析与可视化课程设计是对原⽂章中的部分成果进⾏了改进和优化。
抗日之商人传说改进与优化之处在于:
(1)精⼼配⾊,可视化效果更佳。
(2)多⽂件结构,⽂件之间的层次更加清晰。
(3)路径地址采⽤相对路径,可移植性⾼。
(4)增加了主菜单,⽅便选择调⽤需要执⾏的功能。
(5)对风向雷达图贴上了⼋个⽅向的标签,并且使⽤不同的随机颜⾊对⼋个⽅向进⾏着⾊,⽅便区分。
(6)增加动态效果,对“XX变化图”增加了运⾏时动态⽣成的效果,对“变化”的感知将更加深刻,具体原理见chart.py⽂件。
(7)对温度与相对湿度的相关性分析增加了求解⽪尔逊相关系数(定义了⼀个coefficient函数求解)和求解温度-相对湿度两个变量之间的线性回归⽅程(利⽤机器学习库sklearn中的LinearRegression求解),并将相关系数和拟合曲线展⽰。
⼀、主要⽂件结构
说明:
① dataset⽂件夹:存放天⽓数据的csv⽂件。
② main.py:调⽤dataset中的数据和src中的源代码,得出可视化图⽚,然后保存于result⽂件夹,它是程序运⾏⼊⼝。
③ result⽂件夹:存放运⾏完成后的可视化图⽚。
④ src⽂件夹:存放数据分析与可视化的源代码。
⑤ 执⾏main.py后,XX变化图的可视化将会是⼀个动态变化图展⽰,但所有保存的可视化图⽚都是静态的.png图⽚。
⼆、具体⽂件细节
(1)main.py源代码:
#main.py是启动程序,负责启动和调⽤相应的功能,并导⼊数据集
from src import dataprocess
import pandas as pd
import matplotlib.pyplot as plt
import os
from os import path
def main():
#解决基本显⽰问题
#原始数据集导⼊
localpath=path.dirname(__file__)
datapath=os.path.join(localpath,'dataset/weather1.csv')
data = pd.read_csv(datapath, encoding='gb2312')
#数据分析与可视化实现
入冬发朋友圈的说说key=1
print("\n请选择你所需要的分析: \n0、温度变化图\n1、相对湿度变化图\n2、温度与相对湿度分析图\n3、降⾬量变化图\n4、风向雷达图")
#多功能数据分析与可视化的选择
#try-except结构避免⽤户输⼊不正确或恶意输⼊
while1:
try:
i=int(input('输⼊需要查看的图表(输⼊-1退出):'))
break
except:
print("输⼊有误,请重新输⼊")
print("\n请选择你所需要的分析: \n0、温度变化图\n1、相对湿度变化图\n2、温度与相对湿度分析图\n3、降⾬量变化图\n4、风向雷达图") #选择对应功能后,调⽤对应函数
#while循环实现多次查看不同的功能
while key==1:
if(i==-1):
key=0
break
while i!=-1:
if i==0:
break
elif i==1:
dataprocess.humidity(data)#湿度变化曲线
break
elif i==2:
break
elif i==3:
dataprocess.rainfall(data)#降⾬量曲线图
break
elif i==4:
dataprocess.wind(data)#风级风向雷达图
break
elif i==-1:
key=0
print("正在退出......")
break
else:
print("输⼊有误请重新输⼊")
print("输⼊有误请重新输⼊")
break
if(key==0):
break
print("\n请选择你所需要的分析: \n0、温度变化图\n1、相对湿度变化图\n2、温度与相对湿度分析图\n3、降⾬量变化图\n4、风向雷达图")
i =int(input('输⼊需要查看的图表(输⼊-1退出):'))
print("\n退出成功,欢迎下次使⽤!")
#启动⼊⼝
if __name__=="__main__":
main()
(2)dataset⽂件夹内部:
存有⼀个天⽓数据的csv⽂件,可以参考原作者⽂章中的爬⾍代码获取⾃⼰地区当前天⽓数据。原作者⽂章链接:。
(3)src⽂件夹内部:
内有两个.py⽂件,dataprocess.py是数据分析处理⽂件,chart.py是数据可视化⽂件,main函数会先调⽤处理⽂件后再可视化⽂件。
(4)dataprocess.py代码:
#dataprocess.py程序是数据处理程序
#负责对来⾃对数据集进⾏数据分析和处理,以便于提供给chart.py程序进⾏可视化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from src import chart
#温度变化图
def temperature(data):
tems =list(data['温度'])#导⼊温度⼀列
跳舞男孩
hours =list(data['⼩时'])#导⼊时间⼀列
temave =sum(tems)/len(tems)# 求平均温度
temmin =min(tems)#求最低温度
tem_minhour = hours[tems.index(temmin)]# 求最低温度及其时刻
temmax =max(tems)#求最⾼温度
tem_maxhour = hours[tems.index(temmax)]# 求最低温度及其时刻
#传递给chart.py中对应的函数进⾏可视化
#相对湿度变化图
def humidity(data):
hours =list(data['⼩时'])#导⼊时间⼀列
hums =list(data['相对湿度'])#导⼊相对湿度⼀列
humave =sum(hums)/len(hums)# 求平均相对湿度
hummax =max(hums)#求最⼤湿度
hum_maxhour = hours[hums.index(hummax)]# 求最⾼相对湿度及其时刻
hummin =min(hums)#求最⼩湿度
hum_minhour = hours[hums.index(hummin)]# 求最低相对湿度及其时刻
#传递给chart.py中对应的函数进⾏可视化
chart.humdiagram(hours, hums, humave, hummax, hum_maxhour, hummin, hum_minhour)八两菜
#降⾬量曲线图
王小岚def rainfall(data):
hours =list(data['⼩时'])#导⼊时间⼀列
rainfall =list(data['降⽔量'])#导⼊降⾬量⼀列
rainfallavg =sum(rainfall)/len(rainfall)#求平均降⾬量
rainfallmax =max(rainfall)#求最⼤降⾬量
hour_rainfallmax = hours[rainfall.index(rainfallmax)]#求最⼤降⾬量对应时间
rainfallmin =min(rainfall)#求最⼩降⾬量
hour_rainfallmin = hours[rainfall.index(rainfallmin)]#求最⼩降⾬量对应时间
#传递给chart.py中对应的函数进⾏可视化
chart.rainfalldiagram(hours, rainfall, rainfallavg, rainfallmax, hour_rainfallmax, rainfallmin, hour_rainfallmin) #风向雷达图
def wind(data):
wind =list(data['风⼒⽅向'])#导⼊风⼒⽅向⼀列
windspeed =list(data['风级'])#导⼊风级⼀列
#将定性数据风向转换为定量数据风向
for i in range(0,24):
if wind[i]=="东风":
wind[i]=0
elif wind[i]=="东北风":
wind[i]=45
elif wind[i]=="北风":
wind[i]=90
elif wind[i]=="西北风":
wind[i]=135
elif wind[i]=="西风":
wind[i]=180
elif wind[i]=="西南风":
wind[i]=225
elif wind[i]=="南风":
wind[i]=270
elif wind[i]=="东南风":
wind[i]=315
degs = np.arange(0,316,45)#将0-360度分为⼋块(因为有⼋个风向)
#下⾯的循环处理是⽤于求每个⽅向的平均风速
temp =[]
for deg in degs:
speed =[]# 获取 wind_deg 在指定⽅向的风速平均值数据
for i in range(0,24):
if wind[i]== deg:
speed.append(windspeed[i])
if len(speed)==0:
temp.append(0)
else:关于历史故事的成语
temp.append(sum(speed)/len(speed))
#传递给chart.py中对应的函数进⾏可视化
chart.windradar(temp)
#⽪尔逊相关系数函数
def coefficient(var1,var2):
aavg =sum(var1)/len(var1)#变量1的平均值
bavg =sum(var2)/len(var2)#变量2的平均值
covab =sum([(x - aavg)*(y - bavg)for x,y in zip(var1,var2)])#变量1和变量2的协⽅差
asd= math.sqrt(sum([(i - aavg)**2for i in var1]))#变量1的标准差
bsd= math.sqrt(sum([(j - bavg)**2for j in var2]))#变量2的标准差
发布评论