Python案例实战:天气数据集爬取 + 多组可视化图表分析

导语

前几天出门去练车,刚好下午14:00,真真的是”锄禾日当午,汗滴禾下土“。

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第1张图片

那要不是我意志力坚定,肯定弃车而跑了,难道只有长沙这么高的温度。

我不服,我要看看其他地方的温度怎么样?咱们比上一比~~~

今天小编就带大家爬取部分地区的温度并可视化,来,上数据!!

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第2张图片

正文

环境安装部分:

Python版本:3.6.4;PIL模块;requests模块;pyecharts模块;以及一些Python自带的模块。

模块安装: pip install +模块名

编程实现主要思路:

爬取部分地区{随机爬取选择的}主要包括温度、湿度、气压等。

获取相关数据之后利用pyecharts模块和PIL模块对数据进行可视化分析。

(1)主要城市展示:

if __name__ == '__main__':
	city_names = ['上海', '北京', '南京', '杭州', '天津', '武汉']
	# city_names = ['上海', '北京', '南京', '杭州', '天津', '武汉', '苏州', '哈尔滨', '长春', '深圳', '西安', '南宁', '包头', '合肥', '成都', '乌鲁木齐', '西宁']
	# city_names = ['北京', '天津', '上海', '重庆',
	# 			  '石家庄', '太原', '沈阳', '长春',
	# 			  '哈尔滨', '南京', '杭州', '合肥',
	# 			  '福州', '南昌', '济南', '郑州',
	# 			  '武汉', '长沙', '广州', '成都']
	draw_weather_pic('济南')
	# DrawBar(city_names)
	# DrawGeo(city_names)
	# DrawLine(city_names)
	# DrawLiquid('北京')
	# DrawMap(city_names)
	# DrawPie(city_names)
	# DrawRadar('南京')

(2)要画什么图把对应的函数调用注释去掉就好啦:Python案例实战:天气数据集爬取 + 多组可视化图表分析_第3张图片

1.全国部分城市空气质量:点击这个链接更方便观看效果哦~

​​Python案例实战:天气数据集爬取 + 多组可视化图表分析_第4张图片Python案例实战:天气数据集爬取 + 多组可视化图表分析_第5张图片​​2.部分城市气温柱状图:点击这个链接有惊喜哦~

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第6张图片Python案例实战:天气数据集爬取 + 多组可视化图表分析_第7张图片​​

3.部分城市气温折线图:点击这个链接更方便~

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第8张图片Python案例实战:天气数据集爬取 + 多组可视化图表分析_第9张图片​​

4.部分城市相对气压饼图:点击这个链接撒~

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第10张图片Python案例实战:天气数据集爬取 + 多组可视化图表分析_第11张图片​​

5.部分城市气温分布图:点击这个蓝色字体哦~

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第12张图片Python案例实战:天气数据集爬取 + 多组可视化图表分析_第13张图片​​6.北京城市湿度:点击这里是动图哦~

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第14张图片Python案例实战:天气数据集爬取 + 多组可视化图表分析_第15张图片​​

7.南京天气信息雷达图:点击这里观看啦~

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第16张图片Python案例实战:天气数据集爬取 + 多组可视化图表分析_第17张图片​​

主程序:

from Get_Weather import Query
from PIL import Image, ImageDraw, ImageFont
from pyecharts import Bar
from pyecharts import Geo
from pyecharts import Line
from pyecharts import Liquid
from pyecharts import Map
from pyecharts import Pie
from pyecharts import Radar
qr = Query()


# 天气预报图
def draw_weather_pic(city_name):
	data = qr.get_data(city_name)
	weather = data['weather']
	temperature = data['Ltemperature'] + '~' + data['Htemperature'] + '℃'
	img = Image.open('./mask.jpg')
	draw = ImageDraw.Draw(img)
	font = ImageFont.truetype(u'./font/simkai.ttf', size=50)
	draw.text((img.size[0]/6, img.size[1]/5), temperature, font=font, fill=(0, 177, 106))
	draw.text((img.size[0]/3, img.size[1]/5+150), weather, font=font, fill=(0, 128, 131))
	img.save('weather.jpg','jpeg')
	print('[INFO]:draw_weather_pic done...')


# 柱状图
def DrawBar(city_names):
	bar = Bar("城市气温柱状图")
	attrs1 = []
	attrs2 = []
	values1 = []
	values2 = []
	for cn in city_names:
		data = qr.get_data(cn)
		attrs1.append(cn)
		attrs2.append(cn)
		values1.append(data['Htemperature'])
		values2.append(data['Ltemperature'])
	bar.add("最高气温", attrs1, values1, mark_point=["average"])
	bar.add("最低气温", attrs2, values2, mark_point=["min", "max"])
	bar.render('weatherBar.html')


# 地理坐标系
def DrawGeo(city_names):
	data = []
	for cn in city_names:
		temp = qr.get_data(cn)
		data.append((cn, temp['pm25']))
	geo = Geo('全国部分城市空气质量', 'pm2.5', 
			  title_color='#fff', 
			  title_pos='center',
			  width=1200,
			  height=600,
			  background_color='#404a59')
	attr, value = geo.cast(data)
	geo.add('', attr, value, visual_range=[0, 200], visual_text_color='#fff', symbol_size=15, is_visualmap=True, type='effectScatter')
	geo.render('weatherGeo.html')


# 折线图
def DrawLine(city_names):
	line = Line('城市气温折线图')
	attrs1 = []
	attrs2 = []
	values1 = []
	values2 = []
	for cn in city_names:
		data = qr.get_data(cn)
		attrs1.append(cn)
		attrs2.append(cn)
		values1.append(data['Htemperature'])
		values2.append(data['Ltemperature'])
	line.add("最高气温", attrs1, values1, is_smooth=True, mark_point=["average"])
	line.add("最低气温", attrs2, values2, is_smooth=True, mark_point=["average", "max"])
	line.render('weatherLine.html')


# 水球图
def DrawLiquid(city_name):
	data = int(qr.get_data(city_name)['SD'].strip('%')) / 100
	liquid = Liquid('%s城市湿度' % city_name)
	liquid.add('湿度', [data])
	liquid.render('weatherLiquid.html')


# 地图
def DrawMap(city_names):
	# 假设省会城市最高温度代表该省最高温度
	attrs = ['北京', '天津', '上海', '重庆',
			 '河北', '山西', '辽宁', '吉林',
			 '黑龙江', '江苏', '浙江', '安徽',
			 '福建', '江西', '山东', '河南',
			 '湖北', '湖南', '广东', '四川']
	values = []
	for cn in city_names:
		data = qr.get_data(cn)
		values.append(data['Htemperature'])
	map_ = Map('气温分布图', width=1200, height=600)
	map_.add('', attrs, values, maptype='china', is_visualmap=True, visual_text_color='#000')
	map_.render('weatherMap.html')


# 饼图
def DrawPie(city_names):
	attrs = []
	values = []
	for cn in city_names:
		attrs.append(cn)
		data = qr.get_data(cn)
		values.append(data['QY'])
	pie = Pie('部分城市相对气压饼图')
	pie.add('', attrs, values, is_label_show=True)
	pie.render('weatherPie.html')


# 雷达图
def DrawRadar(city_name):
	schema = [('最高气温', 45), ('气压', 1500), ('湿度', 100), ('最低气温', 45), ('PM2.5', 200)]
	data = qr.get_data(city_name)
	values = [[int(data['Htemperature']), int(data['QY']), int(data['SD'].strip('%')), int(data['Ltemperature']), int(data['pm25'])]]
	radar = Radar()
	radar.config(schema)
	radar.add('%s天气信息' % city_name, values, is_splitline=True, is_axisline_show=True)
	radar.render('weatherRadar.html')




if __name__ == '__main__':
	city_names = ['上海', '北京', '南京', '杭州', '天津', '武汉']
	# city_names = ['上海', '北京', '南京', '杭州', '天津', '武汉', '苏州', '哈尔滨', '长春', '深圳', '西安', '南宁', '包头', '合肥', '成都', '乌鲁木齐', '西宁']
	# city_names = ['北京', '天津', '上海', '重庆',
	# 			  '石家庄', '太原', '沈阳', '长春',
	# 			  '哈尔滨', '南京', '杭州', '合肥',
	# 			  '福州', '南昌', '济南', '郑州',
	# 			  '武汉', '长沙', '广州', '成都']
	draw_weather_pic('济南')
	# DrawBar(city_names)
	# DrawGeo(city_names)
	# DrawLine(city_names)
	# DrawLiquid('北京')
	# DrawMap(city_names)
	# DrawPie(city_names)
	# DrawRadar('南京')点击并拖拽以移动

总结

啊这!结果出是出来了!害~果然我是住在“赤道”上面的~~233333

​源码基地:关注小编获取哦~记得三连吖

Python案例实战:天气数据集爬取 + 多组可视化图表分析_第18张图片

你可能感兴趣的:(爬虫+数据合集,python,爬虫,数据可视化,天气数据)