In [2]:
import sys;sys.path.append("..")
import pandas as pd
from pandas import DataFrame
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
%matplotlib inline
from IPython.core.display import display, HTML
display(HTML("<style>.container { width:100% !important; }</style>"))
In [3]:
from devml.post_processing import (git_churn_df, file_len, git_populate_file_metatdata)
In [4]:
df = git_churn_df(path="/Users/noahgift/src/cpython")
2017-10-23 06:53:10,082 - devml.post_processing - INFO - Running churn cmd: [git log --name-only --pretty=format:] at path [/Users/noahgift/src/cpython]
In [5]:
df.head()
Out[5]:
files
churn_count
0
b'Lib/test/test_struct.py'
178
1
b'Lib/test/test_zipimport.py'
78
2
b'Misc/NEWS.d/next/Core'
351
3
b'and'
351
4
b'Builtins/2017-10-13-20-01-47.bpo-31781.cXE9S...
1
In [6]:
metadata_df = git_populate_file_metatdata(df)
In [22]:
python_files_df = metadata_df[metadata_df.extension == ".py"]
line_python = python_files_df[python_files_df.line_count> 40]
line_python.sort_values(by="relative_churn", ascending=False).head(15)
Out[22]:
files
churn_count
line_count
extension
relative_churn
15
b'Lib/test/regrtest.py'
627
50.0
.py
12.54
196
b'Lib/test/test_datetime.py'
165
57.0
.py
2.89
197
b'Lib/io.py'
165
99.0
.py
1.67
430
b'Lib/test/test_sundry.py'
91
56.0
.py
1.62
269
b'Lib/test/test___all__.py'
128
109.0
.py
1.17
1120
b'Lib/test/test_userstring.py'
40
44.0
.py
0.91
827
b'Lib/email/__init__.py'
52
62.0
.py
0.84
85
b'Lib/test/test_support.py'
262
461.0
.py
0.57
1006
b'Lib/test/test_select.py'
44
82.0
.py
0.54
1474
b'Lib/lib2to3/fixes/fix_itertools_imports.py'
30
57.0
.py
0.53
346
b'Doc/conf.py'
106
206.0
.py
0.51
222
b'Lib/string.py'
151
305.0
.py
0.50
804
b'Lib/test/test_normalization.py'
53
108.0
.py
0.49
592
b'Lib/test/test_fcntl.py'
68
152.0
.py
0.45
602
b'Lib/test/test_winsound.py'
67
148.0
.py
0.45
In [42]:
metadata_df.median()
Out[42]:
churn_count 5.0
line_count 146.0
relative_churn 0.1
dtype: float64
In [43]:
metadata_df.groupby("extension").median()
Out[43]:
churn_count
line_count
relative_churn
extension
3.0
25.0
0.285
.
3.0
NaN
NaN
.0
1.0
21.0
0.050
.1
2.0
3.0
0.670
.2
3.0
537.0
0.010
.3
4.5
69.0
0.010
.4b3
2.0
NaN
NaN
.586
2.0
NaN
NaN
.686
2.0
NaN
NaN
.8svx
2.0
2.0
1.000
.AIX
6.0
130.0
0.050
.Emacs
4.0
NaN
NaN
.JAGUAR
2.0
NaN
NaN
.LUTZ
2.0
NaN
NaN
.OpenBSD
4.0
NaN
NaN
.README
5.0
NaN
NaN
.S
6.0
417.0
0.020
.TXT
1.0
287.5
0.000
.WINDOWS
2.0
NaN
NaN
.ac
136.5
5422.0
0.040
.adb
2.0
NaN
NaN
.ads
2.0
NaN
NaN
.aif
3.0
1.0
3.000
.aifc
1.0
5.0
0.200
.aiff
1.0
116.0
0.010
.am
7.5
NaN
NaN
.as
3.0
NaN
NaN
.asdl
61.0
135.0
0.450
.asm
2.0
102.0
0.045
.au
1.0
50.0
0.035
...
...
...
...
.uue
2.0
NaN
NaN
.v1
4.0
NaN
NaN
.valgrind
6.0
100.0
0.060
.vbs
3.0
1.0
2.000
.vcproj
7.0
NaN
NaN
.vct
6.5
NaN
NaN
.vcw
3.0
NaN
NaN
.vcxproj
5.0
86.0
0.060
.vim
16.0
NaN
NaN
.voc
2.0
2.0
1.000
.vsprops
6.0
NaN
NaN
.wav
1.0
110.0
0.010
.webp
1.0
3.0
0.330
.whl
1.0
3244.0
0.000
.wixproj
2.0
21.0
0.100
.wml
3.0
NaN
NaN
.wpj
5.5
NaN
NaN
.wpr
2.5
18.0
0.150
.wse
8.0
NaN
NaN
.wsp
3.5
NaN
NaN
.wxl
1.0
6.0
0.200
.wxl_template
2.0
10.0
0.230
.wxs
3.0
29.5
0.125
.xMAP
2.0
NaN
NaN
.xar
3.0
NaN
NaN
.xbm
2.0
6.0
0.170
.xml
2.0
6.0
0.330
.xpm
2.0
NaN
NaN
.yml
4.0
35.0
0.290
.zip
2.0
8.0
0.250
268 rows × 3 columns
In [45]:
metadata_df.groupby("extension").describe()
Out[45]:
churn_count
line_count
relative_churn
count
mean
std
min
25%
50%
75%
max
count
mean
...
75%
max
count
mean
std
min
25%
50%
75%
max
extension
668.0
35.248503
566.236073
1.0
2.00
3.0
6.00
14464.0
58.0
1048.068966
...
159.00
34821.0
58.0
0.725172
1.991237
0.00
0.0700
0.285
0.6750
15.00
.
5.0
3.800000
1.303840
3.0
3.00
3.0
4.00
6.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.0
8.0
1.250000
0.462910
1.0
1.00
1.0
1.25
2.0
6.0
25.333333
...
36.00
41.0
6.0
0.046667
0.022509
0.02
0.0275
0.050
0.0650
0.07
.1
4.0
2.500000
1.000000
2.0
2.00
2.0
2.50
4.0
1.0
3.000000
...
3.00
3.0
1.0
0.670000
NaN
0.67
0.6700
0.670
0.6700
0.67
.2
3.0
4.333333
3.214550
2.0
2.50
3.0
5.50
8.0
1.0
537.000000
...
537.00
537.0
1.0
0.010000
NaN
0.01
0.0100
0.010
0.0100
0.01
.3
8.0
4.250000
2.121320
1.0
2.75
4.5
6.00
7.0
1.0
69.000000
...
69.00
69.0
1.0
0.010000
NaN
0.01
0.0100
0.010
0.0100
0.01
.4b3
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.586
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.686
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.8svx
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
1.0
2.000000
...
2.00
2.0
1.0
1.000000
NaN
1.00
1.0000
1.000
1.0000
1.00
.AIX
1.0
6.000000
NaN
6.0
6.00
6.0
6.00
6.0
1.0
130.000000
...
130.00
130.0
1.0
0.050000
NaN
0.05
0.0500
0.050
0.0500
0.05
.Emacs
1.0
4.000000
NaN
4.0
4.00
4.0
4.00
4.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.JAGUAR
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.LUTZ
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.OpenBSD
1.0
4.000000
NaN
4.0
4.00
4.0
4.00
4.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.README
2.0
5.000000
4.242641
2.0
3.50
5.0
6.50
8.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.S
54.0
6.185185
3.348185
2.0
4.00
6.0
8.00
14.0
5.0
386.000000
...
418.00
422.0
5.0
0.016000
0.005477
0.01
0.0100
0.020
0.0200
0.02
.TXT
4.0
1.000000
0.000000
1.0
1.00
1.0
1.00
1.0
4.0
282.750000
...
292.75
298.0
4.0
0.000000
0.000000
0.00
0.0000
0.000
0.0000
0.00
.WINDOWS
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.ac
2.0
136.500000
132.228968
43.0
89.75
136.5
183.25
230.0
1.0
5422.000000
...
5422.00
5422.0
1.0
0.040000
NaN
0.04
0.0400
0.040
0.0400
0.04
.adb
7.0
2.000000
0.000000
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.ads
3.0
2.000000
0.000000
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.aif
1.0
3.000000
NaN
3.0
3.00
3.0
3.00
3.0
1.0
1.000000
...
1.00
1.0
1.0
3.000000
NaN
3.00
3.0000
3.000
3.0000
3.00
.aifc
3.0
1.333333
0.577350
1.0
1.00
1.0
1.50
2.0
3.0
13.000000
...
19.00
33.0
3.0
0.743333
1.091620
0.03
0.1150
0.200
1.1000
2.00
.aiff
5.0
1.200000
0.447214
1.0
1.00
1.0
1.00
2.0
5.0
97.400000
...
140.00
147.0
5.0
0.408000
0.889955
0.01
0.0100
0.010
0.0100
2.00
.am
4.0
8.000000
3.162278
5.0
5.75
7.5
9.75
12.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.as
1.0
3.000000
NaN
3.0
3.00
3.0
3.00
3.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.asdl
1.0
61.000000
NaN
61.0
61.00
61.0
61.00
61.0
1.0
135.000000
...
135.00
135.0
1.0
0.450000
NaN
0.45
0.4500
0.450
0.4500
0.45
.asm
8.0
2.750000
2.121320
2.0
2.00
2.0
2.00
8.0
2.0
102.000000
...
129.00
156.0
2.0
0.045000
0.007071
0.04
0.0425
0.045
0.0475
0.05
.au
9.0
2.444444
2.603417
1.0
1.00
1.0
2.00
7.0
8.0
64.250000
...
113.75
147.0
8.0
0.342500
0.686518
0.01
0.0100
0.035
0.2600
2.00
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
.uue
4.0
2.000000
0.000000
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.v1
1.0
4.000000
NaN
4.0
4.00
4.0
4.00
4.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.valgrind
1.0
6.000000
NaN
6.0
6.00
6.0
6.00
6.0
1.0
100.000000
...
100.00
100.0
1.0
0.060000
NaN
0.06
0.0600
0.060
0.0600
0.06
.vbs
2.0
3.000000
1.414214
2.0
2.50
3.0
3.50
4.0
1.0
1.000000
...
1.00
1.0
1.0
2.000000
NaN
2.00
2.0000
2.000
2.0000
2.00
.vcproj
198.0
9.277778
13.521880
1.0
3.00
7.0
10.00
165.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.vct
6.0
6.666667
4.546061
2.0
3.00
6.5
8.50
14.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.vcw
2.0
3.000000
0.000000
3.0
3.00
3.0
3.00
3.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.vcxproj
53.0
6.415094
8.321506
1.0
4.00
5.0
7.00
63.0
42.0
103.595238
...
105.00
457.0
42.0
0.064524
0.032022
0.01
0.0500
0.060
0.0800
0.14
.vim
1.0
16.000000
NaN
16.0
16.00
16.0
16.00
16.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.voc
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
1.0
2.000000
...
2.00
2.0
1.0
1.000000
NaN
1.00
1.0000
1.000
1.0000
1.00
.vsprops
43.0
7.837209
7.665415
1.0
3.50
6.0
9.00
40.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.wav
5.0
1.200000
0.447214
1.0
1.00
1.0
1.00
2.0
5.0
80.200000
...
140.00
147.0
5.0
0.472000
0.865344
0.01
0.0100
0.010
0.3300
2.00
.webp
1.0
1.000000
NaN
1.0
1.00
1.0
1.00
1.0
1.0
3.000000
...
3.00
3.0
1.0
0.330000
NaN
0.33
0.3300
0.330
0.3300
0.33
.whl
52.0
1.153846
0.414663
1.0
1.00
1.0
1.00
3.0
2.0
3244.000000
...
3980.50
4717.0
2.0
0.000000
0.000000
0.00
0.0000
0.000
0.0000
0.00
.wixproj
28.0
2.535714
1.731669
1.0
2.00
2.0
3.00
8.0
26.0
26.884615
...
29.75
66.0
26.0
0.094615
0.040913
0.03
0.0625
0.100
0.1100
0.19
.wml
1.0
3.000000
NaN
3.0
3.00
3.0
3.00
3.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.wpj
2.0
5.500000
3.535534
3.0
4.25
5.5
6.75
8.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.wpr
4.0
3.250000
1.892969
2.0
2.00
2.5
3.75
6.0
3.0
16.333333
...
18.00
18.0
3.0
0.196667
0.117189
0.11
0.1300
0.150
0.2400
0.33
.wse
11.0
19.090909
39.948603
3.0
4.00
8.0
9.50
139.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.wsp
2.0
3.500000
0.707107
3.0
3.25
3.5
3.75
4.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.wxl
11.0
2.818182
4.468069
1.0
1.00
1.0
2.00
16.0
10.0
21.100000
...
7.00
148.0
10.0
0.192000
0.050067
0.11
0.1700
0.200
0.2000
0.29
.wxl_template
5.0
2.000000
0.707107
1.0
2.00
2.0
2.00
3.0
4.0
11.250000
...
13.50
18.0
4.0
0.237500
0.120934
0.11
0.1550
0.230
0.3125
0.38
.wxs
54.0
3.648148
2.809401
1.0
2.00
3.0
4.00
16.0
50.0
38.080000
...
49.00
122.0
50.0
0.116200
0.056996
0.02
0.0625
0.125
0.1500
0.23
.xMAP
1.0
2.000000
NaN
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.xar
1.0
3.000000
NaN
3.0
3.00
3.0
3.00
3.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.xbm
15.0
1.933333
0.258199
1.0
2.00
2.0
2.00
2.0
1.0
6.000000
...
6.00
6.0
1.0
0.170000
NaN
0.17
0.1700
0.170
0.1700
0.17
.xml
103.0
3.213592
2.962678
1.0
2.00
2.0
5.00
29.0
5.0
26.800000
...
7.00
115.0
5.0
0.330000
0.193261
0.03
0.2900
0.330
0.5000
0.50
.xpm
8.0
2.000000
0.000000
2.0
2.00
2.0
2.00
2.0
0.0
NaN
...
NaN
NaN
0.0
NaN
NaN
NaN
NaN
NaN
NaN
NaN
.yml
5.0
10.600000
13.446189
2.0
3.00
4.0
10.00
34.0
3.0
57.000000
...
70.50
106.0
3.0
0.226667
0.136504
0.07
0.1800
0.290
0.3050
0.32
.zip
8.0
1.750000
0.707107
1.0
1.00
2.0
2.00
3.0
5.0
7.400000
...
8.00
13.0
5.0
0.616000
0.780244
0.15
0.2500
0.250
0.4300
2.00
268 rows × 24 columns
In [26]:
import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
python_files_df = metadata_df[metadata_df.extension == ".py"]
line_python = python_files_df[python_files_df.line_count> 40]
line_python_sorted = line_python.sort_values(by="relative_churn", ascending=False).head(15)
sns.barplot(y="files", x="relative_churn",data=line_python_sorted)
plt.title('Top 15 CPython Absolute and Relative Churn')
plt.show()
In [48]:
python_files = metadata_df[metadata_df.extension == ".py"]
python_files.describe()
Out[48]:
churn_count
line_count
relative_churn
count
4693.000000
1824.000000
1824.000000
mean
19.010228
406.422149
0.236837
std
39.943848
733.784818
0.877692
min
1.000000
1.000000
0.000000
25%
3.000000
52.000000
0.050000
50%
7.000000
169.500000
0.100000
75%
16.000000
427.500000
0.192500
max
720.000000
12990.000000
26.910000
In [29]:
from devml.post_processing import git_deleted_files
deletion_counts = git_deleted_files("/Users/noahgift/src/cpython")
2017-10-23 10:00:52,661 - devml.post_processing - INFO - Running del cmd: [git log --diff-filter=D --summary | grep delete] at path [/Users/noahgift/src/cpython]
In [30]:
all_files = metadata_df['files']
deleted_files = deletion_counts['files']
membership = all_files.isin(deleted_files)
In [31]:
metadata_df["deleted_files"] = membership
In [32]:
metadata_df.loc[metadata_df["deleted_files"] == True].median()
Out[32]:
churn_count 4.000
line_count 91.500
relative_churn 0.145
deleted_files 1.000
dtype: float64
In [33]:
metadata_df.loc[metadata_df["deleted_files"] == False].median()
Out[33]:
churn_count 9.0
line_count 149.0
relative_churn 0.1
deleted_files 0.0
dtype: float64
In [34]:
metadata_df.count()
Out[34]:
files 11695
churn_count 11695
line_count 3885
extension 11695
relative_churn 3885
deleted_files 11695
dtype: int64
In [35]:
sns.heatmap(metadata_df.corr(), annot=True)
Out[35]:
<matplotlib.axes._subplots.AxesSubplot at 0x11c50bcc0>
In [36]:
sns.lmplot(x="churn_count", y="line_count", hue="deleted_files", data=metadata_df)
Out[36]:
<seaborn.axisgrid.FacetGrid at 0x11c543908>
In [ ]:
Content source: noahgift/devml
Similar notebooks: