| import pandas as pd |
| import numpy as np |
|
|
| def generate_local_data(): |
| print("Starting localized dataset generation...") |
| |
| |
| try: |
| df_global = pd.read_csv("dataset_vibe_coder_2026.csv") |
| except Exception as e: |
| print(f"Error loading dataset: {e}") |
| return |
|
|
| |
| df_global['TANGGAL'] = pd.to_datetime(df_global['TANGGAL']) |
| df_global = df_global.sort_values('TANGGAL').reset_index(drop=True) |
|
|
| |
| df_global['Rain_Lag_1'] = df_global['RR'].shift(1).fillna(0.0) |
| df_global['Rain_Lag_2'] = df_global['RR'].shift(2).fillna(0.0) |
|
|
| |
| def get_holiday_flag(date_obj): |
| m, d = date_obj.month, date_obj.day |
| |
| holidays = { |
| (1, 1), |
| (2, 17), |
| (3, 18), |
| (3, 19), |
| (3, 20), |
| (4, 3), |
| (5, 1), |
| (5, 14), |
| (5, 27), |
| (5, 28), |
| (5, 31), |
| (6, 16), |
| (8, 17), |
| (8, 25), |
| (12, 25) |
| } |
| |
| if m == 3 and (15 <= d <= 26): |
| return 1 |
| if (m, d) in holidays: |
| return 1 |
| return 0 |
|
|
| df_global['Is_Holiday'] = df_global['TANGGAL'].apply(get_holiday_flag) |
| df_global['Hari_Dalam_Minggu'] = df_global['TANGGAL'].dt.dayofweek |
| df_global['Bulan'] = df_global['TANGGAL'].dt.month |
|
|
| local_rows = [] |
| for idx, row in df_global.iterrows(): |
| date_str = row['TANGGAL'].strftime("%Y-%m-%d") |
| global_vol = row['Volume_Total_Ton'] |
| rr = row['RR'] |
| rain_lag1 = row['Rain_Lag_1'] |
| rain_lag2 = row['Rain_Lag_2'] |
| is_holiday = row['Is_Holiday'] |
| ada_event = row['Ada_Event'] |
| crowd_scale = row['Crowd_Scale'] |
| hari_ke = row['Hari_Ke'] |
| is_weekend = row['Is_Weekend'] |
| hari_dalam_minggu = row['Hari_Dalam_Minggu'] |
| bulan = row['Bulan'] |
| |
| |
| |
| vol_scale = global_vol |
| if is_holiday == 1 and row['TANGGAL'].month == 3: |
| vol_scale = global_vol * 0.65 |
| |
| |
| |
| jis_vol = vol_scale * (120.0 / 7700.0) |
| |
| if ada_event == 1: |
| jis_vol += crowd_scale * 15.0 |
| |
| if is_weekend == 1: |
| jis_vol *= 1.05 |
| local_rows.append({ |
| 'Tanggal': date_str, 'Location': 'JIS', 'Volume_Ton': jis_vol, |
| 'RR': rr, 'Rain_Lag_1': rain_lag1, 'Rain_Lag_2': rain_lag2, |
| 'Is_Holiday': is_holiday, 'Ada_Event': ada_event, 'Crowd_Scale': crowd_scale, |
| 'Hari_Ke': hari_ke, 'Is_Weekend': is_weekend, 'Hari_Dalam_Minggu': hari_dalam_minggu, 'Bulan': bulan |
| }) |
| |
| |
| |
| gbk_vol = vol_scale * (85.0 / 7700.0) |
| |
| if ada_event == 1: |
| gbk_vol += crowd_scale * 12.0 |
| |
| if is_weekend == 1: |
| gbk_vol *= 1.15 |
| local_rows.append({ |
| 'Tanggal': date_str, 'Location': 'GBK', 'Volume_Ton': gbk_vol, |
| 'RR': rr, 'Rain_Lag_1': rain_lag1, 'Rain_Lag_2': rain_lag2, |
| 'Is_Holiday': is_holiday, 'Ada_Event': ada_event, 'Crowd_Scale': crowd_scale, |
| 'Hari_Ke': hari_ke, 'Is_Weekend': is_weekend, 'Hari_Dalam_Minggu': hari_dalam_minggu, 'Bulan': bulan |
| }) |
| |
| |
| |
| senen_vol = vol_scale * (45.0 / 7700.0) |
| |
| if is_weekend == 0: |
| senen_vol *= 1.10 |
| local_rows.append({ |
| 'Tanggal': date_str, 'Location': 'Pasar Senen', 'Volume_Ton': senen_vol, |
| 'RR': rr, 'Rain_Lag_1': rain_lag1, 'Rain_Lag_2': rain_lag2, |
| 'Is_Holiday': is_holiday, 'Ada_Event': 0, 'Crowd_Scale': 0, |
| 'Hari_Ke': hari_ke, 'Is_Weekend': is_weekend, 'Hari_Dalam_Minggu': hari_dalam_minggu, 'Bulan': bulan |
| }) |
| |
| |
| |
| tambora_vol = vol_scale * (8.5 / 7700.0) |
| |
| if rr > 20: |
| tambora_vol *= 0.75 |
| local_rows.append({ |
| 'Tanggal': date_str, 'Location': 'Gang Sempit Tambora', 'Volume_Ton': tambora_vol, |
| 'RR': rr, 'Rain_Lag_1': rain_lag1, 'Rain_Lag_2': rain_lag2, |
| 'Is_Holiday': is_holiday, 'Ada_Event': 0, 'Crowd_Scale': 0, |
| 'Hari_Ke': hari_ke, 'Is_Weekend': is_weekend, 'Hari_Dalam_Minggu': hari_dalam_minggu, 'Bulan': bulan |
| }) |
|
|
| df_local = pd.DataFrame(local_rows) |
| df_local.to_csv("dataset_local_2026.csv", index=False) |
| print("dataset_local_2026.csv generated successfully with 1460 rows!") |
|
|
| if __name__ == "__main__": |
| generate_local_data() |
|
|