S1D4NG.5KR1P51.404 · BIOHAZARD

00:00:00

//S1D4NG.5KR1P51.404 · BIOHAZARD CLEARANCE·//NO SHARP OBJECTS · NO NARCOTICS · NO WEIRD CARGO·//THE BUZZING MEANS THE LIGHTS ARE HONEST·//YOU HAVE ALWAYS BEEN IN THIS CORRIDOR·//⚠ S1D4NG.5KR1P51.404 — BIOHAZARD ZONE·//⚠ NO SHARP · NO NARCOTICS · NO WEIRD CARGO·
← LAMPIRAN MENULAMPIRAN 12 / 18

S1D4NG.5KR1P51.404 · ANNEX FILE

Lampiran 12. Program python curah hujan 30 menit tanggal 24-25 Maret 2025 di Kabupaten Kudus

//⚠ S1D4NG.5KR1P51.404 — BIOHAZARD ZONE·//⚠ NO SHARP · NO NARCOTICS · NO WEIRD CARGO·//⚠ THE HUM IS LOUDER WHEN YOU NOTICE IT·//⚠ ERROR 404 RECOVERED — STILL WRONG·//⚠ LEVEL 0 · DO NOT TRUST THE CORRIDOR·

Lampiran 12. Program python curah hujan 30 menit tanggal 24-25 Maret 2025 di Kabupaten Kudus

import pandas as pd import matplotlib.pyplot as plt import matplotlib.ticker as mticker import matplotlib.dates as mdates plt.rcParams['font.family'] = 'Arial' plt.rcParams['font.size'] = 11 plt.rcParams['axes.linewidth'] = 0.8 df = pd.read_csv( r'~\Skripsi\20162025g4.areaAvgTimeSeries.GPM_3IMERGHH_07_precipitation.20160101-20251231.110E_6S_110E_6S.csv', skiprows=9, names=['time', 'precipitation'], parse_dates=['time'] ) df = df[df['precipitation'] != -9999.9] df['time_wib'] = df['time'] + pd.Timedelta(hours=7) start_wib = pd.Timestamp('2025-03-24 18:00:00') end_wib = pd.Timestamp('2025-03-25 21:00:00') ev = df[(df['time_wib'] >= start_wib) & (df['time_wib'] <= end_wib)].copy() ev = ev.sort_values('time_wib').reset_index(drop=True) # Konversi rate (mm/jam) -> akumulasi 30 menit: kali 0.5 ev['precip_30m'] = ev['precipitation'] * 0.5 fig, ax = plt.subplots(figsize=(14, 5)) ax.plot(ev['time_wib'], ev['precip_30m'], color='#1a1a2e', linewidth=1.4, zorder=3) # Ambang 1 mm/jam = 0.5 mm/30menit (BMKG: hujan ringan) ax.axhline(y=0.5, color='#e63946', linewidth=1.0, linestyle='--', alpha=0.7, zorder=4) flood_time = pd.Timestamp('2025-03-25 05:00:00') ax.axvline(x=flood_time, color='#d62828', linewidth=1.2, linestyle='--', alpha=0.7, zorder=4) day_boundary = pd.Timestamp('2025-03-25 00:00:00') ax.axvline(x=day_boundary, color='#adb5bd', linewidth=0.6, linestyle=':', alpha=0.5, zorder=1) ax.set_ylabel('Curah Hujan (mm/30 menit)', fontsize=11, fontweight='bold') ax.set_xlabel('Waktu (WIB)', fontsize=11, fontweight='bold') ax.yaxis.set_major_locator(mticker.MultipleLocator(0.5)) ax.yaxis.set_minor_locator(mticker.MultipleLocator(0.25)) ax.set_ylim(0, 3) ax.set_xlim(start_wib, end_wib) ax.xaxis.set_major_locator(mdates.HourLocator(interval=2)) ax.xaxis.set_minor_locator(mdates.HourLocator(interval=1)) ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M\n%d/%m')) plt.setp(ax.xaxis.get_majorticklabels(), fontsize=8) ax.grid(True, axis='y', which='major', linestyle='--', linewidth=0.4, alpha=0.3) ax.grid(True, axis='x', which='major', linestyle='--', linewidth=0.3, alpha=0.15) ax.grid(True, axis='y', which='minor', linestyle=':', linewidth=0.3, alpha=0.15) ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['left'].set_linewidth(0.8) ax.spines['bottom'].set_linewidth(0.8) fig.text(0.5, -0.03, 'Sumber: NASA GPM IMERG Final Run v07 (GPM_3IMERGHH) | Akumulasi 30-menit (rate \u00d7 0.5) | Waktu dalam WIB (UTC+7)\n' 'Koordinat: 110.75\u00b0E\u2013110.98\u00b0E, 6.59\u00b0S\u20136.98\u00b0S', ha='center', fontsize=7.5, color='#868e96', style='italic') plt.tight_layout(rect=[0, 0.06, 1, 1]) out_path = r'~\Skripsi\precipitation_analysis\karakteristik_ch_24_25mar2025_v4_mm30menit.png' plt.savefig(out_path, dpi=300, bbox_inches='tight', facecolor='white') plt.close() print(f'Saved: {out_path}') print(f'Range : {start_wib} s/d {end_wib}') print(f'Peak : {ev["precip_30m"].max():.2f} mm/30menit at {ev.loc[ev["precip_30m"].idxmax(), "time_wib"]}') print(f'Flood marker: {flood_time}') print(f'N points (30-min): {len(ev)}')