モーリーのメモ

アプリ開発等(プログラミング、CG作成)、興味を持ったことを実践してまとめるブログです。

モーリーのメモ

FXのヒストリカルデータから指定した期間を抽出する!:Python

【 今回やること! 】

  • FXの1分足のヒストリカルデータ(CSV形式)から指定した期間のデータを抽出して別のCSVファイルに保存します。
    • 実行環境は『Google Colaboratory』を使用します。

 
 
 こちらの記事で、FXのヒストリカルデータを入手しました。

 
 入手したヒストリカルデータは、2005年1月10日 2時31分から現在までの1分足のデータなので、かなり膨大な行数(540万行超)です。ファイルサイズは約275MBあります。
 
 大きすぎて扱いが大変なので、指定した期間のデータを抽出して別のCSVファイルにします。
 
 それでは作業を開始します!

使用環境

 私が使用している環境です。

作業の前提

 今回の作業は、下記の記事の続きです。

 Google ドライブ』の『hst_(日付、例:hst_20191029)』フォルダ内に、ヒストリカルデータのCSVファイルがある状態で作業を始めています。

指定した期間のデータを抽出してCSVファイルに保存する

  1. Google Colaboratory』で『Python 3 の新しいノートブック(または前回のノートブック)』を開いて、『Google ドライブ』をマウントします
  2. 『コードセル』に下記のコードを貼り付けて実行します。

    %%time 
    # ↑セルの処理時間を計算 %%timeはセルの最初に単独で書く
    
    import os # パス結合
    import pandas as pd # pandasデータフレームを使用
    
    # Googleドライブのマイドライブのパス
    mydrive =  '/content/drive/My Drive'
    
    # フォルダ名
    hst_dir = 'hst_20191029'
    
    # 入力ファイル名
    input_csv = 'USDJPY.csv'
    
    # CSVファイルをPandasデータフレームに読み込む
    df = pd.read_csv(os.path.join(mydrive, hst_dir, input_csv))
    
    # DateTime列をdatatime型に変換→インデックスに設定して、元の列は削除する
    df = df.set_index(pd.to_datetime(df['DateTime'])).drop('DateTime', axis=1) 
    
    # 指定した期間のデータを抽出する(参考として指定方法を数パターン書いています)
    #df = df['2019-09-30 0:00' : '2019-09-30 6:00'] # 期間を日時で指定
    #df = df['2019-08' : '2019-09'] # 期間を年月で指定
    #df = df['2019-09-20' : '2019-09-30'] # 期間を日で指定
    #df = df['2019'] # 年で指定
    #df = df['2019-09'] # 年月で指定
    df = df['2019-09-30'] # 年月日で指定
    #df = df[:100] # 先頭からの行数で指定
    #df = df[100:200] # 期間を行数で指定
    
    # 抽出結果の表示
    print('行数:%d' % len(df)) # 行数
    display(df.head(1)) # データの先頭1行を表示
    display(df.tail(1)) # データの末尾頭1行を表示
    
    # 出力ファイル名
    output_csv = 'USDJPY_20190930.csv'
    
    # CSVファイルに保存
    df.to_csv(os.path.join(mydrive, hst_dir, output_csv))
    

    実行すると、抽出したデータの行数、先頭と末尾の行の内容が表示されます。
    抽出したデータは、元のCSVファイルと同じフォルダ内に指定したファイル名で保存されます。
     
    元のデータもすべての日時にデータがあるわけではないので、指定した期間によっては該当するデータがない場合もあります。
     
    今回は以上です。