一、Github

GitHub 是一个具有代表性的开发者社区,帮助了软件的在线开发,吸引了全球超过 1亿开发者。 GitHub 将每个用户活动视为一个事件,例如新存储库或创建的分支的创建事件。 GitHub 总共支持 42 种事件类型。 典型的用户活动包括创建新存储库、克隆现有存储库、从 GitHub 提取存储库的最新更改以及提交本地所做的更改并将其推送到共享存储库。

通过 GitHub,开发人员可以相互交流,通过在存储库下发布问题来分配和领取编程任务。 此外,还支持常规的“关注”功能,允许用户接收该平台上任何用户的状态更新通知。 在这些在线社区中,开发者之间的互动主要集中在协作开发和代码共享上,形成了一种特殊的社交网络。



二、1000万Github用户数据集

2.1 数据集概况

每个 GitHub 用户都有一个数字用户 ID,该 ID 按升序分配。 用户注册越早,其用户 ID 就越小。 该研究中只考虑2017年12月31日之前注册的GitHub用户。为了获得无偏的用户数据集,使用基于ID的随机采样来实现数据爬取。 请注意,某些数字 ID 没有对应的用户帐户,爬虫会跳过这些 ID。 对于每个用户,使用 GitHub users API (https://api.github.com/user/ID) 来访问她的描述信息, 爬取了2018.6.20 ~ 2018.8.27的数据。整个数据集压缩文件夹体积 5.7 G, 解压后会得到54G的 data.json 。数据集下载地址

https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/T6ZRJT

2.1 文献引用

该数据集是网上公开,如使用该数据集引用格式:

Qingyuan Gong, Jiayun Zhang, Yang Chen, Qi Li, Yu Xiao, Xin Wang, Pan Hui. Detecting Malicious Accounts in Online Developer Communities Using Deep Learning. Proc. of the 28th ACM International Conference on Information and Knowledge Management (CIKM'19), Beijing, China, Nov. 2019.


三、数据探索

54G的data.json太大, 我读取了前2000行,存储到了mini_data.pkl文件中。

3.1 读取json

import pandas as pd

#54G的data.json太大, 我读取了前2000行
df = pd.read_json('data.json', nrows=2000, lines=True)
df.head()


字段有22个

for col in df.columns:
    print(col)

Run

hirable
public_repos
is_suspicious
updated_at
id
blog
followers
location
follower_list
type
commit_list
bio
commits
company
following_list
public_gists
name
created_at
email
following
login
repo_list

3.2 前2000条记录保存为pkl

为了不浪费你的时间,可以先下载 mini_data.pkl, 里面存储了data.json中前 2000 条数据。 你可以自己检查下这个数据,如果觉得有用,再去自行下载下载5.4G的数据集压缩文件。

import pickle

df = pd.read_json('data.json', nrows=2000, lines=True)
with open('mini_data.pkl', 'wb') as f:
    pickle.dump(df, f)

3.3 读取pkl为df

import pickle

df = pickle.loads(open('mini_data.pkl', 'rb').read())
print(len(df))
df.head()

Run

2000



广而告之