IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Python 人名データセットを使ってみる

どうも、nippa です。

膨大なテストデータを生成するために、人名のデータセットを使ってみようと思います。

今回試してみるのは、names-datasetになります。

README を見る限り、結構充実してるように思います。

このデータセットFacebook からリークされた情報から生成されていますが、個人が特定できません。

ライセンス部分には、一般的には”名前の一覧”には著作権はないとのことですが、必要なら弁護士に確認取ってねと書かれてます。

環境

ライブラリのインストール

  • pip インストール
pip install names-dataset
  • poetry インストール
poetry add names-dataset

依存関係は pycountry のみです。

使い方

データセットを初期化して、名前の検索、データの詳細確認、国ごとの名前を上位から表示ができます。

コードを見る限り、他の使い方はなさそうです。

名前の検索

from names_dataset import NameDataset, NameWrapper

# データセットの初期化
nd = NameDataset()

# 名前の検索
print(nd.search("Taro"))

結果 (整形済)は以下のようになります。

{
    "first_name": {
        "country": {
            "France": 0.05,
            "United Kingdom": 0.063,
            "Hong Kong": 0.046,
            "Iraq": 0.031,
            "Italy": 0.059,
            "Japan": 0.463,
            "Malaysia": 0.091,
            "Netherlands": 0.044,
            "Singapore": 0.041,
            "United States": 0.112,
        },
        "gender": {"Female": 0.11, "Male": 0.89},
        "rank": {
            "United Kingdom": 9740,
            "Hong Kong": 6121,
            "Japan": 156,
            "Malaysia": 13690,
            "Netherlands": 7182,
            "Singapore": 7227,
            "France": None,
            "Iraq": None,
            "Italy": None,
            "United States": None,
        },
    },
    "last_name": {
        "country": {
            "France": 0.106,
            "India": 0.054,
            "Italy": 0.147,
            "Japan": 0.038,
            "Morocco": 0.059,
            "Malaysia": 0.439,
            "Nigeria": 0.03,
            "Saudi Arabia": 0.036,
            "Singapore": 0.032,
            "United States": 0.059,
        },
        "gender": {},
        "rank": {
            "India": 9676,
            "Japan": 1748,
            "Malaysia": 4161,
            "Singapore": 6564,
            "France": None,
            "Italy": None,
            "Morocco": None,
            "Nigeria": None,
            "Saudi Arabia": None,
            "United States": None,
        },
    },
}

日本での first_name で 156 位と表示されています。first_name で性別の割合も出てます。

名前を Wrapper して詳細表示

NameWrapper を使うと、

print(NameWrapper(nd.search("Taro")).describe)

# 出力
Male, Japan

Taro は日本人男性というような形で表示されます。

国別の名前ランキング

日本人の男性トップ 5 を表示します。

print(nd.get_top_names(n=5, gender='Male', country_alpha2='JP'))

# 出力 (整形済)
{
    "JP": {
        "M": [
            "Takashi",
            "Hiroshi",
            "Yusuke",
            "Daisuke",
            "Akira",
        ]
    },
}

日本の男女トップ 3 をそれぞれ表示すると、

print(nd.get_top_names(n=3, country_alpha2="JP"))

# 結果(整形済)
{
    "JP": {
        "M": ["Takashi", "Hiroshi", "Yusuke"],
        "F": ["Yuki", "Yuka", "Yuko"],
    },
}

のようになります。

フルデータセット

インストール時は、50MB 程度のファイルしかないためフルデータを利用する場合は、

Github の README のフルデータセットのダウンロードからデータをダウンロードして、ライブラリの中の

names_dataset/v3/に配置すればフルサイズ(2.3GB)で利用できます。

ただし、50MB でも実行時間が少しかかるので、フルサイズは時間がかかることが予想されるのでご注意ください。

感想

データセットから、ランダムで人名生成するときには使えそうなライブラリです。

テストデータ生成などで役に立ちそうです。

ではでは、また次回。