Hlavní navigace

Kombinace možností ggplot2 a Pythonu: knihovna Plotnine

12. 11. 2020
Doba čtení: 29 minut

Sdílet

Knihovna ggplot2 určená pro použití v programovacím jazyku R se stala velmi populární a mnoho uživatelů k R přivedla. Podobný koncept, grammar of graphics, lze však použít i v jiných jazycích, například v Pythonu.

Obsah

1. Kombinace možností ggplot2 a Pythonu: knihovna Plotnine

2. Instalace knihovny Plotnine

3. Testovací data poskytovaná knihovnou Plotnine

4. Konstrukce grafu

5. Vykreslení grafu na obrazovku, uložení grafu do souboru

6. Forma zápisu složitějších grafů

7. Další dostupná testovací data – mtcars

8. Použití třetího datového sloupce v korelačním diagramu

9. Rozdělení grafu na menší grafy na základě třetí či čtvrté hodnoty

10. Sloupcové diagramy

11. Histogramy

12. Graf pro větší množství sloupců v datovém rámci

13. Aproximace zobrazovaných křivkou

14. Lineární regrese

15. Kombinace Pythonu, Jupyter Notebooku a knihovny plotnine

16. Načtení testovací datové sady

17. Vykreslení grafů do plochy diáře

18. Repositář s demonstračními příklady

19. Odkazy na Internetu

1. Kombinace možností ggplot2 a Pythonu: knihovna Plotnine

V předchozích dvou částech [1] [2] seriálu o programovacím jazyce R jsme si řekni základní informace o knihovně nazvané ggplot2. Tato knihovna slouží k tvorbě různých typů grafů, které se postupně skládají z několika objektů s využitím takzvané „grammar of graphics“. A právě díky tomu je knihovna ggplot2 velmi oblíbená a mnozí uživatelé přechází na jazyk R právě kvůli existenci této knihovny (i když jazyk R nabízí i mnoho dalších důležitých technologií).

Obrázek 1: Princip konstrukce grafů s využitím grammar of graphics.
Autor: Javier Luraschi, https://github.com/javierluraschi

Koncepty, na nichž je knihovna ggplot2 postavena, je však možné využít i v dalších programovacích jazycích. Velmi dobrým příkladem může být programovací jazyk Python, pro který vznikla podobně koncipovaná knihovna nazvaná plotnine. Tu lze do určité míry kombinovat s knihovnou Matplotlib. Kombinace Pythonu a nad ním postavených knihoven společně s plotnine může být velmi užitečná; proto se touto knihovnou budeme zabývat v dnešním článku (další články již opět budou věnovány programovacímu jazyku R). Navíc je nutné již na začátek poznamenat, že plotnine není solitérem v ekosystému Pythonu. Naopak, používá například Pandas pro datové rámce atd., takže integrace do stávajících systémů může být relativně snadná.

Obrázek 2: Mapování hodnot na vizuální vlastnosti (barva …).
Autor: Javier Luraschi, https://github.com/javierluraschi

2. Instalace knihovny Plotnine

Začněme nejdůležitější věcí – jak vlastně knihovnu Plotnine nainstalovat. Tato knihovna je dostupná na PyPi, takže její instalace je ve skutečnosti velmi snadná, protože si vystačíme s nástrojem pip/pip3 a popřípadě s virtuálním prostředím Pythonu (pokud ho ve svých projektech používáte). Instalaci lze provést pouze pro aktuálně přihlášeného uživatele s využitím přepínače –user:

$ pip install --user plotnine

Na systémech s instalací Pythonu 2 a současně i Pythonu 3 se ještě může specifikovat verze Pythonu použitím nástroje pip3:

$ pip3 install --user plotnine

Povšimněte si, že se při instalaci mj. nainstalují či upgradují i knihovny Matplotlib a Pandas, na kterých plotnine závisí:

Collecting plotnine
  Downloading https://files.pythonhosted.org/packages/a9/37/d8b7ca612ce3d16fe542ebb276238befc2b0b0ba97c31c7c839333c7e33f/blob/master/plotnine-0.7.1-py3-none-any.whl (4.4MB)
Collecting statsmodels>=0.11.1 (from plotnine)
  Downloading https://files.pythonhosted.org/packages/be/4c/9e2435ca6645d6bafa2b51bb11f0a365b28934a2ffe9d6e339d67130926d/statsmodels-0.12.1-cp36-cp36m-manylinux1_x86_64.whl (9.5MB)
Collecting matplotlib>=3.1.1 (from plotnine)
  Downloading https://files.pythonhosted.org/packages/cd/d6/8c4dfb23151d5a494c66ebbfdb5c8c433b44ec07fae52da5939fcda0943f/matplotlib-3.3.2-cp36-cp36m-manylinux1_x86_64.whl (11.6MB)
Collecting scipy>=1.2.0 (from plotnine)
  Downloading https://files.pythonhosted.org/packages/c8/89/63171228d5ced148f5ced50305c89e8576ffc695a90b58fe5bb602b910c2/scipy-1.5.4-cp36-cp36m-manylinux1_x86_64.whl (25.9MB)
Collecting descartes>=1.1.0 (from plotnine)
  Downloading https://files.pythonhosted.org/packages/e5/b6/1ed2eb03989ae574584664985367ba70cd9cf8b32ee8cad0e8aaeac819f3/descartes-1.1.0-py3-none-any.whl
Collecting pandas>=1.1.0 (from plotnine)
  Downloading https://files.pythonhosted.org/packages/4d/51/bafcff417cd857bc6684336320863b5e5af280530213ef8f534b6042cfe6/pandas-1.1.4-cp36-cp36m-manylinux1_x86_64.whl (9.5MB)
Collecting numpy>=1.16.0 (from plotnine)
  Downloading https://files.pythonhosted.org/packages/a6/fc/36e52d0ae2aa502b211f1bcd2fdeec72d343d58224eabcdddc1bcb052db1/numpy-1.19.4-cp36-cp36m-manylinux1_x86_64.whl (13.4MB)
Collecting patsy>=0.5.1 (from plotnine)
  Downloading https://files.pythonhosted.org/packages/ea/0c/5f61f1a3d4385d6bf83b83ea495068857ff8dfb89e74824c6e9eb63286d8/patsy-0.5.1-py2.py3-none-any.whl (231kB)
Collecting mizani>=0.7.1 (from plotnine)
  Downloading https://files.pythonhosted.org/packages/ef/02/2b0627d451734afc7c30be4a0f3b8ffb9499c00cb68b44e80dda22d1dc84/mizani-0.7.2-py3-none-any.whl (62kB)
Requirement already satisfied: python-dateutil>=2.1 in ./.local/lib/python3.6/site-packages (from matplotlib>=3.1.1->plotnine)
Collecting certifi>=2020.06.20 (from matplotlib>=3.1.1->plotnine)
  Downloading https://files.pythonhosted.org/packages/c1/6f/3d85f0850962279a7e4c622695d7b3171e95ac65308a57d3b29738b27149/certifi-2020.11.8-py2.py3-none-any.whl (155kB)
Requirement already satisfied: cycler>=0.10 in ./.local/lib/python3.6/site-packages (from matplotlib>=3.1.1->plotnine)
Collecting pillow>=6.2.0 (from matplotlib>=3.1.1->plotnine)
  Downloading https://files.pythonhosted.org/packages/5f/19/d4c25111d36163698396f93c363114cf1cddbacb24744f6612f25b6aa3d0/Pillow-8.0.1-cp36-cp36m-manylinux1_x86_64.whl (2.2MB)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in /usr/lib/python3.6/site-packages (from matplotlib>=3.1.1->plotnine)
Requirement already satisfied: kiwisolver>=1.0.1 in ./.local/lib/python3.6/site-packages (from matplotlib>=3.1.1->plotnine)
Requirement already satisfied: pytz>=2017.2 in /usr/lib/python3.6/site-packages (from pandas>=1.1.0->plotnine)
Requirement already satisfied: six in ./.local/lib/python3.6/site-packages (from patsy>=0.5.1->plotnine)
Collecting palettable (from mizani>=0.7.1->plotnine)
  Downloading https://files.pythonhosted.org/packages/ca/46/5198aa24e61bb7eef28d06cb69e56bfa1942f4b6807d95a0b5ce361fe09b/palettable-3.3.0-py2.py3-none-any.whl (111kB)
Requirement already satisfied: setuptools in /usr/lib/python3.6/site-packages (from kiwisolver>=1.0.1->matplotlib>=3.1.1->plotnine)
Installing collected packages: numpy, patsy, scipy, pandas, statsmodels, certifi, pillow, matplotlib, descartes, palettable, mizani, plotnine
  Found existing installation: numpy 1.14.2
    Uninstalling numpy-1.14.2:
      Successfully uninstalled numpy-1.14.2
  Found existing installation: matplotlib 2.2.2
    Uninstalling matplotlib-2.2.2:
      Successfully uninstalled matplotlib-2.2.2
Successfully installed certifi-2020.11.8 descartes-1.1.0 matplotlib-3.3.2 mizani-0.7.2 numpy-1.19.4 palettable-3.3.0 pandas-1.1.4 patsy-0.5.1 pillow-8.0.1 plotnine-0.7.1 scipy-1.5.4 statsmodels-0.12.1

Obrázek 3: Ukázka možností grafického výstupu jazyka R.

3. Testovací data poskytovaná knihovnou Plotnine

Při ukázkách některých možností nabízených jazykem R jsme používali testovací data, která jsou součástí standardních balíčků. Podobnými daty disponuje i knihovna Plotnine, což je výhodné, minimálně při pokusech s tvorbou grafů. První grafy budeme vytvářet s využitím datového souboru nazvaného economics, který se importuje z balíčku plotnine.data:

from plotnine.data import economics
 
print(economics)

Výsledkem předchozího triviálního skriptu by měl být tento výstup:

          date      pce     pop  psavert  uempmed  unemploy
0   1967-07-01    507.4  198712     12.5      4.5      2944
1   1967-08-01    510.5  198911     12.5      4.7      2945
2   1967-09-01    516.3  199113     11.7      4.6      2958
3   1967-10-01    512.9  199311     12.5      4.9      3143
4   1967-11-01    518.1  199498     12.5      4.7      3066
..         ...      ...     ...      ...      ...       ...
569 2014-12-01  12122.0  320201      5.0     12.6      8688
570 2015-01-01  12080.8  320367      5.5     13.4      8979
571 2015-02-01  12095.9  320534      5.7     13.1      8705
572 2015-03-01  12161.5  320707      5.2     12.2      8575
573 2015-04-01  12158.9  320887      5.6     11.7      8549
 
[574 rows x 6 columns]

Vidíme, že datový soubor obsahuje celkem 574 záznamů. Z nich si můžeme zobrazit pouze určitou část, a to s využitím metody head:

from plotnine.data import economics
 
print(economics.head())

S výsledkem:

        date    pce     pop  psavert  uempmed  unemploy
0 1967-07-01  507.4  198712     12.5      4.5      2944
1 1967-08-01  510.5  198911     12.5      4.7      2945
2 1967-09-01  516.3  199113     11.7      4.6      2958
3 1967-10-01  512.9  199311     12.5      4.9      3143
4 1967-11-01  518.1  199498     12.5      4.7      3066

Popř. lze specifikovat počet zobrazených záznamů:

from plotnine.data import economics
 
print(economics.head(20))

Tentokrát se podle požadavku zobrazí dvacet záznamů:

         date    pce     pop  psavert  uempmed  unemploy
0  1967-07-01  507.4  198712     12.5      4.5      2944
1  1967-08-01  510.5  198911     12.5      4.7      2945
2  1967-09-01  516.3  199113     11.7      4.6      2958
3  1967-10-01  512.9  199311     12.5      4.9      3143
4  1967-11-01  518.1  199498     12.5      4.7      3066
5  1967-12-01  525.8  199657     12.1      4.8      3018
6  1968-01-01  531.5  199808     11.7      5.1      2878
7  1968-02-01  534.2  199920     12.2      4.5      3001
8  1968-03-01  544.9  200056     11.6      4.1      2877
9  1968-04-01  544.6  200208     12.2      4.6      2709
10 1968-05-01  550.4  200361     12.0      4.4      2740
11 1968-06-01  556.8  200536     11.6      4.4      2938
12 1968-07-01  563.8  200706     10.6      4.5      2883
13 1968-08-01  567.6  200898     10.4      4.2      2768
14 1968-09-01  568.8  201095     10.4      4.6      2686
15 1968-10-01  572.3  201290     10.6      4.8      2689
16 1968-11-01  577.4  201466     10.4      4.4      2715
17 1968-12-01  577.2  201621     10.9      4.4      2685
18 1969-01-01  584.2  201760     10.0      4.4      2718
19 1969-02-01  589.5  201881      9.4      4.9      2692

Zajímavé bude zjistit, jakým datovým typem je vlastně datový set tvořen:

from plotnine.data import economics
 
print(type(economics))

Ze zobrazeného typu je patrné, že se jedná o klasický datový rámec z knihovny Pandas:

<class 'pandas.core.frame.DataFrame'>

To má své výhody, protože pro tento datový rámec je definováno mnoho metod. Užitečná je například metoda pro získání základních statistických informací:

from plotnine.data import economics
 
print(economics.describe())
                pce            pop     psavert     uempmed      unemploy
count    574.000000     574.000000  574.000000  574.000000    574.000000
mean    4843.510453  257189.381533    7.936585    8.610105   7771.557491
std     3579.287206   36730.801593    3.124394    4.108112   2641.960571
min      507.400000  198712.000000    1.900000    4.000000   2685.000000
25%     1582.225000  224896.000000    5.500000    6.000000   6284.000000
50%     3953.550000  253060.000000    7.700000    7.500000   7494.000000
75%     7667.325000  290290.750000   10.500000    9.100000   8691.000000
max    12161.500000  320887.000000   17.000000   25.200000  15352.000000
Poznámka: podobné informace získáme v programovacím jazyku R s využitím funkce summary.

4. Konstrukce grafu

Víme již, jak se s využitím knihovny ggplot2 vytváří grafy v jazyce R:

library(ggplot2)
 
ggplot(mtcars) + aes(x = mpg, y = wt) + geom_point()

Postup v Pythonu je vlastně velmi podobný, což je ukázáno na dalším demonstračním příkladu, v němž se používají nám již známé koncepty, tedy specifikace zdroje dat, takzvané „estetiky“ (mapování dat na grafické entity) a vlastního vykreslení, v tomto případě s využitím lomené čáry:

from plotnine.data import economics
 
from plotnine import ggplot, aes, geom_line
 
ggplot(economics) + aes(x="date", y="pop") + geom_line()

5. Vykreslení grafu na obrazovku, uložení grafu do souboru

Předchozí demonstrační příklad možná poněkud překvapivě graf nevykreslil, resp. přesněji řečeno vykreslil, ale pouze tehdy, pokud byly příkazy zadány do interaktivního prostředí Pythonu (a nikoli spuštěny ze skriptu). Důvod je jednoduchý – objekt představující graf musíme „vypsat“, a to běžnou standardní funkcí print:

from plotnine.data import economics
 
from plotnine import ggplot, aes, geom_line
 
g = ggplot(economics) + aes(x="date", y="pop") + geom_line()
print(g)

Obrázek 4: Výsledek běhu předchozího příkladu.

Můžeme si vyzkoušet i složitější graf se specifikací popisu obou os grafu:

from plotnine.data import economics
 
from plotnine import ggplot, aes, geom_line, labs
 
g = ggplot(economics) + aes(x="date", y="uempmed") + geom_line() + labs(x="date", y="median duration of unemployment")
print(g)

Obrázek 5: Popis os grafu (navíc zobrazujeme odlišný sloupec z datového rámce).

Alternativně je možné graf uložit do souboru, například ve formě rastrového obrázku ve formátu PNG. Pro tento účel se použije metoda save:

from plotnine.data import economics
 
from plotnine import ggplot, aes, geom_line
 
g = ggplot(economics) + aes(x="date", y="pop") + geom_line()
 
g.save("04.png")

Obrázek 6: Soubor s obrázkem vytvořený předchozím příkladem.

Poznámka: podobnost s Matplotlibem zde není náhodná.

6. Forma zápisu složitějších grafů

S využitím „grammar of graphics“ se grafy skládají z několika objektů (ve smyslu jazyka Python). Proto se často používá zápis konstrukce grafů rozepsaný na více řádků. Méně často používaný způsob vyžaduje na konci jednotlivých řádků použít zpětná lomítka:

from plotnine.data import economics
 
from plotnine import ggplot, aes, geom_line, labs
 
g = ggplot(economics) + \
    aes(x="date", y="uempmed") + \
    geom_line() + \
    labs(x="date", y="median duration of unemployment")
 
print(g)

Častěji se však setkáme s tím, že se celá konstrukce grafu uzavře do kulatých závorek, takže interpret již v tomto případě nevyžaduje zpětná lomítka:

from plotnine.data import economics
 
from plotnine import ggplot, aes, geom_line, labs
 
g = (ggplot(economics) +
     aes(x="date", y="uempmed") +
     geom_line() +
     labs(x="date", y="median duration of unemployment"))
 
print(g)
Poznámka: v dalších demonstračních příkladech většinou využijeme druhý způsob zápisu.

7. Další dostupná testovací data – mtcars

Další datový set, který můžeme použít při tvorbě grafů, již velmi dobře známe z jazyka R. Jedná se o soubor údajů o 32 typech automobilů a datový set se nazývá mtcars:

from plotnine.data import mtcars
 
print(mtcars)

Příslušný datový rámec vypadá následovně:

                   name   mpg  cyl   disp   hp  drat     wt   qsec  vs  am  gear  carb
0             Mazda RX4  21.0    6  160.0  110  3.90  2.620  16.46   0   1     4     4
1         Mazda RX4 Wag  21.0    6  160.0  110  3.90  2.875  17.02   0   1     4     4
2            Datsun 710  22.8    4  108.0   93  3.85  2.320  18.61   1   1     4     1
3        Hornet 4 Drive  21.4    6  258.0  110  3.08  3.215  19.44   1   0     3     1
4     Hornet Sportabout  18.7    8  360.0  175  3.15  3.440  17.02   0   0     3     2
5               Valiant  18.1    6  225.0  105  2.76  3.460  20.22   1   0     3     1
6            Duster 360  14.3    8  360.0  245  3.21  3.570  15.84   0   0     3     4
7             Merc 240D  24.4    4  146.7   62  3.69  3.190  20.00   1   0     4     2
8              Merc 230  22.8    4  140.8   95  3.92  3.150  22.90   1   0     4     2
9              Merc 280  19.2    6  167.6  123  3.92  3.440  18.30   1   0     4     4
10            Merc 280C  17.8    6  167.6  123  3.92  3.440  18.90   1   0     4     4
11           Merc 450SE  16.4    8  275.8  180  3.07  4.070  17.40   0   0     3     3
12           Merc 450SL  17.3    8  275.8  180  3.07  3.730  17.60   0   0     3     3
13          Merc 450SLC  15.2    8  275.8  180  3.07  3.780  18.00   0   0     3     3
14   Cadillac Fleetwood  10.4    8  472.0  205  2.93  5.250  17.98   0   0     3     4
15  Lincoln Continental  10.4    8  460.0  215  3.00  5.424  17.82   0   0     3     4
16    Chrysler Imperial  14.7    8  440.0  230  3.23  5.345  17.42   0   0     3     4
17             Fiat 128  32.4    4   78.7   66  4.08  2.200  19.47   1   1     4     1
18          Honda Civic  30.4    4   75.7   52  4.93  1.615  18.52   1   1     4     2
19       Toyota Corolla  33.9    4   71.1   65  4.22  1.835  19.90   1   1     4     1
20        Toyota Corona  21.5    4  120.1   97  3.70  2.465  20.01   1   0     3     1
21     Dodge Challenger  15.5    8  318.0  150  2.76  3.520  16.87   0   0     3     2
22          AMC Javelin  15.2    8  304.0  150  3.15  3.435  17.30   0   0     3     2
23           Camaro Z28  13.3    8  350.0  245  3.73  3.840  15.41   0   0     3     4
24     Pontiac Firebird  19.2    8  400.0  175  3.08  3.845  17.05   0   0     3     2
25            Fiat X1-9  27.3    4   79.0   66  4.08  1.935  18.90   1   1     4     1
26        Porsche 914-2  26.0    4  120.3   91  4.43  2.140  16.70   0   1     5     2
27         Lotus Europa  30.4    4   95.1  113  3.77  1.513  16.90   1   1     5     2
28       Ford Pantera L  15.8    8  351.0  264  4.22  3.170  14.50   0   1     5     4
29         Ferrari Dino  19.7    6  145.0  175  3.62  2.770  15.50   0   1     5     6
30        Maserati Bora  15.0    8  301.0  335  3.54  3.570  14.60   0   1     5     8
31           Volvo 142E  21.4    4  121.0  109  4.11  2.780  18.60   1   1     4     2

Zobrazit si můžeme i statistické informace o tomto datovém rámci:

from plotnine.data import mtcars
 
print(mtcars.describe())

S výsledky:

             mpg        cyl        disp  ...         am       gear     carb
count  32.000000  32.000000   32.000000  ...  32.000000  32.000000  32.0000
mean   20.090625   6.187500  230.721875  ...   0.406250   3.687500   2.8125
std     6.026948   1.785922  123.938694  ...   0.498991   0.737804   1.6152
min    10.400000   4.000000   71.100000  ...   0.000000   3.000000   1.0000
25%    15.425000   4.000000  120.825000  ...   0.000000   3.000000   2.0000
50%    19.200000   6.000000  196.300000  ...   0.000000   4.000000   2.0000
75%    22.800000   8.000000  326.000000  ...   1.000000   4.000000   4.0000
max    33.900000   8.000000  472.000000  ...   1.000000   5.000000   8.0000
 
[8 rows x 11 columns]
Poznámka: povšimněte si, že jednotlivé záznamy nejsou pojmenovány, na rozdíl od jazyka R, kde první sloupec ve výpisu obsahuje jména záznamů (nikoli datový sloupec):
mtcars
 
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

8. Použití třetího datového sloupce v korelačním diagramu

V grafu lze zvýraznit i hodnoty ze třetího (čtvrtého atd.) sloupce, a to například změnou barvy vykreslovaných bodů. Pro zajímavost jsou do grafu přidány i regresní přímky, které budou použity i v některých navazujících demonstračních příkladech:

from plotnine import ggplot, geom_point, aes, stat_smooth, facet_wrap
from plotnine.data import mtcars
 
print(ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)'))
      + geom_point()
      + stat_smooth(method='lm'))

Obrázek 7: Třetí sloupec ovlivňuje barvu bodů; přidány jsou i regresní přímky.

9. Rozdělení grafu na menší grafy na základě třetí či čtvrté hodnoty

Asi nás již nepřekvapí, že graf lze rozdělit do mřížky (grid/lattice) na základě třetí popř. čtvrté hodnoty, což je v praxi velmi užitečné:

from plotnine import ggplot, geom_point, aes, stat_smooth, facet_wrap
from plotnine.data import mtcars
 
print(ggplot(mtcars, aes('wt', 'mpg', color='factor(gear)'))
      + geom_point()
      + stat_smooth(method='lm')
      + facet_wrap('~gear'))

Obrázek 8: Rozdělení grafu na menší grafy na základě třetí hodnoty (počtu rychlostních stupňů).

10. Sloupcové diagramy

Snadno lze vykreslit i sloupcový diagram s využitím funkce geom_bar namísto geom_point či geom_line. Zobrazme například třídu vozů, resp. přesněji řečeno kolik vozů spadá do dané třídy:

from plotnine.data import mpg
from plotnine import ggplot, aes, geom_bar
 
print(ggplot(mpg) + aes(x="class") + geom_bar())

Obrázek 9: Sloupcový diagram.

V jiném sloupcovém diagramu zobrazíme, kolik typů vozů obsahuje motor se čtyřmi, pěti, šesti či osmi válci:

from plotnine.data import mpg
from plotnine import ggplot, aes, geom_bar
 
print(ggplot(mpg) + aes(x="cyl") + geom_bar())

Obrázek 10: Další forma sloupcového diagramu.

11. Histogramy

Předchozí dva sloupcové grafy představovaly nejjednodušší formu histogramu. Histogram ovšem můžeme zobrazit i pro reálné hodnoty (z určitého rozsahu); pouze je nutné zvolit počet intervalů, které určují i počet sloupců histogramu. Použijeme funkci stat_bins, která zásadně ovlivní vzhled grafu:

from plotnine.data import mtcars
from plotnine import ggplot, aes, geom_bar, stat_bin
 
print(ggplot(mtcars) + aes(x="hp") + stat_bin(bins=12) + geom_bar())

Obrázek 11: Histogram s výkony motorů.

Histogram pro datový set s větším počtem hodnot, hodnoty jsou rozděleny do dvaceti intervalů (tříd):

from plotnine.data import economics
from plotnine import ggplot, aes, geom_bar, stat_bin
 
print(ggplot(economics) + aes(x="uempmed") + stat_bin(bins=20) + geom_bar())

Obrázek 12: Histogram, který ukazuje dobu pobírání příspěvků v nezaměstnanosti (v USA).

12. Graf pro větší množství sloupců v datovém rámci

Ukažme si ještě další příklady rozdělení původního grafu do menších grafů na základě třetí popř. čtvrté zobrazované hodnoty. Povšimněte si způsobu zápisu sloupců, podle jejichž hodnoty se má graf rozdělit – zápis odpovídá jazyku R, ovšem v Pythonu operátor ~ (tilda) nelze použít, takže se musí parametr uložit do řetězce. Prakticky žádné další rozdíly oproti R zde nenalezneme:

from plotnine.data import mpg
from plotnine import ggplot, aes, facet_grid, labs, geom_point, stat_smooth
 
print(ggplot(mpg)
      + facet_grid(facets="year~class")
      + aes(x="displ", y="hwy")
      + labs(
          x="Engine Size",
          y="Miles per Gallon",
          title="Miles per Gallon for Each Year and Vehicle Class")
      + geom_point())

Obrázek 13: Graf rozdělený podle sloupců year a class.

Opět nám nic nebrání v proložení bodů regresní přímkou:

from plotnine.data import mpg
from plotnine import ggplot, aes, facet_grid, labs, geom_point, stat_smooth
 
print(ggplot(mpg)
      + facet_grid(facets="year~class")
      + aes(x="displ", y="hwy")
      + labs(
          x="Engine Size",
          y="Miles per Gallon",
          title="Miles per Gallon for Each Year and Vehicle Class")
      + geom_point()
      + stat_smooth(method='lm'))

Obrázek 14: Kombinace předchozího grafu a použití regresních přímek pro lepší pochopení významu zobrazovaných dat.

13. Aproximace zobrazovaných křivkou

Zobrazovaná data lze aproximovat křivkou, k čemuž se používá funkce geom_smooth. Tu již známe z programovacího jazyka R a knihovny ggplot2, takže si jen připomeňme, že tato funkce do grafu vkládá další grafický objekt, u nějž můžeme specifikovat jeho vizuální styl (v našem případě barvu):

from plotnine.data import economics
from plotnine import ggplot, aes, facet_grid, labs, geom_point, geom_smooth, xlab, ylab
 
print(ggplot(economics)
        + aes(x="date", y="uempmed")
        + geom_point()
        + geom_smooth(color="red")
        + xlab("date (year)")
        + ylab("unemploynment"))

Obrázek 15: Aproximace zobrazovaných dat křivkou.

Volit lze rozsah hodnot použitých pro výpočet bodů na křivce. Čím je rozsah menší, tím více se křivka přimyká k datům; na druhou stranu se ovšem projeví i krátkodobé výkyvy:

from plotnine.data import economics
from plotnine import ggplot, aes, facet_grid, labs, geom_point, geom_smooth, xlab, ylab
 
print(ggplot(economics)
        + aes(x="date", y="uempmed")
        + geom_point()
        + geom_smooth(color="red", span=0.5)
        + xlab("date (year)")
        + ylab("unemploynment"))

Obrázek 16: Aproximace zobrazovaných dat křivkou s parametrem span=0,5.

Další zmenšení parametru span, tedy intervalu hodnot pro výpočet aproximační křivky:

from plotnine.data import economics
from plotnine import ggplot, aes, facet_grid, labs, geom_point, geom_smooth, xlab, ylab
 
print(ggplot(economics)
        + aes(x="date", y="uempmed")
        + geom_point()
        + geom_smooth(color="red", span=0.1)
        + xlab("date (year)")
        + ylab("unemploynment"))

Obrázek 17: Aproximace zobrazovaných dat křivkou s parametrem span=0,1.

14. Lineární regrese

Velmi užitečnou pomůckou jsou regresní přímky, které jsme si opět ukázali již při popisu knihoven programovacího jazyka R. Takže jen krátce – regresní přímka se do grafu vloží funkcí geom_smooth, u níž ovšem musíme specifikovat nepovinný (pojmenovaný) parametr method=„lm“. Současně se do grafu vloží i šedá plocha zobrazující odchylky (tuto plochu lze v případě potřeby zakázat):

from plotnine.data import economics
from plotnine import ggplot, aes, facet_grid, labs, geom_point, geom_smooth, xlab, ylab
 
print(ggplot(economics)
        + aes(x="date", y="uempmed")
        + geom_point()
        + geom_smooth(color="red", method="lm")
        + xlab("date (year)")
        + ylab("unemploynment"))

Obrázek 18: Regresní přímka vložená do grafu.

15. Kombinace Pythonu, Jupyter Notebooku a knihovny plotnine

Z praktického hlediska je velmi dobrou kombinací programovací jazyk Python, interaktivní prostředí nazvané Jupyter Notebook a právě knihovna plotnine, která dokáže vykreslovat grafy přímo na plochu diářů (notebook). Jupyter Notebook vznikl z neméně známého a používaného projektu IPython Notebook(s). Toto interaktivní prostředí, které se zobrazuje přímo ve webovém prohlížeči, obsahuje klasickou smyčku REPL (Read–Eval–Print–Loop), což mj. znamená, že se jednotlivé výrazy zapsané uživatelem mohou ihned vyhodnocovat s prakticky okamžitou zpětnou vazbou. Navíc však nástroj Jupyter Notebook dokáže do okna prohlížeče vykreslovat tabulky, grafy či různé obrázky, a to jak s přímým využitím předaných dat (vektory či sekvence čísel), tak i při specifikaci funkce, jejíž průběh se má vykreslit (existují zde ovšem některá omezení, kterými se budu zabývat v navazujících kapitolách). Třešničkou na dortu je podpora pro práci se vzorci psanými v TeXu či LaTeXu, tvorba slajdů, sdílení „živého“ zdrojového kódu atd.

Obrázek 19: Klasický IPython notebook – jedná se o nástroj, který umožňoval interaktivní ovládání interpretru Pythonu z GUI, nabízel všechny možnosti konzolového IPythonu a navíc i podporoval práci s grafickými objekty (rastrové obrázky, grafy, diagramy atd.).

Celé grafické uživatelské rozhraní Jupyter Notebooku napodobuje diář (notebook), do kterého se zapisují jak poznámky, tak i případný programový kód a jeho výsledek, takže se tento systém může hodit i pro tvorbu (interaktivních) prezentací, použití sdílené pracovní plochy, zápis postupů, na nichž jsou jednotlivé výpočty založeny atd. Ostatně v tomto ohledu není přístup zvolený autory nijak nový ani přelomový, protože například i populární Matlab používá podobnou technologii (i když založenou na jiném programovacím jazyku).

Poznámka: právě kvůli existenci uživatelského rozhraní se celý projekt jmenuje Jupyter Notebook, i když samotné jádro se jmenuje jen Jupyter popř. Project Jupyter. Existuje totiž i nová forma uživatelského rozhraní pojmenovaná JupyterLab.
D

Obrázek 20: Použití Pythonu v Jupyteru při výpočtu fraktálů. Složitější numerické výpočty jsou jednou z oblastí, v níž by bylo výhodnější použít jiný programovací jazyk, resp. přesněji jeho jádro propojené s Jupyterem (Julia, Go, C/C++).
 Zdroj

Samotným Jupyter Notebookem jsme se již na stránkách Roota zabývali, takže si v navazujících kapitolách ukážeme pouze kooperaci s knihovnou plotnine.

16. Načtení testovací datové sady

Interaktivní prostředí Jupyter Notebooku je nejlepší popsat přímo s využitím screenshotů:

Obrázek 21: Načtení testovací datové sady.

Obrázek 22: Zobrazení statistických informací o datové sadě.

17. Vykreslení grafů do plochy diáře

Obrázek 23: Zobrazení jednoduchého grafu.

Obrázek 24: Aproximace hodnot křivkou (povšimněte si, že ne všechny vlastnosti ggplot2 jsou již nyní dostupné).

Obrázek 25: Aproximace více křivkami, změna velikosti vykreslených bodů atd.

Root Docker

18. Repositář s demonstračními příklady

Zdrojové kódy všech dnes použitých demonstračních příkladů byly uloženy do nového Git repositáře, který je dostupný na adrese https://github.com/tisnik/most-popular-python-libs V případě, že z nějakého důvodu nebudete chtít klonovat celý repositář (ten je ovšem – alespoň prozatím – velmi malý, dnes má stále jen jednotky kilobajtů), můžete namísto toho použít odkazy na jednotlivé demonstrační příklady, které naleznete v následující tabulce:

# Demonstrační příklad Stručný popis demonstračního příkladu Cesta
1 01_economics_data.py tisk testovacích dat o ekonomice USA https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/01_e­conomics_data.py
2 02_economics_data_head.py výpis části testovacích dat https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/02_e­conomics_data_head.py
3 03_economics_type.py zjištění, jakého typu jsou testovací data https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/03_e­conomics_type.py
4 04_xyplot.py vytvoření jednoduchého korelačního diagramu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/04_xyplot.py
5 05_xyplot_show.py vykreslení korelačního diagramu do okna https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/05_xy­plot_show.py
6 06_xyplot_show.py alternativní způsob vykreslení https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/06_xy­plot_show.py
7 07_xyplot_show_pp.py jiné formátování předchozího příkladu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/07_xy­plot_show_pp.py
8 08_xyplot_show_pp.py alternativní formátování https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/08_xy­plot_show_pp.py
9 09_mtcars.py další testovací data dostupná v knihovně https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/09_mtcars.py
10 10_xyplot_display.py přidání a vizualizace dalších proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/10_xy­plot_display.py
11 11_xyplot_display.py rozdělení grafu do gridu/lattice https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/11_xy­plot_display.py
12 12_barchart.py jednoduchý sloupcový diagram https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/12_bar­chart.py
13 13_barchart.py další sloupcový diagram https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/13_bar­chart.py
14 14_histogram.py vykreslení histogramu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/14_his­togram.py
15 15_histogram.py další histogram https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/15_his­togram.py
16 16_xyplot_more_variables.py zobrazení hodnot z více sloupců v grafu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/16_xy­plot_more_variables.py
17 17_xyplot_more_variables_smooth.py zobrazení hodnot z více sloupců v grafu + aproximace křivkou https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/17_xy­plot_more_variables_smoot­h.py
18 18_smoothing.py aproximace dat křivkou https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/18_smo­othing.py
19 19_smoothing_span0_5.py aproximace dat křivkou, změna parametrů výpočtu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/19_smo­othing_span0_5.py
20 20_smoothing_span0_2.py aproximace dat křivkou, změna parametrů výpočtu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/20_smo­othing_span0_2.py
21 21_lm.py proložení dat přímkou s využitím lineární regrese https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/21_lm.py

Většina předchozích demonstračních příkladů zobrazila graf s samostatném okně s možností manipulace s tímto grafem. Další příklady vytvoří naprosto stejné grafy, ovšem uloží je do souboru ve formátu PNG (jedná se tedy o rastrový obrázek použitelný například na webových stránkách atd., viz odkazy uvedené na samotném konci článku):

# Demonstrační příklad Stručný popis demonstračního příkladu Cesta
1 04_xyplot.py export jednoduchého korelačního diagramu do souboru https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/04_xyplot.py
2 05_xyplot_show.py vytvoření jednoduchého korelačního diagramu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/05_xy­plot_show.py
3 06_xyplot_show.py alternativní způsob vykreslení https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/06_xy­plot_show.py
4 07_xyplot_show_pp.py jiné formátování předchozího příkladu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/07_xy­plot_show_pp.py
5 08_xyplot_show_pp.py alternativní formátování https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/08_xy­plot_show_pp.py
6 10_xyplot_display.py přidání a vizualizace dalších proměnných https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/10_xy­plot_display.py
7 11_xyplot_display.py rozdělení grafu do gridu/lattice https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/11_xy­plot_display.py
8 12_barchart.py jednoduchý sloupcový diagram https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/12_bar­chart.py
9 13_barchart.py další sloupcový diagram https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/13_bar­chart.py
10 14_histogram.py vykreslení histogramu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/14_his­togram.py
11 15_histogram.py další histogram https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/15_his­togram.py
12 16_xyplot_more_variables.py zobrazení hodnot z více sloupců v grafu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/16_xy­plot_more_variables.py
13 17_xyplot_more_variables_smooth.py zobrazení hodnot z více sloupců v grafu + aproximace křivkou https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/17_xy­plot_more_variables_smoot­h.py
14 18_smoothing.py aproximace dat křivkou https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/18_smo­othing.py
15 19_smoothing_span0_5.py aproximace dat křivkou, změna parametrů výpočtu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/19_smo­othing_span0_5.py
16 20_smoothing_span0_2.py aproximace dat křivkou, změna parametrů výpočtu https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/20_smo­othing_span0_2.py
17 21_lm.py proložení dat přímkou s využitím lineární regrese https://github.com/tisnik/most-popular-python-libs/blob/master/plotnine/21_lm.py

19. Odkazy na Internetu

  1. Using ggplot in Python: Visualizing Data With plotnine
    https://realpython.com/ggplot-python/
  2. A Grammar of Graphics for Python
    https://plotnine.readthedoc­s.io/en/stable/
  3. Plotnine gallery
    https://plotnine.readthedoc­s.io/en/latest/gallery.html
  4. plotnine 0.7.1 na PyPi
    https://pypi.org/project/plotnine/
  5. plotnine-examples 0.0.4 na PyPi
    https://pypi.org/project/plotnine-examples/
  6. plotnine examples repository
    https://github.com/has2k1/plotnine-examples
  7. Data visualization in R: cheat sheet
    https://github.com/rstudi­o/cheatsheets/blob/master/da­ta-visualization-2.1.pdf
  8. The R Project for Statistical Computing
    https://www.r-project.org/
  9. An Introduction to R
    https://cran.r-project.org/doc/manuals/r-release/R-intro.pdf
  10. R (programming language)
    https://en.wikipedia.org/wi­ki/R_(programming_language)
  11. The R Programming Language
    https://www.tiobe.com/tiobe-index/r/
  12. R Graphics Second Edition
    https://www.stat.auckland­.ac.nz/~paul/RG2e/
  13. ggplot2 – Introduction
    https://www.tutorialspoin­t.com/ggplot2/ggplot2_intro­duction.htm
  14. ggplot2: Elegant Graphics for Data Analysis
    https://ggplot2-book.org/index.html
  15. Create Elegant Data Visualisations Using the Grammar of Graphics
    https://www.rdocumentation­.org/packages/ggplot2/ver­sions/3.3.2
  16. Grid
    https://www.stat.auckland­.ac.nz/~paul/grid/grid.html
  17. Interactive Course: Data Visualization with lattice in R
    https://www.datacamp.com/courses/data-visualization-in-r-with-lattice
  18. Lattice: trellis graphics for R
    https://lattice.r-forge.r-project.org/
  19. Lattice: Multivariate Data Visualization with R
    http://lmdvr.r-forge.r-project.org/figures/figures.html
  20. Getting Started with Lattice Graphics
    https://lattice.r-forge.r-project.org/Vignettes/src/lattice-intro/lattice-intro.pdf
  21. Using lattice’s xyplot()
    https://homerhanumat.github­.io/tigerstats/xyplot.html
  22. ggplot2 Tutorial
    https://www.tutorialspoin­t.com/ggplot2/index.htm
  23. Lattice Package in R with Functions and Graphs
    https://techvidvan.com/tu­torials/lattice-package-in-r/
  24. The R Graph Gallery
    https://www.r-graph-gallery.com/index.html
  25. Lattice Graphs
    https://www.statmethods.net/ad­vgraphs/trellis.html
  26. ggplot2 (Graph gallery)
    https://www.r-graph-gallery.com/ggplot2-package.html
  27. R Markdown
    https://rmarkdown.rstudio.com/
  28. R Markdown: The Definitive Guide
    https://bookdown.org/yihui/rmarkdown/
  29. R Markdown Cheat Sheet
    https://rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf
  30. Introduction to R Markdown
    https://rmarkdown.rstudio­.com/articles_intro.html
  31. R Cheat Sheets
    https://blog.sergiouri.be/2016/07/r-cheat-sheets.html
  32. R Cheat Sheet
    https://s3.amazonaws.com/quandl-static-content/Documents/Quandl±+R+Che­at+Sheet.pdf
  33. Base R Cheat Sheet
    https://rstudio.com/wp-content/uploads/2016/06/r-cheat-sheet.pdf
  34. PYPL PopularitY of Programming Language
    https://pypl.github.io/PYPL.html
  35. Tiobe index
    https://www.tiobe.com/tiobe-index/
  36. Stack Overflow: Most Loved, Dreaded & Wanted Programming Languages In 2020
    https://fossbytes.com/stack-overflow-most-loved-dreaded-wanted-programming-languages-in-2020/
  37. How to Install and Use R on Ubuntu
    https://itsfoss.com/install-r-ubuntu/
  38. R programming for beginners – Why you should use R
    https://www.youtube.com/wat­ch?v=9kYUGMg_14s
  39. GOTO 2012 • The R Language The Good The Bad & The Ugly
    https://www.youtube.com/wat­ch?v=6S9r_YbqHy8
  40. Intro to Data Visualization with R & ggplot2
    https://www.youtube.com/wat­ch?v=49fADBfcDD4
  41. Plotting with ggplot2: Part 1
    https://www.youtube.com/wat­ch?v=HeqHMM4ziXA
  42. Plotting with ggplot2: Part 2
    https://www.youtube.com/wat­ch?v=n8kYa9vu1l8
  43. R vs Python – What should I learn in 2020? | R and Python Comparison
    https://www.youtube.com/wat­ch?v=eRP_J2yLjSU
  44. R Programming 101
    https://www.youtube.com/c/rpro­gramming101
  45. Seriál Tvorba grafů pomocí programu „R“
    https://www.root.cz/serialy/tvorba-grafu-pomoci-programu-r/
  46. Tvorba grafů pomocí programu „R“: úvod
    https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-1/
  47. Tvorba grafů pomocí programu „R“: pokročilé funkce
    https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-pokrocile-funkce/
  48. Tvorba grafů pomocí programu „R“: vkládání textu, čeština
    https://www.root.cz/clanky/grafy-pomoci-programu-r-vkladani-textu-cestina/
  49. Cesta erka: Krok nultý – instalace & nastavení – prostředí, projekty, package
    https://www.jla-data.net/r4su/r4su-environment-setup/
  50. Cesta erka: Krok první – operace a struktury – proměnné, rovnítka a dolary
    https://www.jla-data.net/r4su/r4su-data-structures/
  51. Cesta erka: Krok druhý – načtení externích dat – csvčka, excely a databáze
    https://www.jla-data.net/r4su/r4su-read-data/
  52. Cesta erka: Krok třetí – manipulace s daty – dplyr, slovesa a pajpy
    https://www.jla-data.net/r4su/r4su-manipulate-data/
  53. Cesta erka: Krok čtvrtý – podání výsledků – ggplot, geomy a estetiky
    https://www.jla-data.net/r4su/r4su-report-results/
  54. Cesta erka: Krok pátý – case study – případ piva v Praze
    https://www.jla-data.net/r4su/r4su-case-study-beer/
  55. V indexu popularity programovacích jazyků TIOBE překvapilo R, Go, Perl, Scratch a Rust
    https://www.root.cz/zpravicky/v-indexu-popularity-programovacich-jazyku-tiobe-prekvapilo-r-go-perl-scratch-a-rust/
  56. Is R Programming SURGING in Popularity in 2020?
    https://www.youtube.com/watch?v=Duwn-vImyXE
  57. Using the R programming language in Jupyter Notebook
    https://docs.anaconda.com/a­naconda/navigator/tutorial­s/r-lang/
  58. Using R on Jupyter Notebook
    https://dzone.com/articles/using-r-on-jupyternbspnotebook
  59. Graphics, ggplot2
    http://r4stats.com/examples/graphics-ggplot2/
  60. A Practice Data Set
    https://r4stats.wordpress­.com/examples/mydata/
  61. Shiny – galerie projektů
    https://shiny.rstudio.com/gallery/
  62. Seriál Programovací jazyk Julia
    https://www.root.cz/seria­ly/programovaci-jazyk-julia/
  63. Julia (front page)
    http://julialang.org/
  64. Julia – repositář na GitHubu
    https://github.com/JuliaLang/julia
  65. Julia (programming language)
    https://en.wikipedia.org/wi­ki/Julia_%28programming_lan­guage%29
  66. IJulia
    https://github.com/JuliaLan­g/IJulia.jl
  67. Introducing Julia
    https://en.wikibooks.org/wi­ki/Introducing_Julia
  68. Julia: the REPL
    https://en.wikibooks.org/wi­ki/Introducing_Julia/The_REPL
  69. Introducing Julia/Metaprogramming
    https://en.wikibooks.org/wi­ki/Introducing_Julia/Meta­programming
  70. Month of Julia
    https://github.com/DataWo­okie/MonthOfJulia
  71. Learn X in Y minutes (where X=Julia)
    https://learnxinyminutes.com/doc­s/julia/
  72. New Julia language seeks to be the C for scientists
    http://www.infoworld.com/ar­ticle/2616709/application-development/new-julia-language-seeks-to-be-the-c-for-scientists.html
  73. Julia: A Fast Dynamic Language for Technical Computing
    http://karpinski.org/publi­cations/2012/julia-a-fast-dynamic-language
  74. The LLVM Compiler Infrastructure
    http://llvm.org/
  75. Julia: benchmarks
    http://julialang.org/benchmarks/
  76. R Vector
    https://www.datamentor.io/r-programming/vector/
  77. .R File Extension
    https://fileinfo.com/extension/r
  78. Lineární regrese
    https://cs.wikipedia.org/wi­ki/Line%C3%A1rn%C3%AD_regre­se
  79. lm (funkce)
    https://www.rdocumentation­.org/packages/stats/versi­ons/3.6.2/topics/lm
  80. quit (funkce)
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/quit
  81. c (funkce)
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/c
  82. help (funkce)
    https://www.rdocumentation­.org/packages/utils/versi­ons/3.6.2/topics/help
  83. Shiny: Introduction to interactive documents
    https://shiny.rstudio.com/ar­ticles/interactive-docs.html
  84. R Release History 1997–2013
    http://timelyportfolio.git­hub.io/rCharts_timeline_r/
  85. R: atomic vectors
    https://renenyffenegger.ch/no­tes/development/languages/R/da­ta-structures/vector/
  86. 11 Best R Programming IDE and editors
    https://www.dunebook.com/best-r-programming-ide/
  87. CRAN – The Comprehensive R Archive Network
    https://cran.r-project.org/
  88. R – Arrays
    https://www.tutorialspoin­t.com/r/r_arrays.htm
  89. Array vs Matrix in R Programming
    https://www.geeksforgeeks.org/array-vs-matrix-in-r-programming/?ref=rp
  90. Online R Language IDE
    https://www.jdoodle.com/execute-r-online/
  91. Execute R Online (R v3.4.1)
    https://www.tutorialspoin­t.com/execute_r_online.php
  92. Snippets: Run any R code you like. There are over twelve thousand R packages preloaded
    https://rdrr.io/snippets/
  93. R Package Documentation
    https://rdrr.io/
  94. Data Reshaping in R – Popular Functions to Organise Data
    https://techvidvan.com/tutorials/data-reshaping-in-r/
  95. What is an R Data Frame?
    https://magoosh.com/data-science/what-is-an-r-data-frame/
  96. What's a data frame?
    https://campus.datacamp.com/cou­rses/free-introduction-to-r/chapter-5-data-frames?ex=1
  97. data.frame
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/data.frame
  98. as.data.frame
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/as.data.fra­me
  99. table
    https://www.rdocumentation­.org/packages/base/version­s/3.6.2/topics/table
  100. Python Pandas – DataFrame
    https://www.tutorialspoin­t.com/python_pandas/python_pan­das_dataframe.htm
  101. The Pandas DataFrame: Make Working With Data Delightful
    https://realpython.com/pandas-dataframe/
  102. Python | Pandas DataFrame
    https://www.geeksforgeeks.org/python-pandas-dataframe/
  103. R – Factors
    https://www.tutorialspoin­t.com/r/r_factors.htm
  104. R – Scatterplots
    https://www.tutorialspoin­t.com/r/r_scatterplots.htm
  105. Quick guide to line types (lty) in R
    https://www.benjaminbell.co­.uk/2018/02/quick-guide-to-line-types-lty-in-r.html
  106. Lattice C (Wikipedia)
    https://en.wikipedia.org/wi­ki/Lattice_C
  107. Lorenz Attractor in R
    https://www.sixhat.net/lorenz-attractor-in-r.html
  108. Small multiple
    https://en.wikipedia.org/wi­ki/Small_multiple
  109. Category:Infographics (infografika)
    https://en.wikipedia.org/wi­ki/Category:Infographics
  110. Trellis plots (pro Python)
    https://subscription.packtpub­.com/book/big_data_and_bu­siness_intelligence/9781784390150/4/ch04l­vl1sec41/trellis-plots
  111. Trellis (architecture)
    https://en.wikipedia.org/wi­ki/Trellis_(architecture)
  112. Izobara (meteorologie)
    https://cs.wikipedia.org/wi­ki/Izobara_(meteorologie)
  113. How to Create a Lattice Plot in R
    https://www.dummies.com/pro­gramming/r/how-to-create-a-lattice-plot-in-r/
  114. Density estimation
    https://en.wikipedia.org/wi­ki/Density_estimation
  115. Sedm smrtelných statistických hříchů
    http://dfens-cz.com/sedm-smrtelnych-statistickych-hrichu/
  116. Spurious correlations
    https://tylervigen.com/spurious-correlations
  117. R programming
    https://www.slideshare.net/shan­tanupatil104/r-programming-44637606
  118. R language tutorial
    https://www.slideshare.net/ChiuYW/r-language-tutorial
  119. An Interactive Introduction To R (Programming Language For Statistics)
    https://www.slideshare.net/da­taspora/an-interactive-introduction-to-r-programming-language-for-statistics
  120. Notebook interface
    https://en.wikipedia.org/wi­ki/Notebook_interface
  121. Jypyter: open source, interactive data science and scientific computing across over 40 programming languages
    https://jupyter.org/
  122. nbviewer: a simple way to share Jupyter Notebooks
    https://nbviewer.jupyter.org/
  123. Video streaming in the Jupyter Notebook
    https://towardsdatascience.com/video-streaming-in-the-jupyter-notebook-635bc5809e85
  124. How IPython and Jupyter Notebook work
    https://jupyter.readthedoc­s.io/en/latest/architectu­re/how_jupyter_ipython_wor­k.html
  125. Jupyter kernels
    https://github.com/jupyter/ju­pyter/wiki/Jupyter-kernels
  126. PNG is Not GIF
    https://www.root.cz/clanky/png-is-not-gif/
  127. Anatomie grafického formátu PNG
    https://www.root.cz/clanky/anatomie-grafickeho-formatu-png/
  128. PNG – bity, byty, chunky
    https://www.root.cz/clanky/png-bity-byty-chunky/
  129. Řádkové filtry v PNG
    https://www.root.cz/clanky/radkove-filtry-v-png/
  130. Nepovinné chunky v PNG a kontrola pomocí CRC
    https://www.root.cz/clanky/nepovinne-chunky-v-png-a-kontrola-pomoci-crc/