资讯专栏INFORMATION COLUMN

使用Python挖掘GitHub的流行趋势(下)

dack / 1011人阅读

摘要:我们将数据帧转换为基于列的时间序列然后,我们使用聚合方法按语言和年份重构数据,并按语言计算出现次数我们在条形图上表示结果上图显示了汇编,,中的多种编程语言,,和移动语言,以及,和等现代语言。使用集合将确保我们具有唯一的值。

来源 | 愿码(ChainDesk.CN)内容编辑

愿码Slogan | 连接每个程序员的故事

网站 | http://chaindesk.cn

愿码愿景 | 打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优势创造睡后收入。

官方公众号 | 愿码 | 愿码服务号 | 区块链部落

免费加入愿码全思维工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码


本文阅读时长:8min

在本系列的第1部分中,我们收集了GitHub数据进行分析。本文,我们将根据我们的要求分析这些数据,以获得关于GitHub上最热门和流行的工具和语言的有趣见解。

到目前为止,我们已经看到GitHub API提供了有关围绕这些存储库的用户活动的代码存储库和元数据的有趣信息集。在接下来的部分中,我们将分析这些数据,通过分析其描述找出哪些是最受欢迎的存储库。当下技术发展如此迅速,这种方法可以帮助我们保持在最新趋势技术的顶端。为了找出什么是趋势技术,我们将分几步执行分析 :

根据描述检测最热门的主题/技术

确定全球最流行的编程语言

了解哪些编程语言用于顶级技术

确定最高技术

首先,我们将使用文本分析技术来确定2017年与存储库中的技术相关的最受欢迎的短语。我们的分析将集中在最常见的bigram。

我们导入一个实现n-gram搜索工具的nltk.collocation 模块:

import nltk

from nltk.collocations import *

然后,我们将clean description列转换为标记列表:

list_documents = df["clean"].apply(lambda x: x.split()).tolist()

当我们对文档执行分析时,我们将使用方法from_documents而不是默认的from_words 。这两种方法的区别在于输入的数据格式不同。在我们的案例中使用的那个用作参数列表,并且以文档方式而不是语料库方式搜索n-gram。它防止检测由一份文件的最后一个单词和另一份文件的第一个单词组成的双字符:

bigram_measures = nltk.collocations.BigramAssocMeasures()

bigram_finder = BigramCollocationFinder.from_documents(list_documents)

我们只考虑在文档集中出现至少三次的二元组:

bigram_finder.apply_freq_filter(3)

我们可以使用不同的关联度量来找到最佳的bi-gram,例如原始频率,pmi,学生t或chi sq。我们将主要关注原始频率测量,这是我们案例中最简单和最方便的指标。

根据raw_freq 测量,我们得到前20个big:

bigrams = bigram_finder.nbest(bigram_measures.raw_freq,20)

我们也可以通过应用score_ngrams 方法获得他们的分数:

scores = bigram_finder.score_ngrams(bigram_measures.raw_freq)

所有其他措施都是作为BigramCollocationFinder的方法实现的。可以分别用pmi、student_t和chi_sq替换raw_freq。但是,要创建可视化,我们需要实际的出现次数而不是分数。我们使用ngram_fd.items()方法创建一个列表,然后按降序对其进行排序。

ngram = list(bigram_finder.ngram_fd.items())

ngram.sort(key=lambda item: item[-1], reverse=True)

它返回一个包含嵌入元组及其频率的元组字典。我们将它转换为一个简单的元组列表,加入bigram标记:

frequency = [(" ".join(k), v) for k,v in ngram]

For simplicity reasons we put the frequency list into a dataframe:

df=pd.DataFrame(frequency)

And then, we plot the top 20 technologies in a bar chart:

import matplotlib.pyplot as plt

plt.style.use("ggplot")

df.set_index([0], inplace = True)

df.sort_values(by = [1], ascending = False).head(20).plot(kind = "barh")

plt.title("Trending Technologies")

plt.ylabel("Technology")

plt.xlabel("Popularity")

plt.legend().set_visible(False)

plt.axvline(x=14, color="b", label="Average", linestyle="--", linewidth=3)

for custom in [0, 10, 14]:

plt.text(14.2, custom, "Neural Networks", fontsize = 12, va = "center",

bbox = dict(boxstyle="square", fc="white", ec="none"))

plt.show()

增加一条额外的线,帮助我们汇总与神经网络相关的所有技术。在这种情况下,通过索引选择元素,手动完成(0,10,14)。此操作可能对解释有用。

前面的分析为我们提供了一套有趣的GitHub上最流行的技术。它包括软件工程,编程语言和人工智能的主题 。需要注意的一件重要事情是神经网络周围的技术不止一次出现,特别是深度学习,TensorFlow和其他特定项目。这并不奇怪,因为神经网络是人工智能领域的重要组成部分,在过去几年中已被大量使用和实践过。所以,如果你是一个有抱负的程序员,对人工智能和机器学习感兴趣,这是一个可以投入的领域!

编程语言

我们分析的下一步是比较不同编程语言之间的流行度。它将基于年度前1000个最受欢迎的存储库的样本 。

首先,我们得到过去三年的数据:

queries = ["created:>2017-01-01", "created:2015-01-01..2015-12-31",

"created:2016-01-01..2016-12-31"]

我们重用search_repo_paging 函数从GitHub API收集数据,并将结果连接到新的数据帧。

