pythonではデータ解析などで、データを取り合うことが多いです。
データベースにして共有するのが一般的ですが、環境の用意が手間です。
ちょっとしたデータを使うのであれば、スプレッドシートを使うのもありです。
本記事はこんな方におすすめです。
pythonでスプレッドシートを操作したい。
自動操作でデータをリアルタイムに反映させて共有したい。
本記事の内容
- GCPでのAPI設定
- ライブラリのインストール
- スプレッドシートの書き込み
- スプレッドシートの読み込み
この記事を読むと、Google Cloud PlatformのAPIの設定から、スプレッドシートの読み込みや書き込みを知ることができます。
pythonでデータ処理と書き込みを自動化すれば、自動更新されたデータが共有できることでしょう。
Googleアカウントが必要ですので、無い方は用意しておいてください。
目次
GCPでのAPI設定
GDriveやスプレッドシートのAPIをGCPで有効にしていきます。
GCPについて
GCPはGoogleCloudPlatformの略です。
AmazonのAWSやIBM Cloud、WindowsのAzureと同じクラウドサービスです。
サーバーが簡単に構築できたり、AIの処理の実装などを手伝ってくれます。
まず、GCPにアクセスします。
プロジェクトの作成
GCPではプロジェクト単位で使うサービスなどを管理できます。
まず、プロジェクトを作成します。
GCPのダッシュボードの「プロジェクト選択」から「新しいプロジェクト」を選択します。
もしくは、下記のリンクに直接飛びます。
適当な名前でプロジェクトを作成します。
これで、新しいプロジェクトが作成され、次のようなダッシュボードがもらえます。
ここで、色々なサービスを管理します。
Google Drive APIを有効にする
Google Driveのスプレッドシートにpythonからアクセスできるようにします。
ナビゲーションメニューより、API>ライブラリを選択します。
次に、Google Drive APIを検索します。
「drive api」を入力して、Google Drive APIを選びます。
APIを有効にします。
Google Sheet APIを有効にする
Google Drive APIと同じように、ライブラリ検索で、「Google Sheet API」を検索します。
適当に、「sheet api」と入れると出てきます。
こちらも有効にします。
これで必要なAPIを有効にしたので、接続するための認証情報を作っていきます。
Google APIの認証を取得
ナビケーションメニューから、API>認証情報へいきます。
認証情報を作成から、サービスアカウントを作成します。
サービスアカウント名と説明を入力して、作成を押します。
サービスアカウントができるので、リンクを押します
キーの項目から、鍵を追加から新しい鍵を作成を押します。
JSONを作成します。
ダウンロードしましょう。
このJSONファイルを使って、GDriveのスプレッドシートにアクセスします。
スプレッドシートを作成
GDriveにアクセスして、スプレッドシートを作成しましょう。
新規を押します。
Google スプレッドシートから、空白のスプレッドシートを作成します。
ファイル名を変更します。
次に、ファイルをpythonでアクセスできるようにします。
APIの認証でダウンロードしたJSONファイルを開いてください。
ここから、client_emailの情報をコピーしてください。
この情報を、共有から設定します。
client_emailを入力すると、該当するものが下に出てくるので、選択します。
選択したら、送信します。
さてここまでで、Google Driveに置いた、スプレッドシートがpythonで書き込み、読み込みができるようになりました。
続いて、コーディングを進めていきます。
ライブラリのインストール
スプレッドシートを操作するには、2つのライブラリを使います。
pipでインストールしてください。
pip install gspread pip install oauth2client
ライブラリの読み込み
2つのライブラリ以外に、csvも使うので、csvも読み込みます。
import gspread from oauth2client.service_account import ServiceAccountCredentials import csv
設定
認証のjsonファイル、シート名などを設定します。
# 設定 json_file = '********.json' file_name = '********' sheet_name1 = 'シート1' sheet_name2 = 'csv_sheet' csv_file_name = 'Davis.csv'
認証のjson_fileとfile_nameは各自のものに変更ください。
csv_file_nameのファイルはサンプルコードのところにおいてあります。
スプレッドシートにアクセス
次のコードでスプレッドシートにアクセスしましょう。
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] # スプレッドシートにアクセス credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file, scope) gc = gspread.authorize(credentials) sh = gc.open(file_name)
シートの作成と削除
シートを作成してみます。
先ほど開いたスプレッドシートのshのadd_worksheetメソッドを使います。
行列の、rows、colsも必要ですので、入力しておきます。
# シートの作成 wks = sh.add_worksheet(title="new worksheet", rows='100', cols='30')
シートができていることを確認したら、シートを削除します。
del_worksheetを使って、読み込み済みのシートオブジェクト(wks)を渡します。
# シートの削除 sh.del_worksheet(wks)
シートのリストを取得
どんなシート名のシートがあるか確認します。
worksheetsメソッドでシート情報が取得できます。
sheet_list = [ws.title for ws in sh.worksheets()] print(sheet_list)
['シート1']
シートの選択
次に、シートを選択します。
選択したシートに対して、読み込み、書き込みをします。
シートは左から0,1,2,..の番号か、シート名で選択できます。
ここでは、sheet_name1='シート1'のシートを読み込んでいます。
# シートの選択 シートの番号でも名前でもよい wks = sh.get_worksheet(0) wks = sh.worksheet(sheet_name1)
get_worksheetが番号で、worksheetがシート名なので、注意してください。
スプレッドシートの書き込み
スプレッドシートに書き込む方法を紹介します。
セルに書き込み
セルを1つもしくは複数指定して、値を書き込みます。
# 単一セル wks.update_acell('A1', '1') wks.update_cell(1, 2, '2') # 複数セル list_data = [[1, 2], [3, 4]] wks.update('A2:B3', list_data)
acellはA1、B1などの指定。cellは行列数で指定します。
ここら辺はエクセルと同じですね。
複数の場合は、updateメソッドで、範囲とデータをリストで渡します。
CSVをシートに書き込み
ここでは、新しいシートを作って、CSVデータを書き込みます。
シートの作成は、先ほどやったadd_worksheetを使います。
やっていることは、CSVファイルをlistにして書き込んでいるだけです。
# 書き込むシート作成。すでにあれば読み込む if sheet_name2 in sheet_list: wks = sh.worksheet(sheet_name2) else: wks = sh.add_worksheet(title=sheet_name2, rows='300', cols='10') # CSVを書き込み wks.update(list(csv.reader(open(csv_file_name, encoding='cp932'))))
CSVはサンプルコードに一緒に置いてある、Davis.csvを使っています。
numpyの書き込み
同じシートに書き込みますので、一旦データをクリアします。
values_clearメソッドでシート名と範囲を指定します。
# シートデータクリア sh.values_clear(f"{sheet_name2}!A1:F300")
numpyもlistにして書き込むだけです。
# numpy書き込み import numpy as np data = np.array([[1,2,3],[1,2,3],[1,2,3]]) wks.update('A1:C3', data.tolist())
pandasの書き込み
pandasもDavis.csvを読み込んで書き込んでいきます。
こちらもやることは同じで、listにして書き込みますが、DataFrameのcolumnsとvaluesを連結して書き込んでいます。
# pandas書き込み import pandas as pd df = pd.read_csv(csv_file_name).fillna('') # 列名とデータを連結して書き込み wks.update([df.columns.values.tolist()] + df.values.tolist())
スプレッドシートの読み込み
スプレッドシートから読み込む方法を紹介します。
セルから読み込み
単一、複数セルから読み込んでいきます。
wks = sh.worksheet(sheet_name1) # 単一セル val1 = wks.acell('A1').value val2 = wks.cell(1, 2).value print(val1, val2) # 複数セル list_data = wks.get('A2:B3') print(list_data)
1 2 [['1', '2'], ['3', '4']]
sheet_name1='シート1'を読み込んでから、先ほど書き込んだデータを読み込んでいます。
単一のセルはacell,cellで対象のセルを指定して、valueで値をとっています。
複数の場合はgetメソッドで、セルの範囲を指定します。
シートから全部から読み込み
シート全体を読み込んで、numpyやpandasのDataFrameに入れていきます。
シートはsheet_name2='csv_sheet'を読み込みます。
pandasの時はget_all_recordsメソッドを使います。
# pandas wks = sh.worksheet(sheet_name2) df = pd.DataFrame(wks.get_all_records())
numpyの時はget_all_valuesメソッドを使います。
# numpy wks = sh.worksheet(sheet_name2) array = np.array(wks.get_all_values())
簡単ですね!!
手軽に使えるので、ビジネスで使っている方もいるのではないでしょうか?
毎日、人が処理していることがあれば、pythonで自動化してみましょう!
他の活用方法は「python 活用 できることまとめ」も参考にしてください。
Pythonスキルが身に付いたら、ぜひスキルを生かして稼いでいきましょう!