Skip to content

Commit

Permalink
Info about Polars
Browse files Browse the repository at this point in the history
  • Loading branch information
tisnik committed Nov 20, 2023
1 parent 87b7994 commit 96c1542
Showing 1 changed file with 120 additions and 5 deletions.
125 changes: 120 additions & 5 deletions docs/python_data_science.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
* Pavel Tišnovský
* [email protected]

---

![Python](images/python.png)

---
Expand All @@ -16,7 +14,7 @@
* Nástroje pro datovou analýzu
* Transformace dat na informace
* Jupyter Notebook
* Knihovny používané v této oblasti: NumPy, Pandas, Polars, Seaborn, scikit-learn
* Knihovny používané v této oblasti: NumPy, Pandas, Polars, Seaborn, scikit-learn, Dask
* Vizualizace dat: Matplotlib
* Zpracování obrazů a přirozeného jazyka v Pythonu
* Strojové učení
Expand Down Expand Up @@ -46,11 +44,17 @@
- NumPy
- SciPy
- Matplotlib

---

## Typické použití Pythonu

* Moderní způsoby využití Pythonu
- AI
- Machine Learning (Deep Learning)
- PyTorch
- Big data
- aplikace v prohlížeči
* Tzv. „glue“ jazyk
* Vestavitelný interpret Pythonu

Expand All @@ -60,6 +64,12 @@

* Data mining
* Data procesing a modelování
- klasifikace
- predikce
- výběr modelu
- redukce počtu dimenzí
- pre-processing
- modelování
* Vizualizace

---
Expand Down Expand Up @@ -87,6 +97,7 @@
* Xarray
* Pandas
* Polars
* SciKit-learn

---

Expand Down Expand Up @@ -121,6 +132,12 @@

---

## HPC

* Dask

---

## NumPy

![numpy_arrays.png](images/numpy_logo.png)
Expand Down Expand Up @@ -256,13 +273,24 @@

## Pandas

![pandas](images/pandas.png)

---

## Pandas

* Načtení dat z různých datových zdrojů do datových rámců
- CSV
- TSV
- databáze
- tabulkové procesory
* Programová konstrukce datových rámců
* Prohlížení obsahu datových rámců

---

## Pandas

* Iterace nad daty, řazení a další podobné operace
* Spojování, seskupování a změna tvaru dat
* Práce s takzvanými sériemi
Expand All @@ -279,9 +307,8 @@
- Textových souborů s volitelným oddělovačem a formátem sloupců
- Tabulek z tabulkových procesorů (xls, xlsx, xlsm, xlsb, odf, ods, odt)
- Souborů JSON se strukturovanými daty
- Načítání z relačních databází s využitím SQL driverů
- Načítání z relačních databází s využitím SQL
- Načítání z Parquet souborů
- atd.

---

Expand All @@ -290,6 +317,10 @@
* https://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt
* Evidentně se jedná o tabulková a velmi dobře strukturovaná data, která by bylo vhodné umět automaticky zpracovat

---

### Zpracování souborů s nestandardním formátem

```
13.11.2023 #219
země|měna|množství|kód|kurz
Expand Down Expand Up @@ -330,6 +361,90 @@ Velká Británie|libra|1|GBP|28,230

## Polars

![polars](images/polars.png)

---

### Polars

* Alternativa ke knihovně Pandas
* Podporuje multithreading
* SIMD operace (ne vždy)
* Optimalizace dotazů
* Líné vyhodnocování

---

### Polars

* Datové rámce rozsáhlejší než dostupná RAM
* Naprogramováno v Rustu
* Vazby s dalšími knihovnami
- pyarrow, NumPy, Pandas etc.
* Rozhraní pro Python a NodeJS

---

### Datové řady a datové rámce

* Podobné těm v Pandas
- funkce a metody se stejnými jmény
- ovšem ne zcela kompatibilní

---

### Načtení z SQL

```python
import polars

connection_string = "postgresql://postgres:postgres@localhost:5432/testdb"

query = """
SELECT org_id, cluster_id, rule_fqdn
FROM rule_hit
ORDER by org_id, cluster_id
"""

df = polars.read_sql(query, connection_string)

print(df)
print()
```

---

### Klíč k úspěchu: být líný!

* FP programování
* Architektura založená na Kafce atd.
* Dask atd.
* Líné datové rámce v Polars

---

### Líné datové rámce

```python
import polars

df = polars.read_csv("hall_of_fame.csv").lazy()

df2 = df.groupby("Winner", maintain_order=True).agg([polars.col("Year").len()]). \
sort("Year"). \
reverse(). \
head(5)

print(df2.describe_plan())
print(df2.describe_optimized_plan())
```

---

## Matplotlib

![Matplotlib](images/matplotlib.png)

---

## Matplotlib
Expand Down

0 comments on commit 96c1542

Please sign in to comment.