python爬虫疫情可视化地图

随着新冠疫情的爆发,疫情数据的统计和呈现变得异常重要。一些数字化技术如大数据、人工智能等,得到大量应用。在这些技术中,数据可视化成为疫情防控中非常重要的一环。Python作为一门热门的编程语言,被广泛应用于数据爬取和可视化。下面,我们将主要介绍如何使用Python爬虫和地图包实现一个疫情的可视化地图。

1. 爬取疫情数据

我们可以使用Python中的request库获取网页上的数据。除此之外,还可以用beautifulsoup库对网页结构化的解析,方便获取数据。下面是一个简单的例子:

```

import requests

from bs4 import BeautifulSoup

url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia_peopleapp?from=timeline&isappinstalled=0'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299'

}

res = requests.get(url, headers=headers)

res.encoding = res.apparent_encoding

soup = BeautifulSoup(res.text, 'html.parser')

items = soup.find_all('script', attrs={'id': 'getAreaStat'})

```

上面的代码通过请求一个网站并解析出相应的HTML页面,得到了疫情第一手的信息数据。这样,我们就成功地将网页上的信息爬取下来了。

2. 数据清洗和提取

成功获取页面数据之后,需要把数据进行清洗并提取出我们需要的数据,下面通过Pandas库来完成我们的数据清洗和整理工作。安装完Pandas库之后,我们就可以用它来处理我们的数据。

```

import pandas as pd

contents = items[0].contents[0]

import json

data = json.loads(contents.replace('try { window.getAreaStat = ', '').replace('}catch(e){}', ''))

pd_data = pd.DataFrame(data)

```

 首先,我们把获取到的HTML文件解析成一个字符串;

 然后,通过使用json库的loads方法,将字符串转换成了原始的列表对象;

 接下来,将列表对象封装到DataFrame对象中。

3. 我们将数据写入文件

```

pd_data.to_csv('./data.csv', index=False)

```

4. 我们可以对数据进行分析和可视化

```

import echarts_countries_pypkg

echarts_countries_pypkg.add()

from echarts import Echart, Legend, Pie, Tooltip, Map

d = pd.read_csv('./data.csv')

confirmed = d.sum()['confirmedCount']

suspected = d.sum()['suspectedCount']

cures = d.sum()['curedCount']

deaths = d.sum()['deadCount']

data = [('确诊病例', confirmed), ('疑似病例', suspected),

('治愈病例', cures), ('死亡病例', deaths)]

chart = Pie('COVID-19 各类占比', '数据来源:丁香园')

# 设置图表背景颜色和尺寸

chart.use_theme('shine').width = 1200

# 添加数据

chart.add('', data)

chart

```

- 运行之后,就可以看到一个圆形饼状图,这张图形直观反映了确诊、疑似、治愈及死亡病例数量的占比。

5. Python实现全国地理信息数据可视化的实例代码:

```

# -*- coding:utf-8 -*-

'''

file: map.py

usage: Show nCov data on China's map

author: lvah ding

datetime: 2020/2/3 10:33

'''

from pyecharts import options as opts

from pyecharts.charts import Map

from pyecharts.faker import Faker

import pandas as pd

import json

def get_city_code(name) -> str:

'''

Get city code by its full name, return None if not found

'''

for item in city_code:

if name in item['name']:

return item['code']

return None

def parse_data(filename: str):

with open(filename, 'r', -1, encoding='utf8') as f:

data = json.load(f)

rows = []

for province in data:

if '其他' in province['provinceShortName']:

continue

rows.append({'name': province['provinceShortName'], 'value': province['confirmedCount']})

for city in province['cities']:

code = get_city_code(city['cityName'])

if not code:

continue

rows.append({'name': code, 'value': city['confirmedCount']})

return rows

geo_file = './geography.json' # 地图数据文件

code_file = './city_code.json' # 城市代码文件

data_file = './data.csv' # 源数据文件

with open(geo_file, 'r', encoding='utf8') as f:

geo_data = json.load(f)

with open(code_file, 'r', encoding='utf8') as f:

city_code = json.load(f)

data = parse_data(data_file)

map = Map(init_opts = opts.InitOpts(width = '1200px', height = '800px'))

map.set_global_opts(title_opts = opts.TitleOpts(title = 'nCov Confirmed Cases Map'),

visualmap_opts = opts.VisualMapOpts(min_ = 0, max_ = 2000, is_piecewise = True),

legend_opts = opts.LegendOpts(is_show = False))

map.add('确诊数', data_pair = data, maptype = 'china', zoom = 1.2, is_roam = False, is_map_symbol_show = False, label_opts = opts.LabelOpts(is_show = True))

# map.render_notebook()

map.render('nCov_Confirmed_Cases_China.html') # html file will be stored in the same path of your script

```

在上面的代码中,我们引入了pyecharts这个包来渲染地图。我们采用了一个json格式的地理信息数据文件,这个文件可以在pyecharts的项目中找到。同样,我们还需要一个包含各个城市代码及名称的文件,我们在China-City-List项目中找到了这个文件,以便我们统计每个城市的确诊人数。还有一个包含疫情数据的CSV表格,我们通过刚刚提到的Pandas工具来提取其中的重要信息。

6. 总结

通过以上对Python爬虫和数据可视化的介绍,我们可以清楚地了解如何使用Python技术来实现疫情数据的爬取、处理以及可视化。这不仅为疫情防控提供了方便,同时也为我们深化理解Python语言和程序设计提供了很好的练习机会。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(96) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部