Leitfaden zur Datenanalyse mit PolarenLeitfaden zur Datenanalyse mit Polaren
Bild von Autor | Ideogramm

# Einführung

Wenn Sie neu in der Analyse mit Python sind, Pandas ist normalerweise das, was die meisten Analysten lernen und verwenden. Aber Polare ist tremendous beliebt geworden und ist schneller und effizienter.

Der integrierte Rost erledigt die Datenverarbeitungsaufgaben, die andere Werkzeuge verlangsamen würden. Es ist für Geschwindigkeit, Speichereffizienz und Benutzerfreundlichkeit ausgelegt. In diesem anfängerfreundlichen Artikel werden wir fiktive Café-Store-Daten ausdrehen und sie analysieren, um Polare zu lernen. Klingt interessant? Beginnen wir!

🔗 Hyperlink zum Code auf GitHub

# Polare installieren

Bevor wir in die Analyse von Daten eintauchen, lassen Sie uns die Installationsschritte aus dem Weg räumen. Installieren Sie zuerst Polare:

! pip set up polars numpy

Importieren wir nun die Bibliotheken und Module:

import polars as pl
import numpy as np
from datetime import datetime, timedelta

Wir verwenden pl Als Alias ​​für Polare.

# Erstellen von Beispieldaten

Stellen Sie sich vor, Sie verwalten ein kleines Café, sagen Sie „Bohne dort“ und haben Hunderte von Quittungen und verwandten Daten zur Analyse. Sie möchten verstehen, welche Getränke am besten verkaufen, welche Tage die meisten Einnahmen und verwandte Fragen einbringen. Additionally ja, lass uns anfangen zu codieren! ☕

Um diesen Leitfaden praktisch zu machen, erstellen wir einen realistischen Datensatz für „Bean to Café“. Wir werden Daten generieren, die ein Kleinunternehmer erkennen würde:

# Arrange for constant outcomes
np.random.seed(42)

# Create lifelike espresso store information
def generate_coffee_data():
    n_records = 2000
    # Espresso menu objects with lifelike costs
    menu_items = ('Espresso', 'Cappuccino', 'Latte', 'Americano', 'Mocha', 'Chilly Brew')
    costs = (2.50, 4.00, 4.50, 3.00, 5.00, 3.50)
    price_map = dict(zip(menu_items, costs))

    # Generate dates over 6 months
    start_date = datetime(2023, 6, 1)
    dates = (start_date + timedelta(days=np.random.randint(0, 180))
             for _ in vary(n_records))

    # Randomly choose drinks, then map the right value for every chosen drink
    drinks = np.random.alternative(menu_items, n_records)
    prices_chosen = (price_map(d) for d in drinks)

    information = {
        'date': dates,
        'drink': drinks,
        'value': prices_chosen,
        'amount': np.random.alternative((1, 1, 1, 2, 2, 3), n_records),
        'customer_type': np.random.alternative(('Common', 'New', 'Vacationer'),
                                          n_records, p=(0.5, 0.3, 0.2)),
        'payment_method': np.random.alternative(('Card', 'Money', 'Cell'),
                                           n_records, p=(0.6, 0.2, 0.2)),
        'score': np.random.alternative((2, 3, 4, 5), n_records, p=(0.1, 0.4, 0.4, 0.1))
    }
    return information

# Create our espresso store DataFrame
coffee_data = generate_coffee_data()
df = pl.DataFrame(coffee_data)

Dadurch wird ein Beispieldatensatz mit 2.000 Kaffee -Transaktionen erstellt. Jede Reihe repräsentiert einen Verkauf mit Particulars wie das, was bestellt wurde, wann, wie viel sie gekostet hat und wer es gekauft hat.

# Betrachten Sie Ihre Daten

Bevor Sie Daten analysieren, müssen Sie verstehen, womit Sie arbeiten. Stellen Sie sich das so vor, als würde man sich ein neues Rezept ansehen, bevor Sie mit dem Kochen beginnen:

