【pandas】都道府県無作為抽出関数
都道府県別の人口比率にもとづいて、出身都道府県を無作為抽出する関数を作成してみます。最初に必要なモジュールをインポートして、当サイトから pop_area_jp.csv を読み込みます。
# PYTHON_PREFECTURE # In[1] import numpy as np import pandas as pd url = "https://python.atelierkobato.com/wp-content/uploads/pop_area_jp.csv" data = pd.read_csv(url, encoding="SHIFT-JIS")
pop_area_jp.csv はウィキペディアに掲載されている 2015 年の都道府県別人口・面積データです。読み込んだデータをオフラインでも参照できるようにローカルディスクに保存して、改めて読み込み直します。
# In[2] data.to_csv("pop_area", index=False) prefecture = pd.read_csv("pop_area")
prefecture の中身を確認しておきます。
# In[3] prefecture
上の表では一部分だけ抜粋していますが、実際には 47 都道府県の人口と面積が並びます。numpy.sum() を使って、都道府県の人口の総和をとります (すなわち日本の総人口を計算します)。
# In[4] # 日本の総人口を計算 pop_sum = np.sum(prefecture["人口"]) print(pop_sum) # 127084134
各都道府県人口をこの数字で割ると、総人口に対して各都道府県が占める割合を計算できます。
# In[5] # 都道府県別人口比を計算 pop_ratio = prefecture["人口"]/pop_sum print(pop_ratio) ''' 0 0.105273 1 0.071598 2 0.069644 3 0.058579 4 0.056952 5 0.048769 ・・・・・・・ Name: 人口, dtype: float64 '''
念のために人口比の総和を求めておきましょう。
# In[6] # 人口比の総和を計算 ratio_sum = np.sum(pop_ratio) print(ratio_sum) # 0.9999999999999999
本来であれば総和が 1 になるはずですが、総人口で除算したときに若干の誤差が生じています。pop_ratio の配列部分にアクセスして、変数 prob に格納しておきます。
# In[7] # pop_ratioの配列(ndarray)にアクセス prob = pop_ratio.values
47都道府県一覧は以下のコードで取得できます。
# In[8] # 47都道府県を格納した一次元配列を取得 arr = prefecture["都道府県"].values
np.random.choice() を使って、都道府県を無作為に選択してみます。
# In[9] np.random.seed(0) # 人口比に基づいて都道府県をランダムに選択 np.random.choice(arr, p=prob) # '静岡県'
以上を関数にまとめておきます:
# In[10] # 都道府県別の人口・面積データの読み込み prefecture = pd.read_csv("pop_area") # 都道府県を無作為抽出する関数 def rand_prefecture(): pop_sum = np.sum(prefecture["人口"]) pop_ratio = prefecture["人口"]/pop_sum arr = prefecture["都道府県"].values prob = pop_ratio.values c = np.random.choice(arr, p=prob) return c
rand_prefecture() を使って都道府県を抽出してみます。
# In[11] np.random.seed(1) # 都道府県をランダムに生成 for i in range(5): x = rand_prefecture() print(x) # 兵庫県 # 群馬県 # 東京都 # 愛知県 # 神奈川県
コメント
【プログラミング日記】
最近、このサイトの更新頻度が落ちています。
と言いつつも、日記はちょくちょく更新していたりします。
「猫の記事とか書いてる暇あったら、プログラミングの記事書いたらいいじゃん」
と思われるかもしれませんが、日記は 10 分ほどで書けるので、それほどの手間ではありません。
本題に戻りますが、サイトの更新頻度が落ちた理由は2つあります。
① 体調が思わしくない。
② 大規模アプリケーションを開発中
① については、いやほんと、かなりやばいです。
内臓疲労が半端ない。寝ても疲れがとれない。心臓が痛い。もう若くもないくせに、毎日長時間 PC とにらめっこしながらプログラミングしていると、こんなふうになってしまうものだなと溜息をついております。そんな状態で、同時並行でアプリケーションの開発も行っているので、労力が分散されてしまって記事更新がおぼつかなくなっております。まだまだ皆様にお届けしなくてはならない (と勝手に思っている) 情報はたくさんあります。体力は右肩下がりですが、熱意は衰えておりません。自分の年齢と相談して小休止を入れながら、これからもコツコツと頑張っていきます。サイドバー (記事の右側) に「最近の投稿」というメニューがあって、上から新しい順に 5 記事が並んでいます。サイトが更新されているか気になる人はサイドバーを見るようにしてください。
ChatGPTに「日本の都道府県の人口比率に基づいて、都道府県名を無作為抽出する関数を定義して」と頼むと、以下のようなコードを書いてくれました。