トライアルデータの作成①
目的:Pythonを用いて、エクセルをあーだこーだするために、試行用のテストデータを作成する
目標
1 エクセルにランダムな表をデータフレーム化して出力する
2 できるだけ数値を変更しやすい形にブラッシュアップする
3 プログラムの手順とコードを併記、サンプルは最後にまとめる
4 変数名と関数名を同名にしないようにする
プログラム実行順
1、numpy,pandas,stringをインポート
内容
numpy:数値を扱う
pandas:データフレームを扱う
string:文字(アルファベット)を扱う
as npはショートカット、numpy.arangeをnp.arangeという表記にできる
pandasはpdという名前でインポート
各モジュールやライブラリをimportすることで、その関数がつかえるようになる。(どれがモジュールで、どれがライブラリかは知らない)
2、数字と文字のリスト(2組)を作成
内容
変数a、cを7と指定
この数字でアルファベットの先頭から何文字目までをリスト化するかを決めている
書式 range(A,B) は A以上B未満でstep指定がなければ、1刻みになる。
1から7までの整数(1,2,3,4,5,6,7)を指定している(8未満だから)
list( )で[1,2,3,4,5,6,7]を作成([]はリストを表す)
※プログラム上で()と[]は意味が違う、タプルとリストで調べる
string.ascii_uppercaseでアルファベットの大文字を取得
(import stringモジュール?によって扱えるようになる)
[:7]でAから順にアルファベットを7個取得する
[7:14]で8番目から14番目を取得する [開始:終了] を表す
moji_1は[A,B,C,D,E,F,G],moji_2は[H,I,J,K,L,M,N]のリストをそれぞれ取得
3、リストを統合して、辞書化 (データフレームにするにはいらない?)
内容
zip( , )で2つのリストをまとめる
この場合 1とA 2とB が結びつく
dict(zip(,))で結びついたものを辞書化、1をKey,AをValueとして扱う
辞書の内部データ {’1’:’A’,’2’:’B’,‥‥‥‥} 左の数字をKey,右の文字をValueとする、Keyの数字を呼ぶとValueの文字が返される
np.random.choiceは、配列またはリストの要素を繰り返しランダムで取り出す。
書式 np.random.choice(リスト,サイズ,確率)
今回の場合、trial_countの数だけリストから取り出す
ランダムに取り出したリストを変数X,Yとおく
4,データフレームにしてエクセルに出力
内容
書式 np.arange(スタート、ストップ、ステップ)
スタートの数字から、ストップ未満の数字まで、ステップの数字ずつ増減する。類似にrange()があるが、numpyでは使えない
例) np.arange(3, 11, 2) = [3,5,7,9] = [3 5 7 9]
numpyでは、np.arrayというデータ型になり、「,」で区切ったリストにはならない
numpyは、配列
リスト(list関数)は、オブジェクトという扱い
numpyの配列(コンマなし)のほうが処理が速い
サンプルのnp.random.choiceでは、リストから要素をランダムに取り出している
工事中
書式 pd.DataFrame({'列1':X,'列2':Y},index=ind)
print(df) データフレームを出力
df.to_excel(r'エクセルのパス')
保存したい先のエクセルのパスを取得し、コピペするとそこに上書きする
コード全体
import numpy as np
import pandas as pd
import string
a = 7
bangou = list(range(1,1+a))
moji_1 = list(string.ascii_uppercase[:a])
dict_1 = dict(zip(bangou,moji_1))
c = 7
b = a+c
moji_2 = list(string.ascii_uppercase[a:b])
dict_2 = dict(zip(bangou,moji_2))
trial_count = 10
X = np.random.choice(moji_1, trial_count)
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'エクセルのパス')