Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import numpy as np | |
| def generate_local_data(): | |
| print("Starting localized dataset generation...") | |
| # Load original dataset | |
| try: | |
| df_global = pd.read_csv("dataset_vibe_coder_2026.csv") | |
| except Exception as e: | |
| print(f"Error loading dataset: {e}") | |
| return | |
| # Ensure chronological order | |
| df_global['TANGGAL'] = pd.to_datetime(df_global['TANGGAL']) | |
| df_global = df_global.sort_values('TANGGAL').reset_index(drop=True) | |
| # Add lag features on global level (weather is shared across Jakarta) | |
| 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) | |
| # Holiday checker for major Indonesian holidays in 2026 | |
| def get_holiday_flag(date_obj): | |
| m, d = date_obj.month, date_obj.day | |
| # Specific holiday dates in 2026 | |
| holidays = { | |
| (1, 1), # New Year | |
| (2, 17), # Imlek | |
| (3, 18), # Nyepi | |
| (3, 19), # Eid al-Fitr Day 1 | |
| (3, 20), # Eid al-Fitr Day 2 | |
| (4, 3), # Good Friday | |
| (5, 1), # Labor Day | |
| (5, 14), # Ascension Day | |
| (5, 27), # Eid al-Adha Day 1 | |
| (5, 28), # Eid al-Adha Day 2 | |
| (5, 31), # Waisak | |
| (6, 16), # Islamic New Year | |
| (8, 17), # Independence Day | |
| (8, 25), # Prophet Birthday | |
| (12, 25) # Christmas | |
| } | |
| # Eid al-Fitr mudik window: March 15 to March 26 | |
| 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'] | |
| # Apply Lebaran mudik population drop factor | |
| # If inside March Lebaran window, drop global base volume by 35% | |
| vol_scale = global_vol | |
| if is_holiday == 1 and row['TANGGAL'].month == 3: | |
| vol_scale = global_vol * 0.65 | |
| # JIS (North Jakarta) | |
| # Base volume: ~120 tons average | |
| jis_vol = vol_scale * (120.0 / 7700.0) | |
| # Event spikes at Stadium | |
| if ada_event == 1: | |
| jis_vol += crowd_scale * 15.0 | |
| # Weekend recreation factor | |
| 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 (Central/South) | |
| # Base volume: ~85 tons average | |
| gbk_vol = vol_scale * (85.0 / 7700.0) | |
| # Event spikes at Stadium | |
| if ada_event == 1: | |
| gbk_vol += crowd_scale * 12.0 | |
| # Weekend public sports factor | |
| 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 | |
| }) | |
| # Pasar Senen (Central) | |
| # Base volume: ~45 tons average | |
| senen_vol = vol_scale * (45.0 / 7700.0) | |
| # Weekday market commerce factor | |
| 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 | |
| }) | |
| # Gang Sempit Tambora (West) | |
| # Base volume: ~8.5 tons average | |
| tambora_vol = vol_scale * (8.5 / 7700.0) | |
| # Hujan block factor (heavy rain delays alley collection) | |
| 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() | |