C#, Python, Web開発

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

Python 野村AMの投資信託CSVを整形

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

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

対象商品

分配金が出ている 野村世界業種別投資シリーズ(世界半導体株投資) を選びました。

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

加工前のCSV

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

野村世界業種別投資シリーズ(世界半導体株投資)
基準日,基準価額(円),純資産総額(億円),分配金税引前(円)
2009年8月27日,10000,39.9,-
2009年8月28日,10042,40.1,-
・・省略・・
2010年6月25日,10395,19.3,-
2010年6月28日,10207,19.0,40
2010年6月29日,10240,19.1,-

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

2010年6月28日が分配金ありです。分配金なしはハイフンなので、0に置換していきます。

加工後のCSV

Date,Close,Dividends
2009-08-27,10000.0,0.0
2009-08-28,10042.0,0.0
・・省略・・
2010-06-25,10395.0,0.0
2010-06-28,10207.0,40.0
2010-06-29,10240.0,0.0

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

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

コード例

import pandas as pd

def main():
  # CSVのファイル名
  csv_name = "140471D"
  # CSVの読込・列名変更
  df = pd.read_csv(
    f"{csv_name}.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"].replace(
    "-", "0"
  ).astype(float)
  # CSVに出力
  df.to_csv(
    f"{csv_name}-cleaned.csv",
    encoding="utf-8", date_format="%Y-%m-%d"
  )

if __name__ == "__main__":
  main()

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

CSVのダウンロード方法

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

少し下にある、タブ「チャート・分配金実績」をクリックします。

表示が切り替わったら、さらに下の「過去のデータのダウンロード」をクリックします。

これで、CSVがダウンロードできます。