df = pd.DataFrame()

for query in queries:

data = search_repo_paging(query)

data = pd.io.json.json_normalize(data)

df = pd.concat([df, data])

我们将数据帧转换为基于create_at 列的时间序列

df["created_at"] = df["created_at"].apply(pd.to_datetime)

df = df.set_index(["created_at"])

然后,我们使用聚合方法groupby 按语言和年份重构数据,并按语言计算出现次数:

dx = pd.DataFrame(df.groupby(["language",

df.index.year])["language"].count())

我们在条形图上表示结果:

fig, ax = plt.subplots()

dx.unstack().plot(kind="bar", title = "Programming Languages per Year", ax= ax)

ax.legend(["2015", "2016", "2017"], title = "Year")

plt.show()

上图显示了汇编,C,C#中的多种编程语言 ,

Java,Web和移动语言,以及Python,Ruby和 Scala等现代语言 。通过三年的比较,我们看到了一些有趣的趋势。我们注意到HTML,这是所有Web开发的基石,在过去三年中一直保持稳定。Ruby曾经非常流行,但现在流行度下降了。Python的流行度,也是我们本文选择的语言,正在上升。最后,跨设备编程语言 Swift最初由Apple 创建,但现在是开源的,随着时间的推移越来越受欢迎。这可能很有趣在未来几年看,如果这些趋势改变或持续很长时间。

顶级技术中使用的编程语言

现在我们知道了储存库描述中引用的顶级编程语言和技术。在本节中,我们将尝试组合这些信息,并找出每种技术的主要编程语言。

我们从前一部分中选择了四种技术并打印相应的编程语言。我们查找包含已清理的存储库描述的列,并创建一组与该技术相关的语言。使用集合将确保我们具有唯一的值。

technologies_list = ["software engineering", "deep learning", "open source", "exercise practice"]

for tech in technologies_list:

print(tech)

print(set(df[df["clean"].str.contains(tech)]["language"]))

software engineering

{"HTML", "Java"}

deep learning

{"Jupyter Notebook", None, "Python"}

open source

{None, "PHP", "Java", "TypeScript", "Go", "JavaScript", "Ruby", "C++"}

exercise practice

{"CSS", "JavaScript", "HTML"}

在对顶级技术的描述进行文本分析,然后为它们提取编程语言后,我们注意到以下内容:

· 我们将None 视为结果之一,因为某些技术是使用多种编程语言开发的 。

· 远程学习是最受欢迎的,它使用Python作为主要的编程语言。它可能与TensorFlow相关联, TensorFlow是Google发布的一种流行的神经网络模块,在Python中大量使用。

· 开源是最受欢迎的存储库之一,它与几乎每种编程语言都有关联,而且很有趣的是,开源是如此的多样化和流行。

· 我们还注意到人们学习和实践几种与web相关的技术。在选择更复杂的方法之前,这可能是一个简单而有趣的方法。

· 最后,Java是软件工程项目的首选,HTML是工程web页面必不可少的。

您还可以使用此GitHub数据进行更多分析,例如:

· 按技术确定顶级存储库

· 在forks, watchers, open issues等方面比较不同的技术

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43748.html

相关文章

  • 使用Python挖掘GitHub流行趋势(上)

    摘要:假设使用了最新的编程工具和技术,分析可以帮助我们检测最流行的技术。我们使用工具将结果转换为干净的并创建数据帧。后者表示实际使用代码的人数,因此它与不同的组相关。为此,我们使用了一个名为的库,该库基于语言检测项目。 showImg(https://segmentfault.com/img/remote/1460000018986014?w=1800&h=696); 来源 | 愿码(Ch...

    Lionad-Morotar 评论0 收藏0
  • 拉勾数据岗位和热门编程语言现状分析

    摘要:另外数学成为了一个关键词,编程语言主要是等,运营也出现在词云中说明数据分析师也需要有运营能力。 功能点 爬取数据 所有公司数据,名称简写,城市,行业,职位数量,人数范围,标签,介绍,融资阶段,平均工资 github2016年度最受欢迎编程语言相应年数薪水,城市,学历要求,公司融资阶段,公司行业 大数据行业五大岗位相应年数薪水,城市,学历要求,公司融资阶段,公司行业,岗位要求 编程语...

    atinosun 评论0 收藏0
  • 【译】关于机器学习11个开源工具

    摘要:虽然广受欢迎,但是仍受到来自另外一个基于的机器学习库的竞争年出现的。还提供更传统的机器学习功能的库,包括神经网络和决策树系统。和的机器学习库。顾名思义,是用于神经网络机器学习的库,便于将浏览器用作数据工作台。 关于机器学习的11个开源工具 翻译:疯狂的技术宅英文标题:11 open source tools to make the most of machine learning英文连...

    岳光 评论0 收藏0
  • 23种深度学习库排行榜:TensorFlow最活跃、Keras最流行

    摘要:我们对种用于数据科学的开源深度学习库作了排名。于年月发布了第名,已经跻身于深度学习库的上半部分。是最流行的深度学习前端第位是排名较高的非框架库。颇受对数据集使用深度学习的数据科学家的青睐。深度学习库的完整列表来自几个来源。 我们对23种用于数据科学的开源深度学习库作了排名。这番排名基于权重一样大小的三个指标:Github上的活动、Stack Overflow上的活动以及谷歌搜索结果。排名结果...

    princekin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<