open-wonderland
open-wonderland copied to clipboard
关于 GitHub 开发者信息采集与地理位置解析流程
随着与游兰老师团队数据的融合,计划进一步增强实验室对于 GitHub 开发者账号的信息采集与地址位置解析。
这个 Issue 会记录一下目前的方案,也方便其他同学了解目前的情况。
目前这部分的采集解析脚本在 OpenDigger 项目中统一维护,由定时任务执行。
用户数据更新
根据目前的代码,GitHub 用户数据采集基本流程和策略如下:
- gh_user_info 表中存储用户的信息,该表仅存储了 id,没有存储 login,login 可由其他表获取。
- gh_user_info 表包含除用户 id 外的,location、email、company、twitter_username、social_accounts 等信息
- 用户更新内容包含三个级别,更新时高优先级的内容先更新:
- 先更新目前 OpenDigger 数据导出的用户信息(全域上任意月份影响力大于 e),保证每月更新一次,体量约 30 万个。
- 然后更新有任意协作行为的用户信息(全域历史上有过 Issue、PR 活跃),保证每年更新一次,体量约 1600 万个。
- 最后更新出现在日志中的用户信息(全域历史上有过 star、fork 等),保证至少更新一次,体量约 5800 万个。
- 目前根据上述代码,定时任务每 10 分钟运行一次,每次获取 1500 个用户信息,每个月可更新约 650 万个用户信息,三个月内可更新完全域上有协作行为的用户信息。一年内可更新完所有用户的信息。
地址位置解析
根据目前的代码,地理位置解析的基本流程和策略为:
- 根据 gh_user_info 表中 location 不为空的记录来解析,并将结果存如 location_info 表中。
- location_info 表中包含原始用户填写的地理信息,解析为国家、一级行政区、二级行政区、具体地点等多级,并包含经纬度数据。
- 使用 Google Geocoding API 服务进行解析,如果解析成功则 status 为 normal,如果不可解析为地理位置,则 status 为 invalid。
- 目前该定时任务每分钟执行一次,每次解析 10 个地址信息,每天可解析 1.44 万个地址信息,成本约 1000 个地址 5 美元。
根据 11 月份更新的 30 万+ 用户的数据,目前包含的其他社交平台的账号数量为:
- Twitter 54k
- LinkedIn 13.8k
- Generic 10.7k
- Mastodon 6.8k
- Instagram 2.5k
- Youtube 1.3k
- Facebook 1.1k
- 其他 Reddit、Twitch、Hometown、NPM 等加起来不到 1k
上面这些平台时可以后续采集和关联分析的。
关于地理位置解析部分我有两个疑问:
- 上面介绍的是我们团队的解析方法,和游老师的解析方法可能不同,那么两边的数据如果冲突该怎么取舍,比如我们团队解析用户A在中国,游老师团队解析的是在美国,以谁的为主
- 其次游老师团队的数据是会另做存储(新建一张表),还是和我们解析出的数据直接进行结合。
@PureNatural
- 我们两边都使用了第三方解析服务来进行地理位置信息解析,解析结果的结构均为三级行政区域加经纬度信息。游老师那边使用的微软的 API,我们用的是 Google 的 API。目前游老师那边的导入时会覆盖我之前采集的,之后会统一由我们这边解析。理论上不应该出现解析差异很大的问题,如果微软和 Google 的 API 分别解析为不同的国家,那极可能是本身这个地址就不够明确,即便是人工自己辨析可能也会出现无法确认到底应该在哪个国家的问题,此时任意选择一个应该都可以。
- 目前游老师那边的所有数据我都导入到了我们的 ClickHouse 实例中,游老师那边后续可能也会自己维护一份 ClickHouse 实例,定期从我们这边同步数据。