Pythonデータ分析勉強会　第1回資料

Pythonを使って、初めてデータ分析をする方へ向け資料を作りました。

Pythonデータ分析勉強会　第1回資料
[Pythonデータ分析勉強会　第2回資料](https://qiita.com/shinmura0/items/57957b1c757d3cb44be9)
[Pythonデータ分析勉強会　第3回資料](https://qiita.com/shinmura0/items/901593e3d8a5238f8ae4)

Pythonのインストールは結構時間がかかります。PCにPythonをインストールしなくても、Googleアカウントを持っていれば、[Colaboratory](https://colab.research.google.com/)ですぐに使えます。

#本稿のゴール
本稿では、データ分析の題材として**MT法**を取り上げています。
MT法は品質工学で考案された手法で、正常データを正規分布と仮定して異常検知しています。

MT法では、行列の計算や可視化等、データ分析の基本的な内容が含まれているため、
MT法のコードが書けるようになれば、Pythonでデータ分析が進められるようになります。

全三回の資料を見れば、以下のようなMT法のグラフが作れるようになります。

![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/264781/88c0640a-8dc9-5dc1-9470-d6fcd0f68861.png)


#print文
まずは、print文です。データ分析では、必ず使うので覚えましょう。

##文字列の場合

```py
print("a")
```
と入力すると、以下のように出力されます。

```
a
```

**"**で囲むと文字列が出力されます。
=で置き換えることもできます。

```py
A = "abc"

print(A)
```

出力↓

```py
abc
```
##数字の場合

数字の場合は直接入力しても大丈夫です。

```py
A = 1

print(A)
```
出力↓

```py
1
```


#配列
配列もデータ分析では必ず使います。覚えましょう。

```py
A = [1, 2, 3]
```

,の後にスペース入れていますが、スペースはいくつ入れても大丈夫です。
プリント文で出力すると、以下のようになります。

```py
print(A)
```

出力↓

```py
[1,2,3]
```

##中身のアクセス

配列の中身にアクセスしたい場合は、以下のように**[数字]**で入力します。

```py
A = [1, 2, 3]
print(A[0])
```
出力↓

```
1
```

配列の1個目は0でアクセスできます。他のプログラミング言語でもそうですが、Pythonでも一個目は**0から数えます。**以下のように、中身を変えることも可能です。

```py
A = [1, 2, 3]
A[1] = 10
print(A)
```
出力↓

```py
[1,10,3]
```


#append
appendは、ファイル整理の際によく使います。
よく見る使い方は、空の配列を用意して、数字をどんどん追加していく方式です。

```py
A = []
A.append(1)
A.append(2)
```

Aの中身を見てみます。

```py
print(A)
```
出力↓

```py
[1,2]
```

ちゃんと1と2が格納されています。

#for文
for文はコード中に必ず出てくる文です。
for文は、何回も繰り返しで処理したいときに使います。

aという文字を5回出力させたいときは、以下のようになります。

```py
for i in range(5):
    print("a")
```

ポイントは、1行目の終わりに「:」を使っていること、2行目でスペース（ここでは4つ）を入れていることです。これらは必ず守らなければなりません。

また、rangeに渡す数字は、繰り返し処理したい回数を入れてあげてください。（ここでは5を入力）

for文は、range以外の組み合わせでも使えますが、本稿では「for i in range(?):」をセットで覚えましょう。

出力↓

```py
a
a
a
a
a
```

for **i** in range(?):の「i」にはどういった意味があるのでしょうか？
具体的にiをprintさせると以下のようになります。

```py
for i in range(5):
    print(i)
```

出力↓

```
0
1
2
3
4
```
iにはrange(5)の中身が順番に代入されています。

試しにiの2乗をprintしてみます。
べき乗は「**」を使います。

```py
for i in range(5):
    print(i**2)
```

出力↓

```
0
1
4
9
16
```

#for文補足　10/16追記
for文は分かりにくいので補足します。

for文はinの後に**配列**を渡す形式です。
for文は**その配列の個数分**だけ処理しますので、以下の2文は同じ出力となります。

```py
for i in [0, 0, 0]:
    print("abc")
```

```py
for i in ["A", "B", "C"]:
    print("abc")
```

出力（2つとも同じ）↓

```
abc
abc
abc
```

上記の2文は、渡した配列の個数は「3個」と等しいので、同じ出力となっています。

しかし、渡した**配列の個数**は同じでも、**配列の中身**が違います。配列の中身は「i」に順番に入ってきます。
従って、「i」を出力させると、出力文は3回と同じですが、内容は異なります。

```py
for i in [0, 0, 0]:
    print(i)
```

出力↓

```py
0
0
0
```

---

```py
for i in ["A", "B", "C"]:
    print(i)
```

出力↓

```
A
B
C
```

##for文　応用編　10/16追記

X=[]という配列に、リアルタイムにデータを入れたとします。
そして、Xの中身を一つずつ見て、何かしらの演算をしたいとします。

例えば、X=[10, 12, 13, 15]と考えてください。そして、Xの中身を2倍にしたいと想定します。

その時、for文を使ってXの中身を見たいのですが、Xにいくつデータが入っているか、こちら側は把握できていません。
Xのデータ数が分からない場合は、以下のように「range(len(X))」を使うと、Xを最初から最後まで見ることができます。

```py
X = [10, 12, 13, 15]

for i in range(len(X)):
    X[i] = X[i]*2

print(X)
```

出力↓

```
[20, 24, 26, 30]
```

len()は配列の個数を返してくれます（Xが1次元の場合）。従って、この場合はlen(X)=4となります。
まとめると、


```py
for i in range(len(X)):
```

は以下とイコールです。

```py
for i in range(4):
```

従って、X[0],X[1],X[2],X[3]を順番に見ることが可能になります。
配列の個数が分からない場合は、「range(len(X))」+「X[i]」を使いましょう。


#if文
if文もfor文と同じくらいよく使う文です。
if文は条件を設定して、その条件に合致するかで分岐構造にすることができます。

試しに、5より大きい数字か判別するコードを書いてみましょう。

```py
A = 8

if A > 5:
    print(A,"is bigger than 5")
else:
    print(A,"is smaller than 5")
```

if文もfor文と同じく、最初の行は「:」で終えて、次の行ではスペース（ここでは4）を入れています。
また、ifとelseをセットで使うことが多いです。ifの条件を満たしていれば次の行が実行されますし、
満たしていなければ、elseの次の行が実行されます。

出力↓

```
(8, 'is bigger than 5')
```

Aを8→3に変更してみましょう。

```py
A = 3 #8→3に変更

if A > 5:
    print(A,"is bigger than 5")
elif A < 5:
    print(A,"is smaller than 5")
```

出力↓

```
(3, 'is smaller than 5')
```

ちなみにコメントアウトは「#」で入力します。コメントアウトとはPythonで読み飛ばしてくれるところです。
「#」を使えば、プログラミング中にメモを残しておくことができます。

#演習
・1から10までを数え上げるプログラムを作りましょう。
・そして、偶数であれば「G」、奇数であれば「K」と出力されるようにしましょう。

＜ヒント＞
・for i in range(???)：を使いましょう。
・剰余（割った余り）は**「%」**を使います。（例：10を2で割った余りは→「10%2」）

＜正解出力＞

```
(1, 'K')
(2, 'G')
(3, 'K')
(4, 'G')
(5, 'K')
(6, 'G')
(7, 'K')
(8, 'G')
(9, 'K')
(10, 'G')
```

正解コードは[第2回](https://qiita.com/shinmura0/items/57957b1c757d3cb44be9)の資料を参照してください。