• 日本語
    • English (英語)
Avinton JapanAvinton JapanAvinton JapanAvinton Japan
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
      • 自動車ナンバープレート自動認識システム
    • プライベートクラウド
    • AIサービス開発
    • AIカメラ/画像解析無料体験版
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
    • Academy with Platform
  • 採用情報
    • Avintonジャパン 採用ページ
    • 求人一覧
    • よくある質問
    • 新卒採用
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ
Avinton Engineer

Avinton週末勉強会 – ARoP参加レポート[探索的データ分析]

By James Cauchi | 相互学習, カテゴリーなし | Comments are Closed | 13 3月, 2020 | 2

Avintonでは、インフラ~開発含め、様々なフィールドで活躍するエンジニアが集まっています。
ARoPは、普段関わりが少ないエンジニア同士が、月に一度集まりその月のテーマでハンズオンの講習、交流の場となっています。今回はある日のARoP活動内容について、リアルな参加レポートをさせていただきます。

レポートするのはこの方!未経験から今ではインフラ、開発ともあらゆる分野にて顧客課題に挑戦し続け、
入社1年ですさまじい成長を遂げている、DIY女子、Avintonが誇るかわいらしい女性エンジニアのFさんです。

ARoPとは

Avinton Road of Professional
志の高いAvintonメンバーがその道のプロを目指すために、会社として始めた取り組みです。
もちろん独学で学習を進めることは可能ですが、月に一度エンジニア同士が集まり交流しながらスキルを高めあう、刺激しあうことで、現在のプロジェクトの課題解決や今後のキャリアへの考えるきっかけとなったりと、意欲のあるメンバーが集まることで色々とプラスの効果が期待できるイベントとなっています。

今回のARoPテーマは「データ分析」について

講義内容や講師は月によってさまざまで、今回は常駐先でデータ分析の業務に携わられているIさんがデータ分析基礎について教えてくれました。
最近のARoPでは、講義パートと、実践パートに分かれていて、参加者は講義を聞いた後に
ハンズオンの課題をすすめながら勉強していくというスタイルです。

今回の講義パートはデータ分析のモデリングをする上で必要な前準備である、「EDA(探索的データ解析)と特徴量抽出について」、
実践パートは「ポケモンGOのデータを観察してみる」でした。

講義 : EDA(探索的データ解析)と特徴量抽出について

Explanatory Data Analysis Meeting

より詳しい講義内容は、講師を務めたIさんのブログ、
Avinton Exploratory Data Analytics(探索的データ解析) 勉強会で解説していますので要チェックです!

EDAについて

EDA(Explanatory Data Analysis)とは

ARoP参加レポート
データ操作の環境はpython3 + jupyter + pandas + matplotlibです。

まずはデータを読み込みます。
データの読み込みは以下のコードで完了です。

1
2
3
4
import pandas as pd
url = 'https://raw.githubusercontent.com/thr3a/pokemon-stats/master/pokemon.csv'
df = pd.read_csv(url, index_col=0)
df.head()

df.head()で表示されるのが以下の表です。
読み込んだデータの先頭だけ確認することができます。

次に基本統計量を確認します。

基本統計量とは

データの特徴を表す値のこと。ここでは総数、平均値、標準偏差、最小値、四分位数、最大値が表示されています。

標準偏差で各カラムを比較すると、それぞれの平均値にばらつきがあるため、認識しづらいので、
標準偏差を平均値で割って変動係数を算出すると数値の大小にとらわれずばらつきを比較することができるようです。

