見出し画像

[Python]メルカリのビットコイン取引結果csvファイルを取り込みグラフで表示




前回VB.netでGridにcsvを表示しました
Pythonならもっと簡単に表示できるのでは?と思い書いてみたところ先にできてしまったので今回はPythonの記事になります。

環境

  • Windows 10 Version 21H1

  • .NET Framework 4.8.09037

  • Visual Studio 2022 Version 17.1.4

コード

import pandas as pd
import matplotlib.pyplot as plt

# 列名を17にしている。その理由はフッターが17行目にありその場所の列名を設定しないとpandasがcsv読み取りエラーになってしまう
col_names = ['col_{}'.format(i) for i in range(17)]

df = pd.read_csv(R'C:\csv格納フォルダ\202310.csv', names=col_names)

df.columns = ['取引日時','取引種別','取引形態','通貨ペア','増加通貨名','増加数量','減少通貨名','減少数量','約定金額','約定価格','手数料通貨','手数料数量','登録番号','社名','備考','備考1','備考2']
df = df[df['増加通貨名'].isin(["BTC"])]
df['増加数量'] = df['増加数量'].astype(float)
df['減少数量'] = df['減少数量'].astype(float)
df['約定金額'] = df['約定金額'].astype(int)

fig, ax1 = plt.subplots( )
plt.title('bitcoin')
plt.xticks(rotation= 90)
ax1.plot(df['取引日時'],df['増加数量'],"brown")
ax1.set_ylabel('増加数量', fontsize = 18, fontname = 'MS Gothic')

ax2 = ax1.twinx()
ax3 = ax1.twinx()

ax2.plot(df['取引日時'],df['減少数量'] ,"red")
ax2.set_ylabel('減少数量', fontsize = 18, fontname = 'MS Gothic')

ax3.plot(df['取引日時'],df['約定金額'] ,"green")
ax3.set_ylabel('約定金額', fontsize = 18, fontname = 'MS Gothic')
ax3.spines["right"].set_position(("axes", 1.2))

ax1.set_xlabel('取引日時', fontsize = 18, fontname = 'MS Gothic')
plt.show()
print(df.head(80))

実行



グラフが表示されますが下が見切れているので矢印のアイコンを押下し、bottomを調整します

取引日時の文字まで表示できました

解説

pandasとmatplotlib.pyplotをインポートします。

import pandas as pd
import matplotlib.pyplot as plt

カラムをcsvの列数に合わせて仮の列名を設定

# 列名を17にしている。その理由はフッターが17行目にありその場所の列名を設定しないとpandasがcsv読み取りエラーになってしまう
col_names = ['col_{}'.format(i) for i in range(17)]

dfにはパスで指定したcsvを取得する
パスの前のRでプレーンテキストとして読み込む
「/」はエスケープ文字
read_csvのnamesは列名の指定に使用するリストを渡している

df = pd.read_csv(R'C:\csv格納フォルダ\202310.csv', names=col_names)

csvの配列の名前を変更します。
グラフに表示する条件として増加数量にBTCが含まれている行をdfへ格納
グラフで使用する増加数量、減少数量、約定金額を配列に格納

df.columns = ['取引日時','取引種別','取引形態','通貨ペア','増加通貨名','増加数量','減少通貨名','減少数量','約定金額','約定価格','手数料通貨','手数料数量','登録番号','社名','備考','備考1','備考2']
df = df[df['増加通貨名'].isin(["BTC"])]
df['増加数量'] = df['増加数量'].astype(float)
df['減少数量'] = df['減少数量'].astype(float)
df['約定金額'] = df['約定金額'].astype(int)

1行目 FigureとAxesを同時に生成できます。
2行目 タイトルを追加
3行目 xラベルを90°回転
4行目 x軸:取引日時、y軸:増加数量、茶色で描画
5行目 y軸ラベル増加数量のフォント、フォントサイズ変更
7行目 第二軸(右側のy軸)を追加
8行目 第二軸(右側のy軸)を追加

fig, ax1 = plt.subplots( )
plt.title('bitcoin')
plt.xticks(rotation= 90)
ax1.plot(df['取引日時'],df['増加数量'],"brown")
ax1.set_ylabel('増加数量', fontsize = 18, fontname = 'MS Gothic')

ax2 = ax1.twinx()
ax3 = ax1.twinx()

ax2.plot(df['取引日時'],df['減少数量'] ,"red")
ax2.set_ylabel('減少数量', fontsize = 18, fontname = 'MS Gothic')

ax3.plot(df['取引日時'],df['約定金額'] ,"green")
ax3.set_ylabel('約定金額', fontsize = 18, fontname = 'MS Gothic')
ax3.spines["right"].set_position(("axes", 1.2))

ax1.set_xlabel('取引日時', fontsize = 18, fontname = 'MS Gothic')
plt.show()
print(df.head(80))

あとがき

とりあえずグラフ表示ができた
体感Pythonの方が書きやすかった
今後はグラフを3D表示にしたり、グラフの表示内容を有意義なものにしたい

参考文献

Matplotlib で X 軸の目盛りラベルテキストを回転させる方法 | Delft スタック (delftstack.com)

matplotlibで、2軸、3軸でグラフを描画する #Python3 - Qiita

Pandas|文字列から数値への変換 | Pyhoo(パイフー)

この記事が参加している募集

仕事について話そう

仕事のコツ

with 日本経済新聞

この記事が気に入ったらサポートをしてみませんか?