トライアルデータの作成②
目的:実際のデータには、バラつきがあるはずなので、わざとかたよりのあるデータを作る
目標
1 変数を入力できるようにする
2 ランダムデータにばらつきをもたせる
※実際の乱数は、統計学のようなもの(正規分布など)を使うらしいが、勉強が追いつかないので、自分で使うレベルのバラつきにする
3 トライアルデータ①をブラッシュアップ、最後にまとめる
4 変数名と関数名を同名にしないように、わかりやすい名前にする
プログラム実行順
1、numpy,pandas,string,randomをインポート
内容
numpy:数値を扱う
pandas:データフレームを扱う
string:文字(アルファベット)を扱う
random:ランダムに要素や数字を取り出す関数を扱う
2、トライアルデータ①を修正
内容
変数a、c、trial_countをinput( )で入力する形に int(input( ))で入力したものを整数にする(文字列で入力しても整数になる)
3、乱数を作成
内容
random.randint()は、import random によって使えるモジュール
( )の整数をランダムで1つ取り出す
書式(文字をとりだしてリスト化)
※この3つは標準ライブラリなので、import randomはいらない
random.choice 配列からランダムで要素をひとつ抽出
random.choices リストから複数個(k=)とりだしてリスト化
重みつけ(weight)で出現率を変えられる
random.sample 選択の重複をなくせる
乱数に5~10を設定したので最大で2倍の出現率の差がでる
random.randint()でシャッフルしているので、どの文字がでやすいかもランダムになっている
4,データフレームにしてエクセルに出力(変更なし)
コード全体
import numpy as np
import pandas as pd
import string
import random
a = int(input('第1のグループ数>>>'))
c = int(input('第2のグループ数>>>'))
trial_count = int(input('サンプルデータ数>>>'))
b = a+c
bangou_1 = list(range(1,1+a))
bangou_2 = list(range(1,1+c))
moji_1 = list(string.ascii_uppercase[:a])
moji_2 = list(string.ascii_uppercase[a:b])
ransu_1 = [random.randint(5,10) for i in range(a)]
print(ransu_1)
#random.choicesは要素を複数個取り出してリストをつくる
#np.random.choiceは繰り返しリストまたは配列の要素をとりだす
X = random.choices(moji_1,k=trial_count,weights = ransu_1)
Y = np.random.choice(moji_2, trial_count)
ind = np.arange(1,trial_count+1)
df = pd.DataFrame({'列1': X, '列2': Y}, index=ind)
df.index.name = 'インデックス'
print(df)
df.to_excel(r'エクセルのパス')