姓名数据库
要下载原始CSV数据进行分析,请浏览这里。
这个Python库提供了关于姓名的信息:
- 流行度(排名)
- 国家(支持105个国家)
- 性别
它可以回答以下一些问题:
Zoe
是谁?可能是女性,英国
。- 认识
Philippe
吗?可能是男性,法国
。那么拼写为Philipp
呢?男性,德国
。 Nikki
呢?可能是女性,美国
。
组成
73万个名字和98.3万个姓氏,提取自Facebook大规模数据泄露(5.33亿用户)。
安装
可在*PyPI*上获取:
pip install names-dataset
使用
注意:该库需要3.2GB的RAM来加载完整数据集到内存中。请确保有足够的RAM以避免内存错误
。
安装后,运行以下命令来熟悉该库:
from names_dataset import NameDataset, NameWrapper
# 由于数据库庞大,库初始化需要一些时间。建议在应用程序启动过程中包含其初始化。
nd = NameDataset()
print(NameWrapper(nd.search('Philippe')).describe)
# 男性,法国
print(NameWrapper(nd.search('Zoe')).describe)
# 女性,英国
print(nd.search('Walter'))
# {'first_name': {'country': {'Argentina': 0.062, 'Austria': 0.037, 'Bolivia, Plurinational State of': 0.042, 'Colombia': 0.096, 'Germany': 0.044, 'Italy': 0.295, 'Peru': 0.185, 'United States': 0.159, 'Uruguay': 0.036, 'South Africa': 0.043}, 'gender': {'Female': 0.007, 'Male': 0.993}, 'rank': {'Argentina': 37, 'Austria': 34, 'Bolivia, Plurinational State of': 67, 'Colombia': 250, 'Germany': 214, 'Italy': 193, 'Peru': 27, 'United States': 317, 'Uruguay': 44, 'South Africa': 388}}, 'last_name': {'country': {'Austria': 0.036, 'Brazil': 0.039, 'Switzerland': 0.032, 'Germany': 0.299, 'France': 0.121, 'United Kingdom': 0.048, 'Italy': 0.09, 'Nigeria': 0.078, 'United States': 0.172, 'South Africa': 0.085}, 'gender': {}, 'rank': {'Austria': 106, 'Brazil': 805, 'Switzerland': 140, 'Germany': 39, 'France': 625, 'United Kingdom': 1823, 'Italy': 3564, 'Nigeria': 926, 'United States': 1210, 'South Africa': 1169}}}
print(nd.search('White'))
# {'first_name': {'country': {'United Arab Emirates': 0.044, 'Egypt': 0.294, 'France': 0.061, 'Hong Kong': 0.05, 'Iraq': 0.094, 'Italy': 0.117, 'Malaysia': 0.133, 'Saudi Arabia': 0.089, 'Taiwan, Province of China': 0.044, 'United States': 0.072}, 'gender': {'Female': 0.519, 'Male': 0.481}, 'rank': {'Taiwan, Province of China': 6940, 'United Arab Emirates': None, 'Egypt': None, 'France': None, 'Hong Kong': None, 'Iraq': None, 'Italy': None, 'Malaysia': None, 'Saudi Arabia': None, 'United States': None}}, 'last_name': {'country': {'Canada': 0.035, 'France': 0.016, 'United Kingdom': 0.296, 'Ireland': 0.028, 'Iraq': 0.016, 'Italy': 0.02, 'Jamaica': 0.017, 'Nigeria': 0.031, 'United States': 0.5, 'South Africa': 0.04}, 'gender': {}, 'rank': {'Canada': 46, 'France': 1041, 'United Kingdom': 18, 'Ireland': 66, 'Iraq': 1307, 'Italy': 2778, 'Jamaica': 35, 'Nigeria': 425, 'United States': 47, 'South Africa': 416}}}
print(nd.search('محمد'))
# {'first_name': {'country': {'Algeria': 0.018, 'Egypt': 0.441, 'Iraq': 0.12, 'Jordan': 0.027, 'Libya': 0.035, 'Saudi Arabia': 0.154, 'Sudan': 0.07, 'Syrian Arab Republic': 0.062, 'Turkey': 0.022, 'Yemen': 0.051}, 'gender': {'Female': 0.035, 'Male': 0.965}, 'rank': {'Algeria': 4, 'Egypt': 1, 'Iraq': 2, 'Jordan': 1, 'Libya': 1, 'Saudi Arabia': 1, 'Sudan': 1, 'Syrian Arab Republic': 1, 'Turkey': 18, 'Yemen': 1}}, 'last_name': {'country': {'Egypt': 0.453, 'Iraq': 0.096, 'Jordan': 0.015, 'Libya': 0.043, 'Palestine, State of': 0.016, 'Saudi Arabia': 0.118, 'Sudan': 0.146, 'Syrian Arab Republic': 0.058, 'Turkey': 0.017, 'Yemen': 0.037}, 'gender': {}, 'rank': {'Egypt': 2, 'Iraq': 3, 'Jordan': 1, 'Libya': 1, 'Palestine, State of': 1, 'Saudi Arabia': 3, 'Sudan': 1, 'Syrian Arab Republic': 2, 'Turkey': 44, 'Yemen': 1}}}
print(nd.get_top_names(n=10, gender='Male', country_alpha2='US'))
# {'US': {'M': ['Jose', 'David', 'Michael', 'John', 'Juan', 'Carlos', 'Luis', 'Chris', 'Alex', 'Daniel']}}
print(nd.get_top_names(n=5, country_alpha2='ES'))
# {'ES': {'M': ['Jose', 'Antonio', 'Juan', 'Manuel', 'David'], 'F': ['Maria', 'Ana', 'Carmen', 'Laura', 'Isabel']}}
print(nd.get_country_codes(alpha_2=True))
# ['AE', 'AF', 'AL', 'AO', 'AR', 'AT', 'AZ', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BN', 'BO', 'BR', 'BW', 'CA', 'CH', 'CL', 'CM', 'CN', 'CO', 'CR', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DZ', 'EC', 'EE', 'EG', 'ES', 'ET', 'FI', 'FJ', 'FR', 'GB', 'GE', 'GH', 'GR', 'GT', 'HK', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IN', 'IQ', 'IR', 'IS', 'IT', 'JM', 'JO', 'JP', 'KH', 'KR', 'KW', 'KZ', 'LB', 'LT', 'LU', 'LY', 'MA', 'MD', 'MO', 'MT', 'MU', 'MV', 'MX', 'MY', 'NA', 'NG', 'NL', 'NO', 'OM', 'PA', 'PE', 'PH', 'PL', 'PR', 'PS', 'PT', 'QA', 'RS', 'RU', 'SA', 'SD', 'SE', 'SG', 'SI', 'SV', 'SY', 'TM', 'TN', 'TR', 'TW', 'US', 'UY', 'YE', 'ZA']
nd.first_names
# 包含所有名字及其属性的字典。
nd.last_names
# 包含所有姓氏及其属性的字典。
API
search
调用提供以下信息:
-
country
:名字属于某个国家的概率。仅返回与该名字匹配度最高的前10个国家。 -
gender
:此人为男性
或女性
的概率。 -
rank
:该名字在其国家的排名。1
表示最流行的名字。 -
注意:
first_name/last_name
:gender
不适用于last_name
。
get_top_names
调用返回最受欢迎的名字:
n
:返回符合某些条件的名字数量。默认为100。gender
:筛选男性
或女性
。默认为None(返回两者)。use_first_names
:筛选名字或姓氏。默认为True。country_alpha2
:按国家筛选(例如,GB代表英国)。默认为None(返回所有国家)。
get_country_codes
返回支持的国家代码(或完整的pycountry
对象)。
alpha_2
:仅返回国家代码:2个字符的代码。默认为False。
完整数据集
数据集可在此处获取:name_dataset.zip (3.3GB)。
- 数据包含来自106个国家的491,655,925条记录。
- 解压缩后的版本在磁盘上占用约10GB。
- 每个国家都有一个单独的CSV文件。
- CSV文件包含以下格式的行:名字,姓氏,性别,国家代码。
- 每条记录代表一个真实的人。
许可证
- 这个版本是从大规模 Facebook 泄露事件(涉及 5.33 亿账户)中生成的。
- 一般来说,姓名列表不受版权保护,但如果你想完全确定,应该咨询律师。
国家
阿富汗、阿尔巴尼亚、阿尔及利亚、安哥拉、阿根廷、奥地利、阿塞拜疆、巴林、孟加拉国、比利时、玻利维亚多民族国、博茨瓦纳、巴西、文莱达鲁萨兰国、保加利亚、布基纳法索、布隆迪、柬埔寨、喀麦隆、加拿大、智利、中国、哥伦比亚、哥斯达黎加、克罗地亚、塞浦路斯、捷克、丹麦、吉布提、厄瓜多尔、埃及、萨尔瓦多、爱沙尼亚、埃塞俄比亚、斐济、芬兰、法国、格鲁吉亚、德国、加纳、希腊、危地马拉、海地、洪都拉斯、中国香港、匈牙利、冰岛、印度、印度尼西亚、伊朗伊斯兰共和国、伊拉克、爱尔兰、以色列、意大利、牙买加、日本、约旦、哈萨克斯坦、大韩民国、科威特、黎巴嫩、利比亚、立陶宛、卢森堡、中国澳门、马来西亚、马尔代夫、马耳他、毛里求斯、墨西哥、摩尔多瓦共和国、摩洛哥、纳米比亚、荷兰、尼日利亚、挪威、阿曼、巴勒斯坦国、巴拿马、秘鲁、菲律宾、波兰、葡萄牙、波多黎各、卡塔尔、俄罗斯联邦、沙特阿拉伯、塞尔维亚、新加坡、斯洛文尼亚、南非、西班牙、苏丹、瑞典、瑞士、阿拉伯叙利亚共和国、中国台湾省、突尼斯、土耳其、土库曼斯坦、阿拉伯联合酋长国、英国、美国、乌拉圭、也门。
🇲🇹🇪🇬🇧🇴🇳🇦🇹🇳🇷🇸🇯🇲🇦🇷🇯🇵🇰🇿🇸🇦🇺🇸🇦🇪🇭🇺🇭🇰🇶🇦🇸🇬🇩🇪🇾🇪🇲🇾🇭🇹🇵🇷🇨🇳🇦🇴🇹🇼🇸🇩🇧🇭🇧🇪🇪🇹🇪🇪🇨🇴🇬🇷🇧🇷🇷🇺🇱🇾🇸🇻🇰🇼🇰🇷🇦🇱🇸🇾🇧🇫🇨🇿🇨🇦🇴🇲🇩🇰🇨🇱🇧🇩🇧🇼🇫🇯🇮🇶🇮🇪🇿🇦🇨🇷🇯🇴🇰🇭🇵🇪🇺🇾🇮🇷🇲🇩🇫🇷🇲🇴🇳🇱🇬🇭🇨🇾🇩🇿🇮🇹🇬🇧🇧🇮🇮🇳🇫🇮🇦🇫🇵🇭🇦🇿🇬🇪🇨🇲🇮🇱🇪🇸🇱🇹🇩🇯🇬🇹🇱🇺🇵🇸🇹🇷🇵🇱🇮🇸🇳🇬🇵🇦🇭🇷🇸🇮🇭🇳🇦🇹🇲🇺🇸🇪🇲🇦🇨🇭🇧🇳🇲🇻🇳🇴🇪🇨🇮🇩🇧🇬🇵🇹🇲🇽🇱🇧🇹🇲
注意:遗憾的是,无法支持更多国家,因为原始数据集中未包含其他国家。
引用
@misc{NameDataset2021,
author = {Philippe Remy},
title = {Name Dataset},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/philipperemy/name-dataset}},
}