C#, Python, Web開発

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

Python 三菱UFJの投資信託CSVを整形

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

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

対象商品

分配金が出ている 日経平均高配当利回り株ファンド を選びました。

eMAXIS Slim オルカン、eMAXIS Slim S&P500 などのCSVは同じ形式でした。

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

加工前のCSV

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

日経平均高配当利回り株ファンド
基準日,基準価額(円),基準価額(分配金再投資)(円),分配金(税引前)(円),純資産総額(億円)
2018/11/09,9974,9974,,1.99
2018/11/12,10019,10019,,2.00
・・省略・・
2019/06/14,9250,9250,,3.90
2019/06/17,9048,9208,160,3.99
2019/06/18,8982,9140,,4.02

1行目がファンド名なので読み飛ばします。

2019/06/17 が決算日で分配金ありです。決算日以外は分配金が空なので、0埋めをしていきます。

加工後のCSV

Date,Close,Dividends
2018-11-09,9974.0,0.0
2018-11-12,10019.0,0.0
・・省略・・
2019-06-14,9250.0,0.0
2019-06-17,9048.0,160.0
2019-06-18,8982.0,0.0

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

基準日 Date
基準価額(円) Close
分配金(税引前)(円) Dividends

コード例

import pandas as pd

def main():
  # 運用会社の投信コード
  code = "253439"
  # CSVの読込・列名変更
  df = pd.read_csv(
    f"{code}.csv", encoding="cp932", skiprows=1,
    usecols=["基準日", "基準価額(円)", "分配金(税引前)(円)"]
  )
  df.columns = ["Date", "Close", "Dividends"]
  # 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"].fillna(0).astype(float)
  # CSVに出力
  df.to_csv(
    f"{code}-cleaned.csv", encoding="utf-8",
    date_format="%Y-%m-%d"
  )

if __name__ == "__main__":
  main()

以下の処理は、独自のアプリ向け要素が強いです。

  • 日付をDatetimeIndexに変換
  • 念のため昇順にソート
  • 基準価額の型変換
  • 分配金の0埋めと型変換

あとは、欠損値のチェックなどをしても良いのかもしれません。

CSVのダウンロード方法

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

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