浙江省气象数据处理与分析报告

浙江省气象数据处理与分析报告

一、题目要求:

(1)从[中央气象台官方网站(http://www.nmc.cn/);浙江气象台(http://zj.weather.com.cn/)]爬取所采用的数据
(2)对最近24小时各个城市的天气数据,包括时间点(整点)、整点气温、整点降水量、风力、整点气压、相对湿度等数据进行处理和分析
(3)使用echarts对数据进行可视化

二、数据爬取

使用工具

(1)Google Chrome
(2)Pycharm 2018.3.3
(3)python语言

爬取目标

在这里插入图片描述
对于这道题目,需要对浙江省最近24个小时内各个城市的天气数据进行收集,当我进入到浙江气象台网站(http://zj.weather.com.cn/),发现每个城市的气象网址的链接、排版都没有统一的格式,是一个个独立的网站,不知道如何下手,但当我再进入中央气象台官方网站(http://www.nmc.cn/),欣喜的发现,通过切换省份,可以发现传回的数据与请求的URL之间具有一定的关系
http://www.nmc.cn/publish/forecast/AZJ/城市编号.html --> 某个浙江省城市的天气数据,其中AZJ为浙江省的三位编码
例如杭州的天气数据为http://www.nmc.cn/publish/forecast/AZJ/hangzhou.html
例如宁波的天气数据为http://www.nmc.cn/publish/forecast/AZJ/ningbo.html
至此,我要爬取数据的网站就已经找到了
但是还有一个问题,在这个网页中,只显示每隔三小时的气象数据,所以对于每一个城市,这里只爬取了一天中8个整点的气象数据。

爬虫方法

我选择的是用requests、BeautifulSoup、json来分析爬取网页,
直接右键->检查 或者按F12调出窗口
选择Network,按ctrl+r 刷新页面
在这里可以找到当前真正的request URL,下图以杭州市的气象数据为例,这个网页的Request URL为http://www.nmc.cn/publish/forecast/AZJ/hangzhou.html,也就是说网页的链接就是它真正的request URL
在这里插入图片描述
通过上图可以看到,网页是通过get请求来获取内容,所以待会儿可以使用requests.get来获取网页

为了获取浙江省所有城市的天气信息,我需要知道浙江省所有城市所对应城市编码
在这里插入图片描述
通过查看network中的信息,我发现了一个Request URL:http://www.nmc.cn/rest/province/AZJ
在这里插入图片描述
打开这个网页,我发现它将浙江省的所有城市都存放在了以{“code”:“xxxxx”,“province”:“浙江省”,“city:”:“xx”,“url”:“/publish/forecast/AZJ/xxxx.html”}为统一格式的数组中,其中每个城市都对应一个城市编码,例如杭州的气象信息网站则通过http://www.nmc.cn/publish/forecast/AZJ/58457.html获取
通过直接访问请求URL,传回的响应的数据为json格式,一种轻量级的数据交换格式

那我要怎么获取呢?
我找到了一个博客,在其中发现了提取方法
在这里插入图片描述
仿照着它的方法,我编写了获取浙江省城市编码的爬虫代码
至此,爬取数据的方法总结为以下:
1.在http://www.nmc.cn/rest/province/AZJ中将浙江省的所有城市编码获取下来
2.根据城市编码生成要访问城市气象数据的url
3.获取需要的气象信息
4.写入文档

爬虫过程

当我在pycharm中导入requests包时,问题又出现了,发现提示报错ModuleNotFoundError: No module named requests,但是我已经使用pip install requests安装了pip,然后我查阅了百度以后,去我pycharm下载的目录找到C:\Users\lenovo\AppData\Local\Programs\Python\Python37\Lib\site-packages,发现在这个目录下已经有了requests,如果一切顺利的话,在pycharm中的lib的site-packages文件夹里应该也有requests
在这里插入图片描述
但当我打开pycharm,并没有requests加入,同时import requests仍然报错。直到我看到一篇博客,才解决了这个问题,具体方法是直接file->settings->project interpreter->latest右侧的+号->搜索requests->install package 成功!有可能是因为我原先装有多个版本的Python,与pycharm中的python版本不存在导致的,不过通过上面的方法直接在python里面真的是太方便了
在这里插入图片描述
使用同样的方法下载BeautifulSoup4和jsonpath
在这里插入图片描述
当我试着通过requests.get获取网页,用print去打印网页内容时发现有乱码,加上这一行代码就好啦response.encoding = ‘utf-8’

爬取城市编码:

在这里插入图片描述
可以看到此时citylist中存放的就是城市编码
这里用到的是json提取数据,本来是想用BeautifulSoup来提取数据的,但是url返回的是json格式的数据,用这个方法更合适

Python注释快捷键是ctrl+/ 写代码的时候还忘记特意百度的

爬取每个城市的气象数据

在这里插入图片描述
以提取杭州市周日5:00的气压为例
在要提取的数据上点击右键->检查->此时会显示出开发者见面,高亮处标示元素即为检查元素(1015.8hPa),对其右键->Copy->Copy selector
在这里插入图片描述
将copy的代码粘贴到soup.select(‘’)的引号中即可

至此会发现提取的不仅仅是气压的数据,而是一段目标元素的 HTML 代码
可以通过以下的办法提取我需要的数据
在这里插入图片描述
这样我就能通过遍历citylist中的城市编码,将所有页面中的气象信息全部提取到
在这里插入图片描述

写入文件

写入文件则是python中的一个基本操作,就不在赘述了
但是对我的数据需要注意的是当我查询到玉环这个城市的时候发现报错了,我打开了它的网页发现数据是有缺失的
在这里插入图片描述
这就需要在存入文件的时候判断一下是否取到数据,如果没有取到数据,则将数据改为null
有些城市的整点降水为0,在页面中则会显示“-”,所以当提取到“-”时,则把存入的整点降水数据改为0.0mm
在这里插入图片描述
在这里插入图片描述

完整代码

import requests                 # 加载 requests 库,用于网页获取
from bs4 import BeautifulSoup   # 加载 BeautifulSoup 库,用于解析获取的网页
import json
import jsonpath


url="http://www.nmc.cn/rest/province/AZJ"
response =requests.get(url)
html_str = response.content.decode()

# 把json格式字符串转换成python对象
jsonobj = json.loads(html_str)

# 从根节点开始,匹配code节点
citylist = jsonpath.jsonpath(jsonobj,'$..code')

# print(citylist)

for city in citylist:
    url = 'http://www.nmc.cn/publish/forecast/AZJ/' + city + ".html"
    strHtml = requests.get(url)
    strHtml.encoding = strHtml.apparent_encoding  # 指定源网页编码方式作为文字解码方式
    soup = BeautifulSoup(strHtml.text, 'lxml')
    #data = [[]]
    # 城市名称
    city_name = soup.select('#breadcrumb > li.active')

    for i in range(1, 9):  # 将 Copy selector 代码粘贴在(‘’)内
        # 整点时间
        city_time = soup.select('#day0 > div:nth-child(' + str(i) + ') > div:nth-child(1)')
        # 整点气温
        city_temperature = soup.select('#day0 > div:nth-child(' + str(i) + ') > div:nth-child(4)')
        # 整点降水量
        city_rain = soup.select('#day0 > div:nth-child(' + str(i) + ') > div:nth-child(3)')
        # 整点风速
        city_wind = soup.select('#day0 > div:nth-child(' + str(i) + ') > div:nth-child(5)')
        # 整点气压
        city_pressure = soup.select('#day0 > div:nth-child(' + str(i) + ') > div:nth-child(7)')
        # 整点相对湿度
        city_humidity = soup.select('#day0 > div:nth-child(' + str(i) + ') > div:nth-child(8)')
        # print(city_name[0].get_text()[0:2], " ", city_time[0].get_text()[-5:], " ", city_temperature[0].get_text(), " ",
        #       city_rain[0].get_text(), " ", city_wind[0].get_text(), " ", city_pressure[0].get_text(), " ",
        #       city_humidity[0].get_text())

        #写入文件
        with open("zhejiang_weather.txt", "a",encoding='utf-8') as f:
            if city_name:
                f.write("%s\t" % city_name[0].get_text()[0:2])
            else:
                f.write("null\t")

            if city_time:
                f.write("%s\t" % city_time[0].get_text()[-5:])
            else:
                f.write("null\t")

            if city_temperature:
                f.write("%s\t" % city_temperature[0].get_text())
            else:
                f.write("null\t")
            if city_rain:
                if(city_rain[0].get_text()=='-'):
                    f.write("0.0mm\t")
                else:
                    f.write("%s\t" % city_rain[0].get_text())
            else:
                f.write("null\t")

            if city_wind:
                f.write("%s\t" % city_wind[0].get_text())
            else:
                f.write("null\t")

            if city_pressure:
                f.write("%s\t" % city_pressure[0].get_text())
            else:
                f.write("null\t")

            if city_humidity:
                f.write("%s\t" % city_humidity[0].get_text())
            else:
                f.write("null\t")
            f.write("\n")

爬取结果

在这里插入图片描述
一共是632条数据,79个城市

三、数据上传

数据导入到虚拟机

工具:
Linux: Ubuntu 16.04
Hadoop 3.1.3
Hive 3.1.2
我把爬取的数据存放在了zhejiang_weather.txt中
由于数据在虚拟机外,所以先要把数据放到虚拟机中,直接拖入就好了
我把数据放在了Downloads目录中

首先新建一个用于运行这次大作业的目录bigdata
并给hadoop用户赋予针对bigdata目录的各种操作权限
在这个目录中创建一个dataset目录,用于保存数据集
在这里插入图片描述
将爬取的数据从Downloads目录中复制到新创建的dataset目录中
在这里插入图片描述
此时可以看到在Downloads/bigdata/dataset目录中有我爬取的数据的txt文档
可以执行以下命令取出前16条记录看看
在这里插入图片描述
这就是浙江省其中前两个城市一天中每三个小时的五个气象数据
可以看到,每条记录都包含7个字段,数据集中的字段及其含义如下:
city_name 浙江省城市名称
city_time 整点时间
city_temperature 整点气温
city_rain 整点降水量
city_wind 整点风速
city_pressure 整点气压
city_humidity 整点相对湿度

数据清洗

为了方便我后来把存放数据的txt文件zhejiang_weather.txt重命名为zhejiang.txt

在将数据上传到hdfs之前,需要对数据进行清洗
我是通过编写shell脚本文件和hive来对数据进行清洗的
一共有以下几种需要清洗的数据:
1.新增加一个字段id,属于自增的类型,每条记录增加1,这样可以保证每条记录具有唯一性
2.在爬取数据的时候已经发现,对于玉环这个城市的数据,由于爬取不到,会显示null
在这里插入图片描述
需要对缺失值进行处理,删除玉环这个城市的记录
2.使用substr语句截取数据
因为数据库表中的数字数据类型包括以下几种
在这里插入图片描述
为了数据分析的时候方便进行排序,需要经字符类型的数据改为数字类型数据进行存储,需要删掉每个数据后的单位符号
在这里插入图片描述
整点时间则可以使用time类型来存储
在这里插入图片描述
使用vim编辑器新建了一个dealdata.sh脚本文件,在这个脚本文件中加入下面代码:
在这里插入图片描述
在这里插入图片描述
使用awk可以逐行读取输入文件,并对逐行进行相应操作。其中,-F参数用于指出每行记录的不同字段之间用什么字符进行分割,这里是用“\t”进行分割。处理逻辑代码需要用两个英文单引号引起来。 i n f i l e 是输入文件的名称,我们这里会输入 z h e j i a n g . t x t , infile是输入文件的名称,我们这里会输入zhejiang.txt, infile是输入文件的名称,我们这里会输入zhejiang.txtoutfile表示处理结束后输出的文件名称,后面会使用data.txt作为输出文件名称。

处理完以后就会是以下的样子,同时删除了存在null数据的记录
在这里插入图片描述
清洗后一共有624条数据,共78个城市

四、导入数据库

下面要把data.txt中的数据最终导入到数据仓库Hive中。为了完成这个操作,我们会首先把data.txt上传到分布式文件系统HDFS中,然后,在Hive中创建一个外部表,完成数据的导入。

启动hdfs

在这里插入图片描述

把data.txt上传到HDFS中

把Linux本地文件系统中的data.txt上传到分布式文件系统HDFS中,存放在HDFS中的“/bigdata/dataset”目录下
1.首先在HDFS的根目录下面创建一个新的目录bigdata,并在这个目录下创建一个子目录dataset
在这里插入图片描述
2.把Linux本地文件系统中的data.txt上传到分布式文件系统HDFS的“/bigdata/dataset”目录下
在这里插入图片描述
3.查看一下HDFS中的data.txt的前10条记录来判断是否上传成功
在这里插入图片描述

在hive上创建数据库

因为需要借助于MySQL保存Hive的元数据,所以,要先启动MySQL数据库
在这里插入图片描述
这条命令在任何目录下都可以执行

因为hive是基于hadoop的数据仓库,使用HiveQL语言撰写的查询语句,最终都会被Hive自动解析成MapReduce任务由Hadoop去具体执行,因此,需要启动Hadoop,然后再启动Hive。
在之前的课堂上已经在虚拟机上安装好了hive
由于已经配置好了PATH,直接使用hive即可进入
在这里插入图片描述
在使用hive的时候,会发现每次执行,都会跳出大量的info信息,会干扰查看
这里有一个小技巧,可以通过修改日志配置文件中的日志级别,让日志中的info信息不显示
在这里插入图片描述
再次进入hive时发现只会报错WARN等信息,INFO信息不再显示,查看方便多了
还有一个需要注意的点,hive中执行的语句最后要有; 很多时候总是会忘记

在hive中创建一个数据库db

首先查看一下当前已经创建了哪些数据库
在这里插入图片描述
使用create database db创建一个新的数据库db
在这里插入图片描述

创建外部表

在数据库db中创建一个外部表wea,它包含字段:
id 序列号
city_name 浙江省城市名称
city_time 整点时间
city_temperature 整点气温
city_rain 整点降水量
city_wind 整点风速
city_pressure 整点气压
city_humidity 整点相对湿度

CREATE EXTERNAL TABLE db.wea(id INT,city_name STRING,city_time STRING,city_temperature decimal(20,1),city_rain decimal(20,1),city_wind decimal(20,1),city_pressure decimal(20,1),city_humidity decimal(20,1)) COMMENT 'Welcome to database db!' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/bigdata/dataset';

创建好表以后使用select 查看前10个数据
在这里插入图片描述
建表成功!

五、Hive数据分析

查询表中每个城市的气象数据
Select * from wea;
在这里插入图片描述
在这里插入图片描述
查询每个城市24h的平均气温、降水量、风速、气压、相对湿度

select city_name,avg(city_temperature),avg(city_rain),avg(city_wind),avg(city_pressure),avg(city_humidity) from wea group by city_name;

在这里插入图片描述
查询24h平均气温top20的城市

select city_name,avg(city_temperature) from wea group by city_name order by avg(city_temperature) desc  limit 20;

在这里插入图片描述
查询24h平均降水量top20的城市

select city_name,avg(city_rain) from wea group by city_name order by avg(city_rain) desc,city_name limit 20;

在这里插入图片描述
发现只有松阳在这24h之内下雨了

查询24h平均风速top20的城市

select city_name,avg(city_wind) from wea group by city_name order by avg(city_wind) desc,city_name limit 20;

在这里插入图片描述
查询24h平均气压top20的城市

select city_name,avg(city_pressure) from wea group by city_name order by avg(city_pressure) desc,city_name limit 20;

在这里插入图片描述
查询24h平均相对湿度top20的城市

select city_name,avg(city_humidity) from wea group by city_name order by avg(city_humidity) desc,city_name limit 20;

在这里插入图片描述
查询杭州不同整点的天气情况

select city_time,city_temperature,city_rain,city_wind,city_pressure, city_humidity from wea where city_name='杭州';

在这里插入图片描述

六、Hive和mysql数据互导

使用Sqoop将数据从Hive导入MySQL

下载sqoop

按照厦门大学数据库实验中《Ubuntu安装Sqoop》这一节的步骤安装sqoop
进入当前用户的用户目录的下载目录
解压安装文件
修改文件名
修改文件夹属主
在这里插入图片描述
在这里插入图片描述
修改配置文件sqoop-env.sh
将sqoop-env-template.sh复制一份并命名为sqoop-env.sh
编辑sqoop-env.sh
在这里插入图片描述
在这里插入图片描述
配置环境变量
打开当前用户的环境变量配置文件
在这里插入图片描述
保存该文件,退出vim编辑器
执行命令让配置文件立即生效
在这里插入图片描述
将mysql驱动包拷贝到$SQOOP_HOME/lib
切换到下载路径
解压mysql驱动包
在这里插入图片描述
在这里插入图片描述
测试与MySQL的连接
启动mysql服务
测试sqoop与MySQL之间的连接是否成功
mysql的数据库列表显示在屏幕上表示连接成功
在这里插入图片描述

Hive预操作

启动MySQL、Hadoop和Hive
因为前面已经启动了,这里就不再进行了
创建临时表wea1

CREATE EXTERNAL TABLE db.wea1(id INT,city_name STRING,city_time STRING,city_temperature decimal(20,1),city_rain decimal(20,1),city_wind decimal(20,1),city_pressure decimal(20,1),city_humidity decimal(20,1)) COMMENT 'Welcome to database db!' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/bigdata/dataset';

在这里插入图片描述
这个命令执行完以后,Hive会自动在HDFS文件系统中创建对应的数据文件
默认应该在“/user/hive/warehouse/database.db/wea1”
但是后来我通过命令查找了以下发现在hdfs://localhost:9000/bigdata/dataset
在这里插入图片描述
新建一个终端,执行命令查看一下,确认这个数据文件在HDFS中确实被创建了

将wea表中的数据插入到wea1
执行命令查询上面的插入命令是否成功执行
在这里插入图片描述
在这里插入图片描述

使用Sqoop将数据从Hive导入MySQL

启动Hadoop集群、MySQL服务,前面已经启动了,这里不再启动
1.登录mysql
在Linux系统中新建一个终端
使用root用户登录MySQL数据库
在这里插入图片描述
2.创建数据库
显示、使用、创建数据库
查看数据库的编码
在这里插入图片描述
3.创建表

在MySQL的数据库a中创建一个新表wea1,并设置其编码为utf-8
语句中的引号是反引号`,不是单引号’
创建成功后退出MySQL
CREATE TABLE `a`.`wea1` (`id` INT,`city_name` varchar(100),`city_time` varchar(20),`city_temperature` decimal(20,1),`city_rain` decimal(20,1), `city_wind` decimal(20,1),`city_pressure` decimal(20,1),`city_humidity` decimal(20,1)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4.导入数据
在这里插入图片描述

./bin/sqoop export --connect jdbc:mysql://localhost:3306/a --username root --password 123456 --table wea1 --export-dir '/bigdata/dataset' --fields-terminated-by '\t';

在这里插入图片描述
在这里插入图片描述
存放在mysql数据库a的表wea1中

七、windows下用navicat链接虚拟机MySQL数据库

启动虚拟机后,使用Xshell连接到虚拟机,登录数据库服务,创建一个test用户并授权
在这里插入图片描述
创建用户之后,刷新权限
重启数据库服务
进入到/etc/mysql,使用sudo cp my.cnf my.cnf.bak备份文件
在这里插入图片描述
使用root进入mysql.conf.d
更改mysqld.cnf中mysql的配置
将bind-address= 127.0.0.1这一行注释掉
在这里插入图片描述
在这里插入图片描述
使用ifconfig命令在linux查看mysql服务器IP地址
在这里插入图片描述
在navicate中连接数据库
在这里插入图片描述
成功啦!找到了我hive导入到虚拟机mysql中,存有数据的表a.wea1
在这里插入图片描述

八、使用echarts可视化

第一种方法是通过mysql查询出数据以后将数据更改成需要的格式直接复制到echart的实例demo中

图一:每个城市24h的平均气温、降水量、风速、气压、相对湿度

1.查询每个城市24h的平均气温、降水量、风速、气压、相对湿度将结果存放到/var/lib/mysql-files/1.txt

mysql -u root -p
use a;
select city_name,avg(city_temperature),avg(city_rain),avg(city_wind),avg(city_pressure),avg(city_humidity) from wea1 group by city_name into outfile '/var/lib/mysql-files/1.txt';

使用root权限登录进入到/var/lib/mysql-files,将查询到的数据复制到/home/hadoop/Downloads/bigdata/res
su root
cd /var/lib/mysql-files
cp -r 1.txt /home/hadoop/Downloads/bigdata/res

查询到的结果:
在这里插入图片描述

2.通过c++对查询到的数据进行格式的修改

在这里插入图片描述
这里在进行文件的读入时,需要将文件的编码进行修改,然后另存为为w1.txt
在这里插入图片描述
完整代码:

#include<bits/stdc++.h>
using namespace std;
const int N=100;
struct node{
	string cn;
	double ct;
	double cr;
	double cw;
	double cp;
	double ch;
}v[N];
int main()
{
	string city_name;
	string city_temperature;
	string city_rain;
	string city_wind;
	string city_pressure;
	string city_humidity;
	freopen("res/w1.txt","r",stdin);
	int idx=0;
	while (cin >> city_name >> city_temperature >> city_rain >>city_wind >> city_pressure >> city_humidity) {
		//cout<<city_name<<" "<<city_temperature <<" "<< city_rain << " " << city_wind << city_pressure << city_humidity << endl;
		double n1=atof(city_temperature.c_str());
		double n2=atof(city_rain.c_str());
		double n3=atof(city_wind.c_str());
		double n4=atof(city_pressure.c_str());
		double n5=atof(city_humidity.c_str());
		v[idx].cn=city_name;
		v[idx].ct=n1;
		v[idx].cr=n2;
		v[idx].cw=n3;
		v[idx].cp=n4;
		v[idx].ch=n5;
		idx++;
	}
	cout << "data:[";
	for(int i=0;i<idx-1;i++){
		cout << "'" << v[i].cn << "'" << ",";
	}
	cout << "'" << v[idx-1].cn << "']" << endl;
	
	cout << "data:[";
	for(int i=0;i<idx-1;i++){
		cout << "'" << v[i].ct << "'" << ",";
	}
	cout << "'" << v[idx-1].ct << "']" << endl;
	
	cout << "data:[";
	for(int i=0;i<idx-1;i++){
		cout << "'" << v[i].cr << "'" << ",";
	}
	cout << "'" << v[idx-1].cr << "']" << endl;
	
	cout << "data:[";
	for(int i=0;i<idx-1;i++){
		cout << "'" << v[i].cw << "'" << ",";
	}
	cout << "'" << v[idx-1].cw << "']" << endl;
	
	cout << "data:[";
	for(int i=0;i<idx-1;i++){
		cout << "'" << v[i].cp << "'" << ",";
	}
	cout << "'" << v[idx-1].cp << "']" << endl;
	
	cout << "data:[";
	for(int i=0;i<idx-1;i++){
		cout << "'" << v[i].ch << "'" << ",";
	}
	cout << "'" << v[idx-1].ch << "']" << endl;
}

修改完之后的格式:
在这里插入图片描述

3.将查询到的数据复制到echarts中

Echarts完整代码:

option = {
  title: {
    text: '每个城市24h的平均气温、降水量、风速、气压、相对湿度'
  },
  tooltip: {
    trigger: 'axis'
  },
  legend: {
    data: ['city_temperature', 'city_rain','city_wind','city_pressure','city_humidity']
  },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  toolbox: {
    feature: {
      saveAsImage: {}
    }
  },
  xAxis: {
    type: 'category',
    axisLabel: {
            interval:0,//代表显示所有x轴标签显示
            rotate:45, //代表逆时针旋转45度
            },
    data:['三门','上虞','东阳','临安','临海','丽水','义乌','乐清','云和','仙居','余姚','余杭','兰溪','北仑','嘉兴','嘉善','天台','奉化','宁波','宁海','安吉','定海','富阳','岱山','嵊州','嵊泗','平湖','平阳','庆元','建德','开化','德清','慈溪','文成','新昌','普陀','景宁','杭州','松阳','柯桥','桐乡','桐庐','椒江','武义','永嘉','永康','江北','江山','泰顺','洞头',' 浦江','海宁','海曙','海盐','淳安','温岭','温州','湖州','瑞安','磐安','绍兴','缙云','苍南','萧山','衢州','诸暨','象山',' 路桥','遂昌','金华','镇海','长兴','青田','黄岩','龙泉','龙港','龙游']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: 'city_temperature',
      type: 'line',
     data:['10.1875','9.675','10.4','9.9125','9.8','11.5875','10.6125','13.375','11.5375','10.5125','10.175','11.2875','10.25','10.2625','9.7625','10.0375','9.4','9.9375','10.1125','10.0625','9.5375','11.8375','10.3625','12.6875','9.7','12.5','8.8875','12.475','11.7875','10.475','10.4875','11.25','9.65','13.45','9.425','12.6875','11.4','10.1375','10.2125','10.15','10.3875','9.2','12.4125','9.4375','13.4875','11.425','9.4375','11.05','11.6625','13.525','9.9125','9','9.8875','10.425','12.425','12.15','14.175','9.3','14.0625','9.5375','10.0875','10.4875','13.175','11.25','10.9','10.0375','10.7875','11.875','10.275','11.0375','8.9375','9.35','12.5875','12.6125','10.775','13.6125','9.9125']
    },
    {
      name: 'city_rain',
      type: 'line',
      data:['0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0.2875','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0']
    },
    {
      name: 'city_wind',
      type: 'line',
      data:['5.025','3.0375','3.075','2.9125','5.35','2.825','5.225','9.2875','2.8125','3.05','5.2875','2.7375','2.8','6.45','6.95','4.5625','4.8875','4.9375','5.25','5.025','4.525','7.3375','2.775','7.4375','5.1875','9.7875','6.75','4.8875','7','2.7625','3.15','2.4625','5.1375','2.9125','2.9625','8.9','2.7625','2.875','2.6','2.8625','4.4625','2.975','6.8625','2.8375','3.075','2.925','5.075','7.175','2.8875','13.075','5.125','6.55','5.175','7.0125','2.9625','10.1375','2.875','4.5125','6.775','2.875','5.3375','3.025','5.2125','2.7125','6.8875','4.9625','6.6','5.2625','2.5375','3.0875','5.15','2.625','3.075','5.1875','5.425','4.9125','2.7125']
    },
    {
      name: 'city_pressure',
      type: 'line',
      data:['1000.11','1011.89','989.587','990.125','1000.9','979.325','996.475','1005.81','943.775','972','1011.83','1021.56','992.862','1019.81','1023.04','1022.5','981.888','1002.79','1011.86','997.438','1001.62','1021.85','1001.67','1021.7','988.312','1021.74','1023.34','1007.64','933.962','993.25','980.925','1015.99','1018.01','954.75','983.825','1021.81','935.062','1015.05','966.775','1015.67','1022.26','999.638','1013.29','988.788','987.225','994.975','1014.56','985.5','932.125','1022.2','1000.79','1022.59','1013.49','1023.35','977.038','1012.36','995.788','1019.08','1010.64','972.325','1012.19','984.237','991.425','1015.7','994.575','998.788','1017.7','1009.86','960.337','992.475','1017.66','1019.21','970.625','1003.56','928.612','1005.58','988.638']
    },
    {
      name: 'city_humidity',
      type: 'line',
      data:['76.125','79.45','71.3875','68.5625','76.7125','79.9875','69.4','63.75','81.975','67.9375','72.5625','72.6375','76.9375','78.775','75.1625','76.85','72.0375','71.9125','71.75','75.7375','67.875','76.4125','71.6625','77.8','80.9125','75.825','78.425','78.325','75.375','76.5625','74.675','67.3','81.575','77.3875','73.3125','74.7125','76.775','68.175','73.5625','79.5125','70.55','74.5125','64.9875','79.875','73.9','71.275','82.55','78.0375','79.8875','72.7625','72.375','77.3','80.7375','77.8','66.3625','69.075','69.775','72.4875','69.7','78.4625','73.4625','75.275','79','70.5','78.2375','73.4375','78.9625','79.775','73.05','74.7375','80.1625','71.4','70.6125','74.55','75.2625','74.6875','77.7']
    }
  ]
};
4.可视化结果

在这里插入图片描述
1-1每个城市24h平均气温、降水量、风速、气压、相对湿度
在这里插入图片描述
1-2通过鼠标可以查看一个城市的详细数据
在这里插入图片描述
1-3每个城市24h平均气温、降水量、风速、相对湿度
在这里插入图片描述
1-4每个城市24h平均气温
在这里插入图片描述
1-5每个城市24h降水量
在这里插入图片描述
1-6每个城市24h风速
在这里插入图片描述
1-7每个城市24h气压
在这里插入图片描述
1-8每个城市24h相对湿度

其他可视图同理,完整项目详见github
https://github.com/XIAOBOCXY/Zhejiang-Meteorological-Data-Processing
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值