1
2
de <span class="token operator">=</span> df<span class="token punctuation">.</span>describe<span class="token punctuation">(</span> <span class="token punctuation">)</span>
de<span class="token punctuation">.</span>loc<span class="token punctuation">[</span><span class="token string">'std'</span> <span class="token punctuation">,</span> <span class="token punctuation">:</span><span class="token punctuation">]</span> <span class="token operator">/</span> de<span class="token punctuation">.</span>loc<span class="token punctuation">[</span><span class="token string">'mean'</span><span class="token punctuation">,</span> <span class="token punctuation">:</span><span class="token punctuation">]</span></code><code>
1
2
3
4
5
6
7
8
h      <span class="token number">0.378225</span>
a      <span class="token number">0.402559</span>
b      <span class="token number">0.414836</span>
c      <span class="token number">0.424404</span>
d      <span class="token number">0.391509</span>
s      <span class="token number">0.453524</span>
<span class="token builtin">sum</span>    <span class="token number">0.254456</span>
dtype<span class="token punctuation">:</span> float64</code><code>

データの前処理に必要なのが欠損値の確認です。
このデータでの欠損値はtype2だけでしたが、type2は欠損値が存在して正常なのでそのまま。

1
df<span class="token punctuation">.</span>isnull<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token builtin">any</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code><code>

Avinton Exploratory Data Analytics

データの散布図を確認します。
点が線形状態になっているほど相関が強いとみることができます。
また、外れ値の存在もここで視覚的に確認することができます。

1
2
3
4
import matplotlib.pyplot as plt
from pandas import plotting
plotting.scatter_matrix(df.loc[:, 'h':'sum'], figsize=(10, 10))
plt.show()

相関行列を確認します。
相関行列は相関が高いほど1で表記され、黄色になります。
ここではaとsumの相関が高いです。

1
2
3
import seaborn as sns
cor = df.corr()
sns.heatmap(cor, square=True, cmap='plasma', vmax=1,vmin=-1, annot=True)

特徴量エンジニアリング

目的:データの品質を上げ、モデルの精度向上のため

主成分分析(PCA)
特徴量の次元削減に使われる手法です。
次元が多すぎる場合にモデルの精度を下げてしまう場合があるので、相関の高い多変数から新規に変数を作成する
新規に作成された変数への意味付けは人間が行う必要があります。

1
2
3
4
5
6
7
8
9
10
11
<span class="token keyword">from</span> sklearn<span class="token punctuation">.</span>decomposition <span class="token keyword">import</span> PCA
pca <span class="token operator">=</span> PCA<span class="token punctuation">(</span><span class="token punctuation">)</span>
pca<span class="token punctuation">.</span>fit<span class="token punctuation">(</span>df<span class="token punctuation">.</span>loc<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token string">'h'</span><span class="token punctuation">:</span><span class="token string">'s'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
 
feature <span class="token operator">=</span> pca<span class="token punctuation">.</span>transform<span class="token punctuation">(</span>df<span class="token punctuation">.</span>loc<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token string">'h'</span><span class="token punctuation">:</span><span class="token string">'s'</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>figure<span class="token punctuation">(</span>figsize<span class="token operator">=</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>scatter<span class="token punctuation">(</span>feature<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">,</span> feature<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> alpha<span class="token operator">=</span><span class="token number">0.8</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>xlabel<span class="token punctuation">(</span><span class="token string">'PC1'</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>ylabel<span class="token punctuation">(</span><span class="token string">'PC2'</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>grid<span class="token punctuation">(</span><span class="token punctuation">)</span>
plt<span class="token punctuation">.</span>show<span class="token punctuation">(</span><span class="token punctuation">)</span></code><code>

Avinton Exploratory Data Analytics

累積寄与率
主成分分析(PCA)で作成した変数の第1主成分から第k主成分までを足した累積寄与率を求める必要があります。
第1~第k主成分がデータ全体の中でどれだけの割合を占めるかを示します。
以下の例では第2主成分までで全体の60%のデータを説明付けることができるようです。

1
2
3
4
5
6
7
8
import matplotlib.ticker as ticker
import numpy as np
plt.gca().get_xaxis().set_major_locator(ticker.MaxNLocator(integer=True))
plt.plot([0] + list( np.cumsum(pca.explained_variance_ratio_)), "-o")
plt.xlabel("Number of principal components")
plt.ylabel("Cumulative contribution ratio")
plt.grid()
plt.show()

Avinton Exploratory Data Analytics

ビニング
連続値をわざとカテゴリカルなグループデータに編集する手法で、精度が上昇する場合があるそうです。
(例) 身長は連続値で分析するのではなく、155-160などのグループに分ける

TargetEncoding
カテゴリ変数を数値に変換する目的で行われる手法です。
(機械学習は数値でないと学習できないから)
OneHotEncodingが一般的のようです。

トレンド除去
statsmodelsというライブラリを使用すると
時系列データをトレンド成分、季節成分、残差に分解することができるそうです。
pythonだとこんなことができるんですね・・!すごい・・

分解結果

実践でポケモンGOのデータを観察してみる

Explanatory Data Analysis Meeting

さてここで実践パートです。
データを観察して強いポケモンを探したり、ポケモンGOでコスパの良いポケモンを探していきます。使用するコードは講義パートにあるもので十分ですので、皆さんもぜひ実践してみてください!

ポケモンGOのデータセット
MaxCPがポケモンGOでの強さの指標になっているようです。

Iさんの分析結果を一部以下に貼っておきます。

・伝説ポケモンの分布確認

・コスパの高いポケモンの調査

まとめ

以上、2月のARoPでした!
ARoPでは講義でインプットし、実践でアウトプットする流れの中で、躓きやすいアウトプットの時間に講義担当の方がそばにいるのでつかず離れずのサポートを受けることもできるのが1人で勉強することとの大きな違いです。
毎月いろんな分野で行われているので、ぜひ皆さんも参加してみてください!

ちなみに写真は参加特典のちらし寿司ランチ♪
終わったあとみんなでワイワイ雑談しつつ、次の予定のある人は次へ。
そのまま学習タイムに入る方、雑談を続ける方、、
ぜひ皆さんも、充実な週末をARoPから^^

海鮮丼

Avintonはエンジニアの教育に力を入れています。Avintonアカデミーで最新技術を学びませんか?

採用に関してはこちら。未経験エンジニアも積極採用しています!

データサイエンティスト, 教育, イベントレポート, Python

採用情報

採用情報

Categories

  • 相互学習
  • 採用
  • 社員インタビュー
  • 学習&資格取得
  • 技術解説
  • イベント告知
  • 学内説明会&講義
  • 産学連携
  • 就職活動
  • イベントレポート
  • その他
  • 技術ブログ&インタビュー
  • mainpage
  • New Graduates Interviews
  • 中途エンジニア
  • カテゴリーなし
  • ニュースリリース&イベント

Avinton SDGs

SDGsへの貢献

Search

タグ

AIカメラ AI活用事例 AvintonAcademy AWS Big Data ccna ChatGPT Docker Edge AI Git GUGA mikei Planet OS PM&PMO PM6PMO Ruby技術者認定試験 Scratch SSL イベントレポート エッジAI エッジコンピューティング エンジニア オープンイノベーション クラウド コンテナ技術 コーディング ソフトウェア開発 ネットワーク プログラマー リードエンジニア 仮想化 仮想化、ネットワーク、サーバー、インフラ 勉強会 協働 地引網 就職活動 帰社日 掲載告知 新年のご挨拶 深層学習 画像分類 知識蒸留 統計学 統計検定 自社開発
© 2023 Avinton | All Rights Reserved | プライバシーポリシー
  • サービス
    • Avinton Data Platform
    • エッジAIカメラ
      • 自動車ナンバープレート自動認識システム
    • プライベートクラウド
    • AIサービス開発
    • AIカメラ/画像解析無料体験版
  • 最新情報
    • ニュースリリース&イベント情報
    • 技術ブログ&インタビュー
  • アカデミー
    • Avintonアカデミー
    • Academy on Campus
    • Academy with Platform
  • 採用情報
    • Avintonジャパン 採用ページ
    • 求人一覧
    • よくある質問
    • 新卒採用
  • 企業情報
    • 会社概要
    • 代表からご挨拶
    • SDGsへの貢献
  • お問い合わせ
  • 日本語
    • English (英語)
Avinton Japan