我知道数据很清楚谁花得最少,谁花得最多,但我想进一步利用这个表来考虑这个想法。我一直在寻找一个机会,在Python练习网页刮擦和可视化,并决定这是一个伟大的短期项目。
虽然几乎可以肯定的是,手动将数据输入 Excel 会更快,但我不可能有宝贵的机会练习一些技能!数据科学是关于使用一组不同的工具解决问题,而 Web 刮擦和正则表达式是我需要一些工作的两个领域(更不用说绘制绘图总是很有趣)。结果是一个很短但完整的项目,展示了我们如何将这三种技术结合起来来解决数据科学问题。
要求
通常,Web 刮擦分为两个部分:
- 通过发出 HTTP 请求来获取数据
- 通过分析 HTML DOM 提取重要数据
库和工具
- 美丽汤 是一个 Python 库,用于从 HTML 和 XML 文件中拉出数据。
- 请求允许您非常轻松地发送 HTTP 请求。
- 网络刮刀 将帮助我们刮动动态网站,而无需设置任何自动化浏览器。
- 熊猫 是一个Python包,提供快速、灵活和富有表现力的数据结构
- matplotlib 是一个全面的库,用于在 Python 中创建静态、动画和交互式可视化效果
只需创建一个文件夹,并安装美丽的汤和请求。用于创建文件夹和安装给定命令下方的库类型。我假设你已经安装了Python 3.x。
mkdir刮刀
点安装美丽的汤4
4
点安装垫图利布
5
点安装熊猫
现在,在文件夹内创建一个文件,任何你喜欢的名称。我使用scraping.py。然后,只需在文件中导入美丽汤和请求,如下所示。
Java
xxxxxxx
1
1
进口熊猫作为pd
2
从bs4导入美丽汤
3
进口垫片。pyplot作为plt
4
导入请求
我们要刮什么
- 国家/地区名称
- 人均费用
网络刮擦
现在,由于我们拥有准备刮刀的所有要素,我们应该向目标 URL发出 GET 请求,以获得原始 HTML 数据。
Java
xxxxxxx
1
1
r=请求。获取('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')。文本
这将为您提供该目标 URL 的 HTML 代码。
现在,您必须使用"美丽汤"来解析 HTML。
Java
xxxxxxx
1
1
汤=美丽的汤(r,'html.解析器')
2
国家/列表()
3
费用=列表()
我已经申报了两个空名单,以在24小时内存储每个国家的国家名称和费用我们将将所有项目标记存储在列表中。
Java
xxxxxxx
1
1
尝试:
2
国家=汤。find_all("div", {"类":"项目"*)
3
4
国家/无
因为世界上有190个国家。我们将为每个国家运行一个循环。
Java
xxxxxxx
1
for i在范围(0,190):
2
国家。追加 (国家+i+1].find_all("div", *"类":无{)}0}。"文本。替换("\n","")
3
费用。追加 (圆形(浮动(国家+i+1].find_all("div", *"类":无{)}2 }2文本。替换("\n","")。替换(',''''') )/365)
4
5
我把费用除以365,因为我想看看这些国家是如何每天花钱的。显然,如果我将给定的数据直接除以 365,但学习没有意义,那么这本来可以更容易吗?
现在,这就是"数据"的外观:
Java
xxxxxxx
1
1
['国家': [中非共和国''布隆迪''莫桑比克''刚果, 德姆代表'"冈比亚,'尼日尔'''马达加斯加''埃塞俄比亚''马拉维'''马里'''厄立特里亚'''贝宁'"乍得"'孟加拉国''坦桑尼亚'''几内亚''"乌干达'Haiti'"'多哥''几内亚比绍''''Pakistan'布基纳法索''尼泊尔''毛里塔尼亚'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''毛里塔尼亚'"'毛里塔尼亚'卢旺达"塞内加尔""巴布亚新几内亚""老挝人民民主共和国""塔吉克斯坦""赞比亚""阿富汗""科摩罗""缅甸""印度""喀麦隆""阿拉伯叙利亚共和国""肯尼亚""加纳""科特迪瓦""利比里亚""吉布提""刚果,代表"
'Guatemala' 'Samoa' ''''吉尔吉斯共和国',"柬埔寨","尼日利亚","东帝汶","莱索托","塞拉利昂","不丹","津巴布韦","安哥拉","圣多美和普林西比","所罗门群岛","瓦努阿图","印度尼西亚","越南","菲律宾","埃及" 阿拉伯代表,"乌兹别克斯坦","蒙古","乌克兰","苏丹","伊拉克","斯里兰卡","佛得角","摩尔多瓦","摩洛哥","斐济","基里巴斯","尼加拉瓜","圭亚那","洪都拉斯","汤加","玻利维亚","加蓬","埃斯瓦蒂尼","泰国","约旦"文森特和格林纳丁斯,"突尼斯","阿尔及利亚","哈萨克斯坦","阿塞拜疆","阿尔巴尼亚","赤道几内亚","萨尔瓦多","牙买加","伯利兹","格鲁吉亚","利比亚","秘鲁","白俄罗斯","巴拉圭","北马其顿","哥伦比亚","苏里南","亚美尼亚","马来西亚","哥伦比亚" 'Vietnam' Sts.',"中国',纳米比亚',多米尼加共和国'"伊朗, 伊斯兰代表'"多米尼克",土库曼斯坦'"南非'波斯尼亚和黑塞哥维那'"墨西哥' " 土耳其' , 俄罗斯联邦"罗马尼亚' Kitts and Nevis', 'Hungary', 'Argentina', 'Cuba', 'Lithuania', 'Nauru', 'Brazil', 'Panama', 'Maldives', 'Trinidad and Tobago', 'Kuwait', 'Bahrain', 'Saudi Arabia', 'Barbados', 'Slovak Republic', 'Estonia', 'Chile', 'Czech Republic', 'United Arab Emirates', 'Uruguay', 'Greece', 'Venezuela, RB', 'Cyprus', 'Palau', 'Portugal', 'Qatar', 'Slovenia', 'Bahamas, The', 'Korea, Rep.', 'Malta', 'Spain', 'Singapore', 'Italy', 'Israel', 'Monaco', 'San Marino', '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.049315068493150684, 0.052054794520547946, 0.057534246575342465, 0.057534246575342465, 0.06301369863013699, 0.06575342465753424, 0.07671232876712329, 0.0821917808219178, 0.0821917808219178, 00821917808219178, 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.435616438356164437, 0.4684931506849315, 0.46849315.4931506849315068 , 0.5150684931506849, 0.5150684931506849, 0 0.4684931506849315 0.4931506849315068547945205479452, 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.7753422465534247, 1.8136986301369864, 2.21643835616438344384 430684 93150686, 2.3945205479452056, 2.421917808219178, 2.4356164383561643, 25835616438356164, 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]}
数据框
在开始绘制图形之前,我们必须使用熊猫准备一个数据框架我知道你没说得对?所以,只要读这篇文章,这将帮助你很多。
创建一个非常简单和简单。
Java
xxxxxxx
1
1
df=pd。数据框架(数据、列="国家/地区""费用"*)
可视 化
这个项目是数据科学的指示,因为大部分时间都花在收集和格式化数据上
如果我们不太关心美学,我们可以使用内置的数据框绘图方法快速显示结果:
Java
xxxxxxx
1
1
df.图(种类='bar'x='国家'y="费用")
2
显示()
我知道这些国家的名字很小。但是你可以下载和分析它。现在,你可以看到最主要的事情是,许多国家的支出都不到一美元,这相当令人震惊。这些国家大多数来自亚洲和非洲。我认为,世卫组织应该更多地关注这些国家,而不是西方的发达国家。
这不一定是一个值得出版的情节,但它是总结一个小项目的好方法。
结论
学习技术技能的最有效方式是学习。虽然整个项目本可以手动将值插入到 Excel 中,但我喜欢从长远的角度考虑一下这里学到的技能将来会如何提供帮助。学习过程比最终结果更重要,在这个项目中,我们能够了解如何将 3 个关键技能用于数据科学:
- 网络刮擦:检索在线数据
- 美丽汤:分析我们的数据以提取信息
- 可视化:展示我们所有的辛勤工作
现在,走出去,开始你自己的项目,并记住:它不一定是改变世界是值得的。
请随时发表评论,并问我什么。你可以在推特和媒体上关注我。感谢您的阅读!
其他资源
还有名单!此时,您应该会放心地编写第一个从任何网站收集数据的 Web 刮刀。以下是在 Web 刮削过程中您可能会发现有帮助的其他一些资源:
Comments are closed.