使用Quandl
当我们需要在网络当中获取一些开放数据时,我们可以去访问一些开放数据网站,quandl是一个金融经济的开放数据网站,我们可以在其中注册之后,获得一些免费的数据来进行使用,可以采用API的方式来进行访问,当然,也可以使用下载CSV等文件格式来进行访问
使用API
当我们需要去获取一些数据时,除了可以使用开放数据网站之外,我们也可以通过爬虫来进行获取,但是编写爬虫是非常费时费力的事情,因此,我可以去一些数据平台上,获取API来进行访问,在这里以阿里云市场为例,我们采集一些天气数据来进行,使用易源天气数据
首先,在代码当中编辑需要提供的参数,以及自己的APPCODE认证代码
areaid = "101291401"
month = "202002"
appcode = "appcode"
url = "https://ali-weather.showapi.com/weatherhistory"
query = {"areaid":areaid,"month":month}
headers = {"Authorization":'APPCODE {}'.format(appcode)}
接下来,我们需要导入requests
库,并且使用get
方法进行提交
import requests
def getJson(url,headers,query):
try:
r = requests.get(url,headers = headers,params = query)
if r.status_code != 200:
return r.status_code
else:
return r.text
except:
return "产生异常"
最后,我们来执行这个函数,得到最后的返回结果
getJson(url,headers,query)
' {\n "showapi_res_error": "",\n "showapi_res_id": "620c7ef70de3761717598ae7",\n "showapi_res_code": 0,\n "showapi_fee_num": 1,\n "showapi_res_body": {"ret_code":0,"month":"202002","area":"丽江","areaid":"101291401","areaCode":"530700","list":[{"time":"20200201","aqi":"29","aqiInfo":"优","aqiLevel":"1","max_temperature":"12","min_temperature":"0","weather":"多云","wind_direction":"西南风","wind_power":"2级"},{"time":"20200202","aqi":"29","aqiInfo":"优","aqiLevel":"1","max_temperature":"13","min_temperature":"0","weather":"多云","wind_direction":"西南风","wind_power":"2级"},{"time":"20200203","aqi":"27","aqiInfo":"优","aqiLevel":"1","max_temperature":"12","min_temperature":"-2","weather":"多云","wind_direction":"西南风","wind_power":"2级"},\n'
...
从结果当中来看,这是一个JSON格式的数据,我们可以用Python的JSON数据包来进行解析
import json
json_result = json.loads(getJson(url,headers,query))
json_result
{'showapi_res_error': '',
'showapi_res_id': '620c7f010de376181766a4c6',
'showapi_res_code': 0,
'showapi_fee_num': 1,
'showapi_res_body': {'ret_code': 0,
'month': '202002',
'area': '丽江',
'areaid': '101291401',
'areaCode': '530700',
'list': [{'time': '20200201',
'aqi': '29',
'aqiInfo': '优',
'aqiLevel': '1',
'max_temperature': '12',
'min_temperature': '0',
'weather': '多云',
'wind_direction': '西南风',
'wind_power': '2级'},
{'time': '20200202',
'aqi': '29',
'aqiInfo': '优',
'aqiLevel': '1',
'max_temperature': '13',
'min_temperature': '0',
'weather': '多云',
'wind_direction': '西南风',
'wind_power': '2级'},
...
我们想要的数据存放在了list
字段当中,接下来我们通过pandas库将数据进行格式转换,转换成dataframe格式的数据
import pandas as pd
df = pd.DataFrame(json_result["showapi_res_body"]["list"])
df
time | aqi | aqiInfo | aqiLevel | max_temperature | min_temperature | weather | wind_direction | wind_power | |
---|---|---|---|---|---|---|---|---|---|
0 | 20200201 | 29 | 优 | 1 | 12 | 0 | 多云 | 西南风 | 2级 |
1 | 20200202 | 29 | 优 | 1 | 13 | 0 | 多云 | 西南风 | 2级 |
2 | 20200203 | 27 | 优 | 1 | 12 | -2 | 多云 | 西南风 | 2级 |
3 | 20200204 | 30 | 优 | 1 | 13 | -1 | 多云-晴 | 西南风 | 2级 |
4 | 20200205 | 28 | 优 | 1 | 14 | 0 | 多云-晴 | 西南风 | 2级 |
5 | 20200206 | 29 | 优 | 1 | 13 | 0 | 多云-晴 | 西南风 | 2级 |
6 | 20200207 | 31 | 优 | 1 | 15 | 0 | 多云-晴 | 西南风 | 2级 |
7 | 20200208 | 30 | 优 | 1 | 13 | 0 | 阴-阵雨 | 西南风 | 2级 |
8 | 20200209 | 28 | 优 | 1 | 7 | 2 | 小雨-阵雨 | 西南风 | 2级 |
9 | 20200210 | 27 | 优 | 1 | 11 | 0 | 小雨-多云 | 西南风 | 2级 |
10 | 20200211 | 32 | 优 | 1 | 14 | 0 | 晴 | 西南风 | 2级 |
11 | 20200212 | 29 | 优 | 1 | 15 | 0 | 多云-晴 | 西南风 | 2级 |
12 | 20200213 | 27 | 优 | 1 | 17 | 0 | 多云-晴 | 西南风 | 2级 |
13 | 20200214 | 26 | 优 | 1 | 16 | 1 | 多云-晴 | 西南风 | 2级 |
14 | 20200215 | 30 | 优 | 1 | 14 | 0 | 多云 | 西南风 | 2级 |
15 | 20200216 | 26 | 优 | 1 | 13 | 0 | 多云-阴 | 西南风 | 2级 |
16 | 20200217 | 28 | 优 | 1 | 16 | 2 | 多云 | 西南风 | 2级 |
17 | 20200218 | 31 | 优 | 1 | 17 | 2 | 阴-晴 | 西南风 | 2级 |
18 | 20200219 | 29 | 优 | 1 | 16 | 0 | 晴 | 西南风 | 2级 |
19 | 20200220 | 29 | 优 | 1 | 18 | 0 | 晴 | 西南风 | 2级 |
20 | 20200221 | 28 | 优 | 1 | 19 | 1 | 晴 | 西南风 | 2级 |
21 | 20200222 | 29 | 优 | 1 | 19 | 2 | 晴-多云 | 西南风 | 2级 |
22 | 20200223 | 31 | 优 | 1 | 18 | 5 | 多云 | 西南风 | 2级 |
23 | 20200224 | 32 | 优 | 1 | 16 | 3 | 阴-晴 | 西南风 | 2级 |
24 | 20200225 | 31 | 优 | 1 | 18 | 2 | 多云-晴 | 西南风 | 2级 |
25 | 20200226 | 30 | 优 | 1 | 16 | 7 | 阴-小雨 | 西南风 | 2级 |
26 | 20200227 | 35 | 优 | 1 | 13 | 0 | 小雨-阵雨 | 西南风 | 2级 |
27 | 20200228 | 29 | 优 | 1 | 14 | 0 | 阴-多云 | 西南风 | 2级 |
28 | 20200229 | 28 | 优 | 1 | 17 | 1 | 多云-晴 | 西南风 | 2级 |
当然,如果只能够获取一个城市的天气状况,完全是不够的,我们可以编写一个函数,让函数来自动帮助我们获取多个城市的2020年12月份的数据
数据分析
下面,我们可以对我们获取到的数据来进行整理分析,首先先来看看每一列的数据类型都是什么
df.dtypes
time object
aqi object
aqiInfo object
aqiLevel object
max_temperature object
min_temperature object
weather object
wind_direction object
wind_power object
dtype: object
结果我们发现,全部都是object
类型的数据,在这种情况下,我们把它们都理解程字符串类型,但是有一些数据是不能是字符串的,所以需要对它们进行类型转换
df.time = pd.to_datetime(df.time) #转换时间列
df.aqi = pd.to_numeric(df.aqi) #转换aqi列
df.dtypes
time datetime64[ns]
aqi int64
aqiInfo object
aqiLevel object
max_temperature object
min_temperature object
weather object
wind_direction object
wind_power object
dtype: object
即可以得到相应的数据类型,当然,我们可以将这些数据进行保存,或者对这些数据进行绘图分析,从而得到我们想要的结果
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容