利用Python获取数据

使用Quandl

当我们需要在网络当中获取一些开放数据时,我们可以去访问一些开放数据网站,quandl是一个金融经济的开放数据网站,我们可以在其中注册之后,获得一些免费的数据来进行使用,可以采用API的方式来进行访问,当然,也可以使用下载CSV等文件格式来进行访问

图片[1]-利用Python获取数据-四曲博客

使用API

当我们需要去获取一些数据时,除了可以使用开放数据网站之外,我们也可以通过爬虫来进行获取,但是编写爬虫是非常费时费力的事情,因此,我可以去一些数据平台上,获取API来进行访问,在这里以阿里云市场为例,我们采集一些天气数据来进行,使用易源天气数据

图片[2]-利用Python获取数据-四曲博客

首先,在代码当中编辑需要提供的参数,以及自己的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

timeaqiaqiInfoaqiLevelmax_temperaturemin_temperatureweatherwind_directionwind_power
020200201291120多云西南风2级
120200202291130多云西南风2级
22020020327112-2多云西南风2级
32020020430113-1多云-晴西南风2级
420200205281140多云-晴西南风2级
520200206291130多云-晴西南风2级
620200207311150多云-晴西南风2级
720200208301130阴-阵雨西南风2级
82020020928172小雨-阵雨西南风2级
920200210271110小雨-多云西南风2级
1020200211321140西南风2级
1120200212291150多云-晴西南风2级
1220200213271170多云-晴西南风2级
1320200214261161多云-晴西南风2级
1420200215301140多云西南风2级
1520200216261130多云-阴西南风2级
1620200217281162多云西南风2级
1720200218311172阴-晴西南风2级
1820200219291160西南风2级
1920200220291180西南风2级
2020200221281191西南风2级
2120200222291192晴-多云西南风2级
2220200223311185多云西南风2级
2320200224321163阴-晴西南风2级
2420200225311182多云-晴西南风2级
2520200226301167阴-小雨西南风2级
2620200227351130小雨-阵雨西南风2级
2720200228291140阴-多云西南风2级
2820200229281171多云-晴西南风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
喜欢就支持以下吧
点赞5 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片