Ένας οδηγός για την ανάλυση δεδομένων στην Python με το DuckDB


Μάθετε πώς να εκτελείτε ανάλυση δεδομένων στην Python χρησιμοποιώντας το DuckDB.

Είστε προγραμματιστής εξοικειωμένος με την SQL και την Python; Εάν ναι, ίσως θελήσετε να αρχίσετε να χρησιμοποιείτε το DuckDB—μια βάση δεδομένων OLAP σε διαδικασία επεξεργασίας—για ανάλυση δεδομένων.

Η SQL είναι η γλώσσα για την αναζήτηση βάσεων δεδομένων και είναι η πιο σημαντική στην εργαλειοθήκη δεδομένων σας. Έτσι, όταν μεταβαίνετε στην Python, πιθανώς κοιτάζετε πάντα τα πάντα—διαβάζοντας δεδομένα από διάφορες πηγές σε ένα πλαίσιο δεδομένων και τα αναλύετε.

Αλλά δεν θα ήταν ωραίο να ρωτήσετε τα πλαίσια δεδομένων pandas καθώς και τις πηγές δεδομένων όπως τα αρχεία CSV και Parquet χρησιμοποιώντας SQL. Το DuckDB σάς επιτρέπει να κάνετε ακριβώς αυτό και πολλά άλλα. Σε αυτό το σεμινάριο, θα μάθουμε πώς να χρησιμοποιούμε το DuckDB στην Python για την ανάλυση δεδομένων. Ας ξεκινήσουμε!

Ρύθμιση του περιβάλλοντος

Για να ξεκινήσετε, δημιουργήστε και ενεργοποιήστε ένα εικονικό περιβάλλον:

$ python3 -m venv v1
$ source v1/bin/activate

Επόμενη εγκατάσταση duckdb:

$ pip3 install duckdb

Επειδή δημιουργούμε επίσης δείγματα δεδομένων για εργασία, θα χρειαστούμε επίσης NumPy και Panda:

$ pip3 install numpy pandas

Ερώτηση δεδομένων με το DuckDB

Με τη γρήγορη εγκατάσταση εκτός λειτουργίας, μπορούμε να προχωρήσουμε στην ανάλυση δεδομένων.

Σημείωση: Είναι σύνηθες να χρησιμοποιείτε συνδέσεις όταν αλληλεπιδράτε με βάσεις δεδομένων. Μπορείτε να χρησιμοποιήσετε το duckdb.connect() για να εργαστείτε τόσο με βάσεις δεδομένων στη μνήμη όσο και με μόνιμη αποθήκευση.

  • Χρησιμοποιώντας το duckdb.connect() για να συνδεθείτε σε μια βάση δεδομένων στη μνήμη που υπάρχει μόνο κατά τη διάρκεια της συνεδρίας. Αυτό είναι κατάλληλο για γρήγορη ανάλυση, ειδικά όταν δεν χρειάζεται να αποθηκεύσετε τα αποτελέσματα μακροπρόθεσμα.
  • Για να διατηρηθούν τα δεδομένα μεταξύ περιόδων σύνδεσης και ερωτημάτων, περάστε μια διαδρομή αρχείου στη συνάρτηση connect() ως εξής: duckdb.connect('my_database.db').

Αλλά θα ρωτήσουμε αρχεία CSV και δεν χρειαζόμαστε απολύτως ένα αντικείμενο σύνδεσης. Επομένως, αυτή ήταν απλώς μια σημείωση για να σας δώσω μια ιδέα όταν αναζητάτε βάσεις δεδομένων.

Δημιουργία δειγμάτων αρχείων CSV

▶️ Μπορείτε να βρείτε τον κωδικό για αυτό το σεμινάριο στο GitHub.

Θα δημιουργήσουμε ένα εικονικό σύνολο δεδομένων πωλήσεων, μερικά αρχεία csv, που περιλαμβάνουν λεπτομέρειες προϊόντων, τιμές, ποσότητες πωλήσεων και τις περιοχές στις οποίες πραγματοποιήθηκαν οι πωλήσεις. Εκτελείται το generate_csv.py στον φάκελο του έργου σας για τη δημιουργία δύο αρχείων CSV: sales_data.csv και product_details.csv.

Όταν εργάζεστε με αρχεία CSV στο DuckDB, μπορείτε να διαβάσετε το αρχείο σε μια σχέση: duckdb.read_csv('your_file.csv') και στη συνέχεια να υποβάλετε ερώτημα. Εναλλακτικά, μπορείτε να εργαστείτε απευθείας με αρχεία και να τα υποβάλετε ως εξής:

import duckdb

duckdb.sql("SELECT * FROM 'sales_data.csv' LIMIT 5").df()

Μπορείτε να αποθηκεύσετε τα αποτελέσματα του ερωτήματος χρησιμοποιώντας df() όπως φαίνεται στο παράδειγμα.

Ας εκτελέσουμε τώρα μερικά (πραγματικά χρήσιμα) ερωτήματα SQL για να αναλύσουμε τα δεδομένα στα αρχεία CSV.

Παράδειγμα ερωτήματος 1: Υπολογισμός συνολικών πωλήσεων ανά περιοχή

Για να κατανοήσουμε ποια περιοχή απέφερε τα περισσότερα έσοδα, μπορούμε να υπολογίσουμε τις συνολικές πωλήσεις ανά περιοχή. Μπορείτε να υπολογίσετε τις συνολικές πωλήσεις πολλαπλασιάζοντας την τιμή κάθε προϊόντος με την ποσότητα που πωλήθηκε και αθροίζοντας την για κάθε περιοχή.

# Calculate total sales (Price * Quantity_Sold) per region
query = """
SELECT Region, SUM(Price * Quantity_Sold) as Total_Sales
FROM 'sales_data.csv'
GROUP BY Region
ORDER BY Total_Sales DESC
"""
total_sales = duckdb.sql(query).df()

print("Total sales per region:")
print(total_sales)

Αυτό το ερώτημα βγάζει:

Total sales per region:
  Region      Total_Sales
0   East	454590.49
1  South	426352.72
2   West	236804.52
3  North	161048.07

Παράδειγμα ερωτήματος 2: Βρείτε τα 5 κορυφαία προϊόντα με τις μεγαλύτερες πωλήσεις

Στη συνέχεια, θέλουμε να προσδιορίσουμε τα 5 κορυφαία προϊόντα με τις μεγαλύτερες πωλήσεις ανά ποσότητα πωλήσεων. Αυτό μπορεί να μας δώσει μια εικόνα για το ποια προϊόντα έχουν την καλύτερη απόδοση σε όλες τις περιοχές.

# Find the top 5 best-selling products by quantity
query = """
SELECT Product_Name, SUM(Quantity_Sold) as Total_Quantity
FROM 'sales_data.csv'
GROUP BY Product_Name
ORDER BY Total_Quantity DESC
LIMIT 5
"""
top_products = duckdb.sql(query).df()

print("Top 5 best-selling products:")
print(top_products)

Αυτό δίνει τα 5 κορυφαία προϊόντα με τις υψηλότερες πωλήσεις:

Top 5 best-selling products:
  Product_Name  Total_Quantity
0   Product_42        	99.0
1   Product_97        	98.0
2   Product_90        	96.0
3   Product_27        	94.0
4   Product_54        	94.0

Παράδειγμα ερωτήματος 3: Υπολογισμός μέσης τιμής ανά περιοχή

Μπορούμε επίσης να υπολογίσουμε τη μέση τιμή των προϊόντων που πωλούνται σε κάθε περιοχή για να εντοπίσουμε τυχόν διαφορές τιμών μεταξύ των περιοχών.

# Calculate the average price of products by region
query = """
SELECT Region, AVG(Price) as Average_Price
FROM 'sales_data.csv'
GROUP BY Region
"""
avg_price_region = duckdb.sql(query).df()

print("Average price per region:")
print(avg_price_region)

Αυτό το ερώτημα υπολογίζει τη μέση τιμή για προϊόντα που πωλούνται σε κάθε περιοχή και επιστρέφει τα αποτελέσματα ομαδοποιημένα ανά περιοχή:

Average price per region:
  Region      Average_Price
0  North 	263.119167
1   East 	288.035625
2   West 	200.139000
3  South 	254.894722

Παράδειγμα ερωτήματος 4: Συνολική ποσότητα που πωλήθηκε ανά περιοχή

Για περαιτέρω ανάλυση των δεδομένων, μπορούμε να υπολογίσουμε τη συνολική ποσότητα των προϊόντων που πωλούνται σε κάθε περιοχή. Αυτό μας βοηθά να δούμε ποιες περιοχές έχουν τη μεγαλύτερη δραστηριότητα πωλήσεων όσον αφορά τον όγκο.

# Calculate total quantity sold by region
query = """
SELECT Region, SUM(Quantity_Sold) as Total_Quantity
FROM 'sales_data.csv'
GROUP BY Region
ORDER BY Total_Quantity DESC
"""
total_quantity_region = duckdb.sql(query).df()

print("Total quantity sold per region:")
print(total_quantity_region)

Αυτό το ερώτημα υπολογίζει τη συνολική ποσότητα που πωλήθηκε ανά περιοχή και ταξινομεί το αποτέλεσμα με φθίνουσα σειρά, δείχνοντας ποια περιοχή πούλησε τα περισσότερα προϊόντα:

Total quantity sold per region:
  Region  Total_Quantity
0  South      	1714.0
1   East      	1577.0
2   West      	1023.0
3  North       	588.0

Παράδειγμα ερωτήματος 4: Σύνδεση CSV

Το DuckDB προσφέρει πολλές προηγμένες δυνατότητες που το καθιστούν ευέλικτο για ανάλυση δεδομένων. Για παράδειγμα, μπορείτε εύκολα να συνδέσετε πολλά αρχεία CSV για πιο σύνθετα ερωτήματα ή να υποβάλετε ερωτήματα για μεγαλύτερα σύνολα δεδομένων που είναι αποθηκευμένα στο δίσκο χωρίς να τα φορτώσετε εξ ολοκλήρου στη μνήμη.

Αυτό το ερώτημα SQL JOIN συνδυάζει δύο αρχεία CSV, τα sales_data.csv και product_details.csv, αντιστοιχίζοντας σειρές που βασίζονται σε μια κοινή στήλη: Product_ID.

query = """
SELECT s.Product_Name, s.Region, s.Price, p.Manufacturer
FROM 'sales_data.csv' s
JOIN 'product_details.csv' p
ON s.Product_ID = p.Product_ID
"""
joined_data = duckdb.sql(query).df()

print(joined_data.head())

Αυτό θα πρέπει να βγάζει:

     Product_Name  Region   Price   Manufacturer
0	Product_1  North  283.08  Manufacturer_4
1	Product_2   East  325.94  Manufacturer_3
2	Product_3   West   39.54  Manufacturer_2
3	Product_4  South  248.82  Manufacturer_4
4	Product_5   East  453.62  Manufacturer_5

Αναδίπλωση

Σε αυτό το σεμινάριο, εξετάσαμε πώς να χρησιμοποιήσετε το DuckDB για ανάλυση δεδομένων με την Python.

Δουλέψαμε με αρχεία CSV. Αλλά μπορείτε να εργαστείτε με αρχεία παρκέ και JSON και σχεσιακές βάσεις δεδομένων με τον ίδιο τρόπο. Ναι, λοιπόν, το DuckDB είναι ένα χρήσιμο εργαλείο για την ανάλυση μεγάλων συνόλων δεδομένων στην Python και είναι μια πολύ χρήσιμη προσθήκη στο κιτ εργαλείων ανάλυσης δεδομένων Python.

Προτείνω να χρησιμοποιήσετε το DuckDB στο επόμενο έργο ανάλυσης δεδομένων. Καλή κωδικοποίηση!