Sur base des événements collectés pour la période 2013-2014 sur GitHubArchive, un certain nombre de dépôts étiquettés "language = R" ont été identifiés. Ces dépôts ont été clonés et stockés localement. Nous allons parcourir l'ensemble de ces dépôts, récupérer (s'ils existent) la position des fichiers DESCRIPTION et README.ext présents dans le cas de packages R. Comme indicateur de "package R", nous utilisons la présence du fichier DESCRIPTION dans l'arborescence.
In [6]:
import pandas
import os
In [7]:
GITHUB_DIR = '/data/github/'
In [8]:
def scan_repository(path):
"""
Given a path to a (local) repository, return a list of `README...` and `DESCRIPTION` paths.
"""
readme = []
description = []
for dirpath, dirnames, filenames in os.walk(path):
# Remove hidden subdirectories
indexes = []
for i, directory in enumerate(dirnames[:]): # [:] to copy dirnames!
if directory.startswith('.'):
indexes.append(i)
indexes.reverse()
for i in indexes:
del dirnames[i]
# List files, grep the ones that interests us
for filename in filenames:
if filename.startswith('README'):
readme.append(os.path.join(dirpath, filename))
elif filename == 'DESCRIPTION':
description.append(os.path.join(dirpath, filename))
return {'README': readme, 'DESCRIPTION': description}
Nous allons stocker dans packages les résultats de notre recherche. Les clés de ce dictionnaire sont des couples (owner, repository) et la valeur associée est un dictionnaire avec deux clés, README et DESCRIPTION, tous deux des listes de chemin (relatif au dépôt) où se situent un ou plusieurs fichiers README et DESCRIPTION.
In [9]:
packages = {}
In [10]:
for owner in os.listdir(GITHUB_DIR):
dirpath = os.path.join(GITHUB_DIR, owner)
if not os.path.isdir(dirpath):
continue
for repository in os.listdir(dirpath):
packages[(owner, repository)] = scan_repository(os.path.join(dirpath, repository))
In [14]:
output = []
for key, value in packages.iteritems():
owner, repository = key
description = value.get('DESCRIPTION', [])
readme = value.get('README', [])
row = []
row.append(owner)
row.append(repository)
row.append(', '.join(description))
row.append(', '.join(readme))
output.append(row)
In [20]:
with open('../data/github-descr-readme.csv', 'w') as f:
for row in output:
f.write(' ; '.join(row) + '\n')