LoginSignup
3
3

500年後に全員佐藤さん?

Last updated at Posted at 2024-04-02

500年後に全員佐藤さん?

Pythonを使用して500年後に日本の苗字がすべて佐藤さんになるかどうかをシミュレーションしたネタコードです。学術的な正確さを追求しておらず、一種のネタとして楽しんでいただければと思います。

計算のための参考値

シミュレーションを開始するための値として以下を定めています。

  • 現在の日本の人口: 1億2397万人
  • 現在の佐藤さんの割合: 1.57%
  • 日本の出生率: 1.2人

これらの値は以下を参考に決定しています。

佐藤さんの割合を計算するコード

以下のようなコードを作成してみました。
※ かなりおおざっぱなネタコードです。

import random

# 人口
POPULATION = 123970000 # 日本の人口
SATO_RATE = 0.0157 # 佐藤さんの割合 
BIRTH_RATE = 1.2 # 出生率
GEN_NUM = 100 # 何世代後まで計算するか


# 次世代を算出する関数
def generate_next_generation(current_generation, birth_rate):
    next_generation = [] # 次世代のリスト
    next_generation_num = int(len(current_generation) * (birth_rate / 2)) # 出生率から想定される次世代の人数

    current_generationl_shuffled = random.sample(current_generation, len(current_generation))
    idx = 0
    while len(next_generation) < next_generation_num:
        # 先頭から順番にペアを作成、次世代は2人生成されるとしてparent_aの苗字を継承
        # 次世代の人数がnext_generation_numに達したら終了
        try:
            parent_a = current_generationl_shuffled[idx]
            idx += 1
            parent_b = current_generationl_shuffled[idx]
            idx += 1
            next_generation.append(parent_a)
            next_generation.append(parent_a)
        except:
            break
    return next_generation

# 世代の内訳を出力する関数
def print_generation(generation, gen):
    gen_num = len(generation) # 世代の人数
    sato_num = generation.count(1) # 佐藤さんの人数
    sato_rate = sato_num / gen_num # 佐藤さんの割合
    elapsed_years = gen * 20 # 1世代20年として経過年数を算出
    
    print(f"{elapsed_years}年後、人口{gen_num}人中、佐藤さんは{sato_num}人です。 佐藤さんの割合は{sato_rate*100}%です。")


if __name__ == "__main__":
    # 佐藤さんが1, それ以外が0のリストを作成
    current_generation = [1] * int(POPULATION * SATO_RATE) + [0] * int(POPULATION * (1 - SATO_RATE))
    gen = 0
    print_generation(current_generation, gen)

    for _ in range(GEN_NUM):
        current_generation = generate_next_generation(current_generation, BIRTH_RATE)
        gen += 1
        print_generation(current_generation, gen)
    
    

コードの概要は以下です。

  1. まず、佐藤さんを1、それ以外を0とするcurrent_generation配列を定義します。
  2. next_generation関数は、現在の世代から次世代を生成します。これはcurrent_generation配列をシャッフルし、先頭からペアを組み片方の親の苗字を継承する次世代を2人生成していき、次世代が出生率から想定される人数になるまで続けます。
  3. next_generation関数によって生成された次世代を再びnext_generation関数にかけ次世代の生成を繰り返します。
  4. 次世代が生成されるたびにprint_generation関数でその内訳を出力します。1世代進むごとに20年経過するとして出力しています。

シミュレーション結果

上記コードを動かしてみた結果は以下のようになりました。

