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

  • 来源 | 愿码(ChainDesk.CN)内容编辑
  • 愿码Slogan | 链接每一个程序员的故事
  • 网站 | http://chaindesk.cn
  • 愿码愿景 | 打造全学科IT系统免费课程,助力小白用户、初级工程师0成本免费系统学习、低成本进阶,帮助BAT一线资深工程师成长并利用自身优点创造睡后收入。
  • 官方公众号 | 愿码 | 愿码服务号 | 区块链部落
  • 免费加入愿码全思惟工程师社群 | 任一公众号回复“愿码”两个字获取入群二维码

本文阅读时长:8min程序员

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

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

  1. 根据描述检测最热门的主题/技术
  2. 肯定全球最流行的编程语言
  3. 了解哪些编程语言用于顶级技术

肯定最高技术


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

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

import nltk

from nltk.collocations import *

而后,咱们将clean description列转换为标记列表:app

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等方面比较不一样的技术

相关文章
相关标签/搜索