目次
3.2 データの読み取り後、データの前に指定された日付 (タイムスタンプ) インデックスを使用します。
1. 説明
ビットコインデータからローソク足チャートを取得する予定です。これは、csv ファイルをロードした後に必要なデータフレームを選択するコードです。しかし、mplfinanceで表示すると必ず失敗するので、問題を解決したところ、pandasのdataFrameのタイムスタンプをインデックスにどう指定するかが問題であると結論づけました。問題を解いた後にメモを書きます。
次のプロンプトが表示されます。
data.index が DatetimeIndex であることを期待しますか?
2. プログラムコードとエラーの説明
データコードの読み取り:
df['Date'] = pd.to_datetime(df['Date'])
start_date = '2016-02-27'
end_date = '2021-02-27'
mask = (df['Date'] >= start_date) & (df['Date'] <= end_date)
df = df.loc[mask]
df
次に、以下に示すようにローソク足チャートを作成するコードを入力しました。
import matplotlib.pyplot as plt
! pip install --upgrade mplfinance
import mplfinance as mpf
import matplotlib.dates as mpl_dates
mpf.plot(df, type = 'candle', style = 'charles',
title = 'Bitcoin Price',
ylabel = 'Price (USD$)',
volume = True,
ylabel_lower = 'Shares \nTraded',
mav = (3,6,9),
savefig = 'chart-mplfinance.png')
コードを実行すると、次のエラー メッセージが表示されます。
「TypeError: data.index が DatetimeIndex であると予想されます」。
3. 合理的な提案
データフレームにデータフレーム インデックスとして pandas.DatetimeIndex が含まれていることを確認する簡単な方法が 2 つあります。
3.1 データ読み込み時のインデックス指定
-
read_csv() を呼び出すときは、インデックスに使用する列 (日付/日時を含む列である必要があります) を指定し、kwarg parse_dates=True を設定します。
これにより、日時列 (通常は CSV ファイル内の文字列) が DatetimeIndex オブジェクトに自動的に変換され、インデックスとして設定されます。
これは、mplfinance リポジトリの例で確認できます。たとえば、ここをクリックすると、「基本的な使用法を表示」で read_csv() を呼び出すときに表示されます。
Index_col=0、parse_dates=True。(事件アドレス)
3.2 データの読み取り後、データの前に指定された日付 (タイムスタンプ) インデックスを使用します。
pandas.DatetimeIndex() コンストラクターを使用します。たとえば、上記のエラー コードの代わりに、
df['Date'] = pd.to_datetime(df['Date'])
df.index = pd.DatetimeIndex(df['Date'])
注: データフレームに DatetimeIndex が設定されたら、コードの次の部分でマスクを使用する必要はなく、次のように単純にスライスできます。
start_date = '2016-02-27'
end_date = '2021-02-27'
df = df.loc[start_date:end_date]