機械学習で使うIDE・データ前処理について【Python】no.1

こんにちは、まゆみです。

機械学習ってすごい技術ですよね。

子供が体験から学んでいくように

機械が学ぶ機会を与えられるごとに、機械自体のできることが向上していく。(キカイ、キカイばかり言ってすみません)

***

Facebookがなぜか、自分の友達の顔を分かったり、

Amazonがなぜか、自分の買いたいものを分かっていたり、

Netflixが次に観たい映画を提案してくれたり。。。
    
***


そんなことができる機械学習という技術について、今日から少しづつシリーズにして投稿していきます。

#AI(Artificial Intelligence) と機械学習、ディープラーニングの違い

![見出しを追加 (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/38d73bef-8e89-655e-f92a-5fd27668540a.png)


この記事でお伝えする『機械学習』というのは、AI のサブフィールドになります。

また、よく聞く『ディープラーニング』は機械学習のさらに特殊な分野になります。

#この記事で使うプログラミング言語

機械学習についての記事をシリーズで書いていく予定ですが、当記事では<font color="OrangeRed">『Python』</font>を使って実装していきます。(機械学習に使われる他の言語、例えばRについては触れません。)

よろしくお願いいたします。

#今回の記事の内容

ではさっそく、機械学習について説明していきますね。

今回の記事は第一回目なので
<ul>

<li>どんなIDE(プログラミングに必要なテキストエディタ)を使うのか？</li>
<li>データ前処理の前半部分</li>
</ul>

までを紹介していこうと思います。

私の記事があなたの役にたてれば嬉しく思います。

#機械学習に使うIDE

私自身は、Google Colaboratory が使いやすいと思っているので、この記事では『Google Colaboratory』を使います。

Google Colaboratory はGoogle アカウントさえあれば、誰でも無料で使えます。

➡　[Google Colabのページへアクセス](https://colab.research.google.com/notebooks/intro.ipynb?hl=ja#recent=true)

他に『Jupyter notebook』なども使えますので、お好みで決めてくださいね。

##Google Colaboratory の使い方

Google Colaboratory の使い方を簡単に説明しますね。(Google Colaboratoryは本当に簡単に使えるので説明も簡単に終わります)

Googleアカウントを持っているというのを前提で書いていきます。


①まず、上記に書いているGoogle Colab のページへアクセスしてください。

すると下記のようなページにアクセスします

![スクリーンショット 2021-03-07 082117.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/80b358a7-acf9-feab-0965-29e9e779d8d8.jpeg)


②『ノートブックを新規作成』をクリックしてください。

下記のスクショのように、

<font color="red">セクションを入れてコードで何が書かれているのかを明示したり、</font>

<font color="red">実際にコードを書いたりする</font>


ことができます

![スクリーンショット 2021-03-07 082326.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/bb51374d-b261-4c3d-9b3b-1ef70ecdeef7.jpeg)


#機械学習で使う用語についての解説

では、説明をスムーズに進めるために始めに用語の解説から入っていきましょう

##独立変数(Independent Variable)・従属変数(Dependent Variable)

![Salary.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/d81b6fa2-79b7-f2a9-f23e-2db3f48a5a0a.png)

機械学習では、ある要因が他の要因にどのように影響しているのかを予測します。

例えば、<font color="Red">仕事での経験年数がその人のお給料にどのような影響を与えるか？などです。</font>
経験年数が増えれば増えるほど、大体のケースでお給料は上がっていき、上記の挿絵のようになるでしょう。


経験年数をX軸に、お給料をY軸に取ったグラフを書くことで実際のデータでは取れなかった経験年数に対するお給料の額を予測する事ができます。(例えばY軸とグラフが重なる値を見ることで新卒者の人の給料を予測できる)

要因を与える側(この例だと、経験年数)でX軸に書かれるものが『独立変数』

要因を与えられる側(この例ではお給料)でY軸のものが『従属変数』ということになります。

##単回帰分析(Simple Linear Regression Analysis)・重回帰分析 (Multiple Linear Regression analysis)

先ほどの例をそのまま、また使って説明しますね。

経験年数とお給料に関するデータを取ると、右肩上がりのグラフが書けそうですね。

この例の場合、経験年数という<font color="Red">１つのファクターのみがどのようにお給料に影響するか</font>のデータを取っています。

そのような分析の仕方を<font color="Red">単回帰分析</font>と言います

また、お給料に影響するのは経験年数のみではなく、その人が受けた教育も影響するかもしれません。

このように、<font color="Red">2つ以上のファクターがどのように影響しているか分析するときは重回帰分析</font>と言います

ちなみにLinear は　Line(線)の形容詞形で『線の』という意味です。

線状のグラフを書くことで、未知の数字に対する結果を取り出すことを目指します



#データの前処理(data preprocessing)

では、準備が整ったところでさっそくコードを見ていきましょう

##なぜデータ前処理をしなければいけないのか？

その前に、なぜデータ前処理をしないといけないのかを簡単に説明しておきますね。

データを集計していく中で、データの量がたくさんになればなるほど、不完全なデータも出てきます

例えば、年齢とお給料の関係のデータを集計している時に、Aさんの年齢は分かったが、お給料のデータは取得できなかったという場合もあるはずです。

ではそのような時に、どのようなデータで補うのか？

平均値を取るのか？
中央値を取るのか？

この答えは次回の記事に書かせていただきますね。

とにかくここで申しあげたいのは、データの値はいつも信頼できるものではないので前処理は大切だということです。

#実際にコードを書いてみよう

では概要がつかめたところで、必要なコードを見ていきましょう。

##必要なライブラリーをインポートする

```
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
```
numpy はデータをarray のデータ型で使う時に役に立つライブラリーです。(機械学習ではデータをarrayで処理する)

matplotlibは実際にグラフを書く時に役に立つライブラリーです。
pandas はデータからマトリックスを作るのに役に立ちます

##データをアップロードする

```
salary_data = pd.read_csv("salary.csv", na_values=['-'])

salary_data
```

pandasライブラリーを使えば、CSV形式のファイルを読み込むことができ、しかも綺麗に整えた形で表示してくれます。

ではこの時点でどのような状態になっているのか、別ファイルから読み込んだCSVを表示してみましょう


![スクリーンショット 2021-03-07 113513.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/f114310b-fbeb-3c8c-2cd6-f863bd275ad5.jpeg)


カンマだけで区切られていたCSVファイルが見やすくフォーマットされています。(pandasは便利ですね。)

ちなみにこのデータは私が練習用に勝手に作ったものなのであしからず。。。(データを捏造する事はダメです。嘘のデータはちゃんとわかるようにその旨を伝えておきましょう)


##データを２つのグループに分ける

データを2つのグループに分ける？？なぜ？？

先ほど、機械学習の用語説明のセクションで少し触れたのですが、

<ul>

<li>独立変数</li>

<li>従属変数</li>
</ul>

に分ける必要があります。

そうしなければグラフが書けません。

```
salary_data = pd.read_csv("salary.csv", na_values=['-'])
x = salary_data.iloc[:,:-1].values
y = salary_data.iloc[:,-1].values

```

上記のコードをひとつづつ説明します。


![スクリーンショット 2021-03-07 113513.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/c294ddc9-1349-1914-6d19-b87f27fe1821.jpeg)

xという変数で表されているのはexperience のデータの部分です

yという変数で表されているのはsalary というコラム名がついたデータの部分になります。


salary_dataは今回アップロードしたデータ全体のことですね。

そのデータ全体にiloc() というメソッドを使うことでデータを２つに分けましょう(iloc はlocation indexの意味です。なのでどこからどこまでを指定したいのかを引数に渡します)


![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/e1d48f7e-8e9d-80f5-1083-1239ee60f459.png)

```
x = salary_data.iloc[:,:-1].values

```

[ : ]はpythonでは範囲を表します

その時に注意するべきことは、:　の前に書かれる数字は範囲に含むけど、: の後ろの数字は範囲に含まれないということです。


今回、xとして指定したい範囲は

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011305/66073d72-dc99-2db6-d942-ce4482cc28f1.png)

となりますよね。

縦に並んでいるデータは全てだけど、横に並んでいるコラムは最初から最後を含まない部分まで。


なので引数には

[ : , : -1] 

と書かれることになります。

-1 は一番後ろから数えるという意味で、しかもpythonの範囲指定では後ろの数字は範囲に含まれないので。

今回は、独立変数が1つだけのケースなので、範囲指定しなくて、指定したいcolumnのみ書いたら良いのでは？という疑問も出てくると思います

ただ、お給料の額は、経験年数にも教育にも影響するので、独立変数が2つ以上になる場合もあります。

独立変数が1つであろうが、2つ以上になろうが、Xの範囲に含めたいのは最後の行以外になります。

なので[ : , 1] とせず[ : , : -1] と書くと色んなケースに対応できます

#まとめ

今回は、機械学習の一部を紹介させていただきました。

次回の記事では、実際にグラフを書くところまで説明しますね。

だんだんと、Exciting!な内容も増えてくると思います。(私も初めてグラフが
書けた時は声を出して喜びました。)

お楽しみに！