AI分野に興味を持って、AI実装検定A級、G検定と取得はしたものの、AIのできるツールのレビューくらいで、まだ実用的に分析していなかったので、E資格取得を見据えた自らのアウトプットとともに、内容をシェアできればと思います。
AIの初学者用にいくつかのデータセットが親切にも無料で公開されていたりするので、それを同じようにやっていくのも勉強にはなるのですが、せっかくなので、「Kaggle」というAIのコンペティションをやっているサイトから、面白そうなデータセットがあったので、今回は、「技術系企業のメンタルヘルス」に関するデータセットを用いて分析していきます。
Kaggleは企業や研究者がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォーム及びその運営会社である。
https://ja.wikipedia.org/wiki/Kaggle
データのインポート、データの確認からはじめて、ゴリゴリにプログラムを書いて、分析までしていくので、数回にわたって解説していきたいと思います。
どのデータを分析するにもたいてい同じステップだと思いますが、今回分析していくステップを先に説明します。
- STEP
データの読み込み
必要なライブラリを用意して、データを読み込んでいきます。
- STEP
データの確認
データがどういう状態かを確認します。
- STEP
データの前処理
データを分析するために必要な加工を施していきます。
- STEP
データの関係性の確認
グラフなどの機能を使って、データ間の関係性を確認していきます。
- STEP
スケーリング
データ間の割合の調整をしていきます。
具体的には、各データを公平に判断するように設定します。 - STEP
アルゴリズムも選択&学習
実際にAI学習(機械学習)を行うアルゴリズムを選択して、学習していきます。
- STEP
評価
実際に学習したデータの精度などで評価します。
さて、それでは、さっそく実装していきます。
今回も、Google Colaboratoryを使っていきたいと思います。
その前に、データをダウンロードしておきます。
Kaggleからデータをダウンロードしていきます。
今回は「Mental Health in Tech Survey」というテーマのダウンロードしていきます。
※詳細はログイン操作等ありますので、割愛いたします
![](https://bunkyudo.co.jp/wp/wp-content/uploads/2020/10/Mental-Health-in-Tech-Survey-Kaggle-1024x538.png)
それでは、必要なライブラリをインポートしていきます。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from google.colab import files
次に、データをセットします。
uploaded = files.upload()
上記を実行するとファイルを選択できるので、ダウンロードしたCSVを選択すると、下図のようになり、データをGoogle Colaboratory上にアップロードできます。
![](https://bunkyudo.co.jp/wp/wp-content/uploads/2020/10/mentalhealth-ipynb-Colaboratory.png)
次に、データを確認していきます。
train_df = pd.read_csv("survey.csv")
print(train_df.shape)
print(train_df.describe())
上記を入力すると、下図のような統計データが出力されます。
![](https://bunkyudo.co.jp/wp/wp-content/uploads/2020/10/mentalhealth-ipynb-Colaboratory-1.png)
(1259, 27)となっていて、行が1259行、列が27列あり、こちらが意味するところは、1259レコードのデータがあって、分析対象の項目が27個あるということになります。
その下のデータは以下の表の意味となっています。
count | レコード数 |
mean | 平均 |
std | 標準偏差 |
min | 最小値 |
25% | 25%パーセンタイル値 |
50% | 50%パーセンタイル値 |
75% | 75%パーセンタイル値 |
max | 最大値 |
パーセンタイルという言葉は聞きなれないと思いますが、統計データで使われる用語となります。
詳しくは、以下を参照ください。
続いて、実際のデータを見ていきましょう。
display(train_df.head())
こちらを実行すると、下図のようにデータの最初の5行が表示されます。
![](https://bunkyudo.co.jp/wp/wp-content/uploads/2020/10/mentalhealth-ipynb-Colaboratory-2-1024x283.png)
実際に、どんな内容の項目があるのかチェックします。
print(train_df.info())
こちらを入力すると、下図のように、どういう項目についてのデータかがわかります。
![](https://bunkyudo.co.jp/wp/wp-content/uploads/2020/10/mentalhealth-ipynb-Colaboratory-3.png)
英語なので、どういう内容か日本語に直していきます。
No | 変数名 | 型 | 項目 |
---|---|---|---|
0 | Timestamp | Numeric | 調査書送付日時 |
1 | Age | Numeric | 年齢 |
2 | Gender | String | 性別 |
3 | Country | String | 所属国 |
4 | state | String | 州 |
5 | self_employed | String | 自営業 |
6 | family_history | String | 家族歴 (家系に精神病にかかった人 がいるか) |
7 | treatment | String | 治療歴 (精神病の治療をした ことがあるか) |
8 | work_interfere | String | 仕事への干渉 (仕事の妨げになるような 精神状態の時があるか) |
9 | no_employees | String | 従業員数 |
10 | remote_work | String | リモートワーク (50%は会社外で仕事するか) |
11 | tech_company | String | 技術系企業 (技術系企業かどうか) |
12 | benefits | String | 福利厚生 (メンタルヘルスの福利厚生 があるかどうか) |
13 | care_options | String | 精神衛生オプション (メンタルヘルスに関する 福利厚生オプションを 知っているか) |
14 | wellness_program | String | 雇用主に相談 (雇用主とメンタルヘルス に関して相談したことが あるか) |
15 | seek_help | String | 雇用主の援助 (雇用主からメンタルヘルス に関する情報提供等が あったか) |
16 | anonymity | String | 匿名性の担保 (メンタルヘルスについて 匿名性が保たれているか) |
17 | leave | String | 療養の取得環境 (メンタルヘルスに対する 療養はとりやすい環境か) |
18 | mental_health_consequence | String | 雇用主とのメンタルヘルス相談で不利 (雇用主にメンタルヘルスで 相談することで不利な結果 になると考えるか) |
19 | phys_health_consequence | String | 雇用主との健康相談で不利 (雇用主に健康について 相談することで不利な結果 になると考えるか) |
20 | coworkers | String | 同僚に相談 |
21 | supervisor | String | 上司に相談 (メンタルヘルスについて 上司に相談したいか) |
22 | mental_health_interview | String | 入社面接時のメンタルヘルス (メンタルヘルスについて 入社面接時に質問したいか) |
23 | phys_health_interview | String | 入社面接時の健康 (健康面について 入社面接時に質問したいか) |
24 | mental_vs_physical | String | メンタルヘルスの重視 (雇用主がメンタルヘルスと 健康面について同じくらい 重視している感じているか) |
25 | obs_consequence | String | 同僚のメンタルヘルス (同僚のメンタルヘルスについて 深刻な情報を聞いたことがあるか) |
26 | comments | String | 備考 |
上記の表のようにタイトルを日本語に変換していきます。
colums_t = ["調査書送付日時","年齢","性別","所属国","州","自営業","家族歴","治療歴","仕事への干渉","従業員数","リモートワーク","技術系企業","福利厚生","精神衛生オプション","雇用主に相談","雇用主の援助","匿名性の担保","療養の取得環境","雇用主とのメンタルヘルス相談で不利","雇用主との健康相談で不利","同僚に相談","上司に相談","入社面接時のメンタルヘルス","入社面接時の健康","メンタルヘルスの重視","同僚のメンタルヘルス","備考"]
train_df.columns = colums_t
display(train_df.head())
![](https://bunkyudo.co.jp/wp/wp-content/uploads/2020/10/mentalhealth-ipynb-Colaboratory-4.png)
最後に、欠損値を確認して、次回へ続けます。
print(train_df.isnull().sum())
上記を入力すると、下記のように、欠損値(データがない)が項目ごとにどれくらいあるかを確認できます。
![](https://bunkyudo.co.jp/wp/wp-content/uploads/2020/10/mentalhealth-ipynb-Colaboratory-5.png)