Spaces:
Sleeping
Sleeping
Download scripts/fetch_imd_data.py from SeriousSam07/Ritu-AI: direct link, hf CLI and curl.
- Browser
- Download file 4.21 kB
-
https://huggingface.co/spaces/SeriousSam07/Ritu-AI/resolve/main/scripts/fetch_imd_data.py
- Command line
-
hf download hf://spaces/SeriousSam07/Ritu-AI/scripts/fetch_imd_data.py
-
curl -L -o fetch_imd_data.py https://huggingface.co/spaces/SeriousSam07/Ritu-AI/resolve/main/scripts/fetch_imd_data.py
4.21 kB
| import os | |
| import json | |
| import imdlib as imd | |
| import numpy as np | |
| import urllib3 | |
| urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) | |
| CITIES = { | |
| "Mumbai": {"lat": 18.9878, "lon": 72.8364}, | |
| "Pune": {"lat": 18.5204, "lon": 73.8567}, | |
| "Nagpur": {"lat": 21.1458, "lon": 79.0882}, | |
| "Nashik": {"lat": 19.9975, "lon": 73.7898}, | |
| "Chhatrapati Sambhajinagar": {"lat": 19.8762, "lon": 75.3433}, | |
| "Panaji": {"lat": 15.4909, "lon": 73.8278}, | |
| "Margao": {"lat": 15.2736, "lon": 73.9580}, | |
| "Vasco da Gama": {"lat": 15.3973, "lon": 73.8122}, | |
| "Mapusa": {"lat": 15.5937, "lon": 73.8105}, | |
| "Ponda": {"lat": 15.4026, "lon": 74.0156}, | |
| "Bicholim": {"lat": 15.5908, "lon": 73.9525}, | |
| "Curchorem": {"lat": 15.2530, "lon": 74.1165}, | |
| "Sanguem": {"lat": 15.2289, "lon": 74.1539}, | |
| "Canacona": {"lat": 15.0118, "lon": 74.0223}, | |
| "Pernem": {"lat": 15.7187, "lon": 73.7997}, | |
| "Bengaluru": {"lat": 12.9716, "lon": 77.5946}, | |
| "Mysuru": {"lat": 12.2958, "lon": 76.6394}, | |
| "Hubballi": {"lat": 15.3647, "lon": 75.1240}, | |
| "Mangaluru": {"lat": 12.9141, "lon": 74.8560}, | |
| "Belagavi": {"lat": 15.8497, "lon": 74.4977}, | |
| "Kalaburagi": {"lat": 17.3297, "lon": 76.8343}, | |
| "Davanagere": {"lat": 14.4644, "lon": 75.9218}, | |
| "Ballari": {"lat": 15.1394, "lon": 76.9214}, | |
| "Vijayapura": {"lat": 16.8302, "lon": 75.7100}, | |
| "Shivamogga": {"lat": 13.9299, "lon": 75.5681}, | |
| "Tumakuru": {"lat": 13.3392, "lon": 77.1010}, | |
| "Raichur": {"lat": 16.2076, "lon": 77.3463}, | |
| "Bidar": {"lat": 17.9104, "lon": 77.5199}, | |
| "Hosapete": {"lat": 15.2711, "lon": 76.3908}, | |
| "Gadag": {"lat": 15.4297, "lon": 75.6322}, | |
| "Hassan": {"lat": 13.0033, "lon": 76.1004}, | |
| "Udupi": {"lat": 13.3409, "lon": 74.7421}, | |
| "Chitradurga": {"lat": 14.2251, "lon": 76.3980}, | |
| "Kolar": {"lat": 13.1367, "lon": 78.1291}, | |
| "Mandya": {"lat": 12.5218, "lon": 76.8951} | |
| } | |
| def fetch_and_process(): | |
| # 2014 to 2023 (10 complete years) | |
| start_yr = 2014 | |
| end_yr = 2023 | |
| file_dir = './imd_raw_data' | |
| os.makedirs(file_dir, exist_ok=True) | |
| variables = ['tmax', 'tmin', 'rain'] | |
| datasets = {} | |
| for var in variables: | |
| print(f"Downloading {var} from {start_yr} to {end_yr}...") | |
| try: | |
| imd.get_data(var, start_yr, end_yr, fn_format='yearwise', file_dir=file_dir) | |
| data = imd.open_data(var, start_yr, end_yr, 'yearwise', file_dir) | |
| datasets[var] = data.get_xarray() | |
| print(f"Successfully loaded {var} dataset.") | |
| except Exception as e: | |
| print(f"Error processing {var}: {e}") | |
| return | |
| # Extract historical extremes for each city | |
| results = {} | |
| print("Processing historical data for cities...") | |
| for city_name, coords in CITIES.items(): | |
| lat = coords['lat'] | |
| lon = coords['lon'] | |
| city_data = {} | |
| try: | |
| for var in variables: | |
| ds = datasets[var] | |
| # Nearest grid point | |
| ts = ds[var].sel(lat=lat, lon=lon, method='nearest') | |
| # We replace 99.9 (IMD nodata) with NaN | |
| ts = ts.where(ts < 99.9) | |
| if var == 'tmax': | |
| city_data['all_time_max'] = float(ts.max().values) | |
| city_data['avg_max'] = float(ts.mean().values) | |
| elif var == 'tmin': | |
| city_data['all_time_min'] = float(ts.min().values) | |
| elif var == 'rain': | |
| city_data['max_daily_rain'] = float(ts.max().values) | |
| except Exception as e: | |
| print(f"Error calculating stats for {city_name}: {e}") | |
| results[city_name] = city_data | |
| # Save to frontend data directory | |
| out_dir = os.path.join(os.path.dirname(__file__), '..', 'frontend', 'src', 'data') | |
| os.makedirs(out_dir, exist_ok=True) | |
| out_file = os.path.join(out_dir, 'imd_historical_baseline.json') | |
| with open(out_file, 'w') as f: | |
| json.dump(results, f, indent=2) | |
| print(f"Successfully saved IMD Historical Baseline to {out_file}") | |
| if __name__ == "__main__": | |
| fetch_and_process() | |