C#, Python, Web開発

プログラミングやデータ分析のことなどを書いています。

Python 大和AMの投資信託CSVを整形

Pythonを使って、投資信託の日次CSVをフォーマットしていきます。

今回は、大和アセットマネジメントの投資信託を対象としています。

対象商品

分配金が出ている ダイワ日本好配当株ファンド を選びました。

iFreeNEXT FANG+、USテック20 などのCSVは同じ形式でした。

※ 全ての商品のCSVは確認できていません。

加工前のCSV

CSVのエンコーディングは Shift_JIS か Windows-31J(CP932)です。

基準日,基準価額,前日比,純資産総額,直近決算日,直近分配金,分配金再投資基準価額
20050720,10017.00,0,52203998207,00000000,0,10017
20050721,9989.00,-28,52493596112,00000000,0,9989
・・省略・・
20051014,11335.00,-94,71325478690,00000000,0,11335
20051017,10097.00,-1238,64071339803,20051017,1200,11297
20051018,10116.00,19,69214253737,20051017,1200,11318
・・省略・・
20060113,11869.00,-23,184467382298,20051017,1200,13280
20060116,10038.00,-1831,156380970730,20060116,1800,13245
20060117,9846.00,-192,166344200231,20060116,1800,12992

20051017 が決算日で分配金ありです。

決算日までは、直近決算日が「00000000」で、直近分配金は「0」です。

直近決算日と直近分配金は、値が変わるまでは直近のデータを引き継ぐようです。20051018 の直近決算日と直近分配金は、20051017 のデータと同じです。

加工後のCSV

Date,Close,Dividends
2005-07-20,10017.0,0.0
2005-07-21,9989.0,0.0
・・省略・・
2005-10-14,11335.0,0.0
2005-10-17,10097.0,1200.0
2005-10-18,10116.0,0.0
・・省略・・
2006-01-13,11869.0,0.0
2006-01-16,10038.0,1800.0
2006-01-17,9846.0,0.0

加工前後の列のマッピングは以下の通りです。

基準日 Date
基準価額 Close
直近分配金 Dividends

分配金は出た日だけ残して、他は0にしています。基準日と直近決算日が等しい場合だけ、その日の分配金を有効にします。

コード例

import pandas as pd
import numpy as np

def main():
  # CSVのファイル名
  csv_name = "code_4709"
  # CSVの読込(文字列比較のために型を指定)
  df = pd.read_csv(
    f"{csv_name}.csv", encoding="cp932", dtype=str,
    usecols=["基準日", "基準価額", "直近決算日", "直近分配金"]
  )
  # 列名変更
  df.columns = ["Date", "Close", "DivDate", "Dividends"]
  # 分配金は出た日だけ残す(他は0埋め)
  df["Dividends"] = np.where(
    df["Date"] == df["DivDate"], df["Dividends"], 0
  )
  # 不要になった列を削除
  df = df.drop(columns=["DivDate"])
  # DatetimeIndexに変換・念のため昇順にソート
  df["Date"] = pd.to_datetime(
    df["Date"], format="%Y%m%d"
  )
  df = df.set_index("Date")
  df = df.sort_index()
  # 型変換・0埋め
  df["Close"] = df["Close"].astype(float)
  df["Dividends"] = df["Dividends"].astype(float)
  # CSVに出力
  df.to_csv(
    f"{csv_name}-cleaned.csv",
    encoding="utf-8", date_format="%Y-%m-%d"
  )

if __name__ == "__main__":
  main()

型変換などの細かいところは、用途次第では不要になると思います。

CSVのダウンロード方法

ブラウザで ファンドのページ を開きます。

下のほうにある「時系列データをダウンロード」をクリックするとダウンロードできます。