文章目录

  • 1 前言
  • 2 项目简介
  • 3 开始分析
    • 3.1 海洋对当地气候的影响
    • 3.2 导入数据集
    • 3.3 温度数据分析
    • 3.4 湿度数据分析
    • 3.5 风向频率玫瑰图
    • 3.6 计算风速均值的分布情况
  • 4 最后-毕设帮助

1 前言

Hi,大家好,这里是丹成学长,今天向大家介绍 一个项目

基于GRU的 电影评论情感分析

大家可用于 毕业设计

毕设帮助,开题指导,资料分享,疑问解答(见文末)

2 项目简介

本实例将对意大利北部沿海地区的气象数据进行分析与可视化。首先会运用 Python 中 matplotlib 库对数据进行图表化处理,然后调用 scikit-learn 库当中的的 SVM 库对数据进行回归分析,最终在图表分析的支持下得出我们的结论。

为什么选择意大利? 因为有现成的数据集,如果要分析其他地方的数据,去采集爬取即可。

3 开始分析

气象数据是在网上很容易找到的一类数据。很多网站都提供以往的气压、气温、湿度和降雨量等气象数据。只需指定位置和日期,就能获取一个气象数据文件。这些测量数据是由气象站收集的。气象数据这类数据源涵盖的信息范围较广。数据分析的目的是把原始数据转化为信息,再把信息转化为知识,因此拿气象数据作为数据分析的对象来讲解数据分析全过程再合适不过。

3.1 海洋对当地气候的影响

意大利是一个被海洋包围的半岛国家。为什么要把自己的选择局限在意大利呢?因为我们所研究的问题刚好和意大利人的一种典行为相关,也就是夏天我们喜欢躲在海边,以躲避内陆的酷热。意大利是半岛国家,找到可研究的海域不是问题,但是如何衡量海洋对其远近不同的地方的影响?这就引出了一个大问题。意大利其实多山地,离海差不多远,可以彼此作为参照的内陆区域较少。为了衡量海洋对气候的影响,我排除了山地,因为山地也许会引入其他很多因素,比如海拔。

意大利波河流域这块区域就很适合研究海洋对气候的影响。这一片平原东起亚得里亚海,向内陆延伸数百公里(见图1)。它周边虽不乏群山环绕,但由于它很宽广,削弱了群山的影响。此外,该区域城镇密集,也便于选取一组离海远近不同的城市。我们所选的几个城市,两个城市间的最大距离约为 400 公里。

第一步,选 10 个城市作为参照组。选择城市时,注意它们要能代表整个平原地区

如图2所示,我们选取了 10 个城市。随后将分析它们的天气数据,其中 5 个城市在距海 100 公里范围内,其余 5 个距海 100~400 公里。

选作样本的城市列表如下:

  • Ferrara(费拉拉)
  • Torino(都灵)
  • Mantova(曼托瓦)
  • Milano(米兰)
  • Ravenna(拉文纳)
  • Asti(阿斯蒂)
  • Bologna(博洛尼亚)
  • Piacenza(皮亚琴察)
  • Cesena(切塞纳)
  • Faenza(法恩莎)

接下来,我们需要计算这些城市离海有多远。这里使用 TheTimeNow 网站提供的服务,以海滨城市 Comacchio 作为基点,计算其他城市与它之间的距离:

3.2 导入数据集

下载好数据集后,导入相关包,加载相关数据,开始相关分析。

import numpy as np
import pandas as pd
import datetimedf_ferrara = pd.read_csv('WeatherData/ferrara_270615.csv')
df_milano = pd.read_csv('WeatherData/milano_270615.csv')
df_mantova = pd.read_csv('WeatherData/mantova_270615.csv')
df_ravenna = pd.read_csv('WeatherData/ravenna_270615.csv')
df_torino = pd.read_csv('WeatherData/torino_270615.csv')
df_asti = pd.read_csv('WeatherData/asti_270615.csv')
df_bologna = pd.read_csv('WeatherData/bologna_270615.csv')
df_piacenza = pd.read_csv('WeatherData/piacenza_270615.csv')
df_cesena = pd.read_csv('WeatherData/cesena_270615.csv')
df_faenza = pd.read_csv('WeatherData/faenza_270615.csv')

