社内でPython勉強会（入門編）をやってみた

社内でPython勉強会_入門編を実施するため、内容と実行コマンドをまとめてみた。
colaboratoryを使用しているため、ブラウザでネットにアクセスできれば、誰でも簡単に試せます！

*  学習対象：Python入門者
*  実行環境：Google Colaboratory
*  ブラウザ：Chrome、Firefox、Safari のいずれ
*  言語   ：Python ３系
*  事前準備：Google アカウントの作成
*  コンテンツ：  
    * 1.Pythonのデータ型（抜粋）
    * 2.Numpy
    * 3.Pandas
    * 4.やってみよう「Google Trend分析」


# Google Colaboratory について
[アクセスはこちら](https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja)  

Colaboratory は、機械学習の教育、研究を目的とした研究用ツールです。設定不要の Jupyter ノートブック環境です。  

■ ポイント
*  Googleが提供している jupyter notebook の実行環境
*  無料で利用可能
*  GPUも無料で使用することができる！！
*  実行環境はgoogle gloud で実行されている
*  作成したファイル（.ipynb)は google drive に保存される


# Python勉強会 本編
### 1.Pythonのデータ型（抜粋）
まずは、Pythonで扱えるデータ型と処理をみてみましょう

```
## 出力処理
print()
```
```  
## 数値
1 + 1 - 1 * 1 / 1
```
```
## 文字列
print('hello world')
print("See you!")
```
```
## リスト
test_list = ['apple', 'banana', 'orange']
test_list
``` 
 
##### リスト型の操作について

```
## 指定した要素の出力
test_list[0]
```
```
## 要素の追加
test_list.append('grape')
test_list
```
```
## rangeを使って、listを作成する
range(10)
```
```
## 作成方法
test_list_2 = list(range(10))
test_list_2
```
```
## スライスで値を取得する
print( test_list_2[1:6] )
print( test_list_2[:5] )
print( test_list_2[3:] )
```

##### データ型を確認する

```
## データ型を確認
print( type("apple") )
print( type(2) )
print( type(1.0))
print( type(test_list_2) )
```


##### ★理解度チェック★
1. 「I love Python on Colaboratory」と出力してみよう
2. りんご100円を５個　みかん120円を4個　メロン800円が20%OFFで２個　そこに消費税+8% の金額は？？
3. 0~15 の値が格納されたリストを作成し、 6~9の値を表示してみよう


## Numpy
Numpyとは、数値計算を効率的に行うためのライブラリです。
効率的な数値計算を行うための型付きの多次元配列のサポート
それらを操作するための大規模な高水準の数学関数ライブラリを提供しています。 

```
## Numpyのライブラリをインポート
import numpy as np
```

##### アレイを作成し、操作する

```
np.array([1,2,3,4,5])
```
```
## リストを作成する
test_list = list(range(10))
## リストからアレイを作成する
test_array = np.array(test_list)
test_array
```
```
## データ型を確認
type(test_array)
```
```
## アレイのデータ型を確認
## アレイはデータ型を一つしか指定できないので注意が必要
test_array.dtype
```
```
## アレイの要素数を確認
test_array.shape
```

##### ２次元のアレイを作成する

```
## 2次元リストを作成する
test_list_1 = [1,2,3,4]
test_list_2 = [5,6,7,8]
test_list_list = [test_list_1, test_list_2]
test_list_list
```
```
## ２次元のリストからアレイを作成する
test_array_2 = np.array(test_list_list)
test_array_2
```
```
## ２次元のアレイの要素数を確認する
test_array_2.shape
```

##### アレイの操作

```
## 要素値が0のアレイを作成する
np.zeros(10)
```
```
## 要素値が1の２次元アレイを作成する
np.ones((10,5))
```
```
## 0 ~ 9 の要素値をもつアレイを作成する
np.arange(10)
```
```
## 10 ~ 15 の要素値をもつアレイを作成する
np.arange(10,16)
```
```
## 10以上　31未満 の値を 10をスタートに +2 ずつ作成
test_array_2 = np.arange(10,31,2) 
test_array_2
```
```
## 条件によって取得する値を変化させる
test_array_1 = np.arange(10)
# 要素値が奇数の場合は 0 偶数の場合はその値を出力する
# np.where( 条件, 真の場合の値, 偽の場合の値 )
np.where( test_array_1 % 2 == 1, 0, test_array_1 )
```
```
## ２次元配列を生成する
np.arange(9).reshape((3,3))
```
```
## 要素を[0-1)の範囲でランダムにセット
  np.random.rand(2, 3)
```
```
## 要素を正規分布にしたがって生成する
np.random.randn(2, 3)
```

##### Numpyを使って計算を行う

```
## Numpyを使用して計算を行う
test_array_1 = np.arange(11)
test_array_1
```
```
## アレイにかけ算を行う
test_array_1 * 2
```
```
## アレイに３乗を行う
test_array_1 ** 3
```
```
## アレイ同士のかけ算を行う
test_array_1 = np.arange(10)
test_array_2 = np.arange(10,20)
test_array_1 * test_array_2
#  0,   1,  2,  3,  4,  5,  6,   7,   8,   9
# 10,  11, 12, 13, 14, 15, 16,  17,  18,  19
# --------------------------------------------
#  0,  11, 24, 39, 56, 75, 96, 119, 144, 171
```

##### Numpyで統計値を求める

```
## Numpyを使用して統計値を求める
test_array_1 = np.arange(10)
```
```
## 平均
# 記載方法は２通りあるが、後述を推奨　※引数指定で処理内容を変更できるため
print( test_array_1.mean() )
print( np.mean( test_array_1) )
```
```
## 平均
np.mean(test_array_1)
```
```
## 最大値
np.max(test_array_1)
```
```
## 最小
np.min(test_array_1)
```
```
## 標準偏差
np.std(test_array_1)
```
```
## 合計
np.sum(test_array_1)
```
```
## 平方根(√)
np.sqrt(test_array_1)
```
```
## Sort
test_array = np.array([5,4,9,2,8])
test_array.sort()
test_array
```
```
## 重複削除
test_array = np.array([1,3,1,2])
np.unique(test_array)
```
```
## 複数次元のアレイ
test_array_2 = np.arange(8).reshape((2,4))
test_array_2
print( np.max( test_array_2, axis=1 ) )  ## 行ごとに計算 [0, 1, 2, 3]  |  [4, 5, 6, 7] 
print("-----------------------------------" )
print( np.max( test_array_2, axis=0 ) )  ## 列ごとに計算 0,4  |  1,5  |・・・
print("-----------------------------------" )
```
```
np.max( test_array_2 )
```

##### Numpyで数式を計算してみる  
■ユークリッド距離  

```math
d(x,y,z) = \sqrt{x^2 + y^2 + z^2}
```
問題：ユークリッド距離を求め、$ d(x,y,z)  $ の距離の平均値を求めましょう

```
data = np.random.randn(100, 3)
data
## array([ x, y, z ]) とした時の計算
```
```
## x**2, y**2, z**2 
data ** 2
```
```
## **2 + y**2 + z**2
np.sum( data ** 2, axis = 1 )
```
```
## 平方根を求める
np.sqrt( np.sum( data ** 2, axis = 1 ) )
```
```
print(" 平均を求める ")
np.mean( np.sqrt( np.sum( data ** 2, axis = 1 ) ) )
```

##### ★理解度チェック★
4. 0の値を２０こもつ１次元のアレイを作成してみよう
5. [[1,2,3,4],[5,6,7,8]]の２次元のアレイをnp.arangeを使って作成してみよう
6. 乱数からアレイを作成し、Sort処理を行おう
7. 0~100の値をもつアレイを作成して、平均値を標準偏差を求めてみよう 



## Pandas 

pandasとは、データ解析を支援する機能を提供するライブラリです。
特に<b>数表</b>および<b>時系列データ</b>を操作するためのデータ構造と演算を提供しています。

```
## Pandasのライブラリをインポート
import pandas as pd
## Pandasでよく使用する Series, DataFrameもインポート
from pandas import Series, DataFrame
```

##### Seriesについて

```
##array に似ているけどIndexが付与される
ser = Series([7,8,9])
ser
# Index  0 1 2
# Values 7 8 9
```
```
## Seriesの値はarrayで保持をしている
ser.values
```
```
## Indexはこちら
ser.index
```
```
## Indexを付与して作成
fruits_price = Series([100,120,700],index=['banana','apple','melon'])
fruits_price
```
```
## Indexで出力
fruits_price['banana']
```
```
## 真偽値をしようして出力
fruits_price[fruits_price>150]
```
```
## 対象のIndexがあるかを確認
'orange' in fruits_price
```
```
## Seriesに名前をつける
fruits_price.name = 'フルーツの価格'
fruits_price
```
```
## Indexをしようして値を変更する
fruits_price_change = Series([-50,0,100],index=['apple','banana','melon'])
fruits_price + fruits_price_change
```

##### ★理解度チェック★
8. Seriesを使って、商品の価格を管理しよう
　　チョコ：100円　アイス:250円　タピオカ：600円
9. 8.で作成した商品の値段を以下に変更してみよう
　　チョコ:+100  アイス:-200  タピオカ:変更なし


##### DataFrameのデータ取り込み

クリップボードにコピーした値の貼り付け→pd.read_clipboardはColaboratoryでは実行不可
以下のCSVデータをコピーして、VM上でCSVを作成
※Google Driveにアクセスが社内からだと実行できないため

データ参照元： [マクドナルド_栄養価一覧](http://www.mcdonalds.co.jp/quality/allergy_Nutrition/nutrient2.php?id=1)

```
## CSVファイルを作成
## VMのディレクトリ確認
!pwd
```
```
## ディレクトリ確認
!ls -lrt
```
```
## ディレクトリ作成
!mkdir learning_data
## CSVファイル作成
!touch learning_data/McDonald.csv
## 権限変更
!chmod 755 learning_data/McDonald.csv
## ファイル確認
!ls -lrt learning_data/McDonald.csv
```
```
## CSVにデータの挿入 ※VIMは使用不可　※実行には時間がかかります
!echo '商品名,製品重量,エネルギー,タンパク質,脂質,炭水化物,ナトリウム,カリウム,カルシウム,リン,鉄,ビタミンA,ビタミンB1,ビタミンB2,ナイアシン,ビタミンC,コレステロール,食物繊維,食塩' >>  learning_data/McDonald.csv
!echo 'ワイルド 倍スパイシービーフ,215,647,35.4,43.3,29.3,1136,485,131,332,3.1,101,0.17,0.31,6.3,1,108,1.8,2.9' >>  learning_data/McDonald.csv
!echo 'ワイルド スパイシービーフ,159,481,22.1,30.9,29.3,965,300,125,231,1.8,87,0.13,0.21,3.6,1,63,1.7,2.4' >>  learning_data/McDonald.csv
!echo 'マイルド カレーチキン,203,481,24.2,21.1,49,1399,423,138,401,1.1,59,0.19,0.19,8.7,2,57,3.2,3.6' >>  learning_data/McDonald.csv
!echo 'ビッグマック,217,525,26,28.3,41.8,1007,372,143,275,2.2,74,0.17,0.24,4.4,2,69,2.6,2.6' >>  learning_data/McDonald.csv
!echo 'グラン クラブハウス,222,520,26.5,30.5,35.3,1041,444,141,305,2.1,95,0.24,0.26,4.5,17,73,2.5,2.6' >>  learning_data/McDonald.csv
!echo 'グラン ベーコンチーズ,174,482,27.3,26.4,34.1,1118,391,224,339,1.9,127,0.18,0.3,4,7,74,2.1,2.8' >>  learning_data/McDonald.csv
!echo 'グラン ガーリックペッパー,194,423,20.4,21.8,36.9,792,499,49,180,1.9,44,0.14,0.17,3.6,6,49,2.5,2' >>  learning_data/McDonald.csv
!echo 'ダブルチーズバーガー,169,457,26.5,25,31.4,1132,358,216,318,2,118,0.13,0.28,4.1,1,76,1.7,2.9' >>  learning_data/McDonald.csv
!echo 'てりやきマックバーガー,157,478,15.5,30.2,36.4,829,255,51,149,1.1,11,0.19,0.19,3.6,1,56,1.7,2.1' >>  learning_data/McDonald.csv
!echo 'チキンフィレオ,183,465,20,21.9,47.3,1139,345,39,319,0.9,12,0.16,0.12,8.2,1,49,2.8,2.9' >>  learning_data/McDonald.csv
!echo 'てりやきチキンフィレオ,195,498,20.2,23.2,52.4,1216,343,38,320,0.9,10,0.16,0.12,8.1,1,50,2.8,3.1' >>  learning_data/McDonald.csv
!echo 'ベーコンレタスバーガー,136,374,17.7,20.8,29.1,837,230,122,215,1.3,61,0.14,0.18,2.6,7,47,1.7,2.1' >>  learning_data/McDonald.csv
!echo 'えびフィレオ,174,395,12.5,17.4,47.7,919,119,64,102,0.8,8,0.09,0.06,0.9,1,66,2.9,2.3' >>  learning_data/McDonald.csv
!echo 'エッグチーズバーガー(エグチ),169,387,22.3,18.9,31,813,297,146,274,2.1,131,0.13,0.36,2.6,1,248,1.5,2.1' >>  learning_data/McDonald.csv
!echo 'チキンチーズバーガー(チキチー),153,431,17.1,23,39.2,1060,277,124,301,0.8,62,0.11,0.16,5,1,50,2.2,2.7' >>  learning_data/McDonald.csv
!echo 'ベーコンマックポーク(マクポ),143,420,17.6,24,33.8,876,387,50,177,1.1,8,0.24,0.21,4.4,6,55,1.5,2.2' >>  learning_data/McDonald.csv
!echo 'ハンバーガー,104,256,12.8,9.4,30.3,542,214,30,109,1.2,14,0.1,0.09,2.5,1,26,1.5,1.4' >>  learning_data/McDonald.csv
!echo 'チキンクリスプ,128,345,14,15.5,37.7,850,246,31,222,0.7,13,0.12,0.09,5.3,0,35,1.9,2.2' >>  learning_data/McDonald.csv
!echo 'チーズバーガー,118,307,15.8,13.4,30.8,747,232,121,184,1.2,61,0.1,0.16,2.5,1,38,1.5,1.9' >>  learning_data/McDonald.csv
!echo '倍ビッグマック,285,724,41.4,43.4,41.8,1310,588,149,392,3.8,93,0.22,0.35,7.5,2,121,2.7,3.3' >>  learning_data/McDonald.csv
!echo '倍グラン クラブハウス,279,686,39.9,43,35.3,1213,629,147,406,3.4,109,0.29,0.36,7.2,17,117,2.6,3.1' >>  learning_data/McDonald.csv
!echo '倍グラン ベーコンチーズ,230,648,40.7,38.9,34.1,1289,576,229,441,3.2,142,0.22,0.4,6.7,7,118,2.1,3.3' >>  learning_data/McDonald.csv
!echo '倍グラン ガーリックペッパー,250,588,33.7,34.3,36.9,963,684,54,282,3.2,58,0.19,0.27,6.3,6,93,2.5,2.4' >>  learning_data/McDonald.csv
!echo '倍ダブルチーズバーガー,237,655,42,40.1,31.4,1435,574,223,435,3.5,137,0.18,0.39,7.2,1,127,1.8,3.6' >>  learning_data/McDonald.csv
!echo '倍てりやきマックバーガー,234,728,25.8,50,44.1,1308,433,76,246,1.8,17,0.32,0.35,6.6,2,105,1.8,3.3' >>  learning_data/McDonald.csv
!echo '倍フィレオフィッシュ,197,458,24.8,19.9,44.8,638,339,82,252,0.6,33,0.14,0.12,2,0,66,2,1.6' >>  learning_data/McDonald.csv
!echo '倍チキンフィレオ,277,709,34.8,34.7,64.4,1778,596,48,583,1.3,16,0.26,0.2,15.7,1,92,3.9,4.5' >>  learning_data/McDonald.csv
!echo '倍てりやきチキンフィレオ,309,768,35.3,36.1,76,2082,610,48,588,1.4,14,0.26,0.2,15.8,2,93,4,5.3' >>  learning_data/McDonald.csv
!echo '倍ベーコンレタスバーガー,170,473,25.5,28.4,29.1,989,338,125,273,2.1,71,0.16,0.23,4.1,7,73,1.8,2.5' >>  learning_data/McDonald.csv
!echo '倍えびフィレオ,253,553,19.4,25.5,62.8,1309,138,97,143,1,9,0.1,0.08,1.3,1,126,4,3.3' >>  learning_data/McDonald.csv
!echo '倍エッグチーズバーガー(倍エグチ),203,486,30,26.5,31,965,405,149,332,2.8,141,0.16,0.42,4.1,1,274,1.6,2.4' >>  learning_data/McDonald.csv
!echo '倍チキンチーズバーガー(倍チキチー),211,584,26.1,31.6,49.1,1565,460,130,475,1.1,72,0.16,0.21,9.5,1,82,2.9,4' >>  learning_data/McDonald.csv
!echo '倍ベーコンマックポーク(倍マクポ),200,644,27.7,43.8,35.1,1128,550,73,270,1.7,14,0.37,0.36,7.4,6,104,1.5,2.9' >>  learning_data/McDonald.csv
!echo '倍ハンバーガー,138,356,20.6,16.9,30.3,693,322,33,167,1.9,23,0.12,0.15,4,1,52,1.6,1.8' >>  learning_data/McDonald.csv
!echo '倍チキンクリスプ,186,498,23,24,47.6,1355,430,37,395,1,22,0.17,0.14,9.8,0,66,2.5,3.4' >>  learning_data/McDonald.csv
!echo '倍チーズバーガー,152,406,23.5,21,30.8,898,340,124,242,1.9,71,0.13,0.22,4.1,1,64,1.6,2.3' >>  learning_data/McDonald.csv
!echo 'エッグマックマフィン,139,311,19.2,13.5,27.1,649,183,171,211,1.3,118,0.13,0.31,1.2,0,231,1.7,1.6' >>  learning_data/McDonald.csv
!echo 'ベーコンエッグマックサンド,128,299,15.9,13.2,28.1,633,147,138,232,1.3,115,0.13,0.31,1.1,5,227,1.2,1.6' >>  learning_data/McDonald.csv
!echo 'ソーセージエッグマフィン,166,475,21.5,30.6,27.3,789,235,183,211,1.7,118,0.18,0.37,2.9,0,255,1.7,2' >>  learning_data/McDonald.csv
!echo 'ソーセージマフィン,115,395,15,25.1,27.2,722,170,158,121,0.8,48,0.15,0.17,2.9,0,45,1.7,1.8' >>  learning_data/McDonald.csv
!echo 'チキンクリスプマフィン,134,364,15.2,17.3,37,813,258,62,225,0.7,13,0.15,0.1,5.6,0,35,2.5,2.1' >>  learning_data/McDonald.csv
!echo 'ホットケーキ,143,319,8,8.6,52.7,711,254,134,0,3.3,0,0,0,0,0,21,2.8,1.8' >>  learning_data/McDonald.csv
!echo 'マックグリドル ソーセージエッグ,197,550,20.3,33.2,42.4,1193,256,188,535,3.1,125,0.32,0.46,4.2,0,254,1.7,3' >>  learning_data/McDonald.csv
!echo 'マックグリドル ベーコンエッグ,165,396,15.7,18.1,42.4,1030,172,174,499,2.5,115,0.23,0.41,2.6,5,227,1.8,2.6' >>  learning_data/McDonald.csv
!echo 'マックグリドル ソーセージ,133,420,10.4,23.8,41.9,971,167,79,372,2,9,0.3,0.2,4.2,0,30,1.6,2.5' >>  learning_data/McDonald.csv
!echo 'メガマフィン,229,695,29.7,49.7,31.2,1358,415,200,245,2.3,123,0.28,0.45,5.4,6,294,2,3.4' >>  learning_data/McDonald.csv
!echo 'ビッグブレックファスト(ハッシュポテト含む),254,659,26.3,42.8,39.9,961,499,123,270,2.9,141,0.26,0.51,3.9,1,458,3.3,2.4' >>  learning_data/McDonald.csv
!echo 'ビッグブレックファスト デラックス(ハッシュポテト含む),397,978,34.2,51.4,92.7,1673,753,257,270,6.2,141,0.26,0.51,3.9,1,478,6.1,4.2' >>  learning_data/McDonald.csv
!echo 'フィレオフィッシュ,139,341,15.6,14.6,36.6,554,200,76,168,0.5,29,0.1,0.09,1.4,0,39,1.6,1.4' >>  learning_data/McDonald.csv
!echo 'ストロベリージャム,14,38,0,0,9.5,4,7,1,1,0,0,0,0,0,0,0,0.2,0' >>  learning_data/McDonald.csv
!echo '塩・コショウ,1,1,0,0,0.1,254,2,1,0,0,0,0,0,0,0,0,0,0.6' >>  learning_data/McDonald.csv
!echo 'バターパット,8,60,0,6.7,0,36,0,1,2,0,99,0,0,0,0,18,0,0.1' >>  learning_data/McDonald.csv
!echo 'ホットケーキシロップ,41,121,0,0,30.2,1,0,0,1,0,0,0,0,0,0,0,0,0' >>  learning_data/McDonald.csv
```
```
## ファイルの確認
!head learning_data/McDonald.csv
```
```
## CSV取り込み
mac_df = pd.read_csv('/content/learning_data/McDonald.csv')
mac_df
```

##### DataFrameについて

```
## カラムを確認する
mac_df.columns
```
```
## 特定のカラムのみを出力
mac_df['商品名']
```
```
## 特定のカラムのみを出力
mac_df['エネルギー']
```
```
## 特定のカラムのみを出力
mac_df[['商品名','エネルギー']]
```
```
## 元のデータフレームから　新しいデータフレームを作成する
## 元のデータから作成する（参照ではない）　ので変更しても元の値に変化なし
tmp_mac_df=DataFrame(mac_df , columns= ['商品名', 'エネルギー'])
tmp_mac_df
```
```
## 以下の手順では、参照を渡しているだけなので、元の値が変更されている
tmp_mac_df_2 = tmp_mac_df
tmp_mac_df_2['エネルギー'] = 0
# tmp_mac_dfも変更されている
tmp_mac_df
```
```
## 先頭のみを取り出す
mac_df.head()
```
```
## 後方のみを取り出す　※引数で行数をしてい
mac_df.tail(10)
```
```
## Indexを使って、行ごとのデータを取り出す
mac_df.ix[3]
```
```
## 値の代入
mac_df['会社']='McDonald'
mac_df
```
```
##Series からデータを代入
my_favorite = Series(["No.2", "No.1", "No.3"], index=[1,12,17])
my_favorite
```
```
## Seriesからデータ投入
mac_df['好み']=my_favorite
mac_df
```
```
## 列の削除
del mac_df['好み']
mac_df
```
```
## 辞書型からデータを作成する
data = {'City':['Tokyo','Osaka','Nagoya'], 'Population':[837000,423000,55400]}
data
```
```
city_df = DataFrame(data)
city_df
```
```
## アレイを使ってデータを作成する
# ５行５列のアレイを作成 
array = np.random.randn(25).reshape((5,5))
array
```
```
## アイレを使用してデータを挿入
array_df = DataFrame(array, index=['A','B','C','D','E'], columns=['col1','col2','col3','col4','col5'])
array_df
```
```
## 行の削除
array_df.drop('B', axis=0)
# axis=0の場合は省略可能
```
```
## 列の削除
array_df.drop('col2', axis=1)
```
```
## 値の取得(カラム)
array_df['col1']
```
```
## 値の取得(インデックス)
array_df.ix['C']
```
```
## 値の取得(インデックス　数値)
array_df.ix[1]
```
```
## 値の取得（条件）
array_df[array_df['col4'] > 0.0]
```
```
## 値の真偽値取得
array_df > 0.0
```
```
## NULLの処理
# np.nanでNULLを作成
df = DataFrame([[1,2,3,np.nan],[2,np.nan,5,6],[np.nan,7,np.nan,9],[1,np.nan,np.nan,np.nan]])
df
```
```
## nullを全て削除
df.dropna()
```
```
##NULLが２を超える行を削除
df.dropna(thresh=2)
```
```
##NULLを0でうめる
df.fillna(0)
```

##### Padasの簡単な計算

```
df_1 = DataFrame(np.arange(4).reshape((2,2)), columns=list('AB'), index=['id1','id2'])
df_1
```
```
df_2 = DataFrame(np.arange(9).reshape((3,3)), columns=list('ACE'), index=['id1','id2','id3'])
df_2
```
```
## 演算（共通する行以外はnull）
df_1 + df_2
```
```
## 足し合わせがないところが元の値が入る
###ただしどちらにもないデータはnullのまま
df_1.add(df_2, fill_value=0)
```
```
## SeriesとDataFrameの演算
# DataFrameからSreiesを作成
ser_2 = df_2.ix['id2']
ser_2
```
```
## SeriesとDataFrameの演算
# カラム名と一致したデータで演算
df_2 - ser_2
```

##### Pandasでの統計

```
## 使用するデータ（思い出しましょう！）
mac_df
```
```
## 列ごとに集計
# たとえば、最大値
mac_df.sum()
```
```
## エネルギーが平均以下の商品
print( mac_df['エネルギー'].mean() )
print('---------------------------------------------------')
mac_df[mac_df['エネルギー'] <= mac_df['エネルギー'].mean() ]
```
```
## 行ごとに計算
mac_df.min(axis=1)
```
```
## データ量を調べる
mac_df.shape[:]
```
```
## データの特徴を調べる
mac_df.describe()
```
```
## データの概要を調べる
mac_df.info()
```

## DataFrameをグラフ化させる

```
## グラフに必要なライブラリをインポート
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
```
```
## グラフを表示する
mac_df['エネルギー'].plot()
```
```
## 棒グラフに変更する
mac_df['エネルギー'].plot(kind='bar')
```
```
## 一番エネルギーが多かった商品は。。。 Index:47
mac_df.ix[47]
```
```
## ビタミンをグラフに出す
# カラムを確認
mac_df.columns
```
```
mac_df[['ビタミンA','ビタミンB1','ビタミンB2','ビタミンC']].plot()
#mac_df['ビタミンA'].plot()
#mac_df[['ビタミンB1','ビタミンB2','ビタミンC']].plot()
```
```
## 箱ひげ図で確認する
mac_df[['ビタミンB1','ビタミンB2','ビタミンC']].plot(kind='box')
```


## やってみようGoogle Trends
【参考】What is pytrends
https://www.monotalk.xyz/blog/Get-Google-trend-data-with-pytrends/

```
## ライブラリをVMにインストール
!pip install pytrends
```
```
## 必要はないが、再度使用するライブラリをインポート
import numpy as np
import pandas as pd
from pandas import DataFrame, Series

import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
%matplotlib inline

from datetime import datetime
```
```
## ライブラリをインポート
import pytrends
from pytrends.request import TrendReq
```
```
# API Connection
## hl : Googleトレンドにアクセスするためのホスト言語を指定
## tz : タイムゾーン(minutes) で指定する 
pytrends = TrendReq(hl='ja-JP', tz=360)
```

##### 検索ランキング上位を探ってみよう！！

```
## trending searches in real time for any country
# pn = 検索対象の国　例 米国：pn='united_states'
searches_df=pytrends.trending_searches(pn='japan')
searches_df
```
```
## ↑の結果で気になったワードを取得
# ここでは３行目のデータ
hot_word=searches_df[0][3]
hot_word
```
```
##build_payload :検索する条件を指定
# kw_list :検索対象のキーワード
# 配列形式で記載
# 例：['Pizza', 'Italian', 'Margherita']
# timeframe : 集計対象期間
# geo : 検索対象の国
pytrends.build_payload(kw_list=[ hot_word ], timeframe='now 7-d', geo='JP')
related_dict=pytrends.related_queries()
```
```
## 取得結果を確認
related_dict
```
```
## 結果を取得して表示
related_rising_df=related_dict[ hot_word ]['rising']
related_rising_df
```

##### フルーツのトレンドを探ってみよう！！

```
# Set the search keyword
kw_list = ["ばなな","りんご","もも","すもも","みかん"]
```
```
## Get the Trends
pytrends.build_payload(kw_list, timeframe='2018-08-01 2019-07-30', geo='JP')
f_df = pytrends.interest_over_time()
f_df
```
```
## グラフに日本語が表示できないため、カラム名を変換
print(f_df.columns)
f_df = f_df.rename(columns={'ばなな': 'banana','りんご': 'apple','もも': 'peach','すもも': 'plum','みかん': 'orange'})
f_df
```
```
## グラフを表示
f_df.plot()
```
```
## 値を確認
f_df.sum()
```
```
## 箱ひげ図で確認
f_df.plot(kind='box')
```
```
## 人気な桃を除いてグラフを表示
f_df.drop('peach', axis=1).plot()
```

## 理解度チェック　回答

```
## 1. 「I love Python on Colaboratory」と出力してみよう ##
print('I love Python on Colaboratory')
## OR
print("I love Python on Colaboratory")
```
```
## 2. りんご100円を５個　みかん120円を4個　メロン800円が20%OFFで２個　そこに消費税+8% の金額は？？ ##
  ( 100 * 5 + 120 * 4 + 800 * 0.8 * 2 ) * 1.08
## 2440.8
```
```
## 3. 0~15 の値が格納されたリストを作成し、 6~9の値を表示してみよう ##
array = list(range(16))
print(array)
print(array[6:10])

```
```
## 4. 0の値を２０こもつ１次元のアレイを作成してみよう
array = np.zeros(20)
print(array)
print(array.shape)
```
```
## 5. [[1,2,3,4],[5,6,7,8]]の２次元のアレイをnp.arangeを使って作成してみよう
array = np.arange(1,9).reshape((2,4))
array
```
```
## 6. 乱数からアレイを作成し、Sort処理を行おう
array = np.random.randn(10)
print(array)
array.sort()
print(array)
```
```
## 7. 0~100の値をもつアレイを作成して、平均値を合計値を求めてみよう 
print( np.mean(np.arange(0,101)) )
print( np.sum(np.arange(101)) )
```
```
## 8. Seriesを使って、商品の価格を管理しよう
## 　　チョコ：100円　アイス:250円　タピオカ：600円
price_ser = Series([100,250,600],index=['チョコ','アイス','タピオカ'])
price_ser
```
```
## 9. 8.で作成した商品の値段を以下に変更してみよう
## 　　チョコ:+100  アイス:-200  タピオカ:変更なし
price_ser_change = Series([100,-200,0],index=['チョコ','アイス','タピオカ'])
price_ser + price_ser_change
```


# 最後に
今回はPythonの初心者の方に、分析でよく使用する `Numpy` `Pandas` を中心に一通り処理を流すことでイメージを膨らませることを目的にしました。
次のステップとしては、実際に一つのお題に対して分析をしてみたいと思います。
有名なものにタイタニック号の分析がありますので、興味のある方を調べてみてください。