【ライブラリ:Pandasの使い方】PythonBOTで取得したデータをCSVに保存する方法

【ライブラリ:Pandasの使い方】PythonBOTで取得したデータをCSVに保存する方法

仮想通貨の自動トレードPythonBOTの作成講座第3回です。

関連:
第一回 環境構築編
第二回 初級トレードプログラム作成編

今回のPythonBOT作成講座は、メインのトレードBOTから少し離れて、
分析に便利なオプション的な機能を紹介します。

紹介する機能は、データ分析等に役立つライブラリ「Pandas」です。

プログラム稼働時に出力されるデータを任意でCSVファイル等に記録することができます。

Pandasとは?

概要

Pandas(パンダス)は冒頭でも述べたとおり、データ分析等のため、
Pythonプログラムを稼働した際に得たアウトプットをCSVファイル等に記録するライブラリです。

別にパンダは関係ないです。

保存形式はCSVの他、Excelやtxt等があります。

データフレーム(DataFrame)オブジェクトともいいます。
また、記録するだけでなく、CSV等のデータファイルを読み込むことも可能です。

主な用途

今回は、第2回の講座で作成したプログラムを基に紹介します。

関連記事:初歩的な仮想通貨自動トレードPythonBOTを作成しながらプログラミングを学習しよう!

例えば、

  • タイムステップ毎のチャートデータや口座残高を記録する
  • 取引タイミングとその時のMACDの値を記録する

といったことが挙げられます。

Pandasでは、Pythonで出力可能なデータであれば、あらゆる値を記録/読み取りすることができます。

こんな便利なライブラリ、使えるようにしておかない手はないですよね?

Advertisement

Pandasの実装と使用例

では早速Pandasを組み込んでいきましょう。

今回は簡単な使い方ということで、タイムステップ毎のUNIX時刻と終値を記録してみましょう。

他のデータを採取する場合でも、入力を少し変えるだけなので応用は簡単です。

事前処理の記述

まず、冒頭にpandasをimportする記述を追加します。
冒頭文等の意味は第2回の講座を参照ください。

次に、以下を追記します。

これはデータフレーム作成時に使う変数ですが、冒頭の段階では情報取得をしていないため、
‘NONE’を代入しています。

データフレームの作成

CSV作成時にどんなデータを保存するかを設定します。
while True:の直前に追記してください。

最初にデータフレームを定義します。
任意のデータとデータ名を形成することができます。

DataFrame内では、time_dfとclose_dfからデータを取得するよう指定しています。
そして、各々について、UNIXTIMEとCloseという名前を割り当てています。

なお、DataFrameに入れる値は文字列でなくてはなりません。
取得されるデータは数値であるため、これをstr関数を用いて文字列変換します。

str関数とは?
str関数は、数値を文字列に変換する関数です。
Pythonをはじめ、プログラミングにおいてはデータには全て形が存在しています。

例えば、文字列や数値等です。文字列と数値は足し合わせたりすることもできなければ、連結させることもできません。
そのため、場合によっては形を変換してあげる必要があります。
(プログラミング言語によっては自動変換してくれる場合もあります)

イメージとして、「100」と「Hello」が定義された変数を足し合わせて、
100Helloという出力を作ることを考えてみます。

単純に考えればこのようになりますが、エラーになります。

理由は、この場合「Hello」は文字列であり計算できないと判断されるためです。
100Helloに自動でなる言語もありますが、Pythonではなりません。

そこで、str関数が登場するわけです。



このように数値「100」が入った「A」という変数をstrによって文字列に変換します。
これにより、ようやく「100Hello」という計算結果が得られます。

CSVファイルの作成とファイル名の定義

次に以下を追記します。

まず、datanameはファイル名を決めるための変数です。

time.ctimeは年月日を視認しやすい形式で出力しています。
replaceでは、time.ctimeで得られたデータの中に、
ファイル名として使用できない文字が含まれるため、それを使用可能な文字に変換しています。

ここの記述は、ファイル名を決めるだけなので好きなように入力してください。
dataname = ‘あいうえお.csv’とかでも何の問題もありません。

そして、ファイル名確認のためprintしています。

最後に、df.to_csvでCSVファイルを作成します。
datanameは先程入力したファイル名、mode=’a’は行列(DataFrame)から値を取得する命令です。

ループパートの記述

ループパートでやることも殆ど変わりません。
データの記入をタイムステップ毎にさせるだけです。

close = data[:,4]の下に以下の2行を追記します。

data[:,4]は5番目のデータを全部という意味でしたが、
data[-1,X]は、(X+1)番目(UNIXTIME、終値の番地)の最新の値を意味します。

最後に、time.sleep()の直前に以下を追記します。

基本的には先程と同じです。毎回csvに書き込んでね、ということです。
一点異なるのは、df.to_csv内に「header=False」が追記されている点です。

これは、CSVファイルに書き込む際、データがあった場合は上書きしないで追記せよという意味です。
上書きしたら、データ採取になりませんよね。

以上で、入力は完了です。

アウトプットされるもの

.pyファイルと同じ階層に図のようなファイルが保存されます。

中身を空けると・・・

こんな感じに!できてますね。

なお、今回のチャートデータは1時間足のため、UNIXTIMEは1時間毎に更新されます。
終値も当然1時間足ですが、終値表示の特性上、
「最新の値は1時間足としては未確定状態」のため、常に変動します。

プログラム全文

Pandasを追記したプログラム全文を載せておきます。

※ 重複対策のため引用化しています。

まとめ

今回は、データ分析等に役立つPandasを紹介しました。

作成したプログラムはUNIXTIMEと終値のみでしたが、
ここまでくればちょっとした編集で簡単に何でもデータを取ることができます。

必要に応じて改造していってください。

Pythonにはまだまだ役立つライブラリが眠っています。
有用なものは今後も継続して紹介していきます。

【圧倒的におすすめなPython教本】

【スポンサードリンク】