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 でも実行時間が少しかかるので、フルサイズは時間がかかることが予想されるのでご注意ください。

感想

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

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

ではでは、また次回。

Python ランダムな文字列生成

どうも、nippa です。

テストデータ作るときに、数字は簡単に乱数生成できますが、

文字列はどうするのか気になったので、まとめておきます。

環境

アルファベット 1 文字のランダム生成(chr)

1 文字のアルファベットの生成は chr と乱数を使って生成できます。

アルファベットの小文字は chr で ASCII コードポイント 97 から 123 を指定することで表示できます。

for n in range(97, 123):
     print(chr(i))

指定する i を乱数で指定すればアルファベットをランダムは 1 文字生成できます。

import random

# 小文字 a-z
print(chr(random.range(97, 123))

大文字の場合は chr の ASCII コードポイントは 65 から 91 になります。

import random

# 大文字 A-Z
print(chr(random.range(65, 91))

アルファベット 1 文字のランダム生成(string)

python 標準の string を利用する方法だと、少し手間ですが、文字列生成のときは便利です。

import string

# 小文字 a-z
for n in string.ascii_lowercase:
     print(n)

# 大文字 a-z
for n in string.ascii_uppercase:
     print(n)

# 小文字・大文字 a-Z
for n in string.ascii_letters:
     print(n)

# 数字(10進数)
for n in string.digits:
     print(n)

# 数字(16進数)
for n in string.hexdigits:
     print(n)

# Cロケールにおける区切り文字 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
for n in string.punctuation:
     print(n)

公式のページを見てもらうと String ライブラリの詳細が書かれています。

random ライブラリを使ってランダム生成します。

import random
import string

# 小文字 a-z
random.choice(string.ascii_lowercase)

# 大文字 a-z
random.choice(string.ascii_uppercase)

# 小文字・大文字 a-Z
random.choice(string.ascii_letters)

# 数字(10進数)
random.choice(string.digits)

# 数字(16進数)
random.choice(string.hexdigits)

# Cロケールにおける区切り文字 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
random.choice(string.punctuation)

ランダムな文字列の生成

上で述べた、String ライブラリと random ライブラリを利用した文字のランダム生成を任意の長さに拡張します。

小文字だけの場合、

import random
import string


n = 10
random_list = [random.choice(string.ascii_lowercase) for n in range(n)]
random_chr = "".join(random_list)

print(random_chr)

で生成できます。 n の値を変えれば任意になるので関数化すると、

import random
import string


def ramdom_lowercase(n: int) -> str:
    random_list = [random.choice(string.ascii_lowercase) for n in range(n)]
    return "".join(random_list)

となります。大文字・小文字・区切り文字からランダム生成する場合は、

import random
import string


def ramdom_chr(n: int) -> str:
    random_list = [random.choice(string.ascii_ascii_letters + string.punctuation) for n in range(n)]
    return "".join(random_list)

で関数化できます。

感想

テストデータでデータを突っ込むときに使えるかと思いまとめてみました。

手作業で作っていられない膨大なデータはこれで生成しましょう!

ではでは、また次回。

Next.js + Typescriptの環境構築

どうも、nippa です。

フロントを触り始めるために、Next.js を利用しようと思っています。

今回は Next.js + Typescript の環境構築方法を紹介します。

環境

1. create-next-app を利用した構築

今回は create-next-app を使って、環境を構築します。

# npmの場合
npx create-next-app@latest --typescript

# yarnの場合
yarn create next-app --typescript

実行方法は以下の通りです。

# npmの場合
npx dev

# yarnの場合
yarn dev

デフォルトであればlocalhost:3000で起動されます。

2. create-next-app コマンドをインストールして、環境構築

テンプレートを使う場合に便利なので、インストールしておいても良いかもしれません。

# npmの場合
npm install --global @create-next-app

# yarnの場合
yarn global add @create-next-app

create-next-app でのテンプレートを指定して、環境を構築できます。

create-next-app [プロジェクト名] --typescript --template [テンプレート名]

テンプレート一覧はここから確認できます。

テンプレートを利用しない場合は、テンプレートオプションを利用しないか、値をdefaultにしてください。

テンプレートによっては development のパッケージがインストールされないものがありますので、package.jsonを確認の上、以下をインストールしてください。

# npmの場合
npm install --save-dev typescript @types/react @types/react-dom @types/node

# yarnの場合
yarn add --save-dev typescript @types/react @types/react-dom @types/node

next の起動は、

# npmの場合
npx dev

# yarnの場合
yarn dev

で起動して、デフォルトであればlocalhost:3000で起動されます。

3. 手動で必要なパッケージをインストール

# npmの場合
npm install next react react-dom

# yarnの場合
yarn add next react react-dom

packege.jsonは自身で修正が必要です。

感想

next.js の環境構築方法をざっとまとめてみました。

create-next-app とテンプレートを利用するのが便利かと思います。

next.js はこれからなので、是非使ってみてください!

ではでは、また次回。

本紹介「図解 コンサル一年目が学ぶこと」

どうも、nippa です。

久しぶりに本の紹介です。

今回は「図解 コンサル一年目が学ぶこと 著者:大石哲之Amazon リンク)」を紹介します。

コンサル以外の職種の方こそ読むべき本かと思っています。

エンジニアで言えば、コーディングのお作法はというより上流工程の方は特に読むべきだと思います。

この本の読み方

この本の特徴としては、

  • 各項の明確な命題が定義されている
  • 具体例が図で表示されている
  • 重要な文は太文字・ラインが引かれている

なので、うまくこれを組み合わせると、短時間で効率よく読めると思います。

必要な情報だけを得るような読み方で読んでみました。

  1. 図解なので、各項の図を見る
  2. 図を見た後で、各項の要点を読み抽象的な内容を理解する。
  3. それでも理解できない場合は、項を読み始める

じっくり読まなくても良いと思います。

この本は「コンサル一年目が学ぶこと 著者:大石哲之」の図解が追加されてたものですが、細かい内容としては、2014 年の方が詳しく書かれています。

こちらの本の記事も書いていますので、参考にしてください。

timesaving.hatenablog.com

学べる内容

4つの章があり、章の内容は以下のような感じです。

  • ビジネスでの話し方
  • ビジネスの思考方法
  • 効率のよいデスクワークの方法
  • プロフェッショナルとはなにか?

必要なところを読むだけでもよいと思います。

話し方、思考方法の部分に目を通すのはおすすめです。

感想

エンジニアだからと言って、コミュニケーションは不要とはならないです。

仕事の仕方の勉強としてはおすすめですね。

ぜひ読んでみてはいかかがでしょうか。

ではでは、また次回。

商品ページはこちら: 図解 コンサル一年目が学ぶこと 著者:大石哲之

Python Poetry主なコマンド一覧

どうも、nippa です。

Python パッケージ管理に Poetry を使ってるので使いそうな poetry でコマンドについてまとめておきます。

Poetry のインストール方法については、前回の記事を確認してください。

timesaving.hatenablog.com

環境

  • macOS 11.6
  • Poetry 1.1.12

Poetry の主なコマンド一覧

コマンド 内容
poetry init pyproject.toml の初期設定
poetry new [path] 指定した path で python のプロジェクトを作成
poetry add [パッケージ名] 本番用のパッケージの追加
poetry add -D [パッケージ名] 開発用のパッケージの追加
poetry config --list config の確認
poetry check pyproject.toml の内容をチェック
poetry env info Poetry の環境情報を表示
poetry install poetry.lock のパッケージをインストール(開発用パッケージも含む)
poetry install --no-dev poetry.lock のパッケージをインストール(開発用パッケージは含まない)
poetry update すべてのアップデート |
poetry update [パッケージ名] 指定したパッケージのアップデート |
poetry update --no-dev 本番用パッケージのみをアップデート
poetry update --dry-run パッケージのインストールはせずにアップデートを確認
poetry run [パッケージコマンド] パッケージコマンドの実行 ex) poetry run pytest / poetry run black
poetry remove [パッケージ名] パッケージの削除
poetry search [キーワード] キーワードを含むパッケージの検索
poetry version プロジェクトのバージョン表示
poetry self update poetry のアップデート。update はなくてもよい

感想

poetry -h または poetry [サブコマンド] -hで各コマンドの詳細が見れますので、そちらで確認してみてください。

どんなコマンドがあるか調べてみました。

ではでは、また次回。