用Python采集上海3000家医院数据,并进行可视化分析

优采云 发布时间: 2022-04-28 21:06

  用Python采集上海3000家医院数据,并进行可视化分析

  

  大家好,我是J哥。

  

  细心的朋友应该已经发现,我昨天在视频号更新了一个有意思的视频,还没观看的阔以戳下方

  

  :

  很多小伙伴非常感兴趣,纷纷私信J哥教程。其实整个内容还是比较简单的,用到的技巧在本公众号都能找到文章与之对应,包括爬虫、pandas数据处理、自动化办公、数据可视化等内容。

  一、数据采集

  数据来源于高德开放平台的POI数据,需要提前在高德开放平台注册并创建应用,获取你的专属key。

  

  高德地图开放平台当然,你也可以通过百度地图开放平台或腾讯地图开放平台获取相关数据,方法都差不多。

  POI数据很多,你可以自定义地理区域和类别进行数据采集,这里我只采集了上海16个区的综合医院地理数据。

  # -*- coding: utf-8 -*-<br />import requests<br />import json<br />from urllib.parse import quote<br />import xlwt<br />from fake_useragent import UserAgent<br />from Coordin_transformlat import gcj02towgs84<br /><br />def get_data(key, city, types, page):<br />    '''调用POI '''<br />    headers= {'User-Agent':str(UserAgent().random)}<br />    url = f'https://restapi.amap.com/v3/place/text?key={key}&types={types}&city={quote(city)}&page={page}&output=josn'<br />    r = requests.get(url, headers=headers,timeout=2)<br />    r.encoding = 'utf-8'<br />    data = r.text<br />    return data<br /><br />def get_num(key, city, types):<br />    '''控制申请次数'''<br /><br /><br />def save_data(poilist, city,types):<br />    '''保存到excel'''<br /> <br /><br />if __name__ == "__main__":<br />    #高德密钥<br />    key = '你自己的key' #高德开放平台申请即可<br />    types = ['综合医院']<br />    city_list = ['黄浦区','徐汇区','长宁区','静安区','普陀区','闸北区','虹口区','杨浦区','浦东新区',<br />                 '奉贤区','青浦区','松江区','嘉定区','金山区','闵行区','宝山区']<br />    for city in city_list:<br />        for type in types:<br />            poi = get_num(key,city,type)<br />            print(f'{city}的{type}共有{len(poi)}条数据')<br />            save_data(poi,city,type)<br />            print(f'{city}的{type}写入成功')<br />    print('数据获取完成')

  整个数据采集逻辑比较简单,带着你的key和关键字向高德平台请求数据,保存为excel即可。这里需要注意的是平台对普通开发者有请求次数限制,咱们可以通过遍历行政区(而非整个城市)的方式,尽可能获取更全面的数据。

  数据请求完后,共采集到大概3000条数据,得到16个excel表格:

  

  二、数据处理

  为了便于分析,咱们需要将16个excel表格数据合并为一个df,自然少不了pandas大法。excel合并的操作其实前年J哥就进行了详细讲解:

  import pandas as pd<br />from pathlib import Path<br /><br />files = Path("./").glob("*.xls")<br />dfs = [pd.read_excel(f) for f in files]<br />df = pd.concat(dfs)

  另外,我发现数据集存在缺失值,5个异常值,这会影响后面的地图可视化,因此,咱们用0填充缺失值,筛选出需要的字段和数据(纬度小于32)。

<p>df = df.fillna(0) #填充缺失值<br />df = df[['lon','lat','name','address','adname']] #筛选需要的字段<br />df = df[(df['lat'] 

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线