( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

【Python】ランダムな数値を作り出す方法|random

ランダムな数値とは?

今回はPythonでランダムに数値を作る方法についてご紹介します

乱数を発生させるとも呼ばれるこの手法では、完全にランダムな数値を出すことも、狙った形のランダムな数値を出すこともできます

例えばサイコロを「100回」振ってみて、出た目の回数をデータとして取得してみます

(正確には1から6までの一様分布の乱数を出します)

np.random.randint(1,7,100)
np.random.randint(1,7,100)

また、サイコロのように全てが同様の確率ではなく、身長や体重のように平均を中心にばらける数値も出すことができます

例えば、1,000人の男性の身長をプロットしてみます

(平均170cmで標準偏差5cmの正規分布に従う乱数を出します)

np.random.normal(170,5,1000)
np.random.normal(170,5,1000)

Pythonでランダムな数値を出す方法

事前準備

事前にNumpyをインポートしておきます

np.randomを使い乱数を発生させていきます

import numpy as np

rand:一様分布の乱数(0以上-1未満)

まずは一番基本的な乱数の出し方をご紹介します

randを使うと「0」以上で「1」未満の数値(小数)をランダムに発生させることができます

引数が無い場合は「1つ」の乱数が出てきます

np.random.rand()
np.random.rand()

randの第一引数に数値を指定すると、array型で乱数を複数発生させることができます

np.random.rand(5)
np.random.rand(5)

続けて第二引数に数値を指定することで、配列を変えて乱数を発生させることができます

np.random.rand(4,4)
np.random.rand(4,4)

引数を続けることで、2次元以上の配列を作成することも可能です

np.random.rand(3,3,3)
np.random.rand(3,3,3)

randint:一様分布の乱数(任意の整数)

続いて指定した「整数」の乱数を発生させる方法をご紹介します

randintを使うことで、任意の整数を発生させます

引数に「最小値」と「最大値」を指定すると、その中の整数が取り出されます

np.random.randint(1,100)
np.random.randint(1,100)

第三引数に数値を記載することで、「最小値」から「最大値」までの乱数を「指定の個数」取り出すことができます

np.random.randint(1,100,10)
np.random.randint(1,100,10)

またサイズを指定することも可能です

np.random.randint(1,100,[3,4])
np.random.randint(1,100,[3,4])

randn:標準正規分布の乱数(平均0、分散1)

randnを使うことで、標準正規分布に従う乱数を発生させることができます

標準正規分布とは平均0、分散1の正規分布のことです(細かい説明は割愛します)

np.random.randn(5)
np.random.randn(5)

もちろん配列も指定することができます

np.random.randn(3,3)
np.random.randn(3,3)

normal:正規分布の乱数(任意の平均・標準偏差)

normalでは「任意の平均」と「任意の標準偏差」を指定して正規分布を算出することができます

引数には始めに平均を、続いて標準偏差を指定してください

np.random.normal(170,5)
np.random.normal(170,5)

こちらも引数に個数を指定することができます

np.random.normal(170,5,10)
np.random.normal(170,5,10)

一様分布と正規分布を比較

最後に一様分布と正規分布の違いのグラフを可視化してみます

randintでは「1」から「100」までの整数を「1,000個」ランダムに取り出します

normalでは「平均50」で「標準偏差15」の乱数を「1,000個」取り出します

そして同じグラフでプロットします

import matplotlib.pyplot as plt
sns.set_palette('Set1')

np.random.seed(1)

x1 = np.random.randint(1,100,1000) # 一様分布
x2 = np.random.normal(50,15,1000)  # 正規分布

fig = plt.figure(figsize=(12,4))
ax = fig.add_subplot(1, 1, 1)
ax.hist(x1, bins=50, alpha=0.7)
ax.hist(x2, bins=50, alpha=0.7)
plt.show()
Pythonで一様分布の乱数と正規分布に従う乱数のグラフ

一様分布(赤)は均等に数値が並ぶのに対して、正規分布(青)は山なりなグラフになります

ぜひ使い分けてみてください

まとめ

今回はPythonを使ってランダムな数値を出す方法をご紹介してきました

単純に乱数を発生させることも、狙った形の乱数を発生させることもできます

テストデータとしてぜひ試してみてください

お気に入り登録お願いします

コメントを残す

メールアドレスが公開されることはありません。