Python a SQL — božské spojení?

Zpět na blog

Python a SQL — božské spojení?

python sql pandas csv excel

Ovládli jste základy pythonovské knihovny Pandas, ale přesto si občas říkáte, že se vám některé věci dělají lépe pomocí SQL? Určitě nejste sami!

V tomto článku si ukážeme, jak snadno nahrajete CSV a Excel soubor do SQL databáze, abyste mohli používat mocný příkaz SQL SELECT. A také spojovat data pomocí SQL JOINů. Což je - a to si klidně přiznejme - přeci jen příjemnější, než používat pandas merge.

Jako bonus si data z výsledného SQL dotazu uložíte do Excelu. A to vše jen na několika řádcích kódu.

Zdrojové soubory

Data o průměrných mzdách jsme si vypůjčili z ČSÚ.

Data byla rozdělena do 2 souborů: CSV soubor, který obsahuje data o počtu zaměstnanců a průměrné mzdě, a číselník jednotlivých odvětví v Excelu.

Oba soubory si stáhněte.

Import knihoven a nastavení

Budete potřebovat 2 knihovny - PandasSQLite.

Pandas není standardní součástí instalace Pythonu. Pokud ji ve svém pythonovském prostředí nemáte, budete si jí muset nainstalovat.

SQLite patří mezi standardní knihovny, které Python už obsahuje, takže nemusíte dělat vůbec nic. 😉

# Import knihoven
import pandas as pd
import sqlite3

# Používáte Jupyter notebook?
# Díky následujícímu nastavení se vám dataframe bude lépe prohlížet
pd.options.display.max_columns = None
pd.options.display.max_rows = None
pd.options.display.max_colwidth = None

Nahrání souborů do dataframe

# Nezapomeňte upravit cestu k souborům
csv = pd.read_csv("./prumerna-mzda-4Q-2023.csv")
excel = pd.read_excel("./cz-nace-odvetvi.xlsx")

Kontrola

csv.head()
  CZ-NACE  Průměrný počet zaměstnanců  Průměrná hrubá měsíční mzda
------------------------------------------------------------------
0       A                       90400                        37501
1       B                       18200                        53762
2       C                     1071500                        44371
3       D                       34700                        69336
4       E                       53200                        43239
excel.head()
  CZ-NACE                                            Odvětví
------------------------------------------------------------
0       A                 Zemědělství, lesnictví a rybářství
1       B                                   Těžba a dobývání
2       C                             Zpracovatelský průmysl
3       D  Výroba a rozvod elektřiny, plynu, tepla a klim...
4       E  Zásobování vodou; činnosti související s odpad...


Nahrání dataframe do SQL

Vytvoříte soubor SQLite databáze, který pojmenujete mzdy.db. Do něho pak nahrajete data z CSV souboru a Excelu.

with sqlite3.connect("./mzdy.db") as conn:
  csv.to_sql("tabulka_mzdy",       # Název tabulky
             con=conn,             # Spojení (Connection)
             if_exists="replace",  # Pokud tabulka v DB existuje, nahraď jí
             index=False           # Index z dataframu nepotřebujeme
            )
  excel.to_sql("tabulka_nace", 
               con=conn, 
               if_exists="replace", 
               index=False)

Pokud tento příkaz neskončí chybovou hláškou, vše proběhlo tak, jak mělo.

Jednoduchý join

Zkuste si propojit obě tabulky pomocí joinu. Díky SQL je to snadné.

Data, která dotaz vrátí, se načtou do dataframu.

sql_query = """
SELECT n."Odvětví", m.*
FROM tabulka_mzdy m
INNER JOIN tabulka_nace n
  ON m."CZ-NACE" = n."CZ-NACE"
;
"""

with sqlite3.connect("./mzdy.db") as conn:
  df = pd.read_sql(sql_query, con=conn)  # Načti výsledek SQL dotazu do dataframu
df.head(3)
                              Odvětví CZ-NACE  Průměrný počet zaměstnanců  Průměrná hrubá měsíční mzda
0  Zemědělství, lesnictví a rybářství       A                       90400                        37501 
1                    Těžba a dobývání       B                       18200                        53762 
2              Zpracovatelský průmysl       C                     1071500                        44371 

Uložení výsledku do Excelu

Pro pohodlnější práci si můžete výsledný dataframe uložit do Excelu.

df.to_excel("./mzdy.xlsx", index=False)

Výsledný Excel

Závěr

V tomto krátkém článku jsme se pouze dotkli vzrušujících možností, které se otevírají spojením Pythonu a SQL. Na ty další už určitě přijdete sami.

A pokud ne, můžete vyzkoušet naše kurzy Pythonu nebo kurzy SQL.


Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

SQL pro analytiky

Naučte se základy SQL a relačních databází. Komplexní kurz, který vám dá jistotu při psaní databázových dotazů.

Zobrazit kurz

SQL pro analytiky 2 - pokročilí

Naučte se vytvářet složité dotazy, databázové objekty a používat pokročilé funkce jazyka SQL.

Zobrazit kurz

Vizualizace pro analytiky

Matplotlib, Pandas a Seaborn. Naučte se vizualizovat a prezentovat data v Pythonu.

Zobrazit kurz

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

Copyright © 2018-2024, Colorbee, s.r.o.

Designed by grafikli.cz in Prague.