新しいサービス【AwesomeQR】

【実践】技術系企業のメンタルヘルスをAIで分析してみた Part1

5 min 761 views
AIアイキャッチ
はじめに

AI分野に興味を持って、AI実装検定A級G検定と取得はしたものの、AIのできるツールのレビューくらいで、まだ実用的に分析していなかったので、E資格取得を見据えた自らのアウトプットとともに、内容をシェアできればと思います。

AIの初学者用にいくつかのデータセットが親切にも無料で公開されていたりするので、それを同じようにやっていくのも勉強にはなるのですが、せっかくなので、「Kaggle」というAIのコンペティションをやっているサイトから、面白そうなデータセットがあったので、今回は、「技術系企業のメンタルヘルス」に関するデータセットを用いて分析していきます。

Kaggleは企業や研究者がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォーム及びその運営会社である。

https://ja.wikipedia.org/wiki/Kaggle

データのインポート、データの確認からはじめて、ゴリゴリにプログラムを書いて、分析までしていくので、数回にわたって解説していきたいと思います。

なるべくわかりやすく説明したいですが、今回はコードの解説というよりは、考え方を重視したいと思いますので、分かりづらい場合や、コードの内容を詳しく知りたい場合は、都度ググってください。

ステップ

どのデータを分析するにもたいてい同じステップだと思いますが、今回分析していくステップを先に説明します。

  1. STEP

    データの読み込み

    必要なライブラリを用意して、データを読み込んでいきます。

    おそらく、必要に応じて随時で追加すると思われます。

  2. STEP

    データの確認

    データがどういう状態かを確認します。

    今回はここまで紹介(Part1)

  3. STEP

    データの前処理

    データを分析するために必要な加工を施していきます。

    ここが、かなり重要(次回 Part2)

  4. STEP

    データの関係性の確認

    グラフなどの機能を使って、データ間の関係性を確認していきます。

    Part3予定

  5. STEP

    スケーリング

    データ間の割合の調整をしていきます。
    具体的には、各データを公平に判断するように設定します。

    Part4予定

  6. STEP

    アルゴリズムも選択&学習

    実際にAI学習(機械学習)を行うアルゴリズムを選択して、学習していきます。

    Part5予定

  7. STEP

    評価

    実際に学習したデータの精度などで評価します。

    Part6予定

実装

さて、それでは、さっそく実装していきます。
今回も、Google Colaboratoryを使っていきたいと思います。

その前に、データをダウンロードしておきます。

Kaggleからデータをダウンロードしていきます。
今回は「Mental Health in Tech Survey」というテーマのダウンロードしていきます。
※詳細はログイン操作等ありますので、割愛いたします

それでは、必要なライブラリをインポートしていきます。

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上にアップロードできます。

次に、データを確認していきます。

train_df = pd.read_csv("survey.csv")
print(train_df.shape)
print(train_df.describe())

上記を入力すると、下図のような統計データが出力されます。

(1259, 27)となっていて、行が1259行、列が27列あり、こちらが意味するところは、1259レコードのデータがあって、分析対象の項目が27個あるということになります。

その下のデータは以下の表の意味となっています。

countレコード数
mean平均
std標準偏差
min最小値
25%25%パーセンタイル値
50%50%パーセンタイル値
75%75%パーセンタイル値
max最大値

パーセンタイルという言葉は聞きなれないと思いますが、統計データで使われる用語となります。
詳しくは、以下を参照ください。

続いて、実際のデータを見ていきましょう。

display(train_df.head())

こちらを実行すると、下図のようにデータの最初の5行が表示されます。

実際に、どんな内容の項目があるのかチェックします。

print(train_df.info())

こちらを入力すると、下図のように、どういう項目についてのデータかがわかります。

英語なので、どういう内容か日本語に直していきます。

No変数名項目
0TimestampNumeric調査書送付日時
1AgeNumeric年齢
2GenderString性別
3CountryString所属国
4stateString
5self_employedString自営業
6family_historyString家族歴
(家系に精神病にかかった人
がいるか)
7treatmentString治療歴
(精神病の治療をした
ことがあるか)
8work_interfereString仕事への干渉
(仕事の妨げになるような
精神状態の時があるか)
9no_employeesString従業員数
10remote_workStringリモートワーク
(50%は会社外で仕事するか)
11tech_companyString技術系企業
(技術系企業かどうか)
12benefitsString福利厚生
(メンタルヘルスの福利厚生
があるかどうか)
13care_optionsString精神衛生オプション
(メンタルヘルスに関する
福利厚生オプションを
知っているか)
14wellness_programString雇用主に相談
(雇用主とメンタルヘルス
に関して相談したことが
あるか)
15seek_helpString雇用主の援助
(雇用主からメンタルヘルス
に関する情報提供等が
あったか)
16anonymityString匿名性の担保
(メンタルヘルスについて
匿名性が保たれているか)
17leaveString療養の取得環境
(メンタルヘルスに対する
療養はとりやすい環境か)
18mental_health_consequenceString雇用主とのメンタルヘルス相談で不利
(雇用主にメンタルヘルスで
相談することで不利な結果
になると考えるか)
19phys_health_consequenceString雇用主との健康相談で不利
(雇用主に健康について
相談することで不利な結果
になると考えるか)
20coworkersString同僚に相談
21supervisorString上司に相談
(メンタルヘルスについて
上司に相談したいか)
22mental_health_interviewString入社面接時のメンタルヘルス
(メンタルヘルスについて
入社面接時に質問したいか)
23phys_health_interviewString入社面接時の健康
(健康面について
入社面接時に質問したいか)
24mental_vs_physicalStringメンタルヘルスの重視
(雇用主がメンタルヘルスと
健康面について同じくらい
重視している感じているか)
25obs_consequenceString同僚のメンタルヘルス
(同僚のメンタルヘルスについて
深刻な情報を聞いたことがあるか)
26commentsString備考

上記の表のようにタイトルを日本語に変換していきます。

colums_t = ["調査書送付日時","年齢","性別","所属国","州","自営業","家族歴","治療歴","仕事への干渉","従業員数","リモートワーク","技術系企業","福利厚生","精神衛生オプション","雇用主に相談","雇用主の援助","匿名性の担保","療養の取得環境","雇用主とのメンタルヘルス相談で不利","雇用主との健康相談で不利","同僚に相談","上司に相談","入社面接時のメンタルヘルス","入社面接時の健康","メンタルヘルスの重視","同僚のメンタルヘルス","備考"]
train_df.columns = colums_t
display(train_df.head())

最後に、欠損値を確認して、次回へ続けます。

print(train_df.isnull().sum())

上記を入力すると、下記のように、欠損値(データがない)が項目ごとにどれくらいあるかを確認できます。

このデータがないという状態は、実際のデータにもよくあると思いますので、こういうケースでどういう処理をするのが望ましいのかというのを次回以降に確認していきたいと思います。

関連記事