[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表示にしたり、グラフの表示内容を有意義なものにしたい
参考文献
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?