================================================================================
  Question 23: CSV Data Analysis (Rainfall Dataset)
================================================================================

FULL QUESTION:
Write a program to read a CSV file containing rainfall data with columns:
Date, Station, and Rainfall (mm). Using NumPy, compute:
1. Average rainfall per station
2. Maximum rainfall recorded and the date
3. Standard deviation of rainfall
4. Finally, save the computed results into a new CSV file.
[Use the CSV library.]

SHORT QUESTION:
CSV data processing script computing station averages, peak rainfall, and standard deviation using csv and numpy.

================================================================================
README & SETUP INSTRUCTIONS:
================================================================================
# Question 23: CSV Data Analysis (Rainfall Dataset)

- Prerequisites: Python 3.x, NumPy (pip install numpy).
- Setup: Generates 'rainfall_data.csv' automatically if not present.
- How to Run: python question_23.py
- Expected Behavior: Reads rainfall records, calculates station statistics, standard deviation, peak rainfall, writes 'rainfall_summary.csv', and prints summary.

================================================================================
SOURCE CODE FILES:
================================================================================

1. question_23.py
--------------------------------------------------------------------------------
import csv

sample_data = [
    ["Date", "Station", "Rainfall (mm)"],
    ["2026-07-12", "Station_A", 12.5],
    ["2026-07-12", "Station_B", 4.0],
    ["2026-07-13", "Station_A", 25.1],
    ["2026-07-13", "Station_C", 8.2],
    ["2026-07-14", "Station_B", 15.6],
    ["2026-07-14", "Station_C", 45.2],
    ["2026-07-15", "Station_A", 0.0],
    ["2026-07-15", "Station_B", 8.7]
]

with open("rainfall_data.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerows(sample_data)

print("Sample file 'rainfall_data.csv' created successfully!")

import csv
import numpy as np

dates, stations, rainfall = [], [], []
with open("rainfall_data.csv", "r") as file:
    reader = csv.reader(file)
    next(reader)
    for row in reader:
        if row:
            dates.append(row[0])
            stations.append(row[1])
            rainfall.append(float(row[2]))

np_dates = np.array(dates)
np_stations = np.array(stations)
np_rain = np.array(rainfall)

max_idx = np.argmax(np_rain)

with open("rainfall_summary.csv", "w", newline="") as file:
    writer = csv.writer(file)

    writer.writerow(["Station", "Average Rainfall (mm)"])
    for s in np.unique(np_stations):
        avg = np.mean(np_rain[np_stations == s])
        writer.writerow([s, round(avg, 2)])

    writer.writerow([])
    writer.writerow(["Metric", "Value", "Details"])
    writer.writerow(["Maximum Rainfall", np_rain[max_idx], f"On {np_dates[max_idx]}"])
    writer.writerow(["Standard Deviation", round(np.std(np_rain), 2), "Full Dataset"])

print("Results saved to rainfall_summary.csv")

import csv

with open("rainfall_summary.csv", mode="r", encoding="utf-8") as file:
    reader = csv.reader(file)

    for row in reader:
        if not row:
            continue

        print(" | ".join(row))
--------------------------------------------------------------------------------
