閲覧頂き、ありがとうございます。
matplotlibを用いたグラフ作図に伴う、保管するテーブルデータに関して、アドバイス頂きたいことがあります。
残高推移データを描画する場合の、参照元のテーブル設計に関して、知見を共有頂きたいです。
長文となりますが、お付き合いいただければ幸いです。
現在、matplotlibにて以下のような図の作成を試みています。
毎日発生するデータをCSVからダウンロードし、Pandasで加工し、以下のようなテーブルを作成しております。
(加工後のテーブル名は、「当日の発生数の一覧表」とします。)
データフレーム名:当日の発生数の一覧表
trade_date | product_class | instrument_id | instrument | broker_code | broker_name | item | volume | |
---|---|---|---|---|---|---|---|---|
12 | 20220606 | A | 60018 | A 2206 | 11560 | G | SELL | 181.0 |
38 | 20220606 | A | 90018 | A 2209 | 11560 | G | SELL | 1.0 |
56 | 20220606 | AA | 60019 | AA 2206 | 11560 | G | SELL | 395.0 |
84 | 20220606 | B | 60005 | B 2206 | 11560 | G | SELL | 1895.0 |
103 | 20220606 | B | 90005 | B 2209 | 11560 | G | SELL | 1179.0 |
8282 | 20220531 | A | 60018 | A 2206 | 11560 | G | BUY | 153.0 |
56 | 20220606 | AA | 60019 | AA 2206 | 11560 | G | BUY | 395.0 |
8282 | 20220531 | A | 60018 | A 2206 | 11560 | G | SELL | 153.0 |
8305 | 20220531 | AA | 10019 | AA2206 | 11560 | G | SELL | 8129.0 |
8345 | 20220531 | B | 10005 | BB 2206 | 11560 | G | SELL | 5708.0 |
8638 | 20220531 | A | 60018 | A 2206 | 11560 | G | SELL | 556.0 |
8662 | 20220531 | B | 60005 | B 2206 | 11560 | G | SELL | 5862.0 |
9995 | 20220606 | A | 60018 | A 2206 | 11560 | G | SELL | 50.00 |
9996 | 20220606 | AA | 90018 | AA2209 | 11560 | G | BUY | 150.00 |
当初は、上記のデータフレームを元にして、以下の条件でmatplotlibにて描画しようと考えています。
- 日付ごとに残高数位の棒グラフを作成する。
- 「instrument」毎で棒グラフを積み上げる
- 「SELL」ならマイナス、「BUY」ならプラスで個別に集計を行う
当初、以下のうよなデータフレームを作成し、上記の条件を満たしそうとしたのですが、上手くいきませんでした。
データフレーム名:test
trade_date | instrument | item | volume |
---|---|---|---|
20220531 | A 2206 | BUY | 153.0 |
SELL | -354.5 | ||
AA 2206 | SELL | -812.9 | |
20220606 | A 2206 | SELL | -115.5 |
A 2209 | SELL | -1.0 | |
AA 2206 | BUY | 39.5 | |
SELL | -39.5 | ||
AA 2209 | BUY | 15.0 |
**冷静に考えれば、当日発生データのテーブルと、残高数位のテーブルは、それぞれ別々の目的のテーブルなので、上手くいかないのも当たり前だろうと考えました。
**
そのため、「当日の発生数の一覧」のテーブル以外に、以下の「残高推移」のテーブルを作成しようと考えました。
データフレーム名:残高推移
列1 | 列2 | A 2206 | A 2206 | AA 2206 | AA 2206 | A 2209 | A 2209 | AA 2209 | AA 2209 |
---|---|---|---|---|---|---|---|---|---|
0 | trade_date | BUY | SELL | BUY | SELL | BUY | SELL | BUY | SELL |
1 | 20220530 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 20220531 | 153 | -354.5 | 0 | -812.9 | 0 | 0 | 0 | 0 |
3 | 20220601 | 153 | -354.5 | 0 | -812.90 | 0 | 0 | 0 | 0 |
4 | 20220602 | 153 | -354.5 | 0 | -812.9 | 0 | 0 | 0 | 0 |
5 | 20220603 | 153 | -354.5 | 0 | -812.9 | 0 | 0 | 0 | 0 |
6 | 20220606 | 153 | -470 | 39.5 | -852.4 | 0 | -1 | 15 | 0 |
このテーブルで運用する際に気になることが、 **1行目が右に無限に増えていくということです。 **
※以下のようにカラムが無限に増えていく予定です。
|A 2212|A 2212|A 2303|A 2303|A 2306|A 2306|AA 2207|AA 2207|AA 2208|AA 2208|AA 2209|AA 2209|AA 2210|AA 2210|A 2211|A 2211|AA 2212|AA 2212|AA 2301|AA 2301|~~~~
長文となってしまい恐縮なのですが、ご知見を頂きたのが、
このような仕様になることを諦めて、「instrument」が増える度にテーブルを更新していけばいいか。
という風に思考停止して進めてしまっても問題ないのかなあということです。
そもそも、上記の「残高推移」を使ってmatplotlibで描画するのってナンセンスじゃん?と感じた方もツッコミを頂けると非常に嬉しいです。
個人開発の趣味にようなものなので、まあ仕方ないかとも考えております。
ただ、後々面倒くさいことになるのも嫌なので、もし実際に大量のテーブルデータを扱っている知見のある方がいらっしゃったら、アトバイスいただければと考え、質問を投稿させて頂きました。
見直せるところは見直していきたいです。
以上、よろしくお願い致します。
以下のサンプルデータもご利用ください。
データフレーム名:test
# データフレーム名:test import pandas as pd from io import StringIO import matplotlib.pyplot as plt s = """trade_date,instrument,item,volume 20220531,A 2206,BUY,153.0 ,,SELL,-354.5 ,AA 2206,SELL,-812.9 20220606,A 2206,SELL,-115.5 ,A 2209,SELL,-1.0 ,AA 2206,BUY,39.5 ,,SELL,-39.5 ,AA 2209,BUY,15.0""" df = pd.read_csv(StringIO(s), dtype={'trade_date':str})
テストデータ残高推移
# テストデータ残高推移 import pandas as pd from io import StringIO import matplotlib.pyplot as plt s = """列1,A 2206,A 2206,AA 2206,AA 2206,A 2209,A 2209,AA 2209,AA 2209 trade_date,BUY,SELL,BUY,SELL,BUY,SELL,BUY,SELL 20220530,0,0,0,0,0,0,0,0 20220531,153,-354.5,0,-812.9,0,0,0,0 20220601,153,-354.5,0,-812.90,0,0,0,0 20220602,153,-354.5,0,-812.9,0,0,0,0 20220603,153,-354.5,0,-812.9,0,0,0,0 20220606,153,-470,39.5,-852.4,0,-1,15,0""" df = pd.read_csv(StringIO(s), dtype={'trade_date':str}) df
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。