見出し画像

91【AI×学習】京都弁彼氏風にやさし〜くPythonデータ分析試験の勉強を手伝ってもらった話

今回は、ChatGPTでPython専門家の京都弁彼氏風になってもらって、Pythonデータ分析試験の学習を手伝ってもらいました(笑)
ネタ枠です。やさしい目線で楽しんでください!

それではスタートです(笑)

京都弁で彼氏風にやさし〜く説明していくでぇ。わからんとこがあったら、遠慮せんと聞いてな。Google Colabで使えるサンプルコードも用意しといたさかい、試してみてや。



NumPy編

「NumPyっちゅうのはな、Pythonで配列とか行列を高速に計算できるライブラリやねん。普通のリストとちゃって、ndarrayっちゅう型を使うて、データの管理がすごい便利なんや。

例えば、配列の形を変えるときは reshape ってメソッドを使うんやけど、ちゃんと要素数が合わんとエラーになるさかい、気ぃつけや。

それと、ブロードキャストって機能を使うと、次元の違うデータ同士でも演算できるんよ。これ、地味に便利やでぇ。」

Google Colabサンプルコード:

import numpy as np

# 配列の作成
a = np.array([1, 2, 3, 4])
b = np.array([[1, 2], [3, 4]])

# 配列の次元変換
reshaped_b = b.reshape(4)

# ブロードキャストの例
c = np.array([1, 2, 3])
d = np.array([[1], [2], [3]])
broadcast_result = c + d

print("元の配列:", a)
print("次元変換:", reshaped_b)
print("ブロードキャスト結果:\n", broadcast_result)

scikit-learn編

「scikit-learnは機械学習用のライブラリなんやけど、データの前処理やモデルのトレーニングがめっちゃ簡単にできるんや。

たとえば、ラベルエンコーディングでカテゴリを数値に変換するんも簡単やし、train_test_splitを使うたらデータを学習用とテスト用に分けるんもお手のもんや。

ほんで、分類するんにSVM(サポートベクターマシン)や決定木、ランダムフォレストなんかがあって、それぞれの特徴を活かして精度の高いモデルを作れるんよ。」

Google Colabサンプルコード:

from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

# ラベルエンコーディング
data = ['male', 'female', 'female', 'male']
encoder = LabelEncoder()
encoded_data = encoder.fit_transform(data)

# データ分割
X = [[0], [1], [1], [0]]  # 仮の特徴量
y = [0, 1, 1, 0]  # ラベル
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=42)

# SVMで学習
model = SVC()
model.fit(X_train, y_train)
accuracy = model.score(X_test, y_test)

print("エンコーディング結果:", encoded_data)
print("テストデータの精度:", accuracy)

Matplotlib編

「データ分析してて、数字だけやとちょっとわかりにくいことがあるやろ?そんなときはMatplotlibを使うとええで。折れ線グラフや棒グラフ、散布図とかでデータを見やすくしてくれるんや。

例えば、2つのデータの関連性を調べたいときは scatter っていうメソッドで散布図を描いたら、めっちゃ見やすくなるし、データの傾向がようわかるんや。」

Google Colabサンプルコード:

import matplotlib.pyplot as plt

# データ作成
x = [1, 2, 3, 4, 5]
y = [10, 14, 18, 25, 30]

# 折れ線グラフ
plt.plot(x, y, label='Data Trend')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('折れ線グラフのサンプル')
plt.legend()
plt.show()

# 散布図
plt.scatter(x, y, color='r')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('散布図のサンプル')
plt.show()

pandas編

「pandasはデータを扱うときにめちゃくちゃ便利やねん。DataFrameやSeriesっていうデータ構造を使うて、表形式のデータを自在に操作できるんや。

例えば、CSVファイルを簡単に読み込んで、そのままデータを抽出したり加工したりもできるんよ。ややこしいデータも簡単に整理整頓できるから、ほんまに重宝するんやで。」

Google Colabサンプルコード:

import pandas as pd

# データ読み込み
data = {
    '名前': ['たろう', 'はなこ', 'さぶろう'],
    '年齢': [23, 25, 22],
    '性別': ['男', '女', '男']
}
df = pd.DataFrame(data)

# データの表示と抽出
print("データフレーム:\n", df)
print("\n名前と年齢だけ抽出:\n", df[['名前', '年齢']])

# CSVとして保存と読み込み
df.to_csv('sample_data.csv', index=False)
loaded_df = pd.read_csv('sample_data.csv')
print("\nCSVから読み込んだデータ:\n", loaded_df)

ほな、こんな感じで各ライブラリの使い方を試してみてや。Google Colabやったらインストールの心配もせんでええし、簡単に動かせるさかい、いっぺんやってみて。わからんことがあったら、いつでも頼ってな。

おっ、気に入ってくれたんかな?嬉しいわぁ。ほな、続きやっていくでぇ!今回はもうちょっと深めに、データ分析の流れもサクッと説明しながらいこか。


scikit-learnでのデータ前処理

「データ分析するときって、ただデータを読み込んだだけやと、うまくモデルが動かへんこともあるんよ。そやから、まずはデータの『前処理』をするんやけど、scikit-learnにはそれを簡単にしてくれる機能がいっぱいあるんや。

例えば、StandardScalerを使ってデータの標準化をすることで、データのスケールを揃えるんや。これで、モデルの精度が上がったりするんやで。」

Google Colabサンプルコード:

from sklearn.preprocessing import StandardScaler
import numpy as np

# 仮のデータ
data = np.array([[100, 0.001], [200, 0.002], [300, 0.003]])

# 標準化
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

print("元のデータ:\n", data)
print("標準化されたデータ:\n", scaled_data)

分類モデルの構築

「じゃあ、次は分類や。scikit-learnでは、いろんな分類モデルが簡単に作れるんやけど、たとえば『決定木』っていうのを使うと、特徴量に応じてデータを分けて分類できるんよ。これ、分かりやすいし、解釈もしやすいんや。」

Google Colabサンプルコード:

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# データセットの読み込み
iris = load_iris()
X, y = iris.data, iris.target

# データを学習用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 決定木のモデルを作成
tree = DecisionTreeClassifier(max_depth=3)
tree.fit(X_train, y_train)

# 精度の確認
accuracy = tree.score(X_test, y_test)
print("テストデータの精度:", accuracy)

回帰分析

「次は回帰分析について話そか。分類が『どのグループに入るか』を予測するんに対して、回帰分析は『数値を予測する』んや。たとえば、家の広さと家賃の関係を調べて、『この広さの家やと家賃はこれぐらいやろなぁ』って予測したりするんやで。これに使うのが、線形回帰や。」

Google Colabサンプルコード:

from sklearn.linear_model import LinearRegression

# 仮のデータ: 部屋の広さ (㎡) と家賃 (万円)
X = np.array([[30], [40], [50], [60], [70]])
y = np.array([6, 8, 10, 12, 14])

# 線形回帰モデルの作成と学習
model = LinearRegression()
model.fit(X, y)

# 予測
new_area = np.array([[65]])
predicted_rent = model.predict(new_area)

print("65㎡の部屋の予測家賃:", predicted_rent[0], "万円")

クラスタリング

「ここからはちょっと違うアプローチやけど、データをグループ分けする『クラスタリング』っていう手法もあるんや。これが、教師なし学習の代表みたいなもんで、データをもとに似たもの同士をグループにするんよ。

たとえば、k-meansって手法を使うと、似たようなデータを自動的にまとめてくれるんや。これ、マーケティングとかで、似た行動をするお客さんをグループ分けしたりするときに便利なんやで。」

Google Colabサンプルコード:

from sklearn.cluster import KMeans

# 仮のデータ: XとYの座標
data = np.array([[1, 2], [1, 4], [1, 0],
                 [10, 2], [10, 4], [10, 0]])

# k-meansクラスタリング
kmeans = KMeans(n_clusters=2, random_state=42)
kmeans.fit(data)

# クラスタのラベルを表示
print("各データのクラスタラベル:", kmeans.labels_)

Matplotlibを使ったデータ可視化

「せっかく分析するんやから、データを見やすくしたいよな?Matplotlibは、データをわかりやすくするためのグラフを作るんにめっちゃ向いてるんや。これ使えば、データの傾向とか、一目で分かるようにできるんやで。」

Google Colabサンプルコード:

import matplotlib.pyplot as plt

# サンプルデータ
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 30]

# 棒グラフを作成
plt.bar(categories, values, color=['red', 'green', 'blue', 'purple'])
plt.xlabel('カテゴリー')
plt.ylabel('値')
plt.title('カテゴリーごとの値の棒グラフ')
plt.show()

pandasでデータ操作

「pandasも引き続き便利やで。データを読み込んで、必要なとこだけ抽出したり、整理整頓したり、簡単にできるんや。しかも、欠損データを埋めたり、データを加工したりもできるから、ほんまにデータ処理のプロみたいに扱えるで。」

Google Colabサンプルコード:

# 仮のデータ作成
data = {
    '名前': ['たろう', 'はなこ', 'さぶろう', 'しろう'],
    '年齢': [23, 25, 22, None],
    '性別': ['男', '女', '男', '男']
}
df = pd.DataFrame(data)

# 欠損値の補完
df['年齢'].fillna(df['年齢'].mean(), inplace=True)

# 性別ごとの平均年齢
mean_age_by_gender = df.groupby('性別')['年齢'].mean()

print("補完後のデータ:\n", df)
print("\n性別ごとの平均年齢:\n", mean_age_by_gender)

こんな感じで、NumPyからscikit-learn、Matplotlib、pandasまで、いろんなツールを駆使してデータを扱えるんやで。ほんま、気になることがあったら何でも聞いてな。これからも一緒にPython使いこなしていこな。

ほな、続けて解説していくでぇ。次は、もうちょっと応用編の話も含めながら、データ分析の面白いところを紹介していくわな。聞いてくれて、ほんま嬉しいわ〜。


ハイパーパラメータのチューニングとグリッドサーチ

「モデルを作るだけやったら簡単やけど、もっとええ結果を出すためには『ハイパーパラメータ』っちゅう設定を最適にしていかなあかんねん。これがモデルの性能に大きな影響を与えるんやけど、手であれこれ試すのは大変やから、scikit-learnには GridSearchCV っちゅう便利な道具があるんよ。

これを使うと、いろんな組み合わせを自動的に試して、一番ええ設定を見つけてくれるんや。データ分析の「職人技」をサポートしてくれる感じやな。」

Google Colabサンプルコード:

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris

# データ読み込み
iris = load_iris()
X, y = iris.data, iris.target

# ランダムフォレストモデルの定義
rf = RandomForestClassifier()

# ハイパーパラメータの候補
param_grid = {
    'n_estimators': [10, 50, 100],
    'max_depth': [None, 10, 20],
    'min_samples_split': [2, 5, 10]
}

# グリッドサーチ
grid_search = GridSearchCV(rf, param_grid, cv=3)
grid_search.fit(X, y)

# ベストパラメータと精度
print("最適なハイパーパラメータ:", grid_search.best_params_)
print("ベストスコア:", grid_search.best_score_)

モデルの評価と交差検証

「モデルの精度を確認するときに、ただ一回テストするだけやとあんまり正確な結果が出えへんことがあるんや。そこで、交差検証っちゅう方法を使って、データを何回も分けて学習・テストを繰り返して、平均的な精度を確認するんよ。これで、モデルがどんなデータにも強いかどうかがわかるんや。」

Google Colabサンプルコード:

from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC

# SVMモデルの作成
svm = SVC(kernel='linear')

# 交差検証でモデルの評価
scores = cross_val_score(svm, X, y, cv=5)

print("各分割の精度:", scores)
print("平均精度:", scores.mean())

ROC曲線とAUCでのモデル評価

「分類モデルを評価するのに、ROC曲線とAUCを使う方法もあるんや。これ、要はモデルがどれだけ正しく予測できてるかを、視覚的に確認できるんよ。AUCの値が1に近いほど、モデルの性能がええってことになるんや。これを使うと、なんかプロの分析家になった気分になれるでぇ。」

Google Colabサンプルコード:

from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import train_test_split

# データを分割
X_train, X_test, y_train, y_test = train_test_split(X, y == 1, test_size=0.5, random_state=42)

# SVMモデルで学習
svm.fit(X_train, y_train)
y_scores = svm.decision_function(X_test)

# ROC曲線をプロット
fpr, tpr, thresholds = roc_curve(y_test, y_scores)
roc_auc = auc(fpr, tpr)

plt.figure()
plt.plot(fpr, tpr, color='blue', label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='gray', linestyle='--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC曲線')
plt.legend(loc="lower right")
plt.show()

Matplotlibでサブプロットを使いこなす

「次は、グラフの作り方をもうちょっと進化させてみよか。Matplotlibで『サブプロット』を使うと、一つの画面に複数のグラフを表示できるんや。これ、データを比較したりするときにめっちゃ便利やで。」

Google Colabサンプルコード:

# データ準備
x = [1, 2, 3, 4, 5]
y1 = [1, 4, 9, 16, 25]
y2 = [25, 20, 15, 10, 5]

# サブプロットを作成
fig, axs = plt.subplots(1, 2, figsize=(12, 4))

# 1つ目のグラフ
axs[0].plot(x, y1, color='blue')
axs[0].set_title('1つ目のグラフ')
axs[0].set_xlabel('X軸')
axs[0].set_ylabel('Y軸')

# 2つ目のグラフ
axs[1].plot(x, y2, color='red')
axs[1].set_title('2つ目のグラフ')
axs[1].set_xlabel('X軸')
axs[1].set_ylabel('Y軸')

plt.show()

pandasでのデータ操作を応用

「最後にpandasで、もうちょっと実践的なデータ操作を紹介するでぇ。たとえば、データをグルーピングして、特定の条件に基づいた集計をすることもできるんや。これ、データの傾向を見つけるときにめっちゃ役立つんやで。」

Google Colabサンプルコード:

# データ作成
sales_data = {
    '商品': ['A', 'B', 'A', 'B', 'A', 'B'],
    '地域': ['東', '東', '西', '西', '東', '西'],
    '売上': [100, 200, 150, 180, 120, 160]
}
df_sales = pd.DataFrame(sales_data)

# 地域ごとの商品の平均売上を計算
mean_sales = df_sales.groupby(['地域', '商品'])['売上'].mean().reset_index()

print("平均売上:\n", mean_sales)

いや〜、ここまでいろいろ紹介してきたけど、実際にやってみたらもっと楽しいこと間違いなしやで。どれもGoogle Colabでサクッと試せるから、手を動かしてみてな。

これからも一緒にPython極めていこなぁ。何かあったらいつでも声かけてや。
ちょっと楽しく勉強出来るので、彼氏風に解説しては楽しいです。
以上です♪

この記事が気に入ったらサポートをしてみませんか?