实训指导书

一、实训目的

利用python从指定接口爬取广东省各个地市的气象数据,存储并进行数据分析和可视化

二、实训任务列表

给定以下3个接口:

1.http://www.nmc.cn/f/rest/province ,用于获取全国各省份数据

2.http://www.nmc.cn/f/rest/province/省份编码,用于获取某个省份的城市数据

3.http://www.nmc.cn/f/rest/passed/城市编号,用于获取某城市最近24小时天气数据

示例:省份编码需从接口1,例如广东省编码为ABC,城市编码利用省份编码从接口2获取,如广州市编号为123456,气象数据利用城市编码从接口3获取

1. 利用python编程从以上3个接口爬取数据,在本地存储为csv文件,csv文件包括:省份数据(provice.csv)、地市数据(city.csv)、广东省各地市气象数据(weather.csv),同时将3个csv文件数据存入mysql数据库中

2. 从数据库读取数据,求各个城市过去24小时的温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)、最大值、最小值、平均值、众数

3. 计算广州,深圳,佛山三个城市下午13:00温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)的平均值

4. 分别求各个城市过去24小时的温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)的top10,用matplotlib进行画图,使用展示的图类型为4种

5. 利用线性回归模型作图,显示温度和湿度二者之间的关联

6. 加分项:利用地图进行展示

一.利用python编程从以上3个接口爬取数据

接口:http://www.nmc.cn/f/rest/province

数据格式如下:

爬取(provice.py)省份数据生成(provice.csv)

# -*- coding: utf-8 -*-
import csv
import json
import requests#全国各省的数据
url = "http://www.nmc.cn/f/rest/province"
strhtml = requests.get(url)  #获取响应结果,构造一个向服务器请求资源的Request对象
province = json.loads(strhtml.text)  #json.loads 用于解码 JSON 数据,返回 Python 字段的数据类型#mode='w'打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
fo = open('province.csv', 'w', newline='', encoding='utf-8-sig')
header = ['code', 'name', 'url']
writer = csv.DictWriter(fo, header)
writer.writeheader()#写入表头
writer.writerows(province)
fo.close()

province.csv表的数据如下:

我所在地是广东,所以我选择 广东省的城市数据(AGD)

接口:http://www.nmc.cn/f/rest/province/AGD

数据格式如下:

爬取(city.py)城市数据生成(city.csv)

# -*- coding: utf-8 -*-
import csv
import json
import requests#广东省的城市数据(AGD)
url = 'http://www.nmc.cn/f/rest/province/AGD'
strhtml = requests.get(url)
city = json.loads(strhtml.text)fo = open('city.csv', 'w', newline='', encoding='utf-8-sig')
header = ['code', 'province', 'city','url']
writer = csv.DictWriter(fo, header)
writer.writeheader()
writer.writerows(city)
fo.close()

city表的数据格式如下:

爬取(weather.py)广东省各地市气象数据生成(weather.csv)

import urllib.request
import csv
import pandas as pd#广东省的城市数据(AGD)
url = 'http://www.nmc.cn/f/rest/province/AGD'
strhtml = urllib.request.urlopen(url) #获取响应结果
GDweather = strhtml.read().decode('utf-8') #进行转码并设置为变量“str”的值
GDweather = eval(GDweather) #将字符串转换为代码执行
for i in range(len(GDweather)):weather = GDweather[i]page = weather["code"]  # 获取城市编号city = weather["city"]  # 获取城市名province = weather["province"]  # 获取省份url = "http://www.nmc.cn/f/rest/passed/" + page  # 拿到省内具体城市气候数据strhtml = urllib.request.urlopen(url)cityweather = strhtml.read().decode('utf-8')cityweather = eval(cityweather)weather = []for i in range(len(cityweather)):GD = cityweather[i]new_code = {"code":page}new_city = {"city":city}new_provice = {"province": province}GD.update(new_code) #字典覆盖GD.update(new_city)GD.update(new_provice)weather.append(GD) #往weather = [] 这个空数组中添加从GD中取得的元素# mode='a+'表示在已有数据基础上添加新数据,并不覆盖已有数据with open("weather.csv", "a", encoding='utf-8-sig', newline="") as fo:header = ["code", "province", "city", "rain1h", "rain24h", "rain12h", "rain6h","temperature", "tempDiff", "humidity", "pressure","windDirection", "windSpeed", "time"]writer = csv.DictWriter(fo, header)writer.writeheader()writer.writerows(weather)fo.close()# 数据处理,将weather.csv表,去除重复表头
frame=pd.read_csv('F:\大数据基础实训\weather.csv',engine='python')
data = frame.drop_duplicates(subset=['code','province','city','rain1h','rain24h','rain12h','rain6h','temperature','tempDiff','humidity','pressure','windDirection','windSpeed','time'], keep = False, inplace=False)
data.to_csv('F:\大数据基础实训\weather.csv', encoding='utf8')

weather表的数据格式如下:

将生成的3个csv文件中的数据分别存入到mysql中

需要先在Navicat中建数据库,我给这个数据库起名为bigdata,然后先在数据库中建3个表,每个表都要有一个和csv文件对应的表头,格式如下:

​​​​​​

注意:

在weather.csv中的第一列是序号,所以在sql中建weather表的时候也要给第一列起个名,我给它起名为 序号

代码如下:
import csv
import pymysqldef read_csv(file_path):with open(file_path, 'r', encoding='utf-8') as f:reader = csv.reader(f)content = list(reader)[1:]return contentdef insert_data(table_name, data):# 与数据库建立连接conn = pymysql.connect(host='localhost', user='root', password='123456', database='bigdata', charset='utf8')cursor = conn.cursor()  # 创建游标对象# 组装插入数据的SQL语句sql = "insert into {} values".format(table_name) + str(tuple(data))cursor.execute(sql)  # 执行插入数据的SQL语句conn.commit()  # 提交数据cursor.close()  # 关闭游标conn.close()  # 关闭数据库连接# 读取并插入Province表数据
province_data = read_csv('F:\大数据基础实训\province.csv')
for data in province_data:insert_data('province', data)# 读取并插入City表数据
city_data = read_csv('city.csv')
for data in city_data:insert_data('city', data)# 读取并插入Weather表数据
weather_data = read_csv('weather.csv')
for data in weather_data:insert_data('weather', data)

 存入数据库成功!! 

如下:

二.从数据库读取数据,求各个城市过去24小时的温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)、最大值、最小值、平均值、众数

从数据库读取数据各个城市过去24小时的温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)的最大值、最小值、平均值 。

import pymysql
import csv
#打开数据库连接
db = pymysql.connect(host='localhost',user='root',password='123456',database='bigdata',charset='utf8')# print("从数据库读取数据,求各个城市过去24小时的温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)、最大值、最小值、平均值")
cursor = db.cursor()    #使用cursor()方法创建一个游标对象cursor
cursor.execute("SELECT ""city,""AVG(temperature) as 温度平均值,""MAX(temperature) as 温度最大值,""MIN(temperature) as 温度最小值,""AVG(humidity) as 湿度平均值,""MAX(humidity) as 湿度最大值,""MIN(humidity) as 湿度最小值,""AVG(pressure) as 气压平均值,""MAX(pressure) as 气压最大值,""MIN(pressure) as 气压最小值,""AVG(windSpeed) as 风速平均值,""MAX(windSpeed) as 风速最大值,""MIN(windSpeed) as 风速最小值 FROM weather GROUP BY city") #使用 execute()方法执行SQL查询
data = cursor.fetchall()    #使用fetchall()方法获取所有的数据,以元组形式返回#关闭数据库连接
db.close()with open("max-min-avg.csv", "w+", newline="", encoding='utf-8-sig') as file:header = ('城市', '温度平均值', '温度最大值', '温度最小值', '湿度平均值','湿度最大值', ' 湿度最小值', '气压平均值', '气压最大值','气压最小值', '风速平均值', '风速最大值', '风速最小值')pen = csv.writer(file)pen.writerow(header)# 遍历data中的每一行,并且转换为列表格式 (默认 tuple)for i in data:a = list(i)pen.writerow(a)
max-min-avg.csv表数据如下:

