社内でPython勉強会_入門編を実施するため、内容と実行コマンドをまとめてみた。
colaboratoryを使用しているため、ブラウザでネットにアクセスできれば、誰でも簡単に試せます!
- 学習対象:Python入門者
- 実行環境:Google Colaboratory
- ブラウザ:Chrome、Firefox、Safari のいずれ
- 言語 :Python 3系
- 事前準備:Google アカウントの作成
- コンテンツ:
- 1.Pythonのデータ型(抜粋)
- 2.Numpy
- 3.Pandas
- 4.やってみよう「Google Trend分析」
Google Colaboratory について
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) )
★理解度チェック★
- 「I love Python on Colaboratory」と出力してみよう
- りんご100円を5個 みかん120円を4個 メロン800円が20%OFFで2個 そこに消費税+8% の金額は??
- 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次元のアレイを作成する
## 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
## 2次元のリストからアレイを作成する
test_array_2 = np.array(test_list_list)
test_array_2
## 2次元のアレイの要素数を確認する
test_array_2.shape
アレイの操作
## 要素値が0のアレイを作成する
np.zeros(10)
## 要素値が1の2次元アレイを作成する
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 )
## 2次元配列を生成する
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
## アレイに3乗を行う
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)
## 平均
# 記載方法は2通りあるが、後述を推奨 ※引数指定で処理内容を変更できるため
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で数式を計算してみる
■ユークリッド距離
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 ) ) )
★理解度チェック★
- 0の値を20こもつ1次元のアレイを作成してみよう
- [[1,2,3,4],[5,6,7,8]]の2次元のアレイをnp.arangeを使って作成してみよう
- 乱数からアレイを作成し、Sort処理を行おう
- 0~100の値をもつアレイを作成して、平均値を標準偏差を求めてみよう
Pandas
pandasとは、データ解析を支援する機能を提供するライブラリです。
特に数表および時系列データを操作するためのデータ構造と演算を提供しています。
## 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
★理解度チェック★
- Seriesを使って、商品の価格を管理しよう
チョコ:100円 アイス:250円 タピオカ:600円 - 8.で作成した商品の値段を以下に変更してみよう
チョコ:+100 アイス:-200 タピオカ:変更なし
DataFrameのデータ取り込み
クリップボードにコピーした値の貼り付け→pd.read_clipboardはColaboratoryでは実行不可
以下のCSVデータをコピーして、VM上でCSVを作成
※Google Driveにアクセスが社内からだと実行できないため
データ参照元: マクドナルド_栄養価一覧
## 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
## アレイを使ってデータを作成する
# 5行5列のアレイを作成
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が2を超える行を削除
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
## ↑の結果で気になったワードを取得
# ここでは3行目のデータ
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円を5個 みかん120円を4個 メロン800円が20%OFFで2個 そこに消費税+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の値を20こもつ1次元のアレイを作成してみよう
array = np.zeros(20)
print(array)
print(array.shape)
## 5. [[1,2,3,4],[5,6,7,8]]の2次元のアレイを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
を中心に一通り処理を流すことでイメージを膨らませることを目的にしました。
次のステップとしては、実際に一つのお題に対して分析をしてみたいと思います。
有名なものにタイタニック号の分析がありますので、興味のある方を調べてみてください。