Python有以下三个特点:
· 易用性和灵活性
· 全行业高接受度:Python无疑是业界最流行的数据科学语言
· 用于数据科学的Python库的数量优势
做为当今人工智能和机器学习领域最流行的编程语言之一。Python 以其有用的库和包而著称,即使没有软件工程背景的人也能编程。 本文基于 GitHub 仓库的示例数据集,探索流行的 Python 标准库。
Python 拥有一组与 Python 语言一起分发的标准库,如 DateTime、math 或 Random。本文的目标是在 GitHub 的 Python 仓库中找到 10 个最有用的标准库。为实现我们的目标,我们研究了 GitHub 中不同的 Python 仓库,并收集了它们的旧库来回答这个问题。
为了开始我们的研究,首先,我们收集了 GitHub 中 5 个著名的 Python 资源库在过去一年的提交情况。然后,我们对这些仓库中的 Python 源文件进行解析,并收集其提交中使用的库。最后,我们将这些 GitHub 仓库提交中使用的 10 个最流行的 Python 标准库进行可视化。如果有想跟我们一起交流学习的可以来扣扣裙(609616821)互相交流哦
用于数据收集的Python库
你是否曾遇到过这样的情况:缺少解决问题的数据?这是数据科学中一个永恒的问题。这也是为什么学习提取和收集数据对数据科学家来说是一项非常重要的技能。数据提取和收集开辟了前所未有的道路。
有不同的方法可以访问 GitHub 仓库中的数据,例如 GitHub torrent、Git API 调用或 Google big query。但是,在本文中,我们想要尝试一个新的非常有用的 Python 包,名为 Pydriller,它可以收集我们需要的数据。Pydriller 速度快,使用方便。我是在攻读博士学位的时候熟悉了这个有趣的包。你可以在 这里 查看 Pydriller 的文档。要从 Pydriller 开始,首先,我们安装包:
pip install pydriller
每次提交时,GitHub 中的一个或多个源文件都可以被修改。在 GitHub 这样的版本控制系统中,每一次提交都有一个文件,名为“diff”。它通过提交特定的提交来存储在源文件中应用的更改。在 GitHub 仓库的提交中查找库的方法之一是在“diff”文件中搜索正则表达式。
但在本文中,我们想尝试一些不同的方法。我们比较两个不同版本的源文件“提交之前”和“提交之后”应用提交,然后收集这两个文件在库名中的差异。
通过这种方法,我们就可以发现库在不同提交中的使用频率。好消息是,Pydriller 允许我们在应用提交之前和应用提交之后访问源文件的版本。下面是收集数据所需的代码:
#import libraries
import pydriller as pyd
from datetime import datetime
#period to collect data
dt1 = datetime(2019, 11, 1)
dt2 = datetime(2020, 11, 1)
#path of 5 Python repositories
path = ["https://github.com/django/django.git","https://github.com/pandas-dev/pandas.git",
"https://github.com/numpy/numpy","https://github.com/home-assistant/home-assistant.git",
"https://github.com/donnemartin/system-design-primer.git"]
#collecting a version of a source file before and after applying a commit
tf_source = pd.DataFrame(columns=['commit_ID', 'before_Commit', 'after_Commit'])
for commit in pyd.RepositoryMining(path_to_repo=path, since=dt1, to=dt2).traverse_commits():
for modified_file in commit.modifications:
if modified_file.filename.endswith(".py"):
tf_source = tf_source.append({
'commit_ID': commit.hash,'before_Commit': modified_file.source_code_before,
'after_Commit': modified_file.source_code}, ignore_index=True)
用 Pydriller 在 GitHub 中收集 5 个著名的 Python 库。
我们在 GitHub 上收集了 5 个大的 Python 项目在去年的提交情况,其中有 Django、Pandas、NumPy、Homeassistant、system-design-primer。“RepositoryMining”是 Pydriller 的主要 API 调用之一。
我们可以通过 RepositoryMining 中的两个参数来定义一个时间段来收集不同仓库中的提交:since和to。另外,我们考虑所有名称以“.py”结尾的源文件的提交,因为这些资源库中也有其他编程语言的源文件,但我们关注的是 Python 库。
我们收集了三个特征:commit.hash、source_code_before、source_code。Pydriller 中的commit.hash返回提交的id,source_code_before是应用提交前的源文件版本,source_code则显示提交后的源文件内容。下面是我们收集的数据头:
tf_source.head()
到目前为止,我们已经收集了开始旅程所需的数据。在下一节中,我们将学习如何探索这些源文件中的库。
如何解析 Python 源代码
提取源代码中信息的方法之一是将它们转换成抽象语法树(Abstract Syntax Tree,AST)。然后,我们就可以遍历这棵树,并收集目标节点。
但最重要的一点是,我们只想收集 Python 标准库,而不是所有在仓库中使用的包,比如本地定义的库,它们只有在仓库中才有意义。Python 标准库是和 Python 语言一起发布的。
因此,为了将标准包和其他包分开,我们需要拉取 Python 中所有有效的标准库。然后,我们可以写一个函数来收集源代码中的库名。
我们可以将本节分为两步:收集 Python 中所有可用的标准库的列表、构建基于抽象语法书的函数来收集库名。
1. 收集 Python 中所有可用的标准库的列表
在 Python 的网站 上,有一张 Python 中所有标准库的列表,并附有简短说明。这个页面将所有的 Python 标准库按字母名称排序,帮助我们对 Python 中所有的标准库进行拉取。我把所有 Python 标准库的列表放在 这里,以 .csv 的格式。
2. 构建基于抽象语法书的函数来收集库名
既然我们有了所有标准 Python 库的列表,我们就需要从 Python GitHub 仓库中收集我们示例数据集中的库名称。正如我们提到的,其中一种方法是遍历抽象语法树