rcmdnk's blog

現場ですぐ使える時系列データ分析~データサイエンティストのための基礎知識~

Raspberry Piから色々Google Sheetsに書き込むことが多くなってきたので、 ちょっと機能をまとめたツール的なものをつくってみました。

tsd2gspread

Pythonのツールで、pipで

$ pip install tsd2gspread

で入れられます。

Google Sheetsに関しては、Pythonではgspread という便利なツールがあって、これを使うと簡単にGoogle SheetsのAPIを使えます。

tsd2gspreadはこのgspreadを使って時系列データを書き込むのに特化したツールです。

gspredをそのまま使っても良かったのですが、別のデータの書き込みに重複部分が増えてきたので まとめました。

使い方

ツールとして使う

まず、Google Sheets APIにアクセス出来るようサービスアカウントを作成してアカウント情報の入った jsonファイルを取得します。

Authentication — gspread 3.7.0 documentation.

これを~/service_account.jsonなどに置いておいて、 以下の様なスクリプトを実行します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import tsd2gspread

tg = tsd2gspread.get(
    service_account='~/service_account.json',
    sheet_name='MySheet',
    create=1,
    worksheet_name='MyWork',
    columns='foo,bar,
    share='[email protected]')

# Make function to get data
def get_data():
    foo = 1
    bar = 2
    return (foo, bar)

# Set data getter
tg.get_data = get_data

# Write Time Series Data to Google Sheets
tg.write()

これで、 MySheetという名前で以下の様な内容を持った ワークシート名がMyWorkのSheetsが出来ます。

datetime foo bar
2021-01-02 03:04:05 1 2

あとはtg.write()を実行するたびに、その実行時間と値が書き込まれていきます。

実際に使う際には、このget_data関数を適時必要なものにして渡して、 データを取得したいタイミングでtg.write()を実行すればOK。

この例ではSheetsがない場合には作成して書き込みを行っていますが、 その場合はサービスアカウントがオーナーとなってしまい、 そのアカウントを作ったユーザー自体がアクセス権限を持ってない状態で作られるので、 shareで自分のアカウントを指定して自分がアクセスできるようにしてください。

sheet_name='MySheet',

の代わりに既存のSheetsのURLをsheet_urlで指定したり Key(URLの中にあるランダムな文字列)をsheet_keyで指定することも出来ます。

この場合はSheets側で共有から、上で取得したサービスアカウントファイルの中にある client_emailの値に対して編集権限で共有をしておく必要があります。

指定の名前のSheetsがすでにあり、共有設定されていれば上のように名前で指定しても 既存のファイルに書き込まれます。

親クラスとして使う

Tsd2Gspreadというクラスがあるので、それを継承する形で使うことも出来ます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from tsd2gspread import Tsd2Gspread

class MyClass(Tsd2Gspread):
    def get_data(self):
        foo = 1
        bar = 2
        return (foo, bar)

tg = MyClass(
    service_account='~/service_account.json',
    sheet_name='MySheet',
    create=1,
    worksheet_name='MyWork',
    columns='foo,bar,
    share='[email protected]')

# Write Time Series Data to Google Sheets
tg.write()

基本的に定義すべきな関数はget_dataで、 ここで書き込むべき変数を配列なりタプルなりで返す様にします。

これでそのクラスのインスタンスを作ってwriteしてあげれば書き込めます。

主なパラメーターなど

tsd2gspread.getなりTsd2gspreadに渡せるパラメーターについて。

  • sheet_name, sheet_url, sheet_key: Sheetsを名前かURLかSheetsのKeyで指定できます。新たに作る場合にはsheet_nameのみが使えます。
  • columns: 最初にSheetsを新たに作成する場合にはcolumns,で分けたカラム名を渡すことで カラム名を1行目に書き込むことが出来ます。
  • timedelta: デフォルトではUTCの時間を書き込みます。これを日本時間に変更したい場合にはtimedelta=9などとしてUTCとの差を入れる必要があります。

他にも色々とパラメーターはありますが、これらをconfig_fileというパラメーターにファイルを渡すことでまとめて渡す事もできます。 config_fileの中身は

1
2
3
sheet_name=MySheet
columns=foo,bar
...

みたいにOPTION=VALUEの様に書いておきます。

その他詳細はREADMEで。

Sponsored Links
Sponsored Links

« シャープCOCORO AIRとGoogle Homeの連携 Vieb: Electron製Vimライクな操作が出来るブラウザ »