From b5a6fbc92ad91b55def2bf5679bb726964409213 Mon Sep 17 00:00:00 2001 From: Mika Date: Sun, 5 Jul 2026 02:07:35 +0000 Subject: [PATCH] Add data_analysis/src/data_analysis/cli.py --- data_analysis/src/data_analysis/cli.py | 57 ++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 data_analysis/src/data_analysis/cli.py diff --git a/data_analysis/src/data_analysis/cli.py b/data_analysis/src/data_analysis/cli.py new file mode 100644 index 0000000..95ed40b --- /dev/null +++ b/data_analysis/src/data_analysis/cli.py @@ -0,0 +1,57 @@ +import argparse +import sys +from pathlib import Path + +import pandas as pd + +from data_analysis import core + +def main() -> None: + """CLI entry point for City Breathing Data Analysis. + + Parses input arguments, validates them, and executes the analysis pipeline: + loading CSV data and generating plots. + """ + parser = argparse.ArgumentParser( + description="Analyse und Visualisierung von City Breathing Messdaten.", + ) + parser.add_argument( + "--input", + required=True, + help="Pfad zur Eingabe-CSV-Datei mit Loggerdaten.", + ) + parser.add_argument( + "--output", + required=False, + default="output/plots/overview.png", + help="Pfad zur Ausgabedatei der Visualisierung (PNG).", + ) + + args = parser.parse_args() + + input_path = Path(args.input) + output_path = Path(args.output) + + # Input validation (CI-ready & strict input validation required) + if not input_path.exists() or not input_path.is_file(): + print(f"Fehler: Eingabedatei '{input_path}' existiert nicht oder ist keine Datei.", file=sys.stderr) + sys.exit(1) + + if not input_path.suffix.lower() == ".csv": + print(f"Fehler: Eingabedatei muss eine CSV-Datei sein (gefunden: {input_path.suffix}).", file=sys.stderr) + sys.exit(1) + + # Ensure output directory exists + output_path.parent.mkdir(parents=True, exist_ok=True) + + try: + data: pd.DataFrame = core.load_data(str(input_path)) + core.plot_data(data) + print(f"Analyse abgeschlossen. Visualisierung gespeichert unter '{output_path}'.") + except Exception as exc: # broad for CLI safety + print(f"Fehler bei der Analyse: {exc}", file=sys.stderr) + sys.exit(1) + + +if __name__ == "__main__": + main()