pondělí 23. listopadu 2015

#dataviz15 #6 D3.js

V hodině o základech D3.js hodně mých spolužáků tápalo. Rozhodl jsem se trochu osvětlit, jaké kroky vedly k výsledku. Zde je fiddle:

Nejprve voláme funkci d3.csv(url, callback). Ta stáhne soubor na url a zavolá funkci callback jakmile je soubor stažen.

Jako callback předáme naši vlastní funkci – tato funkce obdrží od D3 data, se kterými můžeme pracovat. Dovnitř funkce napíšeme celý náš program.

Naše funkce má jako parametr data. Přesně tam budou data z csv souboru a můžeme s nimi dále pracovat. Jsou uloženy jako pole řádků z našeho souboru. Pole je datová konstrukce ze světa programování. Umožňuje mít více hodnot v jednom objektu, jedné proměnné. Hodnoty jsou očíslované – něco jako šuplíčky s čísly.

Zdrojový CSV soubor má 2 řádky, ale protože první řádek chápe D3 jako názvy sloupců, je v našem poli právě jeden řádek. Ten získáme jako data[0]. Počítáme od nuly. Hodnota v prvním chlívečku je objekt. Objekt je si lze představit jako šuplíčky, které mají jméno. V našem případě jsou mají šuplíčky popisky roky 2000-2014. V šuplíčcích se skrývají číselné hodnoty pro jednotlivé roky. Uff.

Možná někoho napadá, že naše csv vlastně mohlo mít jako popisky sloupců “rok” a “hodnota”- V jednotlivých řádcích by pak mělo rok a hodnota. Celé by to pak bylo jednodušší. Naštěstí, protože d3 je mocný nástroj, umožní nám takovou věc udělat velice snadno. (To se na hodině neukazovalo – tj. to vylepšení v rámci DÚ).

var rows = d3.entries(data[0]);



Do proměnné rows uložíme výsledek volání d3.entries(data[0]). To je funkce d3, která udělá z objektu pole. Jak? Vezme z šuplíčku nálepku (klíč - key) a jeho obsah (value) a vloží je do nového šuplíčku v poli. Nyní tedy máme v proměnné rows uloženy jednotlivé řádky tak, jak bychom si je přáli. Každý řádek má svůj klíč a svou hodnotu.

var chart = d3.select("#chart");

Také si založíme proměnou chart. Její obsahem bude HTML element s id ‘chart’. Teď přijde složitější konstrukce:

var row = chart.selectAll('div')
.data(rows)
.enter()
.append('div');

Ta říká: Z elementu chart vyber všechny elementy div (i budoucí). Ty svážeme s daty – s řádky z proměnné rows. Pak říkáme, co se má stát, když přijdou nová data (enter) – nový řádek. V tom případě se má k vybraným ‘divům’ přidat další ‘div’.

row.append('div')
.text(function (d) {
return d.key;
})
.classed('label', true);

Do každého řádku přidáme další div. To bude popisek s rokem. Nastavíme mu text. Abychom se dostali k datům, tak jako parametr předáme funkci. Ta funkce od d3 obdrží právě jeden řádek, který pochází z těch dat, které jsme svázali s každým divem. Ten řádek bude v parametru d. To je objekt – má dva šuplíčky, jeden se jmenuje key a druhý value. Jsou to přesně ty samé jako jsem o nich hovořil výše. V šuplíčku key je uložen rok a ten nás přesně zajímá. Proto vrátíme (return) hodnotu z šuplíčku d.key. Ta se použije jako text divu. Také nastavíme novému divu třídu ‘label’.

row.append('div')
.classed('bar', true)
.text(function (d) {
return d.value;
})
.style('width', function (d) {
return d.value / 2000 + 'px';
});

Ke každému řádku přidáme ještě jeden div. To bude sloupec našeho grafu. Nastavíme mu třídu ‘bar’ a jako text mu vložíme hodnotu ze šuplíčku ‘value’. Předáme mu ještě styl. Tím je jeho šířka. Tedy šířka sloupce grafu. Zde by se hodila použít nějaká škála, pro zjednodušení prostě vydělíme naše data. Šířku vypočteme tak, že vydělíme hodnotu 2000, aby nebyl sloupec příliš široký.


To je z javascriptového kódu vše. Zbývá jen nastylovat náš graf, aby hodnoty pěkně vynikly.

.bar {
background: #99f;
height: 20px;
margin-bottom: 5px;
margin-left: 50px;
color: white;
}
.label {
float: left;
width: 50px;
}

body {
font-family: sans-serif;
font-size: 12px;
}

Výsledek:


image


PS: Upřímně pochybuji, že někdo z mého popisu pochopil vo co tady de. Ale alespoň jsem to zkusil. A selhal.

neděle 25. října 2015

#dataviz15 #3 Špatné grafy

Dnes netvořím, ale za úkol mám najít špatné vizualizace. Jenže kde je hledat? Zabrousil jsem rovnou na novinky.cz a tn.cz. Po překonání pocitů nevolnosti nad titulky na tn.cz objevuji první článek, co by mohl obsahovat nějakou vizualizaci: V Česku přibývá lidí nakažených AIDS. Kde je riziko největší? (tn.cz, 25.10.2015, link). Článek je to vydatný, studenti žurnalistiky by si na něm smlsli.

Mapa - HIV infekce v České republice

Na obrázku vidíme mapu ČR v červené barvě, na ní jsou vyznačeny kraje, které mají popisky čísla s počty (asi) nově nakažených HIV. Na první pohled jsem si říkal, že to je docela v pohodě graf. Pár chvil mně do očí bila červená barva. Proč je graf celý červený? Potom mi začalo docházet, že ten graf není docela v pohodě.

Stejná data by dokázala reprezentovat i tabulka. Jaké výhody má tento graf oproti ní? Orientace na mapě může být rychlejší než v tabulce – zajímá mě, jak je na tom můj kraj, hned vím, kam se podívat. V tabulce bych hledal o něco déle. Taky můžu vyzkoušet čtenáře z vlastivědy, to je super. A ta možnost ho vybarvit červenou barvou a vyslat čtenářům vážnost situace. Tabulka není nejlepší způsob reprezentace dat, v porovnáním s tímto grafem si ale vede dobře.

Kdyby kraje byly vybarveny podle počtu případů na základě nějaké škály, mělo by jeho použití větší smysl. Jenže graf nestojí ve vákuu. Měl by odpovídat na správnou otázku a reprezentovat správná data.

Předpokládejme, že otázka Kde je riziko největší? není úplně zvrácená a má opravdu smysl se ptát kde. Odpovídají na ni souhrnné počty o nakažených z let 85-15? Je na tom Praha s milionem obyvatel hůř než liberecký kraj s 400 tisíci?  Asi jo, ale poměr nakažených na počet obyvatel není z grafu jasný a možnost si ho odvodit vyžaduje dost podrobnou vlastivědnou znalost i nějakou tu matematiku. Obojí by měla mít vizualizace v sobě.

Otázku nepovažuji ale za správnou, protože v nákaze HIV hraje roli spíše rizikové chování (což naštěstí článek uvádí) a ne to, kde člověk žije. Možná by se dala data zobrazit v poměru k zastoupení rizikových skupin.

Graf od tn.cz není tedy správně graficky, pracuje se špatnými daty a ptá se na nesprávnou otázku. Nápad na graf nejspíš vzešel z měsíční zprávy o HIV od Státního zdravotního ústavu. TN ho nekriticky převzala, obarvila a podpořila svou otázkou. Původní je k prohlédnutí níže.

hiv-85-szu

úterý 20. října 2015

#dataviz2015 #2 Cizinci v ČR pomocí SW

Jako druhý úkol jsme již pracovali se surovými daty z ČSÚ. Připravil jsem dva grafy (bohužel mapa se mi nepodařila). Částečně navazují na předchozí hodinu.

Na prvním grafu máme možnost vidět celkový počet cizinců v ČR v závislosti na čase, který je rozdělen na dvě části – cizinci z EU a cizinci ze států mimo EU. Opět jsem pracoval s agregovanými daty od ČSÚ, protože se měnily státy EU (Bulharsko, Rumunsko, Chorvatsko).

Z grafu je patrné, že od roku 2008 je počet cizinců v ČR víceméně stejný, a že cizinci mimo EU již nepřicházejí (navazuji na graf z minulého úkolu). Nahrazují je cizinci z EU.

V druhém grafu jsem se proto zaměřil na roční přírůstek/úbytek v těchto kategoriích.

Můžeme vidět, že po roce 2008 počet cizinců ze zemí mimo EU stále klesá, zatímco ze zemí EU se po propadu obrátil k nárůstu.

#dataviz15 #1 Cizinci v ČR rukou

Za první úkol jsme dostali nahodit rukou pár grafů podle obdržených dat. Data ukazovala počet cizinců v ČR v jednotlivých letech podle země původu. Pro první graf jsem se rozhodl využít agregovaná data o počtech cizinců z EU a ostatních zemí v jednotlivých letech.

Graf - cizinci EU/Non-EU

Vodorovná osa představuje počet cizinců pocházejících mimo EU, svislá ty z EU. V grafu jsou pak zaznamenány jednotlivé roky. Lze tedy vidět poměr cizinců v jednotlivých letech.

Několik prvních “křížků” vypadalo slibně – naznačovalo přímou úměru – tedy, že poměr cizinců z EU/non-EU se v čase nemění. Od roku 2009 ale nastal zvrat a graf se stal obtížně čitelným. Cizinci ze zemí mimo EU v čase začali z ČR odcházet (že by následek hospodářské krize?) a tak se naznačená přímka otočila v hokejku směrem vzhůru. Kdyby graf dělal člověk na počítači, asi by viděl všechna data najednou a nepřišlo by mu to jako dobrý nápad. Moje počáteční radost z přímé úměry byla pokažena.

Jako druhý graf jsem si vybral 3 země EU, ze kterých je v ČR nejvíce cizinců: Slovensko, Německo, Polsko a vynesl jsem na graf počty cizinců z těchto zemí v závislosti na čase.

 

Graf PL, SK, DE

Zde pak není co řešit. Je vidět, že po roce 2010 se růst počtu Slováků v ČR po zakolísání po roce 2008 obnovil, zatímco počet Němců a Poláků po roce 2010 spíše stagnuje.

pátek 3. července 2015

The Signal and the Noise - Book Review

Recenze knihy Nate Silver: Signal and the Noise (Signál a šum), kterou jsem zpracoval v rámci studia na FF UK.
Nate Silver, statistik a politický prognostik, ve své knize The Signal and the Noise: The Art and Science of Prediction (Penguin Books, 2013) analyzuje úspěšné a neúspěšné predikce v různých oblastech. Ukazuje na nich principy, které vedou k úspěchu, a chyby, kterých je dobré se při předpovídání vyvarovat. Název knihy Signál a šum odkazuje k přirovnání, které autor používá: Tvorbu předpovědí prezentuje jako hledání signálu uprostřed šumu. Představuje řadu principů pro správnou předpověď, za nejvýznamnější přístup považuje probabilistické smýšlení a bayesovskou logiku.

Kniha je vystavena na analýzách různých nezávislých oblastí lidského života a vědy, ve kterých se úspěšně či neúspěšně používá predikce. První tři kapitoly popisují neúspěch předpovědí, který vyústil ve finanční krizi v roce 2008, smíšené úspěchy předpovědí ve volbách a politice nebo úspěšný svět předpovědí v baseballu. Postupně uvádějí čtenáře do problému předpovědí a jejich následků. Další čtyři kapitoly se věnují predikcím v dynamických komplexních systémech: Předpověď počasí, zemětřesení, ekonomika a šíření infekčních nemocí. Autor v těchto kapitolách prohlubuje a rozšiřuje téma predikce. V kapitole 8 pak Silver představuje Bayesův teorém na ukázce sázkařství na sport a v dalších kapitolách ho aplikuje nejprve na hry šachy a poker (k. 9 a 10) a následně na složitější problémy globálního oteplování, terorismu a bublin na finančních trzích (k. 11, 12, 13). Kniha začíná úvodníkem o ekonomickém pokroku a růstu množství informací ve světě a je uzavřena zdůrazněním potřeby dobrých predikcí a přínosem aplikace bayesovské logiky.

Silver svou knihu organizuje velice dobře podle roustoucí složitosti problému. Úvodní slovo čtenáře možná více zmate, než uvede do problému, od první kapitoly je autor ale věcný, zároveň podrobný a dostatečně zdůrazňuje, co si má čtenář odnést. Postupně se dostává ke složitějším oblastem, ve kterých obtížně identifikuji, co přesně je hlavní myšlenka, kterou chce předat. Možná je to i tím, že na začátku více pojmenovává jevy, které chce zdůraznit a později je text spíše deskriptivní, aniž by vyzdvihoval některé myšlenky vůči jiným. Pro čtenáře tak může být obtížné odlišit signál a šum.
Byť kapitoly popisují odlišné oblasti lidského života, navazují na sebe principy a postupy předpovědí, které jsou v kapitolách popsány. I proto by na závěr jednotlivých kapitol pro zdůraznění sdělení mohl autor klíčové myšlenky shrnout. Na místo toho na konci kapitol spíše hovoří obecně o dopadech a vlivu předpovědí v analyzované oblasti. Shrnutí klíčových principů a možných chyb predikce na závěr kapitoly by umožnilo posílit provázanost kapitol a také umožnilo čtenáři odnést si více důležitých informací. Stejně tak by i celkový závěr knihy mohl více zopakovat klíčové myšlenky z knihy a měl by je podpořit fakty z předchozích kapitol namísto nových informací.

Snad se autor bál, aby jeho kniha nepřipomínala učebnici, a proto se neopakuje, spíše se snaží čtenáře bavit novými informacemi a příběhy. Je ovšem velice obtížné si z knihy odnést ucelenou znalost.
Knihu bych zařadil do oblasti populární naučné literatury. Autor používá srozumitelný jazyk a styl má blízko k vypravování: “But because of medicine’s intimate connection with life and death, doctors tend to be appropriately cautious. In their field, stupid models kill people.”(s. 230) Autor pečlivě anotuje převzatá tvrzení s odkazem na zdroj.

Jednotlivé oblasti a role predikce v nich jsou popsány formou příběhů. Autor také vedl rozhovory s lidmi z oblasti a popisuje jejich osobní příběhy. I proto se kniha dobře čte. Obsah je velmi dobře připraven a promyšlená struktura knihy usnadňuje proniknutí do celého oboru predikcí. Z knihy jsem měl dojem, že sleduji dobrodružství předpovídání v dnešním.

Při čtení jsem cítil, že držím v ruce opravdu kvalitní knihu od člověka s mnoha zkušenostmi. Přesto jsem ke konci knihy přemýšlel, zda její rozsah nebyl mírně nad autorovy síly. Nebyl jsem schopen přesně sledovat to, co mi chce sdělit. Celkově díky skvělému obsahu knihu hodnotím jako vynikající dílo, které si zaslouží tu pozornost, kterou si po svém uvedení získalo.

The Signal and the Noise není pro čtenáře, kteří hledají přesné návody jak tvořit predikce v popsaných oborech. Je to ale kniha vhodná pro všechny, kteří se předpovědí zabývají v libovolném oboru, nebo s predikcemi začínají a chtějí získat široký pohled na věc. Přečíst si ji lze také pro zábavu, zvlášť pokud máte zájem o dnešní společnost a společenské či přírodní vědy.

SILVER, Nate. The signal and the noise: the art and science of prediction. London: Penguin, 2013. ISBN 978-014-1975-658.