温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用Python抓取国家医疗费用数据

发布时间:2021-11-01 15:59:41 阅读:99 作者:iii 栏目:编程语言
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章主要介绍“怎么用Python抓取国家医疗费用数据”,在日常操作中,相信很多人在怎么用Python抓取国家医疗费用数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python抓取国家医疗费用数据”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

整个世界正被大流行困扰着,不同国家拿出了不同的应对策略,也取得了不同效果。这也是本文的脑洞来源,笔者打算研究一下各国在医疗基础设置上的开支,对几个国家的医疗费用进行数据可视化。

由于没有找到最近一年的可靠数据来源,所以这里使用的是2016年的数据。数据清楚哪个国家花得最多、哪个国家花得最少。我一直想试试在Python中网络抓取和数据可视化,这算是个不错的项目。虽然手动将数据输入Excel肯定快得多,但是这样就不会有宝贵的机会来练习一些技能了。

数据科学就是利用各种工具包来解决问题,网络抓取和正则表达式是我需要研究的两个领域。结果简短但复杂,这一项目展示了如何将三种技术结合起来解决数据科学问题。

怎么用Python抓取国家医疗费用数据

要求

网络抓取主要分为两部分:

  • 通过发出HTTP请求来获取数据

  • 通过解析HTMLDOM来提取重要数据

库和工具

  • Requests能够非常简单地发送HTTP请求。

  • Pandas是一个Python包,提供快速、灵活和有表现力的数据结构。

  • Web Scraper可以帮助在不设置任何自动化浏览器的情况下抓取动态网站。

  • Beautiful Soup是一个Python库,用于从HTML和XML文件中提取数据。

  • matplotlib是一个综合的库,用于在Python中创建静态、动画和交互式可视化效果。

设置

设置非常简单,只需创建一个文件夹,并安装BeautifulSoup和Requests。此处假设已经安装了Python3.x,再根据指令来创建文件夹并安装库。

mkdir scraper pip install beautifulsoup4 pip install requests pip install matplotlib pip install pandas

现在,在该文件夹中创建一个任意名称的文件。这里用的是scraping.py.,然后在文件中导入Beautiful Soup和  requests,如下所示:

import pandas as pd from bs4 import BeautifulSoup import matplotlib.pyplot as plt import requests

抓取的内容:国家名;人均开销。

网络抓取

现在,所有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,&rsquo;html.parser&rsquo;) country=list() expense=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(“”,””)) expense.append(round(float(Countries[i+1].find_all(“div”,{“class”:None})[2].text.replace(“”,””).replace(&lsquo;,&rsquo;,&rsquo;&rsquo;)))/365) Data = {&lsquo;country&rsquo;:country,&rsquo;expense&rsquo;: expense}

因为我想看看这些国家每天是如何花钱的,所以把这笔费用除以365。如果把给定的数据直接除以365,这可能会更容易些,但这样就没有学习的意义了。现在的“数据”看起来是这样的:

