Python数据挖掘+数据图像化展示
数据来源中国气象局
require: v1.9.1 pyecharts/pandas/request
先看看最终效果
1. 数据获取
爬虫现在不能发了。。。
import requests
import pandas as pd
url = "http://weather.cma.cn/api/now/"
dataset = []
for addr in range(50136,60000):
with requests.get(url + str(addr)) as resp:
resp.encoding = resp.apparent_encoding
if not resp.json()['data']:
continue
data = []
# 城市省份
data.append(resp.json()['data']['location']['path'].split()[1].strip(','))
# 城市名字
data.append(resp.json()['data']['location']['name'])
# 城市气象台id
data.append(resp.json()['data']['location']['id'])
# 降水
data.append(resp.json()['data']['now']['precipitation'])
# 温度
data.append(resp.json()['data']['now']['temperature'])
# 气压
data.append(resp.json()['data']['now']['pressure'])
# 湿度
data.append(resp.json()['data']['now']['humidity'])
# 风向
data.append(resp.json()['data']['now']['windDirection'])
# 风力
data.append(resp.json()['data']['now']['windScale'])
# 时间
data.append(resp.json()['data']['lastUpdate'])
dataset.append(data)
# 创建pandas DataFrame
df = pd.DataFrame(dataset,columns=['省份','城市','气象台编号','降水','温度','气压','湿度','风向','风力','时间'])
# 保存
df.to_csv('weather.csv',encoding='utf_8_sig')
处理数据
读出数据,并且生成中国气象图
df = pd.read_csv('weather_now.csv')
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
from pyecharts.charts import Tab
weather = Tab(
page_title='全国气象')
temperature = (
Geo(is_ignore_nonexistent_coord=True)
.add_schema(
maptype="china-cities",
is_roam=False)
.add(
"气温",
[list(z) for z in zip(df['城市'],df['温度']) if z[1] != 9999.0],
type_=ChartType.SCATTER,
blur_size=20,
point_size=20,
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(min_=-30.0, max_=30.0),
title_opts=opts.TitleOpts(title="全国气温")
)
)
pressure = (
Geo(is_ignore_nonexistent_coord=True)
.add_schema(
maptype="china-cities",
is_roam=False)
.add(
"气压",
[list(z) for z in zip(df['城市'],df['气压']) if z[1] != 9999.0],
type_=ChartType.SCATTER,
blur_size=20,
point_size=20
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(min_=900, max_=1050),
title_opts=opts.TitleOpts(title="全国气压"),
)
)
humidity = (
Geo(is_ignore_nonexistent_coord=True)
.add_schema(
maptype="china-cities",
is_roam=False)
.add(
"湿度",
[list(z) for z in zip(df['城市'],df['湿度']) if z[1] != 9999.0],
type_=ChartType.SCATTER,
blur_size=20,
point_size=20
)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(min_=0, max_=100),
title_opts=opts.TitleOpts(title="全国湿度"),
)
)
weather.add(
chart=temperature,
tab_name='气温'
)
weather.add(
chart=pressure,
tab_name='气压'
)
weather.add(
chart=humidity,
tab_name='湿度'
)
weather.render_notebook()
生成福建气候图
from pyecharts.charts import Map
fujian_city_temp = [list([z[0]+'市', z[1]]) for z in zip(df['城市'],df['温度'],df['省份']) if z[2] == '福建']
fujian_city_pres = [list([z[0]+'市', z[1]]) for z in zip(df['城市'],df['气压'],df['省份']) if z[2] == '福建']
fujian_city_humi = [list([z[0]+'市', z[1]]) for z in zip(df['城市'],df['湿度'],df['省份']) if z[2] == '福建']
temp = (
Map()
.add("福建气温" , fujian_city_temp,"福建")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-福建地图"),
visualmap_opts=opts.VisualMapOpts(min_=-30.0, max_=30.0)
)
)
pres = (
Map()
.add("福建气压" , fujian_city_pres,"福建")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-福建地图"),
visualmap_opts=opts.VisualMapOpts(min_=900, max_=1050)
)
)
humi = (
Map()
.add("福建湿度" , fujian_city_humi,"福建")
.set_global_opts(
title_opts=opts.TitleOpts(title="Map-福建地图"),
visualmap_opts=opts.VisualMapOpts(min_=0, max_=100)
)
)
weather = Tab(
page_title='福建气象')
weather.add(
chart=temp,
tab_name='气温'
)
weather.add(
chart=pres,
tab_name='气压'
)
weather.add(
chart=humi,
tab_name='湿度'
)
weather.render_notebook()
读取的数据有各个省市的数据,如果需要生成其他省份的数据,简单的修改一下参数就好了,关于pyecharts API参数方面的知识,可以自行上
pyecharts官方文档查阅