读芯术|Python抓取国家医疗费用数据:哪个国家花得最多、哪个花得最少?


全文共3326字 , 预计学习时长25分钟

读芯术|Python抓取国家医疗费用数据:哪个国家花得最多、哪个花得最少?
本文插图

图源:unsplash
整个世界正被大流行困扰着 , 不同国家拿出了不同的应对策略 , 也取得了不同效果 。 这也是本文的脑洞来源 , 笔者打算研究一下各国在医疗基础设置上的开支 , 对几个国家的医疗费用进行数据可视化 。
由于没有找到最近一年的可靠数据来源 , 所以这里使用的是2016年的数据 。 数据清楚哪个国家花得最多、哪个国家花得最少 。 我一直想试试在Python中网络抓取和数据可视化 , 这算是个不错的项目 。 虽然手动将数据输入Excel肯定快得多 , 但是这样就不会有宝贵的机会来练习一些技能了 。
数据科学就是利用各种工具包来解决问题 , 网络抓取和正则表达式是我需要研究的两个领域 。 结果简短但复杂 , 这一项目展示了如何将三种技术结合起来解决数据科学问题 。
要求
网络抓取主要分为两部分:
· 通过发出HTTP请求来获取数据
· 通过解析HTMLDOM来提取重要数据
库和工具
· Requests能够非常简单地发送HTTP请求 。
· Pandas是一个Python包 , 提供快速、灵活和有表现力的数据结构 。
· Web Scraper可以帮助在不设置任何自动化浏览器的情况下抓取动态网站 。
· Beautiful Soup是一个Python库 , 用于从HTML和XML文件中提取数据 。
· matplotlib是一个综合的库 , 用于在Python中创建静态、动画和交互式可视化效果 。
设置
设置非常简单 , 只需创建一个文件夹 , 并安装BeautifulSoup和Requests 。 此处假设已经安装了Python3.x , 再根据指令来创建文件夹并安装库 。
mkdir scraperpip install beautifulsoup4pip install requestspip install matplotlibpip install pandas
现在 , 在该文件夹中创建一个任意名称的文件 。 这里用的是scraping.py. , 然后在文件中导入Beautiful Soup和 requests , 如下所示:
import pandas as pdfrom bs4 import BeautifulSoupimport matplotlib.pyplot as pltimport requests
抓取的内容:国家名;人均开销 。

读芯术|Python抓取国家医疗费用数据:哪个国家花得最多、哪个花得最少?
本文插图

图源:unsplash
【读芯术|Python抓取国家医疗费用数据:哪个国家花得最多、哪个花得最少?】
网络抓取
现在 , 所有scraper设置都已准备好 , 应向target URL发出GET请求以获得原始HTML数据 。
r =requests.get('https://api.scrapingdog.com/scrape?api_key=<YOUR_API_KEY>&url=https://data.worldbank.org/indicator/SH.XPD.CHEX.PC.CD?most_recent_value_desc=false&dynamic=true').text
这将得出target URL的HTML代码 , 我们必须使用Beautiful Soup来解析HTML 。
soup = BeautifulSoup(r,’html.parser’)country=listexpense=list
笔者用两张空表来存储国家名和每个国家24小时内的开支 。 可以看到 , 每个国家都存储在一个“项目”标签中 , 把所有的项目标签都存储在一张列表中 。
try: Countries=soup.find_all(“div”,{“class”:”item”})except: Countries=None
世界上有190个国家 , 为每个国家的医疗开支运行一个for循环:
for i in range(0,190):country.append(Countries[i+1].find_all(“div”,{“class”:None})[0].text.replace(“\n”,””))expense.append(round(float(Countries[i+1].find_all(“div”,{“class”:None})[2].text.replace(“\n”,””).replace(‘,’,’’)))/365)Data = http://news.hoteastday.com/a/{‘country’:country,’expense’: expense}


推荐阅读