{ country : [ Central AfricanRepublic ,  Burundi ,  Mozambique ,  Congo, Dem. Rep. ,  Gambia, The ,  Niger , Madagascar ,  Ethiopia ,  Malawi ,  Mali ,  Eritrea ,  Benin ,  Chad , Bangladesh ,  Tanzania ,  Guinea ,  Uganda ,  Haiti ,  Togo ,  Guinea-Bissau , Pakistan ,  Burkina Faso ,  Nepal ,  Mauritania ,  Rwanda ,  Senegal ,  PapuaNew Guinea ,  Lao PDR ,  Tajikistan ,  Zambia ,  Afghanistan ,  Comoros , Myanmar ,  India ,  Cameroon ,  Syrian Arab Republic ,  Kenya ,  Ghana ,"Cote d Ivoire",  Liberia ,  Djibouti ,  Congo, Rep. ,  Yemen, Rep. , Kyrgyz Republic ,  Cambodia ,  Nigeria ,  Timor-Leste ,  Lesotho ,  SierraLeone ,  Bhutan ,  Zimbabwe ,  Angola ,  Sao Tome and Principe ,  SolomonIslands ,  Vanuatu ,  Indonesia ,  Vietnam ,  Philippines ,  Egypt, Arab Rep. , Uzbekistan ,  Mongolia ,  Ukraine ,  Sudan ,  Iraq ,  Sri Lanka ,  CaboVerde ,  Moldova ,  Morocco ,  Fiji ,  Kiribati ,  Nicaragua ,  Guyana , Honduras ,  Tonga ,  Bolivia ,  Gabon ,  Eswatini ,  Thailand ,  Jordan , Samoa ,  Guatemala ,  St. Vincent and the Grenadines ,  Tunisia ,  Algeria , Kazakhstan ,  Azerbaijan ,  Albania ,  Equatorial Guinea ,  El Salvador , Jamaica ,  Belize ,  Georgia ,  Libya ,  Peru ,  Belarus ,  Paraguay ,  NorthMacedonia ,  Colombia ,  Suriname ,  Armenia ,  Malaysia ,  Botswana , Micronesia, Fed. Sts. ,  China ,  Namibia ,  Dominican Republic ,  Iran,Islamic Rep. ,  Dominica ,  Turkmenistan ,  South Africa ,  Bosnia andHerzegovina ,  Mexico ,  Turkey ,  Russian Federation ,  Romania ,  St. Lucia , Serbia ,  Ecuador ,  Tuvalu ,  Grenada ,  Montenegro ,  Mauritius , Seychelles ,  Bulgaria ,  Antigua and Barbuda ,  Brunei Darussalam ,  Oman , Lebanon ,  Poland ,  Marshall Islands ,  Latvia ,  Croatia ,  Costa Rica , St. Kitts and Nevis ,  Hungary ,  Argentina ,  Cuba ,  Lithuania ,  Nauru , Brazil ,  Panama ,  Maldives ,  Trinidad and Tobago ,  Kuwait ,  Bahrain , Saudi Arabia ,  Barbados ,  Slovak Republic ,  Estonia ,  Chile ,  CzechRepublic ,  United Arab Emirates ,  Uruguay ,  Greece ,  Venezuela, RB , Cyprus ,  Palau ,  Portugal ,  Qatar ,  Slovenia ,  Bahamas, The ,  Korea,Rep. ,  Malta ,  Spain ,  Singapore ,  Italy ,  Israel ,  Monaco ,  SanMarino ,  New Zealand ,  Andorra ,  United Kingdom ,  Finland ,  Belgium , Japan ,  France ,  Canada ,  Austria ,  Germany ,  Netherlands ,  Ireland , Australia ,  Iceland ,  Denmark ,  Sweden ,  Luxembourg ,  Norway , Switzerland ,  United States ,  World ],  expense : [0.043835616438356165,0.0493150684931506840.0520547945205479460.057534246575342465,0.0575342465753424650.063013698630136990.06575342465753424,0.076712328767123290.08219178082191780.0821917808219178,0.08219178082191780.08219178082191780.08767123287671233,0.093150684931506860.098630136986301370.10136986301369863,0.104109589041095890.104109589041095890.10684931506849316,0.106849315068493160.10958904109589040.11232876712328767,0.12328767123287670.128767123287671230.13150684931506848,0.145205479452054780.15068493150684930.15068493150684930.15342465753424658,0.156164383561643830.156164383561643830.16164383561643836,0.169863013698630130.17260273972602740.17534246575342466,0.180821917808219180.180821917808219180.1863013698630137,0.18630136986301370.18630136986301370.19178082191780820.1917808219178082,0.197260273972602730.20.21369863013698630.21643835616438356,0.21917808219178080.23561643835616440.23561643835616440.2493150684931507,0.257534246575342460.26027397260273970.28767123287671230.29041095890410956,0.30136986301369860.306849315068493170.336986301369863,0.353424657534246570.35890410958904110.3698630136986301,0.38630136986301370.38630136986301370.41643835616438357,0.41917808219178080.41917808219178080.435616438356164370.4684931506849315,0.46849315068493150.49315068493150680.51506849315068490.5150684931506849,0.52602739726027390.5479452054794520.55616438356164390.5835616438356165,0.60273972602739720.60547945205479450.60821917808219180.6136986301369863,0.62191780821917810.66027397260273970.6849315068493150.7013698630136986,0.71232876712328760.71780821917808220.73424657534246570.7452054794520548,0.76986301369863010.80547945205479450.8109589041095890.8328767123287671,0.84383561643835610.85753424657534250.86575342465753420.8712328767123287,0.89589041095890410.89863013698630130.93150684931506840.9753424657534246,0.98356164383561640.99178082191780831.04109589041095881.0602739726027397,1.09041095890410961.1041095890410961.13424657534246581.1369863013698631,1.14794520547945211.1589041095890411.17260273972602751.2164383561643837,1.26575342465753421.2849315068493151.2849315068493151.3041095890410959,1.34246575342465761.35342465753424661.38356164383561641.389041095890411,1.41369863013698631.45753424657534251.5150684931506851.6356164383561644,1.67671232876712331.70684931506849311.72876712328767111.7753424657534247,1.81369863013698642.21643835616438342.33150684931506862.3945205479452056,2.4219178082191782.43561643835616432.55068493150684942.5835616438356164,2.61643835616438342.660273972602742.7068493150684932.7726027397260276,2.78356164383561662.8520547945205482.8712328767123292.915068493150685,2.9260273972602743.0109589041095893.14246575342465743.1890410958904107,3.230136986301373.24657534246575353.2630136986301373.621917808219178,3.62465753424657543.7780821917808224.139726027397264.323287671232877,4.4767123287671234.5863013698630144.9342465753424665.005479452054795,5.0246575342465755.0273972602739735.66.3780821917808215,6.54794520547945256.7452054794520547.5041095890410967.772602739726027,8.0547945205479458.25479452054794510.2602739726027410.506849315068493,10.84383561643835711.2794520547945211.36712328767123211.597260273972603,11.6794520547945212.21369863013698712.84383561643835712.915068493150685,12.99178082191780913.03835616438356113.70410958904109613.873972602739727,15.2493150684931515.64657534246575417.1808219178082220.487671232876714,26.94794520547945327.0410958904109582.8109589041095893]}

数据帧

绘制图表之前,必须使用Pandas准备一个数据帧。首先我们得明确DataFrame是什么:

DataFrame是一个二维大小可变的、潜在的异构表格式数据结构,带有标记的轴(行和列)。创造一个数据帧非常简单直接:

df = pd.DataFrame(Data,columns=[&lsquo;country&rsquo;&lsquo;expense&rsquo;])

可视化

我们大部分时间都花在收集和格式化数据上,现在到了做图的时候啦,可以使用matplotlib和seaborn  来可视化数据。如果不太在意美观,可以使用内置的数据帧绘图方法快速显示结果:

df.plot(kind = &lsquo;bar&rsquo;, x=&rsquo;country&rsquo;, y=&rsquo;expense&rsquo;) plt.show()

现在,结论出来了:许多国家每天的支出都低于一美元。这些国家中大多数都位于亚洲和非洲,看来世界卫生组织应更关注这些国家。

到此,关于“怎么用Python抓取国家医疗费用数据”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:http://mp.weixin.qq.com/s?__biz=MzI2NjkyNDQ3Mw==&mid=2247493827&idx=1&sn=342fd198b587cfd4332837c38c90339e&chksm=ea841015ddf39903903cbda34e7c25082558b8b17d8f8dcf4685338d266567ae63984388a3ea&mpshare=1&s

AI

开发者交流群×