1"""
2CSV analysis: reads all .csv files, produces summary statistics and a report.
3"""
4import os
5import pandas as pd
6
7csv_files = sorted(f for f in os.listdir(".") if f.endswith(".csv"))
8if not csv_files:
9 print("No CSV files found")
10 exit(0)
11
12all_frames = []
13for fname in csv_files:
14 df = pd.read_csv(fname)
15 df["_source"] = fname
16 all_frames.append(df)
17
18combined = pd.concat(all_frames, ignore_index=True)
19
20# summary stats
21report = ["# csv analysis report\n"]
22for fname in csv_files:
23 subset = combined[combined["_source"] == fname]
24 report.append(f"## {fname}")
25 report.append(f"- rows: {len(subset)}")
26 report.append(f"- columns: {', '.join(c for c in subset.columns if c != '_source')}")
27 for col in subset.select_dtypes(include="number").columns:
28 report.append(f"- {col}: sum={subset[col].sum():.2f}, mean={subset[col].mean():.2f}")
29 report.append("")
30
31# pivot table if quantity and product columns exist
32if "product" in combined.columns and "quantity" in combined.columns:
33 pivot = combined.pivot_table(index="product", values="quantity", aggfunc="sum")
34 report.append("## totals by product\n")
35 for product, row in pivot.iterrows():
36 report.append(f"- {product}: {int(row['quantity'])} units")
37 report.append("")
38
39if "product" in combined.columns and "quantity" in combined.columns and "price" in combined.columns:
40 combined["revenue"] = combined["quantity"] * combined["price"]
41 total = combined["revenue"].sum()
42 report.append(f"## total revenue: ${total:,.2f}\n")
43
44with open("report.md", "w") as f:
45 f.write("\n".join(report))
46
47# also export cleaned combined csv
48combined.drop(columns=["_source"]).to_csv("combined.csv", index=False)
49
50print(f"Done: analyzed {len(csv_files)} files, {len(combined)} total rows")