# Take a peek at your information
print("First 5 transactions:")
print(df.head())

print("nWhat varieties of information do we now have?")
print(df.schema)

print("nHow massive is our dataset?")
print(f"We've {df.peak} transactions and {df.width} columns")

Der head() Die Methode zeigt die ersten Zeilen. Das Schema zeigt an, welche Artwork von Informationen jede Spalte enthält (Zahlen, Textual content, Daten usw.).

First 5 transactions:
form: (5, 7)
┌─────────────────────┬────────────┬───────┬──────────┬───────────────┬────────────────┬────────┐
│ date                ┆ drink      ┆ value ┆ amount ┆ customer_type ┆ payment_method ┆ score │
│ ---                 ┆ ---        ┆ ---   ┆ ---      ┆ ---           ┆ ---            ┆ ---    │
│ datetime(μs)        ┆ str        ┆ f64   ┆ i64      ┆ str           ┆ str            ┆ i64    │
╞═════════════════════╪════════════╪═══════╪══════════╪═══════════════╪════════════════╪════════╡
│ 2023-09-11 00:00:00 ┆ Chilly Brew  ┆ 5.0   ┆ 1        ┆ New           ┆ Money           ┆ 4      │
│ 2023-11-27 00:00:00 ┆ Cappuccino ┆ 4.5   ┆ 1        ┆ New           ┆ Card           ┆ 4      │
│ 2023-09-01 00:00:00 ┆ Espresso   ┆ 4.5   ┆ 1        ┆ Common       ┆ Card           ┆ 3      │
│ 2023-06-15 00:00:00 ┆ Cappuccino ┆ 5.0   ┆ 1        ┆ New           ┆ Card           ┆ 4      │
│ 2023-09-15 00:00:00 ┆ Mocha      ┆ 5.0   ┆ 2        ┆ Common       ┆ Card           ┆ 3      │
└─────────────────────┴────────────┴───────┴──────────┴───────────────┴────────────────┴────────┘

What varieties of information do we now have?
Schema({'date': Datetime(time_unit="us", time_zone=None), 'drink': String, 'value': Float64, 'amount': Int64, 'customer_type': String, 'payment_method': String, 'score': Int64})

How massive is our dataset?
We've 2000 transactions and seven columns

# Hinzufügen neuer Spalten

Lassen Sie uns nun anfangen, geschäftliche Erkenntnisse zu extrahieren. Jeder Besitzer des Coffeeshops möchte seinen Gesamtumsatz professional Transaktion kennen:

# Calculate whole gross sales quantity and add helpful date info
df_enhanced = df.with_columns((
    # Calculate income per transaction
    (pl.col('value') * pl.col('amount')).alias('total_sale'),

    # Extract helpful date elements
    pl.col('date').dt.weekday().alias('day_of_week'),
    pl.col('date').dt.month().alias('month'),
    pl.col('date').dt.hour().alias('hour_of_day')
))

print("Pattern of enhanced information:")
print(df_enhanced.head())

Ausgabe (Ihre genauen Zahlen können variieren):

Pattern of enhanced information:
form: (5, 11)
┌─────────────┬────────────┬───────┬──────────┬───┬────────────┬─────────────┬───────┬─────────────┐
│ date        ┆ drink      ┆ value ┆ amount ┆ … ┆ total_sale ┆ day_of_week ┆ month ┆ hour_of_day │
│ ---         ┆ ---        ┆ ---   ┆ ---      ┆   ┆ ---        ┆ ---         ┆ ---   ┆ ---         │
│ datetime(μs ┆ str        ┆ f64   ┆ i64      ┆   ┆ f64        ┆ i8          ┆ i8    ┆ i8          │
│ )           ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
╞═════════════╪════════════╪═══════╪══════════╪═══╪════════════╪═════════════╪═══════╪═════════════╡
│ 2023-09-11  ┆ Chilly Brew  ┆ 5.0   ┆ 1        ┆ … ┆ 5.0        ┆ 1           ┆ 9     ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
│ 2023-11-27  ┆ Cappuccino ┆ 4.5   ┆ 1        ┆ … ┆ 4.5        ┆ 1           ┆ 11    ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
│ 2023-09-01  ┆ Espresso   ┆ 4.5   ┆ 1        ┆ … ┆ 4.5        ┆ 5           ┆ 9     ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
│ 2023-06-15  ┆ Cappuccino ┆ 5.0   ┆ 1        ┆ … ┆ 5.0        ┆ 4           ┆ 6     ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
│ 2023-09-15  ┆ Mocha      ┆ 5.0   ┆ 2        ┆ … ┆ 10.0       ┆ 5           ┆ 9     ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
└─────────────┴────────────┴───────┴──────────┴───┴────────────┴─────────────┴───────┴─────────────┘

Hier ist, was passiert:

  • with_columns() Fügt unseren Daten neue Spalten hinzu
  • pl.col() bezieht sich auf vorhandene Spalten
  • alias() Gibt unsere neuen Spalten beschreibenden Namen
  • Der dt Accessor extrahiert Teile aus Daten (z. B. nur den Monat von einem vollständigen Datum erhalten)

Stellen Sie sich dies an, als würde man kalkulierte Felder zu einer Tabelle hinzufügen. Wir ändern nicht die Originaldaten und fügen nur weitere Informationen hinzu, mit denen wir arbeiten können.

# Gruppierungsdaten

Beantworten wir jetzt einige interessante Fragen.

// Frage 1: Welche Getränke sind unsere Bestseller?

Diese Code gruppiert alle Transaktionen nach Getränkentyp und berechnet dann die Summen und Durchschnittswerte für jede Gruppe. Es ist so, als würde man alle Quittungen nach Getränkentyp in Stapel sortieren und dann die Summen für jeden Stapel berechnen.

drink_performance = (df_enhanced
    .group_by('drink')
    .agg((
        pl.col('total_sale').sum().alias('total_revenue'),
        pl.col('amount').sum().alias('total_sold'),
        pl.col('score').imply().alias('avg_rating')
    ))
    .type('total_revenue', descending=True)
)

print("Drink efficiency rating:")
print(drink_performance)

Ausgabe:

Drink efficiency rating:
form: (6, 4)
┌────────────┬───────────────┬────────────┬────────────┐
│ drink      ┆ total_revenue ┆ total_sold ┆ avg_rating │
│ ---        ┆ ---           ┆ ---        ┆ ---        │
│ str        ┆ f64           ┆ i64        ┆ f64        │
╞════════════╪═══════════════╪════════════╪════════════╡
│ Americano  ┆ 2242.0        ┆ 595        ┆ 3.476454   │
│ Mocha      ┆ 2204.0        ┆ 591        ┆ 3.492711   │
│ Espresso   ┆ 2119.5        ┆ 570        ┆ 3.514793   │
│ Chilly Brew  ┆ 2035.5        ┆ 556        ┆ 3.475758   │
│ Cappuccino ┆ 1962.5        ┆ 521        ┆ 3.541139   │
│ Latte      ┆ 1949.5        ┆ 514        ┆ 3.528846   │
└────────────┴───────────────┴────────────┴────────────┘

// Frage 2: Wie sehen die täglichen Verkäufe aus?

Lassen Sie uns nun die Anzahl der Transaktionen und die entsprechenden Einnahmen für jeden Wochentag finden.

daily_patterns = (df_enhanced
    .group_by('day_of_week')
    .agg((
        pl.col('total_sale').sum().alias('daily_revenue'),
        pl.len().alias('number_of_transactions')
    ))
    .type('day_of_week')
)

print("Day by day enterprise patterns:")
print(daily_patterns)

Ausgabe:

Day by day enterprise patterns:
form: (7, 3)
┌─────────────┬───────────────┬────────────────────────┐
│ day_of_week ┆ daily_revenue ┆ number_of_transactions │
│ ---         ┆ ---           ┆ ---                    │
│ i8          ┆ f64           ┆ u32                    │
╞═════════════╪═══════════════╪════════════════════════╡
│ 1           ┆ 2061.0        ┆ 324                    │
│ 2           ┆ 1761.0        ┆ 276                    │
│ 3           ┆ 1710.0        ┆ 278                    │
│ 4           ┆ 1784.0        ┆ 288                    │
│ 5           ┆ 1651.5        ┆ 265                    │
│ 6           ┆ 1596.0        ┆ 259                    │
│ 7           ┆ 1949.5        ┆ 310                    │
└─────────────┴───────────────┴────────────────────────┘

# Filterdaten

Finden wir unsere hochwertigen Transaktionen:

# Discover transactions over $10 (a number of objects or costly drinks)
big_orders = (df_enhanced
    .filter(pl.col('total_sale') > 10.0)
    .type('total_sale', descending=True)
)

print(f"We've {big_orders.peak} orders over $10")
print("High 5 largest orders:")
print(big_orders.head())

Ausgabe:

We've 204 orders over $10
High 5 largest orders:
form: (5, 11)
┌─────────────┬────────────┬───────┬──────────┬───┬────────────┬─────────────┬───────┬─────────────┐
│ date        ┆ drink      ┆ value ┆ amount ┆ … ┆ total_sale ┆ day_of_week ┆ month ┆ hour_of_day │
│ ---         ┆ ---        ┆ ---   ┆ ---      ┆   ┆ ---        ┆ ---         ┆ ---   ┆ ---         │
│ datetime(μs ┆ str        ┆ f64   ┆ i64      ┆   ┆ f64        ┆ i8          ┆ i8    ┆ i8          │
│ )           ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
╞═════════════╪════════════╪═══════╪══════════╪═══╪════════════╪═════════════╪═══════╪═════════════╡
│ 2023-07-21  ┆ Cappuccino ┆ 5.0   ┆ 3        ┆ … ┆ 15.0       ┆ 5           ┆ 7     ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
│ 2023-08-02  ┆ Latte      ┆ 5.0   ┆ 3        ┆ … ┆ 15.0       ┆ 3           ┆ 8     ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
│ 2023-07-21  ┆ Cappuccino ┆ 5.0   ┆ 3        ┆ … ┆ 15.0       ┆ 5           ┆ 7     ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
│ 2023-10-08  ┆ Cappuccino ┆ 5.0   ┆ 3        ┆ … ┆ 15.0       ┆ 7           ┆ 10    ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
│ 2023-09-07  ┆ Latte      ┆ 5.0   ┆ 3        ┆ … ┆ 15.0       ┆ 4           ┆ 9     ┆ 0           │
│ 00:00:00    ┆            ┆       ┆          ┆   ┆            ┆             ┆       ┆             │
└─────────────┴────────────┴───────┴──────────┴───┴────────────┴─────────────┴───────┴─────────────┘

# Kundenverhalten analysieren

Schauen wir uns Kundenmuster an:

# Analyze buyer conduct by sort
customer_analysis = (df_enhanced
    .group_by('customer_type')
    .agg((
        pl.col('total_sale').imply().alias('avg_spending'),
        pl.col('total_sale').sum().alias('total_revenue'),
        pl.len().alias('visit_count'),
        pl.col('score').imply().alias('avg_satisfaction')
    ))
    .with_columns((
        # Calculate income per go to
        (pl.col('total_revenue') / pl.col('visit_count')).alias('revenue_per_visit')
    ))
)

print("Buyer conduct evaluation:")
print(customer_analysis)

Ausgabe:

Buyer conduct evaluation:
form: (3, 6)
┌───────────────┬──────────────┬───────────────┬─────────────┬──────────────────┬──────────────────┐
│ customer_type ┆ avg_spending ┆ total_revenue ┆ visit_count ┆ avg_satisfaction ┆ revenue_per_visi │
│ ---           ┆ ---          ┆ ---           ┆ ---         ┆ ---              ┆ t                │
│ str           ┆ f64          ┆ f64           ┆ u32         ┆ f64              ┆ ---              │
│               ┆              ┆               ┆             ┆                  ┆ f64              │
╞═══════════════╪══════════════╪═══════════════╪═════════════╪══════════════════╪══════════════════╡
│ Common       ┆ 6.277832     ┆ 6428.5        ┆ 1024        ┆ 3.499023         ┆ 6.277832         │
│ Vacationer       ┆ 6.185185     ┆ 2505.0        ┆ 405         ┆ 3.518519         ┆ 6.185185         │
│ New           ┆ 6.268827     ┆ 3579.5        ┆ 571         ┆ 3.502627         ┆ 6.268827         │
└───────────────┴──────────────┴───────────────┴─────────────┴──────────────────┴──────────────────┘

# Alles zusammenstellen

Lassen Sie uns eine umfassende Geschäftsübersicht erstellen:

# Create a whole enterprise abstract
business_summary = {
    'total_revenue': df_enhanced('total_sale').sum(),
    'total_transactions': df_enhanced.peak,
    'average_transaction': df_enhanced('total_sale').imply(),
    'best_selling_drink': drink_performance.row(0)(0),  # First row, first column
    'customer_satisfaction': df_enhanced('score').imply()
}

print("n=== BEAN THERE COFFEE SHOP - SUMMARY ===")
for key, worth in business_summary.objects():
    if isinstance(worth, float) and key != 'customer_satisfaction':
        print(f"{key.change('_', ' ').title()}: ${worth:.2f}")
    else:
        print(f"{key.change('_', ' ').title()}: {worth}")

Ausgabe:

=== BEAN THERE COFFEE SHOP - SUMMARY ===
Whole Income: $12513.00
Whole Transactions: 2000
Common Transaction: $6.26
Greatest Promoting Drink: Americano
Buyer Satisfaction: 3.504

# Abschluss

Sie haben gerade eine umfassende Einführung in die Datenanalyse mit Polaren abgeschlossen! Mit unserem Café -Beispiel (ich hoffe) haben Sie gelernt, wie man Roh -Transaktionsdaten in sinnvolle geschäftliche Erkenntnisse verwandelt.

Denken Sie daran, dass die Datenanalyse die Datenanalyse wie das Kochen lernen – Sie beginnen mit grundlegenden Rezepten (wie den Beispielen in diesem Leitfaden) und werden nach und nach besser. Der Schlüssel ist Übung und Neugier.

Wenn Sie das nächste Mal einen Datensatz analysieren, fragen Sie sich:

  • Welche Geschichte erzählt diese Daten?
  • Welche Muster könnten hier versteckt sein?
  • Welche Fragen könnten diese Daten beantworten?

Nutzen Sie dann Ihre neuen Polarsfähigkeiten, um dies herauszufinden. Viel Spaß bei der Analyse!

Bala Priya c ist ein Entwickler und technischer Schriftsteller aus Indien. Sie arbeitet gern an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessensgebiete und Fachgebiete umfassen DevOps, Information Science und natürliche Sprachverarbeitung. Sie liest gerne, schreibt, codieren und Kaffee! Derzeit arbeitet sie daran, ihr Wissen mit der Entwicklergemeinschaft zu lernen und zu teilen, indem sie Tutorials, Anleitungen, Meinungsstücke und vieles mehr autorisiert. Bala erstellt auch ansprechende Ressourcenübersichten und Codierungs -Tutorials.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert