Pythonでランダムな処理を行う【random】モジュール
- 公開日:2018/11/30
- 更新日:2019/01/22
- 投稿者:n bit
Pythonの組み込みモジュール『random』モジュールを使ってランダムに数値を生成したり、配列オブジェクトからランダムにオブジェクトを抽出、ランダムに並び替え、ランダムにサンプリング等を行う方法を解説します。
この記事は約 分で読めます。(文字)
randomモジュールとは
randomモジュールはPythonの組み込みモジュールの1つ。ランダムな数値の生成や配列オブジェクトにランダムな処理を加える等、ランダムな実行処理に使えるモジュールです。
- randomモジュール:ランダムな処理を行う組み込みモジュール
randomモジュールの使い方
具体的なrandomモジュールの利用方法を確認していきましょう。randomモジュール内には数多くの関数があります。randomモジュールのコードや内部の関数はこちらで確認することができます。
いくつか利用頻度が高いものから解説していきましょう。
random():0以上1未満の浮動小数点数をランダムに生成
randomモジュール内で1番標準的な関数です。『random()』は0以上1未満の浮動小数点数をランダムに生成します。
import random
for i in range(10):
print(random.random())
出力結果
0.23122710334235608
0.9603160077198344
0.2947058025755246
0.6262347500984081
0.8668989649434684
0.1981924609200576
0.5832197103571308
0.08356141922060412
0.7904936926415418
0.10007907502573599
uniform(開始値, 終了値):指定範囲内で浮動小数点数をランダムに生成
『random()』は0以上1未満の浮動小数点数をランダムに生成しましたが、『uniform()』は開始値以上終了値未満の任意で指定した範囲内で浮動小数点数をランダムに生成します。
import random
for i in range(10):
print(random.uniform(1, 10))
出力結果
2.2168799167202655
7.081774500870121
7.697634563223482
9.550362162569673
1.4407671511347162
7.680897661375388
7.304692439596273
7.6636746749058515
9.07139784984245
8.772558757071728
randint(開始値, 終了値):指定範囲内で整数をランダムに生成
『uniform()』は開始値以上終了値未満の任意で指定した範囲内で浮動小数点数をランダムに生成しましたが、『randint()』は開始値以上終了値未満の任意で指定した範囲内で整数をランダムに生成します。
import random
for i in range(10):
print(random.randint(1, 10))
出力結果
7
4
2
3
7
4
1
6
6
1
choice(配列):配列オブジェクトからランダムに要素を抽出
『choice()』は配列(シーケンス)オブジェクトからオブジェクト内の要素をランダムに1つだけ抽出します。
import random
words = ['Python', 'CSS', 'HTML', 'JavaScript']
print(random.choice(words))
出力結果
HTML
randrange(開始値, 終了値, ステップ値):指定範囲内で整数をランダムに生成
『randrange()』は関数名から何となく想像がつくかもしれませんがrange関数に先ほど解説したrandom.choice関数を足し合わせたような関数です。
range関数については下記ページで詳しく解説しています。
Pythonのrange関数で一定間隔の数列(等差数列)を生成する
Pythonで一定間隔の数字の配列を生成したいときに使用する組み込み関数『range関数』について解説。range関数は実際のプログラミングでも非常に出番の多い組み込み関数です。
動きとしては、randrange関数の引数に指定した『開始値, 終了値, ステップ値』で生成されたレンジからランダムに値を抽出します。range間数と同じで引数の値には整数(int)しか指定できません。
import random
for i in range(10):
print(random.randrange(1, 10, 1))
出力結果
4
6
6
4
9
3
3
2
8
3
実際にrange間数とrandom.choice関数を組み合わせた動作でも同じような実力結果が得られます。
import random
for i in range(10):
print(random.choice(range(1, 10, 1)))
出力結果
8
4
3
9
6
2
3
9
9
8
shuffle(配列):配列オブジェクト内の要素をランダムにシャッフル
『shuffle()』は配列(シーケンス)オブジェクト内の要素をランダムに並び替えします。新しい配列オブジェクトは生成されず直接元の配列オブジェクトをシャッフルすることに注意してください。
import random
words = ['Python', 'CSS', 'HTML', 'JavaScript']
random.shuffle(words)
print(words)
出力結果
['HTML', 'Python', 'CSS', 'JavaScript']
sample(配列, k=サンプル数):配列オブジェクト内の要素をランダムに抽出
『sample()』は母集団となる配列オブジェクトから『k』に指定したサンプル数の数だけランダムに要素を抽出します。『sample()』はサンプリングが目的の為、1度抽出した要素は重複して抽出されません。
抽出された要素は新たなリストオブジェクトとして出力されます。
import random
words = ['Python', 'CSS', 'HTML', 'JavaScript']
words_sample = random.sample(words, k=2)
print(words_sample)
出力結果
['HTML', 'JavaScript']
choices(配列, k=サンプル数):配列オブジェクト内の要素をランダムに抽出
『sample()』と同じような働きをするのが『choices()』です。
『random.choices』と『random.sample』の違い
『random.choices』と『random.sample』の違いはランダム抽出時に要素の重複が『ある』か『ない』かです。
- random.choices:要素ランダム抽出時重複あり
- random.sample:要素ランダム抽出時重複なし
『random.choices』は配列オブジェクトから『k』に指定した数だけ重複要素もある状態でランダムに抽出します。
抽出された要素は新たなリストオブジェクトとして出力されます。
import random
words = ['Python', 'CSS', 'HTML', 'JavaScript']
words_sample = random.choices(words, k=3)
print(words_sample)
出力結果
['HTML', 'HTML', 'JavaScript']
今日のdot
今回はPythonの組み込みモジュール『random』モジュールについて解説しました。『random』モジュールはこれ以外にも様々な関数を持っていますがその大半は分布方法の違いによるものです。
ランダム値の分布方法
『random.random()』モジュールは一様分布に従ってランダムに数値を生成します。それ以外にも次のような分布に従う乱数を生成するものが用意されています。
- 三角分布:random.triangular(low, high, mode)
- ベータ分布:random.betavariate(alpha, beta)
- 指数分布:random.expovariate(lambd)
- ガンマ分布:random.gammavariate(alpha, beta)
- ガウス分布:random.gauss(mu, sigma)
- 対数正規分布:random.lognormvariate(mu, sigma)
- 正規分布:random.normalvariate(mu, sigma)
- フォン・ミーゼス分布:andom.vonmisesvariate(mu, kappa)
- パレート分布:random.paretovariate(alpha)
- ワイブル分布:random.weibullvariate(alpha, beta)
しかしこれらの分布に従う乱数生成処理はNumpyにも用意されており、これよりも扱える種類が多く、かつ、実行処理も早いため基本的にはNumpyを利用しましょう。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。