查看数据集结构:

3.3 温度数据分析

非常简单的分析方法是先分析一天中气温的变化趋势。以城市米兰为例。

# 温度和日期数据
x1 = df_milano['day']
y1 = df_milano['temp']# 把日期数据转换成 datetime 的格式
day_milano = [parser.parse(x) for x in x1]fig, ax = plt.subplots()
# 调整x轴坐标刻度,使其旋转70度,方便查看
plt.xticks(rotation=70)
hours = mdates.DateFormatter('%H:%M')
# 设定X轴显示的格式
ax.xaxis.set_major_formatter(hours)
ax.plot(day_milano ,y1, 'r')

由图可见,气温走势接近正弦曲线,从早上开始气温逐渐升高,最高温出现在下午两点到六点之间,随后气温逐渐下降,在第二天早上六点时达到最低值。


学长进行数据分析的目的是尝试解释是否能够评估海洋是怎样影响气温的,以及是否能够影响气温趋势,因此我们同时来看几个不同城市的气温趋势。这是检验分析方向是否正确的唯一方式。

因此,我选择三个离海最近以及三个离海最远的城市。

# 读取温度和日期数据
y1 = df_ravenna['temp']
x1 = df_ravenna['day']
y2 = df_faenza['temp']
x2 = df_faenza['day']
y3 = df_cesena['temp']
x3 = df_cesena['day']
y4 = df_milano['temp']
x4 = df_milano['day']
y5 = df_asti['temp']
x5 = df_asti['day']
y6 = df_torino['temp']
x6 = df_torino['day']# 把日期从 string 类型转化为标准的 datetime 类型
day_ravenna = [parser.parse(x) for x in x1]
day_faenza = [parser.parse(x) for x in x2]
day_cesena = [parser.parse(x) for x in x3]
day_milano = [parser.parse(x) for x in x4]
day_asti = [parser.parse(x) for x in x5]
day_torino = [parser.parse(x) for x in x6]fig, ax = plt.subplots()
plt.xticks(rotation=70)
hours = mdates.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)得到两条直线,分别表示两种不同的气温趋势。

(这段代码会跑比较久的时间)

from sklearn.svm import SVR# dist1是靠近海的城市集合,dist2是远离海洋的城市集合
dist1 = dist[0:5]
dist2 = dist[5:10]# 改变列表的结构,dist1现在是5个列表的集合
# 之后我们会看到 numpy 中 reshape() 函数也有同样的作用
dist1 = [[x] for x in dist1]
dist2 = [[x] for x in dist2]# temp_max1 是 dist1 中城市的对应最高温度
temp_max1 = temp_max[0:5]
# temp_max2 是 dist2 中城市的对应最高温度
temp_max2 = temp_max[5:10]# 我们调用SVR函数,在参数中规定了使用线性的拟合函数
# 并且把 C 设为1000来尽量拟合数据(因为不需要精确预测不用担心过拟合)
svr_lin1 = SVR(kernel='linear', C=1e3)
svr_lin2 = SVR(kernel='linear', C=1e3)# 加入数据,进行拟合(这一步可能会跑很久,大概10多分钟,休息一下:) )
svr_lin1.fit(dist1, temp_max1)
svr_lin2.fit(dist2, temp_max2)# 关于 reshape 函数请看代码后面的详细讨论
xp1 = np.arange(10,100,10).reshape((9,1))
xp2 = np.arange(50,400,50).reshape((7,1))
yp1 = svr_lin1.predict(xp1)
yp2 = svr_lin2.predict(xp2)

然后绘图


如上所见,离海 60 公里以内,气温上升速度很快,从 28 度陡升至 31 度,随后增速渐趋缓和(如果还继续增长的话),更长的距离才会有小幅上升。这两种趋势可分别用两条直线来表示,直线的表达式为:

y = ax + b(其中 a 为斜率,b 为截距。)

考虑将这两条直线的交点作为受海洋影响和不受海洋影响的区域的分界点,或者至少是海洋影响较弱的分界点。

