python大数据分析需要电脑吗(使用谷歌BigQuery更好地了解Python的生态系统)
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
谈及编程,了解同行们正在使用的工具很重要。这不仅有助于了解行业发展趋势,同时也能拓宽和其他程序员的共同语言。
由于我个人最近正在更多地用Python进行数据分析,这让我也很好奇其他数据科学家最常用的包有哪些。当然,我可以用谷歌搜索“数据科学最好的Python软件包”,但本着统计精神,我想通过数据而不是臆测来进行决断。此外,我也发现谷歌的一个工具——BigQuery十分好用。
如果你想在大数据的海洋中畅游,体验谷歌的庞大资源,或只是练习SQL技巧,那么BigQuery值得你一试。BigQuery公开的现有数据集含括了自2009年起纽约每辆出租车的行程,2008年起旧金山每通311报警电话,以及2016赛季美国职棒大联盟每一场球赛。
而我经常从GitHub获取相关公开数据集(其中包括超过1.45亿次的提交以及1.6亿个文件)。通过查询这个数据集可以找到目前流行的扩展、通用文件以及常用包,也不需要单独打开代码就能领略编程之美。(谷歌的Felipe Hoffa,负责该数据集的推广,并通过社区进行持续的分析记录。)
我觉得应更加深入地了解这些Python文件而不仅仅只是检验。虽然数据科学越来越流行,但它依然只是当今最流行和多功能的语言之一的Python广泛应用中的一隅。任何局限于数据科学的认知都会被更通用的Python运用所取代。我其实更想搜索ipynb文件而不是.py文件,因为前者可用于Jupyter(原名IPython) notebook。
使用notebooks较之命令行运行Python脚本的主要优点是无需运行整个文件而可分块执行代码,同时还能内嵌显示图像。这种灵活性使得notebook能够让数据科学家进行即时可视化或大数据集操作,因此我想这些会体现在流行的ipynb包中。鉴于此,我在GitHub数据集上着手比较py文件和ipynb文件。
BigQuery可以用多种语言通过命令行或客户端接入,但我偏向于Web UI界面(部分原因源于我用同一浏览器中搜索SQL和正则表达式语法…)。登入谷歌帐户后,点击GitHub数据集,便可查询表“file”:
事实上,需要用到两个表来完成查询:选择表contents并通过id和路径名带有.py后缀的表files子集链接:
要注意的是如果你使用谷歌的表做类似大数据量的查询,根据规定,需要创建一个谷歌云平台帐户,并绑定信用卡。处理前1TB的数据是免费的,但因为一些错误和无效查询我还多花费了10美元。
查询结果存入个人表格后,我也相应查询了Jupyter notebooks(WHERE RIGHT(path, 6) = ".ipynb"
),最后分别得到.py和.ipynb文件内容。
确定.py文件中十个最流行的包并不费力,尤其是参考了Google"s Francesc Campoy的指南后。通过SELECT SPLIT(content, " ") as line
可以获得以“import”或“from”开头的文本行(两个加载Python包的方法),再使用正则表达式就能抓取这两个词后的包名:
之后我得到了以下结果:
package | n | |
---|---|---|
1 | os | 1048981 |
2 | sys | 829156 |
3 | __future__ | 691222 |
4 | time | 424434 |
5 | logging | 404678 |
6 | re | 403193 |
7 | numpy | 394069 |
8 | datetime | 373272 |
9 | json | 282672 |
10 | unittest | 278512 |
没什么特别惊讶的。大多数包都是Python的标准库,如os、sys和re,分别用于操作系统交互,系统变量访问,正则表达式应用。这些非常“通用”的包的确非常流行,从而掩盖了更具专业性的结果,如数据科学类的包。
处理Jupyter notebook的表则稍微复杂些。由于其支持多种cell形式(如代码、注释、markdown),每个文本内容的格式实际为JSON,因此需要一个比长字符串型更复杂的数据格式。
可能还有更加优雅的方法处理复杂的嵌套层,在这里我通过JSON文本中的“ ”成功获得了代码的文本行。针对包标签意外携带其他字符的情况,我也采取了特殊处理WHEN package LIKE "%\n",",最终结果是干净的:
结果如下:
package | n | |
---|---|---|
1 | numpy | 9344 |
2 | matplotlib.pyplot | 5715 |
3 | pandas | 4469 |
4 | os | 1940 |
5 | matplotlib | 1714 |
6 | IPython.display | 1627 |
7 | sys | 1577 |
8 | __future__ | 1244 |
9 | sklearn | 1162 |
10 | time | 1006 |
整体结果显示Jupyter排名的量级小于第一张表,因为Notebook的应用相对并不普遍。不过流行包的顺序却颇有意味。numpy跃居第一,而数据分析工具pandas,可视化工具matplotlib以及机器学习库sklearn紧随其后,超过标准库os。这些都是去掉与数据科学不相关的python代码后排名靠前的流行库。
我的直觉得到了很好的验证,Jupyter notebook主要用于统计分析。但这个项目更有趣的地方则是运用BigQuery感受在仅仅几秒内从海量的数据中筛选出结果的神奇。我鼓励读者朋友们自己通过GitHub数据集借助BigQuery尝试其他分析。在这3TB的数据中依然有很多值得探索...
英文原文:https://dev.to/walker/using-googles-bigquery-to-better-understand-the-python-ecosystem 译者:luoshao23,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com