https://www.youtube.com/watch?v=tqottkssys
In diesem Projekt -Thrombough werden wir erforschen So verwenden Sie SQL für die Datenanalyse aus einem digitalen Musikgeschäft und beantworten Sie kritische geschäftliche Fragen. Durch die Zusammenarbeit mit der Chinook-Datenbank-einer Beispieldatenbank, die einen digitalen Medienspeicher ähnelt, der iTunes ähnelt-werden wir zeigen, wie SQL datengeformte Entscheidungen in einem geschäftlichen Kontext vorantreiben kann.
Der Chinook -Datenbank Enthält Informationen zu Künstlern, Alben, Tracks, Kunden und Verkaufsdaten. Durch strategische SQL -Abfragen helfen wir dem Unternehmen dabei, seine Markttrends zu verstehen, die Leistung der Mitarbeiter zu bewerten und Wachstumschancen zu identifizieren. Dieses Projekt zeigt reale SQL-Anwendungen, die Datenanalysten täglich begegnen.
Wir werden Sie durch das Schreiben von immer komplexeren SQL Gemeinsame Tabellenausdrücke (CTEs) und Unterabfragen.
Was du lernen wirst
Am Ende dieses Tutorials werden Sie wissen, wie man:
- Navigieren Sie mit mehreren Tabellen komplexe relationale Datenbankschemata
- Schreiben Sie SQL -Abfragen mit Verbindungen, um Daten über mehrere Tabellen hinweg zu verbinden
- Verwenden Sie gemeinsame Tabellenausdrücke (CTEs), um komplexe Abfragen zu organisieren
- Wenden Sie Unterabfragen an, um Prozentsätze und vergleichende Metriken zu berechnen
- Analysieren Sie Geschäftsdaten, um umsetzbare Erkenntnisse zu liefern
- Verbinden Sie SQL -Abfragen mit Python in Jupyter
Bevor Sie beginnen: Vorabstrukturierung
Folgen Sie diese vorbereitenden Schritte, um das Beste aus diesem Projekt zu machen:
- Überprüfen Sie das Projekt
- Bereiten Sie Ihre Umgebung vor
- Wenn Sie die DataQuest -Plattform verwenden, ist für Sie bereits alles eingerichtet
- Wenn Sie vor Ort arbeiten, benötigen Sie:
- Machen Sie sich mit SQL -Grundlagen vertraut
- Sie sollten mit grundlegenden SQL -Schlüsselwörtern vertraut sein:
SELECT
AnwesendFROM
AnwesendGROUP BY
UndJOIN
- Einige Erfahrungen mit CTEs und Unterabfragen sind hilfreich, aber nicht erforderlich
- Neu im Markdown? Wir empfehlen, die Grundlagen zu lernen: Markdown -Handbuch
- Sie sollten mit grundlegenden SQL -Schlüsselwörtern vertraut sein:
Einrichten Ihrer Umgebung
Bevor wir in unsere Analyse eingehen, lassen Sie uns unsere Jupyter -Umgebung so einrichten, dass sie mit SQL zusammenarbeiten. Wir werden einige SQL Magic -Befehle verwenden, mit denen wir SQL direkt in Jupyter -Zellen schreiben können.
%%seize
%load_ext sql
%sql sqlite:///chinook.db
Erkenntnis lernen: die
%%seize
Magic Command unterdrückt alle Ausgabenachrichten aus der Zelle und hält unser Pocket book sauber. Der%load_ext sql
Der Befehl lädt die SQL -Erweiterung und lädt%sql sqlite:///chinook.db
verbindet uns mit unserer Datenbank.
Überprüfen wir nun unsere Verbindung und untersuchen, welche Tabellen in unserer Datenbank verfügbar sind:
%%sql
SELECT title
FROM sqlite_master
WHERE kind='desk';
Diese spezielle SQLite -Abfrage zeigt uns alle Tabellennamen in unserer Datenbank. Die Chinook -Datenbank enthält 11 Tabellen, die verschiedene Aspekte eines digitalen Musikgeschäfts darstellen:
album
: Albumdetailsartist
: Künstlerinformationenbuyer
: Kundeninformationen mit zugewiesenen Assist -Vertreternworker
: Laden Sie Mitarbeiter, einschließlich Vertriebsunterstützungsagentenstyle
: Musikgenresbill
: Verkaufstransaktioneninvoice_line
: Einzelne Elemente in jeder Rechnungmedia_type
: Formattypen (MP3, AAC usw.)playlist
: Kuratierte Wiedergabelistenplaylist_track
: Tracks in jeder Wiedergabelistemonitor
: Liedinformationen
Verständnis des Datenbankschemas
Die Arbeit mit relationalen Datenbanken bedeutet zu verstehen, wie Tabellen miteinander verbunden sind. Die Chinook -Datenbank verwendet primäre und fremde Schlüssel, um diese Beziehungen aufzubauen. Hier ist eine vereinfachte Sicht auf die wichtigsten Beziehungen zwischen den Tabellen, mit denen wir arbeiten werden:
buyer
ist verbunden mitworker
durchsupport_rep_id
bill
ist verbunden mitbuyer
durchcustomer_id
invoice_line
ist verbunden mitbill
durchinvoice_id
monitor
ist verbunden mitalbum
Anwesendinvoice_line
Undstyle
durchalbum_id
Anwesendtrack_id
Undgenre_id
jeweils
Lassen Sie uns einige unserer wichtigsten Tabellen vorschauen, um die Daten zu verstehen, mit denen wir arbeiten:
%%sql
SELECT *
FROM monitor
LIMIT 5;
Track_id | Title | Album_id | medi_type_id | Genre_id | Komponist | Millisekunden | Bytes | UNIT_PRICE |
---|---|---|---|---|---|---|---|---|
1 | Für diejenigen, die im Begriff sind, zu rocken (wir begrüßen Sie) | 1 | 1 | 1 | Angus Younger, Malcolm Younger, Brian Johnson | 343719 | 11170334 | 0,99 |
2 | Kugeln zur Wand | 2 | 2 | 1 | Keiner | 342562 | 5510424 | 0,99 |
3 | Schnell wie ein Hai | 3 | 2 | 1 | F. Baltes, S. Kaufman, U. Dirkscneider & W. Hoffman | 230619 | 3990994 | 0,99 |
4 | Unruhig und wild | 3 | 2 | 1 | F. Baltes, Ra Smith-Diesel, S. Kaufman, U. Dirkscneider & W. Hoffman | 252051 | 4331779 | 0,99 |
5 | Prinzessin der Morgendämmerung | 3 | 2 | 1 | Deaffy & Ra Smith-Diesel | 375418 | 6290521 | 0,99 |
%%sql
SELECT *
FROM invoice_line
LIMIT 5;
Invoice_line_id | rechnungsberechtigt | Track_id | UNIT_PRICE | Menge |
---|---|---|---|---|
1 | 1 | 1158 | 0,99 | 1 |
2 | 1 | 1159 | 0,99 | 1 |
3 | 1 | 1160 | 0,99 | 1 |
4 | 1 | 1161 | 0,99 | 1 |
5 | 1 | 1162 | 0,99 | 1 |
Lernerkenntnisse: Wenn Sie mit einer neuen Datenbank arbeiten, können Sie Ihre Tabellen immer mit Grenzwert einstellen, um die Datenstruktur zu verstehen, bevor komplexe Abfragen geschrieben werden. Auf diese Weise können Sie Spaltennamen, Datentypen und potenzielle Beziehungen identifizieren, ohne Ihre Ausgabe mit Hunderten von Zeilen zu überfluten.
Geschäftsfrage 1: Auf welche Musikgenres sollten wir uns in den USA konzentrieren?
Der Chinook Retailer möchte verstehen, welche Musikgenres auf dem US -amerikanischen Markt am beliebtesten sind. Diese Informationen helfen ihnen, zu entscheiden, welche neuen Alben zu ihrem Katalog erweitern sollen. Lassen Sie uns eine Anfrage erstellen, um die Popularität der Style durch Verkauf zu analysieren.
Aufbau unserer Analyse mit einem CTE
Wir werden einen gemeinsamen Tabellenausdruck (CTE) verwenden, um einen temporären Ergebnissatz zu erstellen, der Daten aus mehreren Tabellen kombiniert:
%%sql
WITH genre_usa_tracks AS (
SELECT
il.invoice_line_id,
g.title AS style,
t.track_id,
i.billing_country AS nation
FROM monitor t
JOIN style g ON t.genre_id = g.genre_id
JOIN invoice_line il ON t.track_id = il.track_id
JOIN bill i ON il.invoice_id = i.invoice_id
WHERE i.billing_country = 'USA'
)
SELECT
style,
COUNT(*) AS tracks_sold,
COUNT(*) * 100.0 / (SELECT COUNT(*) FROM genre_usa_tracks) AS proportion
FROM genre_usa_tracks
GROUP BY style
ORDER BY tracks_sold DESC;
Style | Tracks_Sold | Prozentsatz |
---|---|---|
Felsen | 561 | 53.37773549000951 |
Different & Punk | 130 | 12.369172216936251 |
Metall | 124 | 11.798287345385347 |
R & B/Seele | 53 | 5.042816365366318 |
Blues | 36 | 3.4253092293054235 |
Different | 35 | 3.330161750713606 |
lateinisch | 22 | 2.093244529019981 |
Pop | 22 | 2.093244529019981 |
Hip Hop/Rap | 20 | 1.9029495718363463 |
Jazz | 14 | 1.3320647002854424 |
Einfach zuhören | 13 | 1.236917221693625 |
Reggae | 6 | 0,570884871550904 |
Electronica/Tanz | 5 | 0,47573739295908657 |
Klassisch | 4 | 0,38058991436726924 |
Schwermetall | 3 | 0,285442435775452 |
Soundtrack | 2 | 0,19029495718363462 |
Fernsehsendungen | 1 | 0,09514747859181731 |
Lernerkenntnisse: CTEs machen komplexe Abfragen lesbarer, indem sie in logische Schritte zerlegt werden. Hier erstellen wir zuerst einen gefilterten Datensatz der USA -Einkäufe und analysieren sie dann. Die 100,0 in unserer prozentualen Berechnung stellt sicher, dass wir Dezimalergebnisse anstelle einer ganzzahligen Division erhalten.
Unsere Ergebnisse zeigen das Felsen Musik dominiert den USA -Markt mit über 50% des Umsatzes, gefolgt von lateinischAnwesend MetallUnd Different & Punk. Dies deutet darauf hin, dass der Laden diese Genres bei der Auswahl eines neuen Inventars priorisieren sollte.
Wichtige Erkenntnisse aus der Genreanalyse
- Rock dominiert: Mit 561 verkauften Tracks (53,4%) ist Rock bei weitem das beliebteste Style
- Lateinische Musiküberraschung: Das zweitbeliebteste Style ist lateinisch (10,3%), was auf einen signifikanten Marktsegment hinweist
- Langer Schwanzeffekt: Viele Genres haben sehr kleine Prozentsätze, was auf Nischenmärkte hinweist
Geschäftsfrage 2: Analyse der Vertriebsleistung der Mitarbeiter
Das Unternehmen möchte die Leistung der Vertriebsunterstützungsagenten bewerten, um High -Performer und Verbesserungsbereiche zu identifizieren. Lassen Sie uns analysieren, welche Mitarbeiter die meisten Einnahmen erzielen.
%%sql
SELECT
e.first_name || ' ' || e.last_name AS employee_name,
e.hire_date,
COUNT(DISTINCT c.customer_id) AS customer_count,
SUM(i.whole) AS total_sales_dollars,
SUM(i.whole) / COUNT(DISTINCT c.customer_id) AS avg_dollars_per_customer
FROM buyer c
JOIN bill i ON c.customer_id = i.customer_id
JOIN worker e ON c.support_rep_id = e.employee_id
GROUP BY e.employee_id, e.hire_date
ORDER BY total_sales_dollars DESC;
Mitarbeitername | Hire_date | customer_count | Total_Sales_Dollars | AVG_DOLLARS_PER_CUSTOMER |
---|---|---|---|---|
Jane Peacock | 2017-04-01 00:00:00 | 21 | 1731.5100000000039 | 82.45285714285733 |
Margaret Park | 2017-05-03 00:00:00 | 20 | 1584.0000000000034 | 79.20000000000017 |
Steve Johnson | 2017-10-17 00:00:00 | 18 | 1393.920000000002 | 77.44000000000011 |
Erkenntnis lernen: Wenn Sie verwendet werden
GROUP BY
Denken Sie bei aggregierten Funktionen daran, alle nicht-aggregierten Spalten in Ihre aufzunehmenGROUP BY
Klausel. Dies ist in den meisten SQL -Geschmacksrichtungen erforderlich (obwohl SQLite mehr verzeihend ist). Der||
Der Bediener verkettet Saiten in SQLite.
Leistungsanalyseergebnisse
Unsere Analyse zeigt interessante Muster:
- Jane Peacock führt mit den höchsten durchschnittlichen Greenback professional Kunden, obwohl sie nicht die meisten Kunden haben
- Margaret Park’s Die Leistung ist solide, mit Metriken in der Nähe von Jane’s, was auf ein konsistentes Maß an Kundenwertdelieferung hinweist
- Steve Johnsonder neueste Mitarbeiter, zeigt eine vielversprechende Leistung bei Metriken, die ähnlich erfahrener Mitarbeiter ähnlich sind
Geschäftsfrage 3: Kombinieren von SQL mit Python zur Visualisierung
Während sich SQL bei der Datenabnahme und -Transformation auszeichnet, ermöglicht das Kombinieren mit Python leistungsstarke Visualisierungen. Lassen Sie uns zeigen, wie Sie die SQL -Abfrageergebnisse an Python weitergeben:
import pandas as pd
# Retailer our question as a string
question = """
SELECT
style,
COUNT(*) AS tracks_sold
FROM genre_usa_tracks
GROUP BY style
ORDER BY tracks_sold DESC
LIMIT 10;
"""
# Execute the question and retailer outcomes
consequence = %sql $question
# Convert to pandas DataFrame
df = consequence.DataFrame()
Erkenntnis lernen: die
%sql
Inline Magic (einzelnes Prozentzeichen) ermöglicht es uns, SQL auszuführen und die Ergebnisse in Python zu erfassen. Die Greenback -Signalsyntax ($question
) Lassen Sie uns Python -Variablen in SQL Magic -Befehlen verweisen.
Herausforderungen und Überlegungen
Während unserer Analyse haben wir mehrere wichtige SQL -Konzepte gestoßen, die es wert sind, hervorzuheben:
1. Integer Division Fallstrick
Bei der Berechnung von Prozentsätzen führt SQL standardmäßig eine ganzzahlige Abteilung aus:
-- This returns 0 for all percentages
SELECT COUNT(*) / (SELECT COUNT(*) FROM desk) AS proportion
-- This returns correct decimals
SELECT COUNT(*) * 100.0 / (SELECT COUNT(*) FROM desk) AS proportion
2. Die Auswahl anschließen
Wir haben benutzt INNER JOIN
Im Laufe dessen wollten wir nur Aufzeichnungen, die in allen verwandten Tabellen existieren. Wenn wir Kunden ohne Rechnungen einbeziehen müssten, würden wir verwenden LEFT JOIN
stattdessen.
3.. Aufgrund der Leistung
Unsere prozentuale Berechnung verwendet eine Unterabfrage, die für jede Zeile ausgeführt wird. Für größere Datensätze sollten Sie Fensterfunktionen oder die Vorbereitung der Summen in einem CTE verwenden.
Teilen Sie Ihre Arbeit mit Github GISTs
Github GISTs bieten eine hervorragende Möglichkeit, Ihre SQL -Projekte ohne die Komplexität der vollständigen Repositorys zu teilen. Hier erfahren Sie, wie Sie Ihre Arbeit teilen können:
- Navigieren zu gist.github.com
- Erstellen Sie einen neuen Kern
- Nennen Sie Ihre Datei mit der
.ipynb
Erweiterung für Jupyter -Notizbücher oder.sql
Für SQL -Skripte - Fügen Sie Ihren Code ein und erstellen Sie entweder ein öffentliches oder geheimes Kern
GISTs rendern die Jupyter -Notizbücher automatisch mit allen Ausgaben erhalten, sodass sie perfekt für die gemeinsame Nutzung der Analyseergebnisse mit Stakeholdern oder in Ihr Projektportfolio einbezogen werden.
Zusammenfassung der Analyse
In diesem Projekt haben wir gezeigt, wie SQL kritische Geschäftsfragen für einen digitalen Musikgeschäft beantworten kann:
- Genreanalyse: Wir haben identifiziert Felsen als dominantes Style auf dem USA -Markt (53,4%) mit lateinisch Musik als überraschender zweiter Platz
- Leistung der Mitarbeiter: Wir haben Vertriebsmitarbeiter bewertet und festgestellt, dass Jane Peacock im Durchschnittsumsatz professional Kunden führt
- Technische Fähigkeiten: Wir haben CTEs, Unterabfragen, Mehrfachverbindungen und aggregierte Funktionen zur Lösung realer Geschäftsprobleme angewendet
Diese Erkenntnisse ermöglichen datengesteuerte Entscheidungen über Inventarmanagement, Mitarbeiterausbildung und Marktstrategie.
Nächste Schritte
Um diese Analyse zu erweitern und Ihre SQL -Fähigkeiten zu vertiefen, berücksichtigen Sie diese Herausforderungen:
- Zeitbasierte Analyse: Wie verändern sich die Verkaufstrends im Laufe der Zeit? Fügen Sie die Datumsfilterung hinzu, um saisonale Muster zu identifizieren
- Kundensegmentierung: Welche Kunden sind am wertvollsten? Erstellen Sie Kundensegmente basierend auf dem Kaufverhalten
- Produktempfehlungen: Welche Tracks werden üblicherweise zusammen gekauft? Verwenden Sie Selfjoins, um Assoziationen zu finden
- Internationale Märkte: Erweitern Sie die Genreanalyse, um Präferenzen in verschiedenen Ländern zu vergleichen
Wenn Sie neu in SQL sind und dieses Projekt herausfordernd haben, beginnen Sie mit unserer SQL -Grundlagen Fertigkeitspfad zum Aufbau der für die komplexen Analyse erforderlichen fundierten Fähigkeiten. Der Kurs behandelt wesentliche Themen wie Joins, Aggregationen und Unterabfragen, die wir in diesem Projekt verwendet haben.
Viel Spaß beim Abfragen!