大数据看青史留名的大姓,暨 java 读取 sqlite 数据库演示
在 npm 发布中文 API 初体验——中国历代纪元之后作了些改进,但仍在找用途。想到了两年多前刚来知乎时问到的有没有公开的中国历史人物事件数据库?,想看看能不能做点结合。首先下了最新版的数据,发现 sqlite 数据库中,人物表biog_main的条目已从 37 万涨到了 42 万。
本来是要对比朝代,但,既然准备提取人物数据,而此数据库中所有都是繁体中文,于是忍不住先用了早先写的简繁转换库,做了个初步的读取和转换程序。
源码在:nobodxbodon/history_data_analysis
读取本身没啥可说的,创建 jdbc 链接,用 SQL 语句查询。在 Java 里把姓计个数,再排个序。 先是直接对繁体姓排序,发现没姓的一万多,前十位的姓为:李王张陈刘赵扬吴黄周
李=28372, 王=25738, 張=22838, 陳=16218, 劉=15509, null=10416, 趙=10409, 楊=10212, 吳=9022, 黃=7456, 周=7405
接着作了简体转换,发现数字变了些:
李=28372, 王=25738, 张=22842, 陈=16222, 刘=15509, null=10416, 赵=10409, 杨=10214, 吴=9028, 黄=7464, 周=7406
比如吴多了 6 个,于是发现源数据中有 6 个是简体“吴”,而其他 9022 个是繁体“吳”。不过混杂问题看起来并不严重,简体仍是极少数。
再之后对没姓的部分“猜”了姓。
因为之前跑一次快三秒,一时抽风想“优化”一下,结果因为数据中简繁混杂的问题等等,半夜调试花费半个多小时还才有点收获。不过也算为之后的处理交学费吧。前十排序没啥变化。
李=28435, 王=25803, 张=22902, 陈=16286, 刘=15547, 赵=10523, 杨=10254, 吴=9066, 黄=7508, 周=7428
顺手和现代的姓氏排序作一比较,取 2014 年的第六次全国人口普查数据:
排序 姓氏 人口数(万人) 占总人口百分比
1 王 9468 7.10
2 李 9276 6.96
3 张 8550 6.42
4 刘 6882 5.16
5 陈 5673 4.26
6 杨 3960 2.97
7 黄 2876 2.16
8 赵 2702 2.03
9 周 2506 1.88
10 吴 2376 1.78
挺巧,十个姓氏全中,最多排名交错一两位。
有点意思。