3.4 湿度数据分析

考察当天三个近海城市和三个内陆城市的湿度趋势。

# 读取湿度数据
y1 = df_ravenna['humidity']
x1 = df_ravenna['day']
y2 = df_faenza['humidity']
x2 = df_faenza['day']
y3 = df_cesena['humidity']
x3 = df_cesena['day']
y4 = df_milano['humidity']
x4 = df_milano['day']
y5 = df_asti['humidity']
x5 = df_asti['day']
y6 = df_torino['humidity']
x6 = df_torino['day']# 重新定义 fig 和 ax 变量
fig, ax = plt.subplots()
plt.xticks(rotation=70)# 把时间从 string 类型转化为标准的 datetime 类型
day_ravenna = [parser.parse(x) for x in x1]
day_faenza = [parser.parse(x) for x in x2]
day_cesena = [parser.parse(x) for x in x3]
day_milano = [parser.parse(x) for x in x4]
day_asti = [parser.parse(x) for x in x5]
day_torino = [parser.parse(x) for x in x6]# 规定时间的表示方式
hours = mdates.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 风向频率玫瑰图

在采集的每个城市的气象数据中,下面两个与风有关:

  • 风力(风向)
  • 风速

分析数据发现,风速不仅跟一天的时间段相关联,还与一个介于0!360度的方向有关。(每一条测量数据包含风吹来的方向。)

对于风力数据,将其制作成线性图不是最佳选择。这里试着做一个散点图:

但该图表现力也不足。

要表示360度分布的数据点,最好使用另一种可视化方法:极区图。先创建一个直方图,也就是将360度分为八个面元,每个面元为45度,把所有的数据点分到这八个面元中。

def showRoseWind(values,city_name,max_value):N = 8# theta = [pi*1/4, pi*2/4, pi*3/4, ..., pi*2]theta = np.arange(0.,2 * np.pi, 2 * np.pi / N)radii = np.array(values)# 绘制极区图的坐标系plt.axes([0.025, 0.025, 0.95, 0.95], polar=True)# 列表中包含的是每一个扇区的 rgb 值,x越大,对应的color越接近蓝色colors = [(1-x/max_value, 1-x/max_value, 0.75) for x in radii]# 画出每个扇区plt.bar(theta, radii, width=(2*np.pi/N), bottom=0.0, color=colors)# 设置极区图的标题plt.title(city_name, x=0.2, fontsize=20)

定义好 showRoseWind() 函数之后,查看其他城市的风向情况也非常简单。

3.6 计算风速均值的分布情况

即使是跟风速相关的其他数据,也可以用极区图来表示。

定义 RoseWind_Speed 函数,计算将 360 度范围划分成的八个面元中每个面元的平均风速。

def RoseWind_Speed(df_city):# degs = [45, 90, ..., 360]degs = np.arange(45,361,45)tmp = []for deg in degs:# 获取 wind_deg 在指定范围的风速平均值数据tmp.append(df_city[(df_city['wind_deg']>(deg-46)) & (df_city['wind_deg']<deg)]['wind_speed'].mean())return np.array(tmp)

4 最后-毕设帮助

毕业设计 - 天气数据分析相关推荐

  1. 基于机器学习的天气数据分析与预测系统

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从某天气预报网站抓取某一城市的历史天气数据,构建天气数据分析与预测系统,实现对 ...

  2. 不知道天气咋样?一起用Python爬取天气数据分析告诉你

    前言 今天我们分享一个小案例,获取天气数据,进行可视化分析,带你直观了解天气情况! 一.核心功能设计 总体来说,我们需要先对中国天气网中的天气数据进行爬取,保存为csv文件,并将这些数据进行可视化分析 ...

  3. 分享思路:Python+Spark招聘爬虫可视化系统 招聘数据分析 Hadoop职位可视化 大数据毕业设计 51job数据分析(可选加推荐算法)

    开发技术 Hadoop.HDFS.Spark.SpringBoot.echarts.PySpark.Python.MySQL 创新点 大数据架构.爬虫.数据可视化 啰里啰嗦 适合大数据毕业设计.数据分 ...

  4. 【毕业设计】天气数据分析系统 - python 大数据

    文章目录 1 前言 2 项目简介 3 开始分析 3.1 海洋对当地气候的影响 3.2 导入数据集 3.3 温度数据分析 3.4 湿度数据分析 3.5 风向频率玫瑰图 3.6 计算风速均值的分布情况 4 ...

  5. python天气数据分析论文_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(2/2)...

    第9章--随机森林项目实战--气温预测(2/2) 第8章已经讲解过随机森林的基本原理,本章将从实战的角度出发,借助Python工具包完成气温预测任务,其中涉及多个模块,主要包含随机森林建模.特征选择. ...

  6. python天气数据分析可视化_python可视化爬虫界面之天气查询

    执行效果如下: from tkinter import * import urllib.request import gzip import json from tkinter import mess ...

  7. python天气数据分析论文_关于Python爬取天气数据的实例详解内容

    importcsvimportsysimporturllib.requestfrom bs4 import BeautifulSoup #解析页面模块 importpygalimportcityinf ...

  8. 数据分析毕业设计 金融数据分析与可视化系统 - python 大数据

    文章目录 0 前言 1 金融风控 一.题目理解 1.1.题目概况 1.2数据概况 1.3预测指标 三.查看数据 四.分类指标计算示例 4.1混淆矩阵 4.2准确度 4.3precision(精确度), ...

  9. 毕设 - 天气数据分析与可视化 天气预测 lstm

    文章目录 0 前言 2 项目简介 3 开始分析 3.1 海洋对当地气候的影响 3.2 导入数据集 3.3 温度数据分析 3.4 湿度数据分析 3.5 风向频率玫瑰图 3.6 计算风速均值的分布情况 4 ...

  10. Python毕业设计 二手房数据分析与可视化 - 大数据 网络爬虫

    文章目录 1 前言 1 课题背景 2 实现效果 二手房基本信息可视化分析 二手房房屋属性可视化分析 3 数据采集 **链家网网站结构分析** **网络爬虫程序关键问题说明** 4 数据清洗 原始数据主 ...

最新文章

  1. 关于安卓你不知道的6件事
  2. 区块链+5G=智慧城市?
  3. android中互斥的控件,Android控件之Radiobutton与RadioGroup
  4. Sql Server之旅——第十二站 sqltext的参数化处理
  5. 自己创业做电商,应该怎么做?
  6. [FFmpeg] 常用命令
  7. android 编写优质代码,GitHub - RayFantasyStudio/iCode-Android: 为开发者而生,提供在线代码存放,展示你优秀代码的平台...
  8. web - 前端特效和博客
  9. Echart中series自定义formatter文字样式
  10. 大数据技术之Hive 第6章 查询
  11. 公司总经理KPI考核指标
  12. [原创] 简单的几个步骤`皮肤变得晶莹剔透
  13. 《我的世界》游戏攻略:如何一建生成房屋指令?
  14. stm32——自定义HID设备
  15. 新建STM32F427IIH标准库工程
  16. python爬虫之:IP代理池开源项目讲解
  17. 从《士兵突击》看职场之现象
  18. java技术:输入拼音自动提示汉字的方法
  19. PhiloGL学习(6)——深情奉献:快乐的一家
  20. 天津大学计算机在线作业答案,[天津大学]18秋《应用统计学》在线作业

热门文章

  1. phpstorm php代码补全,基本代码补全:补全名称和关键字
  2. phpnow开启mysqli扩展
  3. 如何正确获取支付宝网页支付的APPID、私钥、支付宝公钥
  4. 三剑客python自学笔记--02
  5. IMAP4协议介绍nbsp;工作原理
  6. 「python爬虫之路day9」:实战之使用正则表达式爬取抓狂网,古诗文网信息
  7. 什么是常量,常量的类型有哪些?
  8. mediapipe系列之一脸部特征点标记
  9. 【mmDetection框架解读】入门篇一、各组件解读,配置文件解读
  10. TeXmacs 中文输入问题