GCP側の登録
①GCPの利用登録
https://console.cloud.google.com/
※無料トライアルのステータスを有効化(クレジットカードの入力が必要)
②新しいプロジェクトを作成
③「2つのAPI」を有効化
・Google Drive API
・Google Sheets api
左ナビ「APIとサービス」選択 > 「ライブラリ」選択
└Google Drive APIと入力して「Google Drive API」を検索します。
⇒「有効にする」ボタンを押して「Google Drive API」を使用可能にします。
└Google Sheets apiと入力して「Google Sheets API」を検索します。
⇒「有効にする」ボタンを押して「Google Sheets API」を使用可能にします。
↓↓↓↓↓↓↓↓
左ナビの「有効なAPIとサービス」の一覧に以下が表示されました。
・Google Drive API
・Google Sheets api
※Google Sheets API の概要
https://developers.google.com/sheets/api/guides/concepts?hl=ja
④認証情報を作成
・サービス アカウントの作成
python******@f***********.iam.gserviceaccount.com
・鍵を追加(キーのタイプ:json形式)
1)「APIとサービス」 -> 「認証情報」で以下の画面が開く。
「認証情報を作成」 -> 「サービス アカウントを管理」 を選択する。
2)「+サービス アカウントを作成」をクリックして、新規作成する。
3)作成された「サービス アカウント」のメールをクリックする。
4)「キー」のタブを開いて、「鍵を追加」を押す。
5)「JSONをダウンロード」 を押してJSONファイルを取得してください。
python gspread のドキュメント
Googleスプレッドシート側の処理
①Googleスプレッドシートの作成
https://docs.google.com/spreadsheets/d/●●●●/edit#gid=****
※「●●●●」がスプレッドシートID
②Googleスプレッドシートを「作成したサービスアカウント」に共有する
※編集者権限を付与する
スプレッドシートの共有設定で、GCPで作成したサービスアカウントのメールアドレスに編集者権限を与えて共有する
Python でコーディング
①ダウンロードした秘密鍵を作業ディレクトリにアップロードする。
・名前を変更:secret.json
②認証設定を行う
!pip install gspread
!pip install google-auth
import gspread
#認証(スコープを定義し、認証キーを呼び込む)
from google.oauth2.service_account import Credentials
scopes = [
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive'
]
credentials = Credentials.from_service_account_file(
'secret.json',
scopes=scopes
)
gc = gspread.authorize(credentials)
gc
<gspread.client.Client at 0x28b79f18760>
③スプレッドシートのインスタンスを作成し、値を取得
#スプレッドシートの取得(スプレッドシートのIDを登録)
SP_SHEET_KEY = "****スプレッドシートのID****"
#スプレッドシートのシートの取得
SP_SHEET = "**シート名**"
#スプレッドシートを開く
sh = gc.open_by_key(SP_SHEET_KEY)
#シートを指定
worksheet = sh.worksheet(SP_SHEET)
♯シートの全ての値を取得
data = worksheet.get_all_values()
data(SP_SHEET)
[['', '', '', '', ''], ['', '社員ID', '氏名', '年齢', '所属'], ['', '22', '佐藤', '42', '総務部'], ['', '96', '鈴木', '38', '人事部'], ['', '92', '岩橋', '26', '経理部'], ['', '22', '小泉', '40', '技術部'], ['', '35', '今西', '50', '総務部'], ['', '77', '斎藤', '44', '企画開発部'], ['', '38', '高橋', '28', '技術部'], ['', '69', '中村', '43', '技術部'], ['', '78', '吉田', '35', '企画開発部'], ['', '53', '前田', '37', '開発部']]
④スプレッドシートの値をデータフレームに入れる
import pandas as pd
df = pd.DataFrame(data[2:],columns=data[1])
df
⑤空の値の列(0列目)を削除する
#縦方向(axis=1)に0列目を削除する ※横方向は、「axis=0」
df=df.drop(df.columns[[0]],axis=1)
df
#データ型を調べる
df.dtypes
社員ID object 氏名 object 年齢 object 所属 object dtype: object
⑥データ型変換
#データ型を文字列から数値型に変換
df=df.astype({'年齢':int,'社員ID':int})
df.dtypes
社員ID int32 氏名 object 年齢 int32 所属 object dtype: object
⑦データの平均値を求め、小数点以下の値を丸める
#所属ごとの年齢の平均値を取得
pvt_table=df.pivot_table(index=['所属'],values=['年齢'],aggfunc='mean')
#数値の小数点以下を丸める
pvt_table['年齢']=pvt_table['年齢'].round(0)
pvt_table
⑧新しくスプレッドシートにシートを追加して、値を書き込む
#新しいシートを追加する(シート名:new、100行100列)
new_worksheet=sh.add_worksheet(title='new',rows=100,cols=100)
#gspreadとDataFrameの連携をスムーズにするライブラリをインストール
!pip install gspread-dataframe
from gspread_dataframe import set_with_dataframe
#データの書き出しの位置を決める(左上のセルの位置)
first_row=2
first_col=2
#1列目がインデックスと認識されるので、これをリセットして、インデックスもデータ値としてスプレッドシートに書き込む)
set_with_dataframe(new_worksheet,pvt_table.reset_index(),row=first_row,col=first_col)
pvt_table.reset_index() すると、
⑨スプレッドシートのセルの書式設定をする
#セルの書式設定をするためのライブラリをインストール
!pip install gspread-formatting
from gspread_formatting import*
header_fmt = cellFormat(
backgroundColor = color(38/255,166/255,154/255),
textFormat = textFormat(bold=True,foregroundColor = color(255/255,255/255,255/255)),
horizontalAlignment = "CENTER"
)
#範囲をインスタンス化
header_range='b2:c2'
index_range='B3:b8'
value_range='c3:c8'
#書式を指定した範囲に適用する
format_cell_range(new_worksheet,header_range,header_fmt)
#枠線を引く
border=Border('SOLID',Color(0,0,0,0))
fmt=cellFormat(borders=Borders(top=border,bottom=border,left=border,right=border))
format_cell_range(new_worksheet,header_range,fmt)
format_cell_range(new_worksheet,index_range,fmt)
format_cell_range(new_worksheet,value_range,fmt)