1. Pythonを利用して統計解析 - 一様乱数の作成

# Google Colaboratory を利用した統計解析
スプレッドシートで同じことをする場合は[1. スプレッドシートを利用して統計解析　一様乱数の生成](https://qiita.com/percipere/private/dc9120170f11d30a58db)を参照

Pythonを利用してインタラクティブに解析を行う場合には、Jupyter Notebookが大変便利だけれど、コマンドラインを利用してコンピュータの環境の設定ができない場合には、かなりハードルが高いものとなってしまう。

そんな場合には、[Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb)がとても便利

利用時は次の点に留意

* ブラウザーとしてGoogle Chromeを利用(他のブラウザーはサポートされていない)
* Googleのアカウントが必要

Google Chromeを起動して、Googleアカウントにログインしたら、[Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb)
![colab.research.google.com_notebooks_welcome.ipynb(iPad).png](https://qiita-image-store.s3.amazonaws.com/0/213053/5bdfe552-25ea-f394-44a4-685520b1dc7b.png)を開く

メニューバーの"File"をクリック
![colab.research.google.com_notebooks_welcome.ipynb(iPad) (1).png](https://qiita-image-store.s3.amazonaws.com/0/213053/ef239001-805c-f302-d74b-7d49d82ff0d3.png)

表示されるドロップダウンリストから"New Python3 notebook"をクリック
<img width="748" alt="Screen Shot 2018-02-07 at 14.59.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/213053/e6649804-6537-0ef3-7328-da74e1ecbba7.png">

実際にプログラムが動作するのは、Google Cloudの上なので、新しいNotebookを作成するにはちょっと時間がかかる
![colab.research.google.com_drive_17DC8dWoYBNEWsnnDwFpp58dExVMy15mB(iPad).png](https://qiita-image-store.s3.amazonaws.com/0/213053/809f0d8d-f5b0-fc7b-233b-9f8dd6449f17.png)

右肩のステータスの表示が"CONNECTED"となるまで、少し待つ。
(Notebookを開いている間に、接続が切れてしまうことがあるので、その時をこの部分をクリックして、再度"CONNECTED"となることを確認する。）

ここでは初期設定を実施

* %matplotlib inline: Jupyter notebookを利用した時にグラフをその場で表示するためのおまじない
* matplotib : グラフ作成用モジュール
* numpy : 数値計算用モジュール

```python3
%matplotlib inline
from matplotlib import pyplot
from numpy import random, array
```

フィールドの内部のコードを実行するには、フィールドの左部分の:arrow_forward: ボタンを押す
[colab.research.google.com_drive_19eZ6f13sGEadzZZDuss-XmGkKyzPoQlv(iPad).png](https://qiita-image-store.s3.amazonaws.com/0/213053/fd5c2bea-faaf-2be3-a0fc-85342ac1d5af.png)

## numpy を利用して乱数を作成する
NUMBER_OF_VALUES に 何個の乱数を作成するかを指定

* 実行する度に異なった乱数が生成される
* 乱数の生成範囲は [0,1)　0以上1未満の実数

メニューの"+ CODE"をクリックしてフィールドを追加

```python3
NUMBER_OF_VALUES = 10
random_number_array = random.random(NUMBER_OF_VALUES)

random_number_array
```

フィールドの内部のコードを実行するには、フィールドの左部分の:arrow_forward: ボタンを押す

![colab.research.google.com_drive_1FAKiWuc4aBrfcBc9YL7sf8IPm3Y3TBAF(iPad).png](https://qiita-image-store.s3.amazonaws.com/0/213053/4b4cb9b0-75af-d3f7-484a-e1c42ab0b8c3.png)

## 作成した乱数のヒストグラムを表示
メニューの"+ CODE"をクリックしてフィールドを追加

```
pyplot.hist(random_number_array, bins=5)
pyplot.show() 
```
フィールドの内部のコードを実行するには、フィールドの左部分の:arrow_forward: ボタンを押す

![colab.research.google.com_drive_1FAKiWuc4aBrfcBc9YL7sf8IPm3Y3TBAF(iPad).png](https://qiita-image-store.s3.amazonaws.com/0/213053/55a56716-e6fd-2c21-47ee-794fe7604c16.png)

数が少ないので、一様乱数かどうか、グラフからは良くわからない

そこで、もっと多数の乱数を生成する

NUMBER_OF_VALUES = の値を変更する
メニューの"+ CODE"をクリックしてフィールドを追加

```python3
NUMBER_OF_VALUES = 100000
large_random_number_array = random.random(NUMBER_OF_VALUES)
pyplot.hist(large_random_number_array, bins=10)
pyplot.show() 
```

フィールドの内部のコードを実行するには、フィールドの左部分の:arrow_forward: ボタンを押す

![colab.research.google.com_drive_1FAKiWuc4aBrfcBc9YL7sf8IPm3Y3TBAF(iPad) (1).png](https://qiita-image-store.s3.amazonaws.com/0/213053/776e4854-ff1e-3e5a-8ad7-1e5ebfe48a41.png)

10万個のデータを利用した結果、度数が全ての領域でほぼ同じ事から一様乱数にみえる

## スプレッドシートからデータをコピペする

Python等の言語を利用する場合にスプレッドシートのデータを気軽にコピペして使えないからかも知れないので、スプレッドシートからデータをコピーして利用する

スプレッドーシート上で

* データの範囲をマウス等を利用して選択

* データをコピーする

下記のフィールド上で
* temp='''の次の行から'''の間にデータをペーストする(記載されているデータを置き換える)
メニューの"+ CODE"をクリックしてフィールドを追加

```python3
temp = '''
0.3196471909
0.5988571351
0.04787251204
0.9621505055
0.6476701195
0.415422835
0.4098646439
0.7477808772
0.09884921312
0.1879705363
'''

data = array([float(item) for item in temp.split()])

data
```

フィールドの内部のコードを実行するには、フィールドの左部分の:arrow_forward: ボタンを押す

![colab.research.google.com_drive_1FAKiWuc4aBrfcBc9YL7sf8IPm3Y3TBAF(iPad) (2).png](https://qiita-image-store.s3.amazonaws.com/0/213053/c01421e4-4e00-89ee-31be-b7df87c58587.png)

こうしてスプレッドシートのデータをコピペして利用できる

取り込んだデータの統計値を計算

* 平均値を算出: data.mean()
* データの個数: data.size
メニューの"+ CODE"をクリックしてフィールドを追加

```pythn3
print(f'Average: {data.mean()}  Data count: {data.size}')
```

フィールドの内部のコードを実行するには、フィールドの左部分の:arrow_forward: ボタンを押す
![colab.research.google.com_drive_1FAKiWuc4aBrfcBc9YL7sf8IPm3Y3TBAF(iPad) (2).png](https://qiita-image-store.s3.amazonaws.com/0/213053/9c96096d-1a99-c1a7-a01a-872be03327f6.png)

[今回利用したノートブック]([https://colab.research.google.com/drive/1FAKiWuc4aBrfcBc9YL7sf8IPm3Y3TBAF)(そのままでは編集できないので、Google Driveに保存してから利用)

今日はここまで:smiley: