工程代码访问链接:https://gitee.com/cngmh/github-language-data-analysis
数据来源 kaggle 官方网站,详细访问链接:https://www.kaggle.com/datasets/isaacwen/github-programming-languages-data?select=issues.csv
分析 2011-2022 年,Github 上所使用语言的数据。
1、从每年相关语言提出的问题数、PR数、repos数分析 2011-2022 年编程语言使用情况
2、从每年相关语言提出的问题数、PR数分析编程语言的流行趋势
使用数据分别为:
issues:
name: 语言名称; year: 年份; quarter: 季度; count: 与相应语言有关的repos的问题数目
prs:
name:语言名称; year: 年份; quarter: 季度; count: 与相应语言有关的repos上的PR数
repos:
language: 语言名称; num_repos: repos的数目
观察数据,从左往右分别为 issues.csv、prs: name.csv、repos.csv。
首先,导入相关的库,提取 .csv 数据,并简单的处理一下数据。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot') # 更改风格,R语言绘图库风格
plt.rcParams['font.sans-serif'] = 'SimHei'
#读取 .csv 数据
issues = pd.read_csv('issues.csv')
prs = pd.read_csv('prs.csv')
repos = pd.read_csv('repos.csv')
#去除 2022 年数据,因为 2022 年工作才刚刚开始
issues = issues[issues['year'] != 2022]
prs = prs[prs['year'] != 2022]
#去除 2011 年数据,因为 2011 年没有完整的 4 个季度的数据
issues = issues[issues['year'] != 2011]
prs = prs[prs['year'] != 2011]
查看数据信息
# 语言和问题数
# 查看表格信息,数据很干净
print(issues.info())
print(issues.describe())
打印出的信息,issues 中包含 3339 行、4列,且无空值。可以查看均值、标准差、分位数以及最大最小值。其他数据表格也可以这样查看信息。
Int64Index: 3339 entries, 27 to 3365 Data columns (total 4 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 3339 non-null object 1 year 3339 non-null int64 2 quarter 3339 non-null int64 3 count 3339 non-null int64 dtypes: int64(3), object(1) memory usage: 130.4+ KB None year quarter count count 3339.000000 3339.000000 3339.000000 mean 2016.866727 2.504642 9301.251872 std 2.520122 1.116717 28820.681767 min 2012.000000 1.000000 100.000000 25% 2015.000000 2.000000 225.000000 50% 2017.000000 3.000000 570.000000 75% 2019.000000 4.000000 3029.000000 max 2021.000000 4.000000 341480.000000
从提出的issues数、PR数、repos数这三个方面分析流行编程语言 TOP10。
plt.figure(figsize=(12,4))
plt.subplot(131)
issues.groupby('name')['count'].sum().nlargest(10).plot(kind='bar')
plt.title('相应语言有关的repos的问题数目TOP10', fontsize=12)
plt.xlabel('语言名称')
plt.ylabel('repos的问题数目')
plt.subplot(132)
prs.groupby('name')['count'].sum().nlargest(10).plot(kind='bar')
plt.title('相应语言有关的repos上的PR数TOP10', fontsize=12)
plt.xlabel('语言名称')
plt.ylabel('repos的PR数目')
plt.subplot(133)
repos.groupby('language')['num_repos'].sum().nlargest(10).plot(kind='bar')
plt.title('相关语言repos的数目TOP10', fontsize=12)
plt.xlabel('语言名称')
plt.ylabel('repos的数目')
柱形图如下图所示。
分析:图中的语言是2012-2021年受到关注的前10的语言。repos的问题数JavaScript最多,python其次,接着是java,还有其他语言。repos的PR数的前三与与问题数相同,其余语言排名略有不同,C不在前10内,HTML进入了前10。repos数量的前10的排名也有所变化。综合来看,JavaScript是使用和关注最多的语言。
按年份分析流行编程语言 TOP5 及绝对走势。首先分析2012-2021年 repos问题数 TOP5 及绝对走势。
iss1 = issues[issues['year'] == 2012].groupby(['year','name'])['count'].sum().nlargest(5).reset_index()
for i in range(2013,2022):
iss2 = issues[issues['year'] == i].groupby(['year','name'])['count'].sum().nlargest(5).reset_index()
iss1 = pd.concat([iss1, iss2], axis=0)
iss1.groupby(['year','name'])['count'].sum().unstack().plot()
plt.title('相应语言repos问题数走势', fontsize=12)
plt.xlabel('年份')
plt.ylabel('repos的问题数目')
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))
分析:整体相关语言的repos的问题数在2012-2016处于上升解阶段,大概在2016-2017年处于顶峰,2018-2021年开始下降。其中JavaScript的repos的问题数远高于其他编程语言,说明该语言是最使用广泛和受关注的。Python与Jave的问题数相当。PHP与Rbuy在前期处于TOP5,而后不再是极热门语言。后期TypeScript和Go成为新晋TOP5。
接下来看2012-2021年 repos RP数 TOP5 及绝对走势。
prs1 = prs[prs['year'] == 2012].groupby(['year','name'])['count'].sum().nlargest(5).reset_index()
for i in range(2013,2022):
prs2 = prs[prs['year'] == i].groupby(['year','name'])['count'].sum().nlargest(5).reset_index()
prs1 = pd.concat([prs1, prs2], axis=0)
prs1.groupby(['year','name'])['count'].sum().unstack().plot()
plt.title('相应语言repos PR数走势', fontsize=12)
plt.xlabel('年份')
plt.ylabel('repos的PR数目')
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))
分析:整体相关语言的repos的PR数在2012-2016处于上升解阶段,大概在2016-2017年处于顶峰,之后开始下降,并趋于一种稳定状态。其中JavaScript和Python的PR数远高于其他编程语言,说明这两门语言是Github用户使用最多的。PHP与Rbuy在前期处于TOP5,而后不再是极热门语言。后期TypeScript和Go成为新晋TOP5。并且Java与PHP、Rbuy、TypeScript和Go的PR数走势相似。
以上分析的是绝对走势。
可以通过计算某年相应语言问题数或PR数与某年整体问题数或PR数比值来分析编程语言在某年内的使用占比 情况,并绘制出相对走势。因此接下来按年份分析流行编程语言TOP5及相对走势。
2012-2021年 repos问题数 TOP5 及相对走势。
iss2 = iss1.groupby(['year','name'])['count'].sum().unstack()
total = issues.groupby('year')['count'].sum()
iss2.apply(lambda x:x/total).plot()
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))
分析:整体上JavaScript的问题数比例占比很大,但从2015-2021年一直处于下降状态,并且在2020-2021年间Python的问题数占比超过JavaScript成为最高。Java的问题数占比一直处于稳定状态,保持在0.12%左右。Ruby与PHP占比一直下降,在2017年之后退出TOP5。TypeScript和Go成为新晋语言,保持一定的上升趋势。
2012-2021年 repos PR数 TOP5 及相对走势
prs2 = prs1.groupby(['year','name'])['count'].sum().unstack()
total = prs.groupby('year')['count'].sum()
prs2.apply(lambda x:x/total).plot()
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))
分析:在2012-2016年,JavaScript的PR数呈现大幅增长,Java小幅增长,其他语言整体都处于下降状态。2016-2021年,JavaScript的PR数占比开始下降,其他语言占比开始增长。
整体分析:在2012-2021年间,JavaScript、Python、Java语言的issues、PR都稳定处于TOP3,说明是Github用户的主要使用语言。