重庆网站建设网站,国内优秀企业网站设计,嘉兴服饰网站建设,dedecms做的网站_网站中的图片总是被同一ip恶意点击文章目录1 前言2 项目简介3 开始分析3.1 海洋对当地气候的影响3.2 导入数据集3.3 温度数据分析3.4 湿度数据分析3.5 风向频率玫瑰图3.6 计算风速均值的分布情况1 前言
Hi#xff0c;大家好#xff0c;这里是丹成学长#xff0c;今天向大家介绍 一个项目
基于GRU的 电影评论…文章目录1 前言2 项目简介3 开始分析3.1 海洋对当地气候的影响3.2 导入数据集3.3 温度数据分析3.4 湿度数据分析3.5 风向频率玫瑰图3.6 计算风速均值的分布情况1 前言Hi大家好这里是丹成学长今天向大家介绍 一个项目基于GRU的 电影评论情感分析大家可用于 毕业设计毕设帮助开题指导资料分享疑问解答(见文末)选题指导, 项目分享见文末2 项目简介本实例将对意大利北部沿海地区的气象数据进行分析与可视化。首先会运用 Python 中 matplotlib 库对数据进行图表化处理然后调用 scikit-learn 库当中的的 SVM 库对数据进行回归分析最终在图表分析的支持下得出我们的结论。为什么选择意大利 因为有现成的数据集如果要分析其他地方的数据去采集爬取即可。3 开始分析气象数据是在网上很容易找到的一类数据。很多网站都提供以往的气压、气温、湿度和降雨量等气象数据。只需指定位置和日期就能获取一个气象数据文件。这些测量数据是由气象站收集的。气象数据这类数据源涵盖的信息范围较广。数据分析的目的是把原始数据转化为信息再把信息转化为知识因此拿气象数据作为数据分析的对象来讲解数据分析全过程再合适不过。3.1 海洋对当地气候的影响意大利是一个被海洋包围的半岛国家。为什么要把自己的选择局限在意大利呢因为我们所研究的问题刚好和意大利人的一种典行为相关也就是夏天我们喜欢躲在海边以躲避内陆的酷热。意大利是半岛国家找到可研究的海域不是问题但是如何衡量海洋对其远近不同的地方的影响这就引出了一个大问题。意大利其实多山地离海差不多远可以彼此作为参照的内陆区域较少。为了衡量海洋对气候的影响我排除了山地因为山地也许会引入其他很多因素比如海拔。意大利波河流域这块区域就很适合研究海洋对气候的影响。这一片平原东起亚得里亚海向内陆延伸数百公里见图1。它周边虽不乏群山环绕但由于它很宽广削弱了群山的影响。此外该区域城镇密集也便于选取一组离海远近不同的城市。我们所选的几个城市两个城市间的最大距离约为 400 公里。第一步选 10 个城市作为参照组。选择城市时注意它们要能代表整个平原地区如图2所示我们选取了 10 个城市。随后将分析它们的天气数据其中 5 个城市在距海 100 公里范围内其余 5 个距海 100400 公里。选作样本的城市列表如下Ferrara费拉拉Torino都灵Mantova曼托瓦Milano米兰Ravenna拉文纳Asti阿斯蒂Bologna博洛尼亚Piacenza皮亚琴察Cesena切塞纳Faenza法恩莎接下来我们需要计算这些城市离海有多远。这里使用 TheTimeNow 网站提供的服务以海滨城市 Comacchio 作为基点计算其他城市与它之间的距离3.2 导入数据集下载好数据集后导入相关包加载相关数据开始相关分析。importnumpyasnpimportpandasaspdimportdatetime df_ferrarapd.read_csv(WeatherData/ferrara_270615.csv)df_milanopd.read_csv(WeatherData/milano_270615.csv)df_mantovapd.read_csv(WeatherData/mantova_270615.csv)df_ravennapd.read_csv(WeatherData/ravenna_270615.csv)df_torinopd.read_csv(WeatherData/torino_270615.csv)df_astipd.read_csv(WeatherData/asti_270615.csv)df_bolognapd.read_csv(WeatherData/bologna_270615.csv)df_piacenzapd.read_csv(WeatherData/piacenza_270615.csv)df_cesenapd.read_csv(WeatherData/cesena_270615.csv)df_faenzapd.read_csv(WeatherData/faenza_270615.csv)查看数据集结构3.3 温度数据分析非常简单的分析方法是先分析一天中气温的变化趋势。以城市米兰为例。# 温度和日期数据x1df_milano[day]y1df_milano[temp]# 把日期数据转换成 datetime 的格式day_milano[parser.parse(x)forxinx1]fig,axplt.subplots()# 调整x轴坐标刻度使其旋转70度方便查看plt.xticks(rotation70)hoursmdates.DateFormatter(%H:%M)# 设定X轴显示的格式ax.xaxis.set_major_formatter(hours)ax.plot(day_milano,y1,r)由图可见气温走势接近正弦曲线从早上开始气温逐渐升高最高温出现在下午两点到六点之间随后气温逐渐下降在第二天早上六点时达到最低值。学长进行数据分析的目的是尝试解释是否能够评估海洋是怎样影响气温的以及是否能够影响气温趋势因此我们同时来看几个不同城市的气温趋势。这是检验分析方向是否正确的唯一方式。因此我选择三个离海最近以及三个离海最远的城市。# 读取温度和日期数据y1df_ravenna[temp]x1df_ravenna[day]y2df_faenza[temp]x2df_faenza[day]y3df_cesena[temp]x3df_cesena[day]y4df_milano[temp]x4df_milano[day]y5df_asti[temp]x5df_asti[day]y6df_torino[temp]x6df_torino[day]# 把日期从 string 类型转化为标准的 datetime 类型day_ravenna[parser.parse(x)forxinx1]day_faenza[parser.parse(x)forxinx2]day_cesena[parser.parse(x)forxinx3]day_milano[parser.parse(x)forxinx4]day_asti[parser.parse(x)forxinx5]day_torino[parser.parse(x)forxinx6]fig,axplt.subplots()plt.xticks(rotation70)hoursmdates.DateFormatter(%H:%M)ax.xaxis.set_major_formatter(hours)ax.plot(day_ravenna,y1,r,day_faenza,y2,r,day_cesena,y3,r)ax.plot(day_milano,y4,g,day_asti,y5,g,day_torino,y6,g)离海最近的三个城市的气温曲线使用红色而离海最远的三个城市的曲线使用绿色。结果分析离海最近的三个城市的最高气温比离海最远的三个城市低不少而最低气温看起来差别较小。我们可以沿着这个方向做深入研究收集10个城市的最高温和最低温用线性图表示气温最值点和离海远近之间的关系。# dist 是一个装城市距离海边距离的列表dist[df_ravenna[dist][0],df_cesena[dist][0],df_faenza[dist][0],df_ferrara[dist][0],df_bologna[dist][0],df_mantova[dist][0],df_piacenza[dist][0],df_milano[dist][0],df_asti[dist][0],df_torino[dist][0]]# temp_max 是一个存放每个城市最高温度的列表temp_max[df_ravenna[temp].max(),df_cesena[temp].max(),df_faenza[temp].max(),df_ferrara[temp].max(),df_bologna[temp].max(),df_mantova[temp].max(),df_piacenza[temp].max(),df_milano[temp].max(),df_asti[temp].max(),df_torino[temp].max()]# temp_min 是一个存放每个城市最低温度的列表temp_min[df_ravenna[temp].min(),df_cesena[temp].min(),df_faenza[temp].min(),df_ferrara[temp].min(),df_bologna[temp].min(),df_mantova[temp].min(),df_piacenza[temp].min(),df_milano[temp].min(),df_asti[temp].min(),df_torino[temp].min()最高气温先把最高温画出来。如图所示海洋对气象数据具有一定程度的影响这个假设是正确的至少一天内如此。而且从图中可以发现海洋的影响衰减的很快离海60~70公里开外气温就已攀升到高位。用线性回归算法scikit-learn库的SVR得到两条直线分别表示两种不同的气温趋势。这段代码会跑比较久的时间fromsklearn.svmimportSVR# dist1是靠近海的城市集合dist2是远离海洋的城市集合dist1dist[0:5]dist2dist[5:10]# 改变列表的结构dist1现在是5个列表的集合# 之后我们会看到 numpy 中 reshape() 函数也有同样的作用dist1[[x]forxindist1]dist2[[x]forxindist2]# temp_max1 是 dist1 中城市的对应最高温度temp_max1temp_max[0:5]# temp_max2 是 dist2 中城市的对应最高温度temp_max2temp_max[5:10]# 我们调用SVR函数在参数中规定了使用线性的拟合函数# 并且把 C 设为1000来尽量拟合数据因为不需要精确预测不用担心过拟合svr_lin1SVR(kernellinear,C1e3)svr_lin2SVR(kernellinear,C1e3)# 加入数据进行拟合这一步可能会跑很久大概10多分钟休息一下:) svr_lin1.fit(dist1,temp_max1)svr_lin2.fit(dist2,temp_max2)# 关于 reshape 函数请看代码后面的详细讨论xp1np.arange(10,100,10).reshape((9,1))xp2np.arange(50,400,50).reshape((7,1))yp1svr_lin1.predict(xp1)yp2svr_lin2.predict(xp2)然后绘图如上所见离海 60 公里以内气温上升速度很快从 28 度陡升至 31 度随后增速渐趋缓和如果还继续增长的话更长的距离才会有小幅上升。这两种趋势可分别用两条直线来表示直线的表达式为y ax b其中 a 为斜率b 为截距。考虑将这两条直线的交点作为受海洋影响和不受海洋影响的区域的分界点或者至少是海洋影响较弱的分界点。3.4 湿度数据分析考察当天三个近海城市和三个内陆城市的湿度趋势。# 读取湿度数据y1df_ravenna[humidity]x1df_ravenna[day]y2df_faenza[humidity]x2df_faenza[day]y3df_cesena[humidity]x3df_cesena[day]y4df_milano[humidity]x4df_milano[day]y5df_asti[humidity]x5df_asti[day]y6df_torino[humidity]x6df_torino[day]# 重新定义 fig 和 ax 变量fig,axplt.subplots()plt.xticks(rotation70)# 把时间从 string 类型转化为标准的 datetime 类型day_ravenna[parser.parse(x)forxinx1]day_faenza[parser.parse(x)forxinx2]day_cesena[parser.parse(x)forxinx3]day_milano[parser.parse(x)forxinx4]day_asti[parser.parse(x)forxinx5]day_torino[parser.parse(x)forxinx6]# 规定时间的表示方式hoursmdates.DateFormatter(%H:%M)ax.xaxis.set_major_formatter(hours)#表示在图上ax.plot(day_ravenna,y1,r,day_faenza,y2,r,day_cesena,y3,r)ax.plot(day_milano,y4,g,day_asti,y5,g,day_torino,y6,g)从图中看好像近海城市湿度要大于内陆城市全天湿度差距在20%左右。3.5 风向频率玫瑰图在采集的每个城市的气象数据中下面两个与风有关风力风向风速分析数据发现风速不仅跟一天的时间段相关联还与一个介于0360度的方向有关。每一条测量数据包含风吹来的方向。对于风力数据将其制作成线性图不是最佳选择。这里试着做一个散点图但该图表现力也不足。要表示360度分布的数据点最好使用另一种可视化方法极区图。先创建一个直方图也就是将360度分为八个面元每个面元为45度把所有的数据点分到这八个面元中。defshowRoseWind(values,city_name,max_value):N8# theta [pi*1/4, pi*2/4, pi*3/4, ..., pi*2]thetanp.arange(0.,2*np.pi,2*np.pi/N)radiinp.array(values)# 绘制极区图的坐标系plt.axes([0.025,0.025,0.95,0.95],polarTrue)# 列表中包含的是每一个扇区的 rgb 值x越大对应的color越接近蓝色colors[(1-x/max_value,1-x/max_value,0.75)forxinradii]# 画出每个扇区plt.bar(theta,radii,width(2*np.pi/N),bottom0.0,colorcolors)# 设置极区图的标题plt.title(city_name,x0.2,fontsize20)定义好 showRoseWind() 函数之后查看其他城市的风向情况也非常简单。3.6 计算风速均值的分布情况即使是跟风速相关的其他数据也可以用极区图来表示。定义 RoseWind_Speed 函数计算将 360 度范围划分成的八个面元中每个面元的平均风速。defRoseWind_Speed(df_city):# degs [45, 90, ..., 360]degsnp.arange(45,361,45)tmp[]fordegindegs:# 获取 wind_deg 在指定范围的风速平均值数据tmp.append(df_city[(df_city[wind_deg](deg-46))(df_city[wind_deg]deg)][wind_speed].mean())returnnp.array(tmp) 项目分享:大家可自取用于参考学习获取方式见文末!