Fähigkeit zur Datenanalyse
Übersicht
Diese Fähigkeit analysiert vom Benutzer hochgeladene Excel-/CSV-Dateien unter Verwendung von DuckDB – einer prozessinternen Analyse-SQL-Engine. Sie unterstützt Schemaüberprüfung, SQL-basierte Abfragen, statistische Zusammenfassungen und den Export von Ergebnissen – alles über ein einzelnes Python-Skript.
Kernfähigkeiten
- Überprüfung der Excel-/CSV-Dateistruktur (Blätter, Spalten, Typen, Zeilenanzahlen)
- Ausführung beliebiger SQL-Abfragen gegen hochgeladene Daten
- Generierung statistischer Zusammenfassungen (Mittelwert, Median, Standardabweichung, Perzentile, Nullwerte)
- Unterstützung mehrblättriger Excel-Arbeitsmappen (jedes Blatt wird zu einer Tabelle)
- Export von Abfrageergebnissen nach CSV, JSON oder Markdown
- Effiziente Verarbeitung großer Dateien mit DuckDBs spaltenorientierter Engine
Arbeitsablauf
Schritt 1: Anforderungen verstehen
Wenn ein Benutzer Datendateien hochlädt und eine Analyse anfordert, identifizieren Sie:
- Dateispeicherort: Pfad(e) zu hochgeladenen Excel-/CSV-Dateien unter
/mnt/user-data/uploads/ - Analyseziel: Welche Erkenntnisse der Benutzer wünscht (Zusammenfassung, Filtern, Aggregation, Vergleich usw.)
- Ausgabeformat: Wie die Ergebnisse präsentiert werden sollen (Tabelle, CSV-Export, JSON usw.)
- Sie müssen nicht den Ordner unter
/mnt/user-dataüberprüfen
Schritt 2: Dateistruktur überprüfen
Überprüfen Sie zuerst die hochgeladene Datei, um ihr Schema zu verstehen:
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/data.xlsx \
--action inspect
Dies gibt zurück:
- Blattnamen (bei Excel) oder Dateinamen (bei CSV)
- Spaltennamen, Datentypen und Anzahl der Nicht-Null-Werte
- Zeilenanzahl pro Blatt/Datei
- Beispieldaten (erste 5 Zeilen)
Schritt 3: Analyse durchführen
Basierend auf dem Schema erstellen Sie SQL-Abfragen, um die Fragen des Benutzers zu beantworten.
SQL-Abfrage ausführen
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/data.xlsx \
--action query \
--sql "SELECT category, COUNT(*) as count, AVG(amount) as avg_amount FROM Sheet1 GROUP BY category ORDER BY count DESC"
Statistische Zusammenfassung generieren
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/data.xlsx \
--action summary \
--table Sheet1
Dies gibt für jede numerische Spalte zurück: Anzahl, Mittelwert, Standardabweichung, Min, 25%, 50%, 75%, Max, Nullwert-Anzahl. Für Zeichenfolgenspalten: Anzahl, eindeutige Werte, häufigster Wert, Häufigkeit, Nullwert-Anzahl.
Ergebnisse exportieren
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/data.xlsx \
--action query \
--sql "SELECT * FROM Sheet1 WHERE amount > 1000" \
--output-file /mnt/user-data/outputs/filtered-results.csv
Unterstützte Ausgabeformate (automatisch anhand der Erweiterung erkannt):
.csv— Kommagetrennte Werte.json— JSON-Array von Datensätzen.md— Markdown-Tabelle
Parameter
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
--files | Ja | Leerzeichengetrennte Pfade zu Excel-/CSV-Dateien |
--action | Ja | Einer von: inspect, query, summary |
--sql | Für query | Auszuführende SQL-Abfrage |
--table | Für summary | Name der Tabelle/des Blatts für die Zusammenfassung |
--output-file | Nein | Pfad zum Export der Ergebnisse (CSV/JSON/MD) |
[!HINWEIS] Lesen Sie NICHT die Python-Datei, sondern rufen Sie sie einfach mit den Parametern auf.
Regeln zur Tabellenbenennung
- Excel-Dateien: Jedes Blatt wird zu einer Tabelle, die nach dem Blatt benannt ist (z. B.
Sheet1,Sales,Revenue) - CSV-Dateien: Der Tabellenname ist der Dateiname ohne Erweiterung (z. B.
data.csv→data) - Mehrere Dateien: Alle Tabellen aller Dateien stehen im selben Abfragekontext zur Verfügung, wodurch dateiübergreifende Joins ermöglicht werden
- Sonderzeichen: Blatt-/Dateinamen mit Leerzeichen oder Sonderzeichen werden automatisch bereinigt (Leerzeichen → Unterstriche). Verwenden Sie doppelte Anführungszeichen für Namen, die mit Zahlen beginnen oder Sonderzeichen enthalten, z. B.
"2024_Sales"
Analysemuster
Grundlegende Erkundung
-- Zeilenanzahl
SELECT COUNT(*) FROM Sheet1
-- Einzigartige Werte in einer Spalte
SELECT DISTINCT category FROM Sheet1
-- Werteverteilung
SELECT category, COUNT(*) as cnt FROM Sheet1 GROUP BY category ORDER BY cnt DESC
-- Datumsbereich
SELECT MIN(date_col), MAX(date_col) FROM Sheet1
Aggregation & Gruppierung
-- Umsatz nach Kategorie und Monat
SELECT category, DATE_TRUNC('month', order_date) as month,
SUM(revenue) as total_revenue
FROM Sales
GROUP BY category, month
ORDER BY month, total_revenue DESC
-- Top 10 Kunden nach Ausgaben
SELECT customer_name, SUM(amount) as total_spend
FROM Orders GROUP BY customer_name
ORDER BY total_spend DESC LIMIT 10
Dateiübergreifende Joins
-- Verkäufe mit Kundeninformationen aus verschiedenen Dateien verknüpfen
SELECT s.order_id, s.amount, c.customer_name, c.region
FROM sales s
JOIN customers c ON s.customer_id = c.id
WHERE s.amount > 500
Fensterfunktionen
-- Laufende Summe und Rang
SELECT order_date, amount,
SUM(amount) OVER (ORDER BY order_date) as running_total,
RANK() OVER (ORDER BY amount DESC) as amount_rank
FROM Sales
Pivot-ähnliche Analyse
-- Pivot: monatlicher Umsatz nach Kategorie
SELECT category,
SUM(CASE WHEN MONTH(date) = 1 THEN revenue END) as Jan,
SUM(CASE WHEN MONTH(date) = 2 THEN revenue END) as Feb,
SUM(CASE WHEN MONTH(date) = 3 THEN revenue END) as Mrz
FROM Sales
GROUP BY category
Vollständiges Beispiel
Benutzer lädt sales_2024.xlsx hoch (mit Blättern: Orders, Products, Customers) und fragt: "Analysieren Sie meine Verkaufsdaten – zeigen Sie die Top-Produkte nach Umsatz und monatliche Trends."
Schritt 1: Datei überprüfen
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/sales_2024.xlsx \
--action inspect
Schritt 2: Top-Produkte nach Umsatz
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/sales_2024.xlsx \
--action query \
--sql "SELECT p.product_name, SUM(o.quantity * o.unit_price) as total_revenue, SUM(o.quantity) as total_units FROM Orders o JOIN Products p ON o.product_id = p.id GROUP BY p.product_name ORDER BY total_revenue DESC LIMIT 10"
Schritt 3: Monatliche Umsatztrends
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/sales_2024.xlsx \
--action query \
--sql "SELECT DATE_TRUNC('month', order_date) as month, SUM(quantity * unit_price) as revenue FROM Orders GROUP BY month ORDER BY month" \
--output-file /mnt/user-data/outputs/monthly-trends.csv
Schritt 4: Statistische Zusammenfassung
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/sales_2024.xlsx \
--action summary \
--table Orders
Präsentieren Sie dem Benutzer die Ergebnisse mit klaren Erklärungen der Erkenntnisse, Trends und umsetzbaren Erkenntnissen.
Mehrdatei-Beispiel
Benutzer lädt orders.csv und customers.xlsx hoch und fragt: "Welche Region hat den höchsten durchschnittlichen Bestellwert?"
python /mnt/skills/public/data-analysis/scripts/analyze.py \
--files /mnt/user-data/uploads/orders.csv /mnt/user-data/uploads/customers.xlsx \
--action query \
--sql "SELECT c.region, AVG(o.amount) as avg_order_value, COUNT(*) as order_count FROM orders o JOIN Customers c ON o.customer_id = c.id GROUP BY c.region ORDER BY avg_order_value DESC"
Ausgabehandhabung
Nach der Analyse:
- Präsentieren Sie Abfrageergebnisse direkt im Gespräch als formatierte Tabellen
- Exportieren Sie bei großen Ergebnissen in eine Datei und teilen Sie sie über das
present_files-Tool - Erklären Sie Ergebnisse immer in einfacher Sprache mit den wichtigsten Erkenntnissen
- Schlagen Sie Folgeanalysen vor, wenn Muster interessant sind
- Bieten Sie an, Ergebnisse zu exportieren, falls der Benutzer sie behalten möchte
Zwischenspeicherung
Das Skript speichert geladene Daten automatisch zwischen, um ein erneutes Parsen von Dateien bei jedem Aufruf zu vermeiden:
- Beim ersten Laden werden Dateien geparst und in einer persistenten DuckDB-Datenbank unter
/mnt/user-data/workspace/.data-analysis-cache/gespeichert - Der Cache-Schlüssel ist ein SHA256-Hash aller Eingabedateiinhalte – wenn sich Dateien ändern, wird ein neuer Cache erstellt
- Nachfolgende Aufrufe mit denselben Dateien verwenden direkt die zwischengespeicherte Datenbank (nahezu sofortiger Start)
- Der Cache ist transparent – es sind keine zusätzlichen Parameter erforderlich
Dies ist besonders nützlich, wenn mehrere Abfragen gegen dieselben Datendateien ausgeführt werden (Überprüfung → Abfrage → Zusammenfassung).
Hinweise
- DuckDB unterstützt vollständiges SQL einschließlich Fensterfunktionen, CTEs, Unterabfragen und erweiterter Aggregationen
- Excel-Datumsspalten werden automatisch geparst; verwenden Sie DuckDB-Datumsfunktionen (
DATE_TRUNC,EXTRACT, usw.) - Bei sehr großen Dateien (100 MB+) verarbeitet DuckDB diese effizient, ohne alles in den Speicher zu laden
- Spaltennamen mit Leerzeichen sind mit doppelten Anführungszeichen zugänglich:
"Spaltenname"