サンプルコード集
◯サンプルコードを写す時はコピペをしないようにしましょう。
◯▶を押すと出力が表示されます。
◯Geminiボタンを押すとGemini(AI)による解説が表示されます。間違っていることもあるので、疑問に思った場合はご質問ください。
◯全て
◯if文
◯for文
◯関数
◯配列
◯ファイル入出力
◯Numpy
◯Matplotlib
◯openpyxl
◯Pandas
◯正規表現
◯Biopython
◯scikit-learn
◯seaborn
◯Graphviz
◯Gemini
◯Tkinter
CODE: d-1 (scikit-learn)
from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt
# ---- Config ----
CSV_FILE = "http://python.hisakatano.com/data/iris.csv"
OUTPUT_FILE_1 = "d-1_output_1.png"
OUTPUT_FILE_2 = "d-1_output_2.png"
# ---------------------------------------------------------
# PCAの次元圧縮結果のプロット
# ---------------------------------------------------------
def plot_pca_result(df, output_file):
plt.clf()
label_type = set(df["label"])
for t in label_type:
df2 = df.query('label=="%s"' % (t))
plt.scatter(x=df2[0], y=df2[1], label=t)
plt.legend()
plt.grid()
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.savefig(output_file)
return
# ---------------------------------------------------------
# メイン
# ---------------------------------------------------------
def main():
# ---- (1) data frameでのデータ取得 ----
df = pd.read_csv(CSV_FILE, index_col=None, header=0)
print(df)
# ---- (2) numpyに変換しデータ成形 ----
x = df.iloc[:, 0:4].to_numpy()
# ---- (3) scikit-learnによる分析処理 ----
pca = PCA(n_components=2)
pca.fit(x)
x0 = pca.transform(x)
# ---- 次元圧縮結果の可視化 ----
df2 = pd.DataFrame(x0)
df2["label"] = df["species"]
print(df2)
plot_pca_result(df2, OUTPUT_FILE_1)
# ---- 寄与度の可視化 ----
df3 = pd.DataFrame(pca.components_.T)
df3["label"] = df.columns[0:4]
print(df3)
plot_pca_result(df3, OUTPUT_FILE_2)
return(0)
main()
【ポイント】
◯pip install scikit-leranが必要。
◯「(1)data frameでのデータ取得 -> (2)numpyに変換しデータ成形 -> (3) scikit-learnによる分析処理」 が共通する一連の流れ。
◯numpyへの変換は必要ないときもあるが、本格的なデータ分析のときには必須の手順となるため慣れておこう。
◯参考: https://qiita.com/fsd-aki/items/65628ebe0973d88c16ef
◯出力ファイル1: https://python.hisakatano.com/data/d-1_output_1.png
◯出力ファイル2: https://python.hisakatano.com/data/d-1_output_2.png
◯irisデータについて: https://qiita.com/ao_log/items/fe9bd42fd249c2a7ee7a
◯PCA(主成分分析)とは?: https://www.srush.co.jp/blog/2462384781

CODE: d-2 (scikit-learn)
from sklearn.linear_model import LinearRegression
import pandas as pd
import matplotlib.pyplot as plt
# ---- Config ----
CSV_FILE = "http://python.hisakatano.com/data/linear_regression_data.csv"
OUTPUT_FILE = "d-2_output.png"
# ---------------------------------------------------------
# メイン処理
# ---------------------------------------------------------
def main():
# ---- (1) data frameでのデータ取得 ----
df = pd.read_csv(CSV_FILE, index_col=None, header=0)
print(df)
# ---- (2) numpyに変換しデータ成形 ----
data_na = df.to_numpy()
# ---- (3) scikit-learnによる分析処理 ----
lr = LinearRegression()
x = data_na[:, 0]
y = data_na[:, 1]
x = x.reshape(len(x), 1) # xは行列にする。
# 今回は2次元データなのでNx1の行列。
print(x)
print(y)
lr.fit(x, y)
coef = lr.coef_[0] # 傾き
intercept = lr.intercept_ # 切片
print("傾き: %f" % (coef))
print("切片: %f" % (intercept))
plt.scatter(x, y, color="red")
plt.plot(x, lr.predict(x), color="blue")
plt.grid()
plt.savefig(OUTPUT_FILE)
return(0)
main()
【ポイント】
◯Linear regression(線形回帰)とは: 散布図にいい感じに直線を引く処理。
◯最小二乗法と言った方が伝わる人もいるかも。
◯lr.fit(x, y)のxは行列にする。本来多次元のデータも扱えるため、xは多次元でも可。今回は二次元なので、Nx1の行列とする。
◯参考: https://qiita.com/0NE_shoT_/items/08376b08783cd554b02e
◯出力ファイル: https://python.hisakatano.com/data/d-2_output.png

CODE: d-3 (scikit-learn)
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import LabelEncoder
import pandas as pd
import numpy as np
import warnings
# ---- Config ----
warnings.simplefilter("ignore") # 警告が表示されないようにする
CSV_FILE = "http://python.hisakatano.com/data/iris.csv"
# ---------------------------------------------------------
# MLPの学習
# ---------------------------------------------------------
def learn_mlp(x_arr, y_arr):
print("Learning ... ")
model = MLPClassifier(hidden_layer_sizes=(100,), max_iter=100, activation="relu", verbose=True)
model.fit(x_arr, y_arr)
print("Learning ... done")
return(model)
# ---------------------------------------------------------
# メイン処理
# ---------------------------------------------------------
def main():
# ---- (1) data frameでのデータ取得 ----
df = pd.read_csv(CSV_FILE, index_col=None, header=0)
print(df)
x_df = df.iloc[:, 0:4]
y_df = df.iloc[:, 4]
# ---- (2) numpy arrayに変換しデータ成形 ----
x_arr = x_df.to_numpy()
y_arr = y_df.to_numpy()
print(x_arr[0:5])
print(y_arr[0:5])
# ---- (3) scikit-learnによる分析処理 ----
# ラベルを数値に変換 ("setosa"->0, "versicolour"->1, "virginica"->2)
le = LabelEncoder()
y_arr = le.fit_transform(y_arr)
print(y_arr[0:5])
# モデルの学習
model = learn_mlp(x_arr, y_arr)
# スコアの確認
# 0.9以上であればだいたいOK
score = model.score(x_arr, y_arr)
print("Score: %.2f" % (score))
# モデルのテスト
tmp_data = np.array([[7.4,2.8,6.1,1.9]]) # テストデータは行列(二次元配列)にする
y = model.predict(tmp_data)
for i in range(0, 4):
print("%s: %f" % (df.columns[i], tmp_data[0][i]))
print("の品種は")
print(le.inverse_transform(y)[0]) # ラベルの数値を文字列に戻す
return(0)
main()
【ポイント】
◯多層パーセプトロン(MLP, Multi-Layer Perceptron)とは、ニューラルネットワークの原始的なモデル。
◯今回は入力層が4ノード、中間層が100ノード、出力層が3ノードの3層MLP。
◯活性化関数はReLU。sigmoidなどでもOK。
◯簡単なモデルではあるが、この層が深くなると深層学習と呼ばれるモデルになる。今の生成AIなどで使われているモデルと原理は変わらない。
◯参考: https://qiita.com/maskot1977/items/d0253e1eab1ff1315dff
◯参考: https://qiita.com/nekotto/items/111bc5412ed0c000a9e6