0年後、人口123969999人中、佐藤さんは1946328人です。 佐藤さんの割合は1.5699992060175785%です。
20年後、人口74382000人中、佐藤さんは1166562人です。 佐藤さんの割合は1.5683391143018472%です。
40年後、人口44629200人中、佐藤さんは700646人です。 佐藤さんの割合は1.569927312163337%です。
60年後、人口26777520人中、佐藤さんは420894人です。 佐藤さんの割合は1.5718184507004382%です。
80年後、人口16066512人中、佐藤さんは252552人です。 佐藤さんの割合は1.5719155470708266%です。
100年後、人口9639908人中、佐藤さんは150940人です。 佐藤さんの割合は1.565782578008006%です。
120年後、人口5783944人中、佐藤さんは90204人です。 佐藤さんの割合は1.5595586679262454%です。
140年後、人口3470366人中、佐藤さんは53612人です。 佐藤さんの割合は1.5448514652345027%です。
160年後、人口2082220人中、佐藤さんは31948人です。 佐藤さんの割合は1.5343239427149868%です。
180年後、人口1249332人中、佐藤さんは19204人です。 佐藤さんの割合は1.5371414483900196%です。
200年後、人口749600人中、佐藤さんは11482人です。 佐藤さんの割合は1.5317502668089649%です。
220年後、人口449760人中、佐藤さんは6938人です。 佐藤さんの割合は1.542600498043401%です。
240年後、人口269856人中、佐藤さんは4220人です。 佐藤さんの割合は1.563796988023242%です。
260年後、人口161914人中、佐藤さんは2542人です。 佐藤さんの割合は1.569969242931433%です。
280年後、人口97148人中、佐藤さんは1522人です。 佐藤さんの割合は1.5666817639066168%です。
300年後、人口58288人中、佐藤さんは894人です。 佐藤さんの割合は1.5337633818281637%です。
320年後、人口34972人中、佐藤さんは568人です。 佐藤さんの割合は1.6241564680315683%です。
340年後、人口20984人中、佐藤さんは336人です。 佐藤さんの割合は1.6012199771254287%です。
360年後、人口12590人中、佐藤さんは212人です。 佐藤さんの割合は1.6838760921366165%です。
380年後、人口7554人中、佐藤さんは128人です。 佐藤さんの割合は1.6944665078104315%です。
400年後、人口4532人中、佐藤さんは86人です。 佐藤さんの割合は1.8976169461606356%です。
420年後、人口2720人中、佐藤さんは50人です。 佐藤さんの割合は1.8382352941176472%です。
440年後、人口1632人中、佐藤さんは18人です。 佐藤さんの割合は1.1029411764705883%です。
460年後、人口980人中、佐藤さんは10人です。 佐藤さんの割合は1.0204081632653061%です。
480年後、人口588人中、佐藤さんは6人です。 佐藤さんの割合は1.0204081632653061%です。
500年後、人口352人中、佐藤さんは6人です。 佐藤さんの割合は1.7045454545454544%です。
520年後、人口212人中、佐藤さんは2人です。 佐藤さんの割合は0.9433962264150944%です。
540年後、人口128人中、佐藤さんは2人です。 佐藤さんの割合は1.5625%です。
560年後、人口76人中、佐藤さんは2人です。 佐藤さんの割合は2.631578947368421%です。
580年後、人口46人中、佐藤さんは2人です。 佐藤さんの割合は4.3478260869565215%です。
600年後、人口28人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
620年後、人口16人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
640年後、人口10人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
660年後、人口6人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
680年後、人口4人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
700年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
720年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
740年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
760年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
780年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
800年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
820年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
840年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
860年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
880年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
900年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
920年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
940年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
960年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
980年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1000年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1020年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1040年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1060年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1080年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1100年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1120年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1140年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1160年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1180年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1200年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1220年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1240年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1260年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1280年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1300年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1320年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1340年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1360年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1380年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1400年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1420年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1440年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1460年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1480年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1500年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1520年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1540年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1560年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1580年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1600年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1620年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1640年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1660年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1680年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1700年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1720年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1740年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1760年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1780年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1800年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1820年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1840年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1860年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1880年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1900年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1920年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1940年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1960年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
1980年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。
2000年後、人口2人中、佐藤さんは0人です。 佐藤さんの割合は0.0%です。

上記をみると佐藤さんの割合は増えていかない結果となりました。また700年程度で人口2となり、この状態では苗字が1種類となります。上記結果では佐藤さんが0%になっていますが、人口2人で生き残ったのが佐藤さんの場合は佐藤さん100%となり、この結果の場合もありました。初期の割合が大きい佐藤さんの生き残る確率が高いかもしれません。

3
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3