本文转载自公众号《核心阅读》(ID:AI_Discovery)。全球都受到疫情的困扰,不同的国家也提出了不同的应对策略,取得了不同的效果。这也是本文的脑洞来源。作者打算研究各国在医疗基础设施上的支出,将几个国家的医疗费用数据可视化。由于找不到最近一年的可靠数据来源,这里使用2016年的数据。数据一目了然,哪个国家的支出最多,哪个国家的支出最少。我一直想尝试用Python进行网页抓取和数据可视化,这是一个很棒的项目。虽然手动将数据输入到Excel中肯定要快得多,但您无法通过这种方式获得练习某些技能的宝贵机会。数据科学就是使用各种工具包解决问题,网络抓取和正则表达式是我需要研究的两个领域。结果简短但复杂,该项目展示了如何结合三种技术来解决数据科学问题。要求网页抓取主要分为两部分:通过发出HTTP请求来抓取数据通过解析HTMLDOM请求来提取重要的数据库和工具可以非常简单地发送HTTP请求。Pandas是一个Python包,可提供快速、灵活且富有表现力的数据结构。WebScraper可以帮助抓取动态网站,而无需设置任何自动浏览器。BeautifulSoup是一个用于从HTML和XML文件中提取数据的Python库。matplotlib是一个综合库,用于在Python中创建静态、动画和交互式可视化。设置设置就像创建文件夹、安装BeautifulSoup和Requests一样简单。这里假设已经安装了Python3.x,然后按照提示创建文件夹和安装库。mkdirscraperpipinstallbeautifulsoup4pipinstallrequestspipinstallmatplotlibpipinstallpandas现在在该文件夹中创建一个任意名称的文件。这里是scraping.py.,然后在文件中导入BeautifulSoup和requests,如下:importpandasasdfrombs4importBeautifulSoupimportmatplotlib.pyplotaspltimportrequests人均支出。Web抓取现在所有的抓取器设置都已准备就绪,应该向目标URL发出GET请求以获取原始HTML数据。r=requests.get(https://api.scrapingdog.com/scrape?api_key=&url=https://data.worldbank.org/indicator/SH.XPD.CHEX.PC.CD?most_recent_value_desc=false&dynamic=true).text这将获取目标URL的HTML代码,我们必须使用BeautifulSoup来解析HTML。soup=BeautifulSoup(r,'html.parser')country=list()expense=list()作者用了两个空表来存储国家名称和每个国家24小时内的支出。如您所见,每个国家/地区都存储在一个“项目”标签中,所有项目标签都存储在一个列表中。try:Countries=soup.find_all("div",{"class":"item"})except:Countries=None世界上有190个国家,为每个国家的医疗支出运行一个for循环:foriinrange(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(',','')))/365)数据={'country':country,'expense':expense}因为我想看看这些国家每天如何花钱,所以我将成本除以365。将给定数据简单地除以365可能更容易,但是学习没有意义。国家:[中非共和国、布隆迪、莫桑比克、刚果、民主共和国、冈比亚、尼日尔、马达加斯加、埃塞俄比亚、马拉维、马里、厄立特里亚、贝宁、乍得、孟加拉国、坦桑尼亚、几内亚、乌干达、海地、多哥、几内亚-比绍、巴基斯坦、布基纳法索、尼泊尔、毛里塔尼亚、卢旺达、塞内加尔、巴布亚新几内亚、老挝人民民主共和国、塔吉克斯坦、赞比亚、阿富汗、科摩罗、缅甸、印度、喀麦隆、叙利亚阿拉伯共和国、肯尼亚、加纳、“科特迪瓦”、利比里亚、吉布提、刚果共和国、也门共和国、吉尔吉斯共和国、柬埔寨、尼日利亚、东帝汶、莱索托、塞拉利昂、不丹、津巴布韦、安哥拉、圣多美和普林西比、所罗门群岛、瓦努阿图、印度尼西亚、越南、菲律宾、埃及、阿拉伯共和国、乌兹别克斯坦、蒙古、乌克兰、苏丹、伊拉克、斯里兰卡、佛得角、摩尔多瓦、摩洛哥、斐济、基里巴斯、尼加拉瓜、圭亚那、洪都拉斯、汤加、玻利维亚、加蓬、斯威士兰、泰国、约旦、萨摩亚、危地马拉、圣文森特和格林纳丁斯、突尼斯、阿尔及利亚、哈萨克斯坦、阿塞拜疆、阿尔巴尼亚、赤道几内亚、萨尔瓦多、牙买加、伯利兹、格鲁吉亚、利比亚、秘鲁、白俄罗斯、巴拉圭、北麦克爱多尼亚、哥伦比亚、苏里南、亚美尼亚、马来西亚、博茨瓦纳、密克罗尼西亚、联邦、中国、纳米比亚、多米尼加共和国、伊朗、伊斯兰共和国、多米尼克、土库曼斯坦、南非、波斯尼亚和黑塞哥维那、墨西哥、土耳其、俄罗斯联邦、罗马尼亚、圣卢西亚、塞尔维亚、厄瓜多尔、图瓦卢、格林纳达、黑山、毛里求斯、塞舌尔、保加利亚、安提瓜和巴布达、文莱达鲁萨兰国、阿曼、黎巴嫩、波兰、马绍尔群岛、拉脱维亚、克罗地亚、哥斯达黎加、圣基茨和尼维斯、匈牙利、阿根廷、古巴、立陶宛、瑙鲁、巴西、巴拿马、马尔代夫、特立尼达和多巴哥、科威特、巴林、沙特阿拉伯、巴巴多斯、斯洛伐克共和国、爱沙尼亚、智利、捷克共和国、阿拉伯联合酋长国、乌拉圭、希腊、委内瑞拉、RB、塞浦路斯、帕劳、葡萄牙、卡塔尔、斯洛文尼亚、巴哈马、韩国、共和国,马耳他,西班牙,新加坡,意大利,以色列,摩纳哥,圣马力诺,新西兰,安道尔,英国,芬兰,比利时,日本,法国,加拿大,奥地利,德国,荷兰,爱尔兰,澳大利亚,冰岛,丹麦,瑞典,卢森堡,挪威,瑞士,美国,世界],费用:[0.043835616438356165,0.049315068493150684,0.05205??4794520547946,0.057534246575342465,0.057534246575342465,0.06301369863013699,0.06575342465753424,0.07671232876712329,0.0821917808219178,0.0821917808219178,0.0821917808219178,0.0821917808219178,0.08767123287671233,0.09315068493150686,0.09863013698630137,0.10136986301369863,0.10410958904109589,0.10410958904109589,0.10684931506849316,0.10684931506849316,0.1095890410958904,0.11232876712328767,0.1232876712328767,0.12876712328767123,0.13150684931506848,0.14520547945205478,0.1506849315068493,0.1506849315068493,0.15342465753424658,0.15616438356164383,0.15616438356164383,0.16164383561643836,0.16986301369863013,0.1726027397260274,0.17534246575342466,0.18082191780821918,0.18082191780821918,0.1863013698630137,0.1863013698630137,0.1863013698630137,0.1917808219178082,0.1917808219178082,0.19726027397260273,0.2,0.2136986301369863,0.21643835616438356,0.2191780821917808,0.2356164383561644,0.2356164383561644,0.2493150684931507,0.25753424657534246,0.2602739726027397,0.2876712328767123,0.29041095890410956,0.3013698630136986,0.30684931506849317,0.336986301369863,0.35342465753424657,0.3589041095890411,0.3698630136986301,0.3863013698630137,0.3863013698630137,0.41643835616438357,0.4191780821917808,0.4191780821917808,0.43561643835616437,0.4684931506849315,0.4684931506849315,0.4931506849315068,0.5150684931506849,0.5150684931506849,0.5260273972602739,0.547945205479452,0.5561643835616439,0.5835616438356165,0.6027397260273972,0.6054794520547945,0.6082191780821918,0.6136986301369863,0.6219178082191781,0.6602739726027397,0.684931506849315,0.7013698630136986,0.7123287671232876,0.7178082191780822,0.7342465753424657,0.7452054794520548,0.7698630136986301,0.8054794520547945,0.810958904109589,0.8328767123287671,0.8438356164383561,0.8575342465753425,0.8657534246575342,0.8712328767123287,0.8958904109589041,0.8986301369863013,0.9315068493150684,0.9753424657534246,0.9835616438356164,0.9917808219178083,1.0410958904109588,1.0602739726027397,1.0904109589041096,1.104109589041096,1.1342465753424658,1.1369863013698631,1.1479452054794521,1.158904109589041,1.1726027397260275,1.2164383561643837,1.2657534246575342,1.284931506849315,1.284931506849315,1.3041095890410959,1.3424657534246576,1.3534246575342466,1.3835616438356164,1.389041095890411,1.4136986301369863,1.4575342465753425,1.515068493150685,1.6356164383561644,1.6767123287671233,1.7068493150684931,1.7287671232876711,1.7753424657534247,1.8136986301369864,2.2164383561643834,2.3315068493150686,2.3945205479452056,2.421917808219178,2.4356164383561643,2.5506849315068494,2.5835616438356164,2.6164383561643834,2.66027397260274,2.706849315068493,2.7726027397260276,2.7835616438356166,2.852054794520548,2.871232876712329,2.915068493150685,2.926027397260274,3.010958904109589,3.1424657534246574,3.1890410958904107,3.23013698630137,3.2465753424657535,3.263013698630137,3.621917808219178,3.6246575342465754,3.778082191780822,4.13972602739726,4.323287671232877,4.476712328767123,4.586301369863014,4.934246575342466,5.005479452054795,5.024657534246575,5.027397260273973,5.6,6.3780821917808215,6.5479452054794525,6.745205479452054,7.504109589041096,7.772602739726027,8.054794520547945,8.254794520547945,10.26027397260274,10.506849315068493,10.843835616438357,11.27945205479452,11.367123287671232,11.597260273972603,11.67945205479452,12.213698630136987,12.843835616438357,12.915068493150685,12.991780821917809,13.038356164383561,13.704109589041096,13.873972602739727,15.24931506849315,15.646575342465754,17.18082191780822,20.487671232876714,26.947945205479453,27.041095890410958,2.8109589041095893]}数据帧绘制图表之前,必须使用Pandas准备一个数据帧首先我们得明确DataFrame是什么:DataFrame是一个二Variable-dimensional,potentiallyheterogeneoustabulardatastructureswithlabeledaxes(rowsandcolumns).Creatingadataframeisverysimpleandstraightforward:df=pd.DataFrame(Data,columns=['country','expense'])VisualizationWespendmostofourtimecollectingandformattingdata,nowit'stimetomakegraphs,youcanusematplotlibandseaborntovisualizethedata.如果不太在意美观,可以使用内置的数据框绘图方法快速显示结果:df.plot(kind='bar',x='country',y='expense')plt.show()现在,结论出来了:许多国家每天花费不到一美元。这些国家大多位于亚洲和非洲,看来世界卫生组织更应该关注这些国家。来源:unsplash这不一定是一张值得发表的图表,但它是结束一个小项目的最佳方式。学习技术技能的最有效方法是通过实践经验。学习过程比最终结果更重要。在这个项目中,展示了如何使用3项关键的数据科学技能:Web抓取:检索互联网数据BeautifulSoup:分析数据以提取信息可视化:展示与技术相比的所有努力更重要的是,找到您感兴趣的项目,而不是能改变世界的东西一定是有价值的,让我们来探索生活中有趣的项目。