(Pealkiri tuleb siit.)
Tänane postitus on järg eelmise nädala postitusele andmete töötlemise mõtteviisist, seekord praktilisemast küljest. Olen selgete graafikute tegemisest varem kirjutanud, aga rääkisin äsja sarnasel teemal Analüütikute konverentsil; võtan siin kokku ühe osa oma ettekandest.
Kui esitame infot piltide kujul, saame ära kasutada inimaju suurepärast pilditöötlusvõimekust — inimene on arenenud keskkonnas, kus hea visuaalne mudel maailmast on palju kasulikum kui oskus numbritabelitest olulist infot välja lugeda. Graafikud aitavad hetkega näha andmetes mustreid, mistõttu on visualiseerimine suurepärane viis anda kiire ülevaade näiteks ettevõtte finantsseisust, sinu kehakaalust viimase poole aasta jooksul või kõige rikkamatest omavalitsustest Eestis.1
Graafikute tegemine ei ole tehniliselt väga keeruline, aga on palju vigu, mida tehakse peaaegu igas joonistega dokumentis. Kõige hullemal juhul paneb visualiseering inimesi valesid otsuseid tegema, mistõttu on oluline näidata täpselt seda, mida andmed ja eksperimendid ütlevad ja mitte midagi enamat.
Kolm kõige olulisemat reeglit
Ilmselgelt ei saa kolme reegliga katta kõiki häid praktikaid andmevisualiseerimises, aga lühike list jääb paremini meelde ja need reeglid katavad kõige kriitilisemad osad. Kui tahad visualiseerimise põhimõtete kohta rohkem kuulda, siis soovitan alustada Tamara Munzneri ettekandest.
Konkreetselt: oletame, et tahame teha graafiku sellest, kui hästi ühel ettevõttel on viimase 10 aasta jooksul läinud, ja valime selle mõõtmiseks ettevõtte iga-aastase tulu. Näiteks võiks graafik näha välja selline:
Vaatame nüüd selle graafiku näitel kolme reeglit.
1. Ühel graafikul üks eesmärk
Iga graafik peaks edasi andma täpselt üht sõnumit. Eelneva aastatulu graafiku eesmärk on näidata tulu muutumist üle aastate: näiteks on näha, et 2007-2008 oli ettevõttel keerulisem aeg, aga muul ajal on tulu pidevalt kasvanud.2
Üks eesmärk ei tähenda aga, et pead kasutama ainult ühte andmestikku:
Selle graafiku eesmärk on eelmisest erinev: siin on väga hästi näha erinevus kahe ettevõtte käekäigus 10 aasta jooksul — näiteks oli ettevõte B kriisi ajal halvemas seisus kui A, aga muul ajal suutis kiiremini kasvada. Kui aga tahame aru saada ainult ettevõtte A käekäigust, siis on see graafik halvem kui eelmine — punane joon risustab graafikut ja takistab ühe pilguga rohelise joone kuju tajumist.
2. Minimaalselt müra
K: Mis järgneval graafikul valesti on?
V: see sisaldab täpselt sama infot, mis esimene graafik ettevõtte A kohta, aga on palju raskemini loetav — lisaks olulisele mustrile (oranž joon) on siin palju visuaalset müra. Täpsemalt teevad kiire tajumise raskeks:
- värviline taust3 ja teljed,
- liiga palju taustajooni4,
- liiga palju teljetähistusi nii horisontaal- kui vertikaalteljel5,
- mõttetud kümnendkohad vertikaalteljel6.
Kui su andmetöötlusprogramm seda võimaldab, siis soovitan graafiku tegemist alustada võimalikult väheste elementidega ja vajadusel neid lisada. Exceli (ja isegi R-i) tehtavad graafikud sisaldavad vaikimisi liiga palju visuaalset müra, seega on oluline sellele tähelepanu pöörata.
3. Lõppeesmärk on arusaamine
See on kõige olulisem: ainuke põhjus, miks graafikuid (väljaspool õppetunde) teeme, on andmetest arusaamine. Iga graafiku otsene eesmärk on näidata ettevõtet või inimest või riiki — ükskõik millist süsteemi — ühest küljest ja aidata lugejal kiire pilguga olulisemat tabada: inimene peab pärast graafiku vaatamist mõistma olukorda natuke paremini kui enne. Ideaalis aitab visualiseerimine andmete põhjal paremaid otsuseid teha.
Üks analüütik, kellega kunagi koos töötasin, viis eelmised kolm reeglit (põhjendatult) ekstreemumiteni: ta pani slaididele tillukesi graafikuid — näiteks — eesmärgiga näidata tulu/kulu/kasutajate arvu/kasutajate rahulolu muutumist viimasel viiel nädalal.7 Sellistelt graafikutelt saab ülikiire ülevaate trendist ja tihti polegi rohkemat vaja.
Pahad graafikud
Näitan nüüd paari graafikut, kuhu olen teadlikult mõned probleemid tekitanud. Soovitan kõigepealt mõelda, mida sina graafikul muudaksid, ja siis lugeda, mida mina kõige probleemsemaks pean.
Probleemid:
- Mida graafik kujutab? Kuna teljed pole tähistatud, siis ei ole arusaadav, mis on horisontaal- ja vertikaalteljel.8
- Trendist on natuke raske aru saada, seega võiks võtta suurema ajaakna, näiteks näidata projektide arvu aastas. (Sõltuvalt eesmärgist võib muidugi väiksem ajaaken parem olla.)
Probleemid:
- Graafik on infoga üle laetud ja jooned kattuvad — loetav on ainult Harjumaa joon.
- Legend ei ole väga hästi loetav — seal on liiga palju teksti (näiteks sõna “maakond” on üleliigne).
- Osa pealkirjast ei mahu graafikule.
Üks lahendus oleks teha eraldi graafik iga maakonna jaoks9 ja kuvada nad ruudustikus:
Sellisel graafikul on jällegi probleem, et väiksema mahuga maakondade graafikul on y-telje skaala halb — kui tahame iga maakonda näidata sellises skaalas, mis aitab mustrist aru saada 10, siis võime iga graafiku y-telje skaala eraldi teha. (See sõltub rakendusest — kui tahad võrrelda absoluutväärtusi, siis on kõigil ühise skaala kasutamine parem.)
Siin on tegelikult veel parenduskohti: maakondi võiks näidata eraldi üleriiklikest / maakondade koostööprojektidest ja värvid ei ole tingimata vajalikud.
Probleemid:
- Taustajoonte võrgustik on nii tugev, et takistab andmejoone nägemist.
- Kirjastiil on halb — graafikutes on parem kasutada mõnd seriifideta kirja — näiteks Ariali/Helveticat või Open Sansi.
See on ilmselt kõige hullem graafik selles postituses. Üks pisike probleem on pealkirja puudumine ja võib-olla on värvid siin kasutud, aga kõige suurem probleem on mõte, mida graafik edasi annab: Eesti SKP on oluliselt kõrgem kui ülejäänud kujutatud riikidel ja umbes 5 korda kõrgem kui Lätis — kas pole uskumatu, kui kaugele Eesti on jõudnud?
On küll uskumatu. Miks siis Eesti SKP tundub 5 korda kõrgem? Sest y-telg ei alga nullist. Õige graafik näeb välja selline:
Kahjuks on selline teljelõikamine levinud — olen seda näinud muuhulgas ka Postimehes. Seda viga tehti (päris kindlasti pahatahtlikult) 2015. aasta valimiskampaaniates, nagu Tanel Pärnamaa kirjutanud on.
Mis siis on lahendus? Konstantin Tretjakov on teinud selle kohta hea visuaalse kokkuvõtte (inglise keeles).11
Probleem: siin graafikul on (mingi ettevõtte) aastatulu, aga kuna joon on sujuv ja andmepunkte pole näha, siis ei ole selge, kui tihti seda mõõdeti — vaikimisi eeldaksin, et igal aastal. Paneme andmepunktid juurde:
Okei, nüüd on selge, kui palju andmeid meil päriselt on, aga siin on veel üks probleem: millegipärast on punktid ühendatud sujuva joonega. Sujuv joon jätab vääralt mulje, et teame hästi, kuidas aastatulu muutub.12 Ma tean, et see tundub ilusam kui murdjoon, aga tuleta meelde, et eesmärk on arusaamine — ja me ei taha öelda lugejale midagi, mida andmetes tegelikult ei ole.
Kokkuvõte
Tee minimalistlikke ühe eesmärgiga graafikuid, et saada aru, mis andmetes toimub.
Graafikute tegemiseks kasutatud R-i kood on kättesaadav siin.
Jaga:
Märkused
- Visualiseerimine ei ole alati parim lahendus: kui lugejal on vaja näha täpseid arve ja mitte üldisi mustreid, siis on tabel parem (kuigi internetis andmeid esitades saab hiirega graafiku kohal hõljudes näidata arve ilma graafikut segaseks tegemata).
- Jah, selle ettevõtte tulu on suurusjärgus 5 eurot.
- Või täpsemalt: madal kontrast andmeseeria oranži ja tausta sinise värvi vahel.
- Tavaliselt aitavad need silmal graafikut osadeks jagada, aga siin on neid lihtsalt liiga tihedalt.
- On üsna selge, et 2005 ja 2007 vahel on 2006.
- Kuna need on kõigil arvudel täpselt samad, siis ei lisa nad graafikule mingit infot.
- Kontekstist oli muidugi aru saada, mida graafikul kujutatakse; lisaks oli kõrval tabel, mis näitas graafiku aluseks olnud arve.
- Okei, pealkirja põhjal saab selle välja mõelda, aga on halb panna lugeja nii palju tööd tegema. Pealegi ei ole selge, mis on y-telje ühik — projekte aastas? kuus? nädalas?
- R-is saab ggplot2 kasutades seda teha käsuga facet_wrap.
- R+ggplot2: facet_wrap(scales=”free_y”).
- Kui seal pakutud lahendused tunduvad sulle tehniliselt liiga keerulised, siis soovitan kasutada lõikamata teljega graafikut. Kui VÄGA tahad, siis võid panna kõrvuti lõikamata ja lõigatud teljega graafikud, aga sel juhul kirjuta paksus punases kirjas juurde, et y-telg ei alga nullist.
- et meil on läbimõeldud viis interpoleerimiseks