expresso_graph

This commit is contained in:
Your Name
2026-03-27 14:03:10 +00:00
parent 38d213fdf4
commit 0b077eea5f
+96
View File
@@ -0,0 +1,96 @@
#!/usr/bin/env python3
import sys
import subprocess
# === AUTO INSTALL ===
def ensure(pkg):
try:
__import__(pkg)
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", pkg])
ensure("pandas")
ensure("matplotlib")
import pandas as pd
import matplotlib.pyplot as plt
# === ARGS ===
if len(sys.argv) < 2:
print("Usage: python graph.py data.csv")
sys.exit(1)
FILE = sys.argv[1]
# === LOAD ===
df = pd.read_csv(FILE)
if "datetime" not in df.columns:
print("Missing datetime column")
sys.exit(1)
df["datetime"] = pd.to_datetime(df["datetime"])
df = df.sort_values("datetime")
# === CHECK REQUIRED COLS ===
required = ["profit", "buy_in", "category"]
for col in required:
if col not in df.columns:
print(f"Missing column: {col}")
sys.exit(1)
# === 1. CUMULATIVE PROFIT ===
df["cum_profit"] = df["profit"].cumsum()
plt.figure()
plt.plot(df["datetime"], df["cum_profit"])
plt.title("Cumulative Profit")
plt.xlabel("Time")
plt.ylabel("€")
plt.xticks(rotation=45)
plt.tight_layout()
# === 2. PROFIT PER GAME (SCATTER) ===
plt.figure()
plt.scatter(range(len(df)), df["profit"])
plt.title("Profit per Game")
plt.xlabel("Game #")
plt.ylabel("€")
plt.tight_layout()
# === 3. ROI BY CATEGORY ===
roi = df.groupby("category").apply(
lambda x: x["profit"].sum() / x["buy_in"].sum()
)
plt.figure()
roi.plot(kind="bar")
plt.title("ROI by Game Type")
plt.xlabel("Category")
plt.ylabel("ROI")
plt.tight_layout()
# === 4. SESSION PERFORMANCE ===
if "session" in df.columns:
session_profit = df.groupby("session")["profit"].sum()
plt.figure()
session_profit.plot(kind="bar")
plt.title("Profit by Session")
plt.xlabel("Session")
plt.ylabel("€")
plt.tight_layout()
# === 5. WIN DISTRIBUTION ===
if "position" in df.columns:
pos_counts = df["position"].value_counts()
plt.figure()
pos_counts.plot(kind="bar")
plt.title("Position Distribution")
plt.xlabel("Position")
plt.ylabel("Count")
plt.tight_layout()
# === SHOW ALL ===
plt.show()