エリアごとにデータフレームに格納するコード
code: python
import pandas as pd
import numpy as np
# データフレームをロード
df = pd.read_csv('your_data.csv')
df.set_index('date', inplace=True)
# 手順 1: データフレームを35-65パーセンタイルで抽出
# 手順 2: 起算日を設定
start_date = '2010-01-01'
# 手順 3-5: エリアごとの動的ウィンドウと減衰係数を計算
area_counts = df'area'.value_counts() dynamic_windows = (area_counts / area_counts.sum() * (30 - 7) + 7).round().astype(int)
lambdas = (dynamic_windows - 7) / (30 - 7)
# 手順 6-15: エリアごとにインデックスを計算し、結果を格納するデータフレームに追加
result_df = pd.DataFrame()
for area, window, lambda_ in zip(area_counts.index, dynamic_windows, lambdas):
# 手順 6: エリアごとのデータフレームを作成
area_df = df[df'area' == area] # 手順 7: 同じ日付のインデックスでグループ化し、meter_sale_priceの中央値を計算
# 手順 8: インデックスをリセット、新たにdateをインデックスに設定
area_df_median = area_df_median.reset_index()
area_df_median.set_index('date', inplace=True)
# 手順 9: 日付を連続するように補完し、空欄の行は直前のデータを参照
area_df_median = area_df_median.asfreq('D', method='ffill')
# 手順 10: ウィンドウ期間を適用し、移動中央値を計算
# 手順 11: 重みを計算
w_ti = 1 / lambda_
w_si = 1 - w_ti
# 手順 12: 算出したい日のデータを取得
# 手順 13: エリアごとのデータフレームで指数加重移動平均を計算し、インデックスを算出
# 手順 14: エリアごとのデータフレームで直近7日間でのrollingして、最終的なインデックスにする
# 手順 15: エリアごとの時系列データとしてインデックスをまとめる
result_df = result_df.append(area_df_median.reset_index())
# 最終結果を表示
print(result_df)
変更
1. 過去の指数を計算するコード
日にちを指定
計算
2. 現在の指数を計算するコード
エリアを指定してから
全体のwindow計算=>エリアごとwindow決定
エリアのindex計算