Spaces:
Sleeping
Sleeping
import pandas as pd | |
import numpy as np | |
def simulate_data(n=50, faults=True): | |
np.random.seed(42) | |
sites = { | |
"Hyderabad": (17.385, 78.4867), | |
"Ballari": (15.1394, 76.9214), | |
"Gadwal": (16.232, 77.795), | |
"Kurnool": (15.8281, 78.0373) | |
} | |
data = [] | |
for i in range(n): | |
site = np.random.choice(list(sites.keys())) | |
lat, lon = sites[site] | |
solar = np.round(np.random.uniform(3, 7.5), 2) | |
wind = np.round(np.random.uniform(0.5, 2.0), 2) | |
tilt = np.round(np.random.uniform(0, 15), 1) | |
vib = np.round(np.random.uniform(0.1, 3.0), 2) | |
cam = np.random.choice(["Online", "Offline"], p=[0.85, 0.15]) | |
power_required = np.round(np.random.uniform(1.0, 1.5), 2) | |
total = solar + wind | |
sufficient = "Yes" if total >= power_required else "No" | |
anomaly = [] | |
if faults: | |
if solar < 4.0: anomaly.append("Low Solar") | |
if wind < 0.7: anomaly.append("Low Wind") | |
if tilt > 10: anomaly.append("Tilt Risk") | |
if vib > 2.0: anomaly.append("Vibration Alert") | |
if cam == "Offline": anomaly.append("Camera Offline") | |
if sufficient == "No": anomaly.append("Power Insufficient") | |
alert = "Green" if len(anomaly) == 0 else "Yellow" if len(anomaly) == 1 else "Red" | |
data.append({ | |
"Pole ID": f"Pole_{i+1:03}", | |
"Site": site, | |
"Latitude": lat + np.random.uniform(-0.01, 0.01), | |
"Longitude": lon + np.random.uniform(-0.01, 0.01), | |
"SolarGen(kWh)": solar, | |
"WindGen(kWh)": wind, | |
"Tilt(°)": tilt, | |
"Vibration(g)": vib, | |
"Camera Status": cam, | |
"Power Sufficient": sufficient, | |
"Anomalies": "; ".join(anomaly) if anomaly else "None", | |
"Alert Level": alert | |
}) | |
return pd.DataFrame(data) | |