トライアルデータの作成②

目的:実際のデータには、バラつきがあるはずなので、わざとかたよりのあるデータを作る

目標
1 変数を入力できるようにする
2 ランダムデータにばらつきをもたせる
 ※実際の乱数は、統計学のようなもの(正規分布など)を使うらしいが、勉強が追いつかないので、自分で使うレベルのバラつきにする
3 トライアルデータ①をブラッシュアップ、最後にまとめる
4 変数名と関数名を同名にしないように、わかりやすい名前にする

プログラム実行順

1、numpy,pandas,string,randomをインポート

手順1のコード
書式 import ライブラリ(モジュール名)
import numpy as np
import pandas as pd
import string
import random

内容
numpy:数値を扱う
pandas:データフレームを扱う
string:文字(アルファベット)を扱う
random:ランダムに要素や数字を取り出す関数を扱う

2、トライアルデータ①を修正

修正前
a = 7
c = 7
b = a+c
bangou = list(range(1,1+a))
moji_1 = list(string.ascii_uppercase[:a])
moji_2 = list(string.ascii_uppercase[a:b])

修正後
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])

内容
変数a、c、trial_countをinput( )で入力する形に int(input( ))で入力したものを整数にする(文字列で入力しても整数になる)

3、乱数を作成

修正前
trial_count = 10
X = np.random.choice(moji_1, trial_count)
Y = np.random.choice(moji_2, trial_count)

修正後
ransu_1 = [random.randint(5,10) for i in range(a)]
print(ransu_1)
X = random.choices(moji_1,k=trial_count,weights = ransu_1)
Y = np.random.choice(moji_2, trial_count)

内容
random.randint()は、import random によって使えるモジュール
( )の整数をランダムで1つ取り出す
書式(文字をとりだしてリスト化)
 ※この3つは標準ライブラリなので、import randomはいらない
 random.choice  配列からランダムで要素をひとつ抽出
 random.choices  リストから複数個(k=)とりだしてリスト化
         重みつけ(weight)で出現率を変えられる
   random.sample  選択の重複をなくせる

乱数に5~10を設定したので最大で2倍の出現率の差がでる
random.randint()でシャッフルしているので、どの文字がでやすいかもランダムになっている

4,データフレームにしてエクセルに出力(変更なし)

変更なし
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'エクセルのパス')

コード全体

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'エクセルのパス')

いいなと思ったら応援しよう!