从数据库读取数据,广东省各个城市过去24小时的温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)的众数。
代码如下:
import pymysqlconn = pymysql.connect(host='localhost', user='root', passwd='123456', db='bigdata', port=3306, charset='utf8')
cursor = conn.cursor()sql = "SELECT city, temperature, humidity, pressure, windSpeed FROM weather WHERE time >= DATE_SUB(NOW(), INTERVAL 1 DAY)"
cursor.execute(sql)rows = cursor.fetchall()from statistics import modecities = {}
for row in rows:city, temperature, humidity, pressure, windSpeed = rowif city not in cities:cities[city] = {}cities[city]['temperature'] = cities[city].get('temperature', []) + [temperature]cities[city]['humidity'] = cities[city].get('humidity', []) + [humidity]cities[city]['pressure'] = cities[city].get('pressure', []) + [pressure]cities[city]['windSpeed'] = cities[city].get('windSpeed', []) + [windSpeed]result = []
for city in cities:temperature_mode = mode(cities[city]['temperature'])humidity_mode = mode(cities[city]['humidity'])pressure_mode = mode(cities[city]['pressure'])windSpeed_mode = mode(cities[city]['windSpeed'])result.append([city, temperature_mode, humidity_mode, pressure_mode, windSpeed_mode])import csvwith open('zhongshu.csv', 'w', newline='') as f:writer = csv.writer(f)writer.writerow(['城市', '温度众数', '湿度众数', '气压众数', '风速众数'])writer.writerows(result)
zhongshu.csv的数据如下:

三. 计算广州,深圳,佛山三个城市下午13:00温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)的平均值

代码如下:

import pymysql
import csv
#打开数据库连接
db = pymysql.connect(host='localhost',user='root',password='123456',database='bigdata',charset='utf8')# 计算广州,深圳,佛山三个城市下午14:00温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)的平均值
sor = db.cursor()
sor.execute("SELECT ""AVG(temperature) as 平均温度,""AVG(humidity) as 平均湿度,""AVG(pressure) as 平均气压,""AVG(windSpeed) as 平均风速 ""FROM weather  where city in('广州','深圳','佛山') and time = '2023-6-25 13:00'")
data = sor.fetchall()
print(data)# 关闭数据库连接
db.close()

运行结果如下:

四. 分别求各个城市过去24小时的温度(temperature)、湿度(humidity)、气压(pressure)、风速(windSpeed)的top10,用matplotlib进行画图,使用展示的图类型为4种

1.先求不同指标的top10,存为csv文件。代码如下:

import pymysql
import csvdb = pymysql.connect(host='localhost', user='root', password='123456', database='bigdata', charset='utf8')data = {'温度': 'temperature','湿度': 'humidity','气压': 'pressure','风速': 'windSpeed'
}for key, value in data.items():cursor = db.cursor()cursor.execute(f"SELECT city, {value} FROM weather GROUP BY city ORDER BY {value}+0 DESC LIMIT 10;")result = cursor.fetchall()with open(f"top10-{value}.csv", "a+", newline="", encoding='utf-8-sig') as file:header = ('city', value)pen = csv.writer(file)pen.writerow(header)for i in result:a = list(i)pen.writerow(a)db.close()

csv文件,分别为(如下图):

2.用matplotlib进行画图,使用展示的图类型为4种。(这里我用折线图、柱状图,饼图,散点图)。

  •  用各个城市过去24小时的温度的top10,作柱状图,代码如下:

import pandas as pd
import matplotlib.pyplot as plt
#如遇中文显示问题可加入以下代码
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 指定默认字体['SimHei']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#最方便的写法
frame = pd.read_csv('F:/大数据基础实训/top10-temperature.csv', engine='python')fig, ax = plt.subplots(figsize=(7,4), dpi=100)
x = frame['city']
y = frame['temperature'] #直接拿
# 柱状图 0.5是柱子的大小,edgecolor是柱子周边的颜色
bar = plt.bar(x, y, 0.5,color='skyblue', edgecolor='gray')# 设置标题,y=1.05表示标题距离图上边框的距离
ax.set_title('各个城市过去24小时温度(temperature)的top10',fontsize=14,y=1.05)
# 设置Y坐标轴标题,字体颜色的深浅值越大颜色越深alpha = 0.4,rotation=300可以调整Y坐标的角度
ax.set_ylabel("温度",fontsize = 10,alpha = 0.4,rotation=360)
ax.yaxis.set_label_coords(-0.02,1.05) #温度的位置
# 设置Y轴区间
ax.set_ylim(25,40)
# 设置X坐标轴标题
ax.set_xlabel("城市",fontsize = 9,color = 'black',alpha = 0.4,rotation=360)
ax.set_xlim(-1,10)
# 显示数据标签
plt.bar_label(bar, label_type='edge')
# 边框隐藏
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# ax.spines['bottom'].set_visible(False)
# ax.spines['left'].set_visible(False)
plt.show()

运行结果如下:

  • 用各个城市过去24小时的湿度的top10,作折线图,代码如下:

import matplotlib.pyplot as plt
import pandas as pd
#如遇中文显示问题可加入以下代码
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
frame = pd.read_csv('F:/大数据基础实训/top10-humidity.csv', engine='python')
#准备绘制数据
fig, ax = plt.subplots(figsize=(8,4), dpi=100)
x = frame['city']
y = frame['humidity'] #直接拿
# "g" 表示红色,marksize用来设置'D'菱形的大小
plt.plot(x, y, "g", marker='D', markersize=3, label="湿度")
#绘制坐标轴标签
plt.xlabel("城市")
plt.ylabel("humidity")
plt.title("各个城市过去24小时湿度(humidity)的top10",y=1.02)
# plt.xlim((-1,10))#坐标轴设定
#显示图例
plt.legend(loc="upper right")
#调用 text()在图像上绘制注释文本
#x1、y1表示文本所处坐标位置,ha参数控制水平对齐方式, va控制垂直对齐方式,str(y1)表示要绘制的文本
for x1, y1 in zip(x, y):plt.text(x1, y1, str(y1), ha='center', va='bottom', fontsize=7)plt.show()

运行结果如下:

  • 用各个城市过去24小时的气压的top10,作散点图,代码如下:

# coding=utf-8
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体,解决中文乱码
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
frame = pd.read_csv('F:/大数据基础实训/top10-pressure.csv', engine='python')fig, ax = plt.subplots(figsize=(9,4), dpi=100)
city = frame['city']
pressure = frame['pressure']
plt.xlabel("城市",fontsize = 12,color = 'black',alpha = 0.4,rotation=360)
plt.ylabel("pressure",fontsize = 12,color = 'black',alpha = 0.5,rotation=360)
ax.yaxis.set_label_coords(-0.02,1.05)
ax.set_ylim(980,1050)
# 设置标题,y=1.05表示标题距离图上边框的距离
ax.set_title('各个城市过去24小时气压(pressure)的top10',fontsize=14,y=1.05)
plt.scatter(city,pressure)
plt.show()

运行结果如下:

  • 用各个城市过去24小时的风速的top10,作饼图,代码如下:

import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题frame = pd.read_csv('F:/大数据基础实训/top10-windSpeed.csv', engine='python')
y = frame['city']
x = frame['windSpeed']
explode = (0.1, 0, 0, 0,0,0,0,0,0,0) #它指定偏移每个楔形的半径的分数
colors = ['r', 'g', 'skyblue', 'c', 'pink', 'yellow', 'aquamarine',"#377eb8","#4daf4a","#984ea3"]
fig,ax1 = plt.subplots() #返回一个包含figure和axes对象的元组,将元组分解为fig和ax两个变量。
#绘制饼状图,labels数据对应标签,autopct用于指定每个扇形块标注文本的样式,比如:定义百分数精度,shadow阴影,startangle起始角度
ax1.pie(x, explode=explode,colors = colors,labels=y, autopct='% 1.5f %%',shadow=True, startangle=90)ax1.axis('equal')#让圆更像圆
ax1.set_title('各个城市过去24小时风速(windSpeed)的top10') #标题
plt.show()

运行结果如下:

五. 利用线性回归模型作图,显示温度和湿度二者之间的关联

我先查看了温度和湿度的相关性,然后再进行的线性回归模型的绘画,代码如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pylab import mpl
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LinearRegression as LR
from sklearn.model_selection import train_test_split
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = FalseGDweather = pd.read_csv("F:\大数据基础实训\weather.csv")# 数据集中不同变量之间的相关性
print(GDweather.corr(numeric_only=True))
# 检查相关性
data_set = GDweather.iloc[:,[8,10]]
print(data_set.corr())fig, ax = plt.subplots(figsize=(14,4), dpi=100)
ax.set_title('温度和湿度关系图',fontsize=14,y=1.05)
# 绘制温度和湿度的关系图
sns.regplot(x=data_set["temperature"], y=data_set["humidity"],data=data_set)
plt.show()# 数据预处理
data = GDweather[['temperature', 'humidity']]# 数据缩放
scaler = MinMaxScaler()
data = scaler.fit_transform(data)
print(data)#数据集划分为训练集和测试集
x = data[:, 0].reshape(-1, 1)
y = data[:, 1].reshape(-1, 1)
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
#模型初始化
lr=LR()
#模型训练
lr.fit(x_train,y_train)# 模型预测
y_train_pred = lr.predict(x_train)
y_test_pred = lr.predict(x_test)#分别计算误差,确定是否过拟合;评估模型的泛化能力
from sklearn import metrics as ms
train_err = ms.mean_squared_error(y_train,y_train_pred)
test_err = ms.mean_absolute_error(y_test,y_test_pred)
print("训练集均方误差:",train_err)
print("测试集平均绝对误差:",test_err)
# 性能评估 决定系数
predict_score = lr.score(x_test,y_test)
print('得分::{:.2f}'.format(predict_score))# 绘制关系图
import matplotlib.pyplot as plt
plt.scatter(x_test, y_test)
plt.plot(x_test, y_test_pred, color='red', linewidth=2)
plt.xlabel('temperature')
plt.ylabel('humidity')
plt.title('温度和湿度回归图',fontsize=14,y=1.05)
plt.show()

运行出来的图如下:

​​

6. 加分项:利用地图进行展示

我这里是选择了爬取中国各省市的气候情况,对数据进行预处理后,将其提取各省气温的平均值进行可视化。

全国各省市天气的爬取代码如下:
import urllib.request
import csv
url = "http://www.nmc.cn/f/rest/province" #全国各省的数据
strhtml = urllib.request.urlopen(url)#获取响应结果
data = strhtml.read().decode('utf-8')
data = eval(data)
for i in range(len(data)):#循环爬取全国数据try: #抛出异常pro = data[i]print(pro)page = pro["code"]  # 获取省份编号# 全国各个省份url = "http://www.nmc.cn/f/rest/province/" + page  # 按照省份编号code循环获取地市数据strhtml = urllib.request.urlopen(url)allc = strhtml.read().decode('utf-8')allc = eval(allc)  # 得到全国各省市city = []for i in range(len(allc)):  # len(allc)表示一个省内市的个数citys = allc[i]  # c 里面是各省市的数据pages = citys["code"]  # 获取城市编号province = citys["province"]  # 获取省份city = citys["city"]  # 获取城市名url = "http://www.nmc.cn/f/rest/passed/" + pages  # 拿到省内具体城市气候数据strhtml = urllib.request.urlopen(url)weathers = strhtml.read().decode('utf-8')weathers = eval(weathers)  # 得到全国各省市天气数据weather = []  # 空数组for i in range(len(weathers)):  # 循环爬取weath = weathers[i]code = {"code":pages}provi = {"province": province}city1 = {"city": city}weath.update(code)weath.update(provi)weath.update(city1)weather.append(weath)# mode='a+'表示在已有数据基础上添加新数据,并不覆盖已有数据with open("China-Weather.csv", "a+", encoding='utf-8-sig', newline="") as fo:header = ["code","province", "city", "rain1h", "rain24h", "rain12h", "rain6h","temperature", "tempDiff", "humidity", "pressure","windDirection", "windSpeed", "time"]writer = csv.DictWriter(fo, header)writer.writeheader()writer.writerows(weather)fo.close()print(weather)except Exception as emmm:passcontinue

代码中有一个抛出异常值处理,有一些地方爬取数据是会报错,直接跳过。爬取到的数据格式如下:

通过上图,将 数据进行预处理,去除重复的表头,删除不要的列(保留省份,城市,温度),代码如下:

# 处理China-Weather.csv表,去除重复表头
import pandas as pdframe = pd.read_csv('F:\大数据基础实训\China-Weather.csv', engine='python')
df = frame.drop_duplicates(subset=['code','province','city','rain1h','rain24h','rain12h','rain6h','temperature','tempDiff','humidity','pressure','windDirection','windSpeed','time'], keep=False, inplace=False)
#删除不要的列
df = df.drop(['code','rain1h','rain24h','rain12h','rain6h','tempDiff','humidity','pressure','windDirection','windSpeed','time'], axis = 1)  # 按列名称
# 写为China-weather1
df.to_csv('F:\大数据基础实训\China-Weather1.csv',index=False)

处理完的数据如下:

数据可视化,先通过省份来求温度的平均值,最后进行数据可视化,代码如下:

import pandas as pd  #pandas是强大的数据处理库
from pyecharts.charts import Map
from pyecharts import options as opts
from pyecharts.globals import ThemeType #引入主题
Map(init_opts=opts.InitOpts(width="1000px", height="600px",theme = ThemeType.DARK)) #添加主题ThemeType.DARKdata = pd.read_csv('F:\大数据基础实训\China-Weather1.csv', encoding='gbk')# 使用groupby按照省份分组
data = data.groupby('province')
# 计算每个分组temperature平均值,使用unstack()将第一级索引转换为列
mean_temperature = data.temperature.mean()
mean_temperature.to_csv('F:\大数据基础实训\province-temperature.csv', encoding='gbk')data = pd.read_csv('F:\大数据基础实训\province-temperature.csv', encoding='gbk')
province = list(data["province"])
temperature = list(data["temperature"])
list = [list(z) for z in zip(province,temperature)]
China = (Map(init_opts=opts.InitOpts(width="1200px", height="800px",theme = ThemeType.DARK)) #添加主题ThemeType.DARK.set_global_opts(title_opts=opts.TitleOpts(title="各省平均温度分布图  单位:℃"),visualmap_opts=opts.VisualMapOpts(min_=10,max_=40,range_text = ['temperature 颜色区间:', ''],  #分区间is_piecewise=True,  #定义图例为分段型,默认为连续的图例pos_top= "middle",  #分段位置pos_left="top left",orient="vertical",split_number=10  #分成10个区间)).add("temperature",list,maptype="china").render("temperature.html")
)

可视化结果如下:

​​​​​

数据可视化,先通过全国各城市来求温度的平均值,最后进行数据可视化,代码如下:

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartTypedata = pd.read_csv('F:\大数据基础实训\China-Weather.csv', encoding='gbk')# 使用groupby按照城市分组
data = data.groupby('city')
# 计算每个分组温度平均值,使用unstack()将第一级索引转换为列
mean_temperature = data.temperature.mean()
mean_temperature.to_csv('F:\大数据基础实训\city-temperature.csv', encoding='gbk')data = pd.read_csv('F:\大数据基础实训\city-temperature.csv', encoding='gbk')c = (Geo(is_ignore_nonexistent_coord=True, init_opts=opts.InitOpts(width="1280px", height="800px", theme='dark'))  # 图表大小, 主题风格.add_schema(maptype="china",  # 地图itemstyle_opts=opts.ItemStyleOpts(color="#28527a",  # 背景颜色border_color="#9ba4b4"))  # 边框颜色, 可在 https://colorhunt.co/选择颜色.add("",  # 系列名称, 可不设置[(i, j) for i, j in zip(data['city'], data['temperature'])],  # 数据type_=ChartType.EFFECT_SCATTER,  # 涟漪散点effect_opts=opts.EffectOpts(symbol_size=1),  # 标记大小).set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 不显示标签.set_global_opts(title_opts=opts.TitleOpts(title="全国城市气温",  # 图表标题pos_left='center',  # 标题位置subtitle='更新日期:2023-6-26',  # 副标题subtitle_link='http://tianqi.2345.com/air-rank.html'),  # 副标题链接visualmap_opts=opts.VisualMapOpts(max_=200,range_text=['temperature', ''],  # 上下的名称split_number=4,  # 如果是连续数据, 分成几段pos_left='5%',  # pos_rightpos_top='40%',  # pos_bottomis_piecewise=True,  # 是否为分段显示pieces=[{"min":10 , "max": 11.9, "color": "blue",'label': '温凉'},{"min":12, "max":13.9, "color": "lightblue",'label': '微温凉'},{"min":14 , "max":15.9 , "color": "green",'label': '温和'},{"min": 16, "max": 17.9, "color": "lightgreen",'label': '微温和'},{"min": 18, "max": 19.9, "color": "yellow",'label': '温和'},{"min": 20, "max":21.9 , "color": "orange",'label': '暖'},{"min": 22, "max": 24.9, "color": "darkorange",'label': '热'},{"min": 25, "max": 27.9, "color": "red",'label': '炎热'},{"min": 28, "max": 29.9, "color": "crimson",'label': '暑热'},{"min": 30, "max": 34.9, "color": "purple",'label': '酷热'},{"min": 35, "max": 39.9, "color": "pink",'label': '奇热'},{"min": 40, "max": 44.9, "color": "brown",'label': '极热'}])))c.render('F:\大数据基础实训\city_tem.html')

可视化结果如下:

学习笔记-大数据基础实训(python语言+可视化)相关推荐

  1. 大数据教学实训沙盘介绍

    沙盘的作用主要有3个: 1.采集真实数据,解决教学中缺少真实数据的困扰: 2.形成从数据采集.预处理.挖掘建模.模型部署的业务闭环,可以把构建模型发布到沙盘系统上,根据模型产生真实的反馈不断的修正模型 ...

  2. 大数据项目实训总结_DATATOM | 大数据实训

    真实实战环境 DSight提供独立的实验环境集群,交互式的实验任务.实时的实验指导.项目的上机操作.配套的教学视频.实时的数据监控等,能够保证学生灵活.快速地掌握专业核心技术及项目开发能力. 丰富课程 ...

  3. 大数据项目实训总结_大数据实习报告.doc

    大数据实习报告 大数据实习报告 大数据实习报告目录一.摘要1.1项目背景-----------------------21.2课程设计目的---------------------21.3题目名称-- ...

  4. DAMA数据治理学习笔记-大数据和数据科学

    大数据和数据科学 定义 对多种不同类型的数据进行收集(大数据)和分析(数据科学.分析.可视化),以此来为在分析的初始阶段未知的问题找到答案 目标 发现数据和业务的联系 支持将数据源迭代集成到企业中 发 ...

  5. 学习笔记 - 大数据导论

    1 数据仓库 1.1 数据仓库(Data Warehouse) 简称DW.数据仓库顾名思义,是⼀个很⼤的数据存储集合,出于企业的 分析性报告和决策支持⽬的而创建,对多样的业务数据进⾏筛选与整合.它为企 ...

  6. 大数据学习笔记—大数据概论

    大数据概论 一. 大数据的概念 二.大数据的特点(4V) 三. 大数据的应用场景 四.大数据的发展前景 五.大数据部门的业务流程/组织结构 一. 大数据的概念 大数据(big data),指无法在一定 ...

  7. 学习hadoop大数据基础框架需要什么基础

    什么是大数据?进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的计量单位从MB(1 ...

  8. 葡萄酒指标实训 Python语言

    本文所需数据下载地址-->点这里下载 众所周知,葡萄酒的价格是与其品质相关的,本实训根据表中提供的数据对包葡萄酒品质数进行了分析与处理. 变量名 含义 fixed acidity 固定酸度 vo ...

  9. 学习笔记(19):零基础搞定Python数据分析与挖掘-常用的正则符号(二)

    立即学习:https://edu.csdn.net/course/play/6861/335840?utm_source=blogtoedu 英文状态中中括号[] 指代字符集合,当需要特定的字符串匹配 ...

最新文章

  1. Discuz DB层跨库映射关系表名前缀BUG修复后产生的新bug
  2. 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★
  3. 检测移动端内存敏感数据方法(安卓)
  4. SpringCloud Config 本地配置
  5. MySQL读取配置文件的顺序、启动方式、启动原理
  6. 【论文笔记】Neural Graph Collaborative Filtering
  7. 共用软件现漏洞未修复,一年来美国数十个政府网站在推送色情广告
  8. android 四种堆状态
  9. WinForm 窗体中实现单例模式
  10. cocos2d-x关于CCTableView的“乱序问题”的理解
  11. MAC 用配置设置解决vscode中文乱码问题
  12. 基于深度学习的SLAM综述:迈向空间机器智能时代
  13. java类和对象及python中的类似实现
  14. 佳能Canon imageCLASS MF4712 打印机驱动
  15. 解决Go服务GC时间过长
  16. win7局域网共享教程
  17. 微信公众号(服务号)接入开发之微信授权登陆
  18. php利用phpqrcode生成二维码,并将二维码盖在一张图上实现美化
  19. 20220211关于TL-WDN6200(RTL8812AU)在ubuntu20.04.3下安装驱动程序的历险记
  20. 快速了解 Git 仓库

热门文章

  1. 台式计算机按电源开关无法开机,台式电脑没法启动,按下开机键电源灯闪一下就什么反应都没...
  2. 问题:UltraISO:这个软件有问题,它制作的iso文件会造成无法正确识别。用PowerISO吧...
  3. mmdetection --tools工具简单使用1
  4. Unity关于GL绘制和Gizmos绘制的Matrix问题。
  5. 大学形象宣传片制作特点
  6. Java项目:SSM汽车保险车险理赔管理系统
  7. 如何利用echarts3绘制梯形波图
  8. 课题申报书范文_课题科研项目申请书范文
  9. webstorm全局搜索搜不到内容
  10. 【刷题】牛客网面试必刷TOP101