想要制作GIS,首先就需要获得我所需要的数据。没有数据,GIS就不配成为GIS,那就仅仅只是简单的、冰冷的地图而已,没有灵魂,没有生命,没有波动。
因此首要之急是寻找数据。
寻找数据
数据是死物,它们不会自己自觉地跑到我的手上的,这就需要我去寻找和搜集它们。现在是互联网时代,获取信息十分得便利。因此我想到搜集我所需要的数据方法可分为两种:
其一、在网上寻找其他人已经下载好的、整理好的并且打包好的数据,然后下载到自己电脑上保存。
其二、使用爬虫技术。任何语言都有爬虫技术,python由最为出色。因为目前有许多网站都在搜集有关新冠病毒疫情感染人数情况,比如丁香园、百度等等,而且这些网站的相关数据都是对大众免费开放,还为此提供了如何获取这些数据的说明,所以只要将爬取代码写好并运行,就可以轻轻松松地得到我所想要的数据等等,并且能将已经获得的数据存储到电脑里。
两种方法我都用excel保存起来,当然数据可以用csv、JSON等格式或者用mysql、nosql数据库来保存,但是excel相对来说操作简单且直观。
两种方法我都使用了。皇天不负有心人,第一种方法进行很成功,我获得了2019年12月1日到2020年4月30日的数据。接下来是讲述我用第二种方法爬取网页获取数据的事情。
爬取数据
爬虫首先要做的事就是找到所要爬的合适网站。全国正值疫情时期,举国关注这件事情,这就会有许多网站广泛搜集有关疫情的数据,像百度、丁香园、Akshare等等。各个网站有各个网站的优缺点,而且大部分这种类型的网站会对外公众公布如何获取自家数据的办法,这取决于看个人。比如使用Akshare能快速获得数据,只是这种数据不好做数据清洗。
我选择了网易的数据平台,网址为https://c.m.163.com/ug/api/wuhan/app/data/list-total。
打开网址,显示如下图4.9:
图4.9 数据网址
然后就要分析该网页。该网页呈现json(json——JavaScriptObjectNotation,JS对象简谱——是一种轻量级的数据交换格式)形式,选择好参数,配置好代码,让数据以JSON格式返回:
data_json = json.loads(r.text)
data = data_json[‘data’]
data_province = data[‘areaTree’][2][‘children’]
areaTree = data[‘areaTree’]
接下来就要写爬虫代码。
先写下要用的包:
import requests
import pandas as pd
import json
import time
再写下自己电脑的信息(这部分没必要填自己电脑的信息,随便上网找来凑即可):
headers = { ‘user-agent’: ‘Mozilla/5.0(Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0’ }
把要找的网站写好并爬:
#定义要访问的地址
url = ‘https://c.m.163.com/ug/api/wuhan/app/data/list-total’
#使用requests发起请求
r = requests.get(url, headers = headers)
接下来做一个封装函数用来提取数据:
today_data = pd.DataFrame([i[‘today’] for i in data])
today_data.columns = [‘today_’ + i for i in today_data.columns]
再接下来需要遍历各个省,提取各个省的数据并写入各自省的名称,然后还要合并数据:
province_data = get_data(data_json[‘data’][‘list’], [‘data’])
province_data[‘name’] = province_dict[province_id]
if province_id == ‘420000’:
alltime_province = province_data
else:
alltime_province = pd.concat([alltime_province, province_data])
最后把爬取到的数据保存到本地电脑的excel文件里:
file_name = name + ‘_’ + time.strftime(‘%Y_%m_%d’, time.localtime(time.time())) + ‘.xlsx’
结果若是如下图4.10所示,则表示成功了:
图4.10 数据爬取成功
在本地找到保存好的文件,截图如下图4.11:
图4.11 数据保存1
至此,爬取数据这步完成了,为之后制图提供了方便。并且我根据这张表做了一些修改制成了另外几张格式不同的表,请看下图4.12和图4.13:
图4.12 数据保存2
图4.13 数据保存3
这样做的目的是为了更加便利地去做跟此次疫情有关的柱形图、折线图等等,从侧面衬托配合GIS。