受講を終えて
はじめに、
20年間サービス業一筋でプログラミング超初心者です。データ分析講座を学習しようと思ったきっかけは、在宅ワークなどで周囲の状況ががらりと変わり、新しいことをはじめ自分に価値をつけたいという思いで始めました。
1 受講期間3か月を振り返っての感想と得たもの
初めて講座を受けた時の感想。これ初心者にできる??でした。やると決めた以上、やるんだと何度も心でつぶやきながら、何度も内容を読み返しました。不思議なもので1か月をすぎるころ、なんとなく言葉がわかるようになり少し興味がわくようになりました。チューターの方からのおすすめ本を手にとり、オンライン講座と同時に勉強を進めました。3か月という短い期間のため本や情報と並行していると時間が無くなり、最後は駆け足で課題だけをこなす日々になったことが反省点です。まだまだ分からないことがたくさんありますが、もう少し勉強を続け、実践に活かしたいという強い意識がうまれたことが最大の価値であると感じています。
2 受講内容
①Python入門: Pythonの基本的な操作方法を学ぶ
②Numpy: 多次元配列処理などの計算方法
③Pandas: データ整形など分析用ライブラリPandasの基礎を学習
④Matplotlib: 様々なグラフを使いデータの可視化方法を学習
⑤データクレンジング:CSVデータの扱い方や画像加工方法
⑥データハンドリング:大量のデータを取り扱う際に必要な基礎知識
⑦機械学習概論:機械学習の基本や精度評価の方法
⑧教師あり学習(回帰):正解ラベル付き機械学習モデルを作る手法
⑨教師あり学習(分類):正解ラベル付き機械学習モデルを作る手法
⑩教師なし学習:正解ラベルが付いていない機械学習モデル
⑪時系列分析:時系列データの解析を行うためのアルゴリズムを学習
⑫機械学習におけるデータ前処理:機械学習の様々な前処理についてを学習
⑬ディープラーニング基礎:ディープラーニングのアルゴリズムについて
⑭自然言語処理:文章を数値に変換する方法を学ぶ
⑮株価予測:自然言語処理と時系列分析を用いて株価予測
⑯タイタニック号:生存率の予測。Kaggleに参加しデータ分析をまなぶ
3 作成したプログラム
開発環境(Windows GoogleColaborabory)
① 回帰分析
教師あり学習の回帰は蓄積されたデータとそれに対応する正解データを使って機械が学習を行い、新しいデータや未来のデータの予測を行う手法です。
回帰分析の目的は、過去のデータからモデルを学習し、未知のデータを予測することです。講座で作成した内容を振り返りました。
~流れ~
①(A)線形回帰 (B)LASSO(C)Ridge(D)ElasticNet回帰モデルを学習
線形回帰:入力特徴量の線形関数(Linear function)を用いて予測 LASSO回帰:L1正則化を行いながら線形回帰の適切なパラメータを設定 Ridge回帰:L2正則化を行いながら線形回帰の適切なパラメータを設定 ElasticNet回帰:ラッソ回帰とリッジ回帰を組み合わせて正則化項を作る
② 評価
③ 現時点で最大の評価値と、(A~D)回帰モデルの評価値を比較し、もし(A~D)モデルの評価値のほうが大きければ現時点で最大の評価値を評価値 とする
④ 現時点で最大の評価値 (=この時点では全てのモデルの中で最大の評価値) を出力する
⑤ 現時点で最大の評価値となるモデル名を出力する
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
from sklearn.linear_model import Ridge
import numpy as np
# データの読み込み
concrete_data = pd.read_excel("https://archive.ics.uci.edu/ml/machine-learning-databases/concrete/compressive/Concrete_Data.xls")
concrete_train_X, concrete_test_X, concrete_train_y, concrete_test_y = train_test_split(
concrete_data.drop('Concrete compressive strength(MPa, megapascals) ', axis=1),
concrete_data['Concrete compressive strength(MPa, megapascals) '], random_state=42)
# 選択するモデルとその決定係数を定義
methods=np.array([LinearRegression(),Lasso(),Ridge()])
maxvalue=0
for idx, method in enumerate(methods):
model=method
model.fit(concrete_train_X, concrete_train_y)
score = model.score(concrete_test_X,concrete_test_y)
if idx==0:
index="線形回帰"
if idx==1:
index=="Lasso回帰"
if idx==2:
index="Ridge回帰"
if idx==3:
index="ElasticNet回帰"
if score >= maxvalue:
maxvalue = score
index_max = index
print("")
print("最も決定係数の大きいモデルは\nモデル:{} 決定係数{:.2f}".format(index_max, maxvalue))
最も決定係数の大きいモデルは
モデル:線形回帰 決定係数0.63
② クラスタリング(clustering)
機械学習における教師なし学習の1種で、データ間の類似度にもとづいて、データをグループ分けする手法です。
今回のモデルk-平均法(k-means法)は、データを適当なクラスタに分けた後、クラスタの平均を用いてデータがわかれるように調整させていくアルゴリズムです。
各都道府県の物価データを⽤いて、類似している県をいくつかのグループに分類してみます。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df_price_index= pd.read_csv('/content/price_index (3).csv')
df_price_index.head(15)
## 10項目ある内容のうち都道府県、食料、水道光熱費の列だけを抽出
df_train = df_price_index[['都道府県', '食料', '水道光熱費']]
df_train.head(15)
都道府県 食料 水道光熱費
0 北海道 100.1 116.4
1 青森県 98.0 109.1
2 岩手県 97.4 110.1
3 宮城県 97.9 101.9
4 秋田県 97.6 107.8
5 山形県 101.4 111.4
6 福島県 99.5 108.8
7 茨城県 99.0 102.9
8 栃木県 98.6 98.7
9 群馬県 98.9 91.5
10 埼玉県 100.5 94.4
11 千葉県 101.2 101.8
12 東京都 103.4 95.5
13 神奈川県 101.7 98.4
14 新潟県 100.0 99.1
# プロットの準備(x軸:食料、y軸:水道光熱費)
plt.scatter(df_train['食料'], df_train['水道光熱費'])
# X軸、Y軸のラベルを設定
plt.xlabel('(Shokuryo)')
plt.ylabel('(Suido_Konetsu)')
#データをいくつかのクラスタに分割します
# DataFrameをDeep Copy
train_X = df_train.copy(deep=True)
# データから'都道府県'を除外
train_X = train_X.drop('都道府県',axis=1)
print(train_X.head(15))
食料 水道光熱費
0 100.1 116.4
1 98.0 109.1
2 97.4 110.1
3 97.9 101.9
4 97.6 107.8
5 101.4 111.4
6 99.5 108.8
7 99.0 102.9
8 98.6 98.7
9 98.9 91.5
10 100.5 94.4
11 101.2 101.8
12 103.4 95.5
13 101.7 98.4
14 100.0 99.1
#k平均法 (k-means)で、47都道府県をクラスタリングするためのモデルを⽣成します。
# k平均法(k-means)のライブラリをインポート
from sklearn.cluster import KMeans
# k-meansのモデルを生成
## n_clusters = クラスタ数 6
## random_state = 乱数のシードを固定(デフォルト値: None)
kmodel = KMeans(n_clusters=6, random_state=0)
kmodel
# クラスタリングを実行
kmodel.fit(train_X)
train_Y = kmodel.labels_
print(train_Y) #0から5までのクラスタ番号が47個 、出⼒。
[5 0 0 1 0 5 0 1 2 3 3 4 3 2 2 2 4 3 3 1 3 2 3 2 2 2 3 3 2 2 4 5 0 4 0 4 4
0 4 1 0 0 2 1 1 2 4]
#クラスタ番号を 、元のDataFrameに新しい列として連結します。
# 元のDataFrameをコピーして結果用のDataFrameを作成
df_results = df_train.copy(deep=True)
# クラスタ番号を新しい列として連結
df_results['クラスタ番号'] = train_Y
df_results.head(15)
#DataFrameのsort_valuesメソッドで 、クラスタ番号の順に並び替えてみます。
print(df_results.sort_values('クラスタ番号'))
都道府県 食料 水道光熱費 クラスタ番号
37 愛媛県 99.5 106.8 0
41 長崎県 98.9 109.5 0
40 佐賀県 98.1 109.2 0
34 山口県 100.8 108.5 0
6 福島県 99.5 108.8 0
32 岡山県 98.7 106.2 0
4 秋田県 97.6 107.8 0
2 岩手県 97.4 110.1 0
1 青森県 98.0 109.1 0
7 茨城県 99.0 102.9 1
3 宮城県 97.9 101.9 1
39 福岡県 95.8 104.2 1
19 長野県 95.2 102.0 1
43 大分県 98.8 103.7 1
44 宮崎県 96.5 100.5 1
29 和歌山県 100.7 98.4 2
28 奈良県 96.7 98.4 2
25 京都府 100.8 97.7 2
24 滋賀県 99.8 99.0 2
45 鹿児島県 98.9 99.3 2
21 静岡県 98.9 98.0 2
23 三重県 100.6 99.0 2
42 熊本県 100.5 101.2 2
15 富山県 101.5 100.4 2
14 新潟県 100.0 99.1 2
13 神奈川県 101.7 98.4 2
8 栃木県 98.6 98.7 2
22 愛知県 97.2 95.9 3
17 福井県 103.8 94.5 3
26 大阪府 99.9 94.7 3
27 兵庫県 99.5 96.4 3
12 東京都 103.4 95.5 3
10 埼玉県 100.5 94.4 3
9 群馬県 98.9 91.5 3
20 岐阜県 98.1 93.7 3
18 山梨県 100.6 96.4 3
38 高知県 102.4 103.6 4
46 沖縄県 103.2 103.8 4
35 徳島県 100.9 104.5 4
33 広島県 100.4 105.7 4
30 鳥取県 101.7 106.2 4
16 石川県 103.6 101.8 4
11 千葉県 101.2 101.8 4
36 香川県 99.5 105.5 4
31 島根県 101.5 111.0 5
5 山形県 101.4 111.4 5
0 北海道 100.1 116.4 5
# プロットの準備(x軸:食料、y軸:水道光熱費、色:クラスタ番号 )
plt.scatter(df_results['食料'], df_results['水道光熱費'], c=df_results['クラスタ番号'])
# X軸、Y軸のラベルを設定
plt.xlabel('Shokuryo')
plt.ylabel('Suido_Konetsu')
# プロット/グラフ用のカラーリストを準備
LST_COLOR = ['r','g','b','c','m','y','k','lightping','goldenrod']
# プロットの準備(x軸:食料、y軸:水道光熱費、色:カラーリストのクラスタ番号 )
for i in range(len(df_results)):
plt.scatter(df_results.iloc[i,1],df_results.iloc[i,2],c=LST_COLOR[df_results.iloc[i,3]],label=df_results.iloc[i,3] )
# X軸、Y軸のラベルを設定
plt.xlabel('Shokuryo')
plt.ylabel('Suido_Konetsu')
![画像1](https://assets.st-note.com/production/uploads/images/52952897/picture_pc_4137d64f563ba2ac5e002e0b1d9d3e0c.png)
この結果から適切なクラスタ数かどうかはよくわかりませんでした。適切なクラスタ数を探すために様々な方法を組み合わせて探す必要があるようなので、これから探していきたいと思います。
4 今後について
課題の見直しや振り返りをしながら、ビジネスへの活用と趣味への活用方法を探していきます。
① ビジネスで活用したいこと
〇人材管理(スキル・経歴・勤怠など)のデータを一元化し、
適切な人材配置、人材育成に活用したい
〇退職理由の分析や退職者予測をし問題解決をしたい
〇様々な過去のデータから顧客動向を予測し運営人数を効率化したい
② 趣味でつかいたいこと
〇ビットコインの予測
まだまだ実践にはほど遠いですが目標をもって継続していきたいと思います。
この記事が気に入ったらサポートをしてみませんか?