python大数据分析需要电脑吗(使用谷歌BigQuery更好地了解Python的生态系统)(1)

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”:

python大数据分析需要电脑吗(使用谷歌BigQuery更好地了解Python的生态系统)(2)

事实上,需要用到两个表来完成查询:选择表contents并通过id和路径名带有.py后缀的表files子集链接:

python大数据分析需要电脑吗(使用谷歌BigQuery更好地了解Python的生态系统)(3)

要注意的是如果你使用谷歌的表做类似大数据量的查询,根据规定,需要创建一个谷歌云平台帐户,并绑定信用卡。处理前1TB的数据是免费的,但因为一些错误和无效查询我还多花费了10美元。

查询结果存入个人表格后,我也相应查询了Jupyter notebooks(WHERE RIGHT(path, 6) = ".ipynb"),最后分别得到.py和.ipynb文件内容。

确定.py文件中十个最流行的包并不费力,尤其是参考了Google"s Francesc Campoy的指南后。通过SELECT SPLIT(content, " ") as line可以获得以“import”或“from”开头的文本行(两个加载Python包的方法),再使用正则表达式就能抓取这两个词后的包名:

python大数据分析需要电脑吗(使用谷歌BigQuery更好地了解Python的生态系统)(4)

之后我得到了以下结果:

packagen
1os1048981
2sys829156
3__future__691222
4time424434
5logging404678
6re403193
7numpy394069
8datetime373272
9json282672
10unittest278512

没什么特别惊讶的。大多数包都是Python的标准库,如os、sys和re,分别用于操作系统交互,系统变量访问,正则表达式应用。这些非常“通用”的包的确非常流行,从而掩盖了更具专业性的结果,如数据科学类的包。

处理Jupyter notebook的表则稍微复杂些。由于其支持多种cell形式(如代码、注释、markdown),每个文本内容的格式实际为JSON,因此需要一个比长字符串型更复杂的数据格式。

可能还有更加优雅的方法处理复杂的嵌套层,在这里我通过JSON文本中的“ ”成功获得了代码的文本行。针对包标签意外携带其他字符的情况,我也采取了特殊处理WHEN package LIKE "%\n",",最终结果是干净的:

python大数据分析需要电脑吗(使用谷歌BigQuery更好地了解Python的生态系统)(5)

结果如下:

packagen
1numpy9344
2matplotlib.pyplot5715
3pandas4469
4os1940
5matplotlib1714
6IPython.display1627
7sys1577
8__future__1244
9sklearn1162
10time1006

整体结果显示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,