始めてのPython

始めてPythonをやってみたので、備忘録。オッサンなので記憶メモリが全くないのです。乱文すいません。

 

始めてのPython

Stay homeで「何かプログラムを作ろう」と考えて思いついたがのが、「ネットにある投資信託CSV情報を取得して、Spreadsheetに書き込む」

というもの、Pythonとは相性良さそうですし、Spreadsheetは普段から触っているのでグラフの表示等がいろいろ便利かな、と思い企画。

 

Pythonは「米国の金融トレーダにはPythonが必須である」みたいな話もあり、どんなものか興味が湧きました。

ですがプログラムはしない主義だったので、実際は、家のWindows PCに、Pythonインストールし、プログラムを書くエディター選択・インストールからで、予想以上時間がかかり、勉強しながら3日で12時間ぐらいかけました。

 

主な流れは下記です。

1.Google Cloud PlatformでSpreadsheetから書き込みできる様にする(Python関係なし)

2.サイトからCSVをダウンロードするコードを書く

3.ダウンロードしたデータを該当Spreadsheetにアップデートするコードを書く

 

Google Cloud PlatformでSpreadsheetから書き込みできる様にする

Pythonと関係なく、セキュリティの関係上、自分のGoogle DriveやGoogle Spreadsheetに「API経由でのアクセスの設定が必要」

自分のGoogleのアカウントで「Google Cloud Platform」のアカウントも作って、自分のスプレッドシートにアクセスできる様にしなければいけない。

手順1.Google APIコンソールでプロジェクトを作成する

手順2.プロジェクトで「アクセスできるAPI」を許容する

手順3.アクセスを許容するCredentialを発行する。

 

ハマりポイントはアクセス認可だった。

「OAuth 2.0 クライアント ID」と「サービスクライアント」があり、前者はユーザにGoogleアカウントで認証させ、後者はクレデンシャルを抱えたサービスロボット等で使われる。

「OAuth2.0クライアントID」による認証はPythonのサンプルコードも多いが、多数ユーザ向けなので「認証同意画面」を作成しアプリケーション等を登録しなければならず、バッチを動かすのに適さない。

「サービスクライアント方式」の方が良いが、google-api-python-clientやそれをWrapしたPydriveでのcredentialの設定方法が読んでもパッとわからず、結局下記が少し古いが、該当スプレッドシートをアクセスさせるためのクレデンシャルを発行して、クライアントプログラムに埋め込み動かすやり方を参考にしました。

 

サイトからCSVをダウンロードするプログラムを書く

これはPythonをやっている人なら、一瞬でできますよね。

Chromedriverをダウンロードして、SBIバンガードS&P500の基準価格をCSVをダウンロードするサイトを指定すればOKでした。

 

ハマりポイントは、

Windowsのファイルパスにハマる

ダウンロードするとファイル名が「基準価格(1).csv」みたいになるので、ファイルがあったら消す様にするのですが、Windowsのパス指定がややこしい! ファイルパスを”/”にして、SHIFT-JIS(CP932)でエンコードしたら動きました。若干無理やりな感じです。プログラムするのにWindowsって向かないのですね。

ChromedriverとChromeのバージョンが違うと動かない

日本語対応している最新のChromeを使っていたのですが、Chromedriverの方がバージョンが新しくエラーになるということに遭遇しました。バージョンを合わせたら解決。

 

始めて動かしてこの時点でちょっとワクワクしました。

 

ダウンロードしたデータを該当Spreadsheetにアップデートする

CSVをSpreadsheetに書き込む処理です。
CSVをアップロードして、Spreadsheetから参照させる方法でも良いのですが、こちらが先に動いたのでこちらにしました。

 

ハマりポイントは、csvの内容をgspreadsheetに書き込むところでした。ここはサンプルコードが見つけられず。

そのまま二次元配列をコピーできることを期待したいのですが上手く行きませんでした。

解りづらいのですが gspreadのcellは「セルの位置、値」との一次的な配列データ構成でした。ですのでcsv側のトータルのデータ量分for分を回す必要がありました。

 

無事、僕のGoogle Drive上にSBIバンガードS&P500のCSVファイルが引き込めたので、データを加工し、毎日積み立ての損益が出る様グラフを作成しました。

 

感想

手持ちのWindowsにPythonインストールして、Editorインストールして、後はWebでサンプルや情報を漁ってという進め方でしたが、開発環境はタダだし、ネットに情報は落ちてるし、素晴らしいな。と思いました。

動かしながら記事を漁っていると「グラフがこんな簡単に表示できるんだー」とか「機会学習の画像認識ぐらいだったら簡単そうだな。。」とか、

ですが、現実は知らないことだらけで、実際動かすとハマりポイントも多く時間がかかります。

セミリタイアしたら(できないけど)、プログラムを勉強するのも遊ぶのも楽しいだろうな、と思いました。