Duomenų analitiko darbas dažniausiai yra duomenų valymas

Turbūt didžiausias skirtumas tarp mokykloje ar universitete darytų duomenų analizių ir realaus pasaulio yra turimų duomenų kokybė. Rašėm savaitgaliais magistrinius darbus, pasižiūrėdami į kursiokų failus darėm „statistikos laboratorinius“, sprendėm uždavinius bei iš vadovėlio atkartojom nelabai suprantamas ekonometrinius modelius – ir  beveik visada duomenys buvo duotybė. Ar tai būtų BVP augimo eilutė iš Statistikos departamento, ar Olimpiadų medalių suvestinė: beveik visada duomenys buvo švarūs, tvarkingi, be klaidų, be neužpildytų eilučių, be praleistų kablelių, romėniškų skaitmenų, sunkiai įskaitomo buhalterės Janinos rašto ir pasimetusių sąskaitų-faktūrų. Tereikėdavo tuos duomenis paimti, sudėti į modelį, sukalbėti kelis užkeikimus ir gaudavai vienintelę teisingą p reikšmę ir iš to sekančią išvadą. Didesnis nedarbas yra mažesnė infliacija. Narystė Europos Sąjungoje didina akcijų kainas. Marytė suvalgo daugiau obuolių nei Jonukas.

Skirtingai nei universitete, realybėje duomenys beveik niekada nebūna aiškūs ir tvarkingi. Dažniausiai tau reikiamų duomenų tiesiog nėra (ar daug kas kaupia duomenis apie kiekvienos fizinės parduotuvės kasvalandinį lankytojų srautą?). Jeigu jų galima rasti – jie nepatikimi, nes iki galo nežinai, ar kiekviena apskaitininkė visose Baltijos šalyse prieš penkerius metus vienodai koduodavo gautas sąskaitas. Jeigu jais galima pasitikėti, jie tikriausiai būna nepilni – vienur trūksta detalumo, kitur kažkas nusimušę, trečioje vietoje duomenys nepasiekiami, nes jie nesuskaitmenizuoti. Jau nekalbu apie tai, kad visur yra ir žmogiškas faktorius: kažkur vardas įvestas į pavardės grafą, kažkas sumas vietoje eurų įrašė litais. Kuo daugiau duomenų (ir ypač jei kalbam apie didelius duomenis be struktūros) tuo didesnė duomenų analitiko darbo laiko dalis yra ne sudėtingas duomenų modeliavimas ar rezultatų interpretavimas, o duomenų tvarkymas bei paruošimas analizei. Sakoma, kad šiam kruopščiam ir nuobodokam darbui analitikai sugaišta nuo 50 iki 80 procentų savo darbo laiko.

Gerai sutvarkyti duomenys yra aukso vertės. Tai tokie duomenys, kuriuose nebėra erdvės interpretacijoms, kuriuose nelikę klaidų ir kuriais tvirtai galima remtis darant verslo sprendimus. Tik juos išvalius galima kurti sudėtingus modelius bei algoritmus, o iki tol reikia praleisti ne vieną valandą rymant prie duomenų kokybės. Toks analitiko darbas.

Kada duomenys gali padėti priimti sprendimus?

Prieš pusantrų metų mano rašytas dienoraščio įrašas apie duomenų kultūrą organizacijose pastarosiomis savaitėmis vėl iš naujo užkabino skaitytojus: šia tema parašė „Verslo žinios“ ir apie tai nemažai buvo kalbama Login koridoriuose. Matyt, kompanijose duomenų atsiranda vis daugiau, tik dar nelabai aišku, kaip iš jų išpešti naudos.

Kad ir kaip skambėtų neįprastai, manau, jog duomenų analizėje sudėtingiausia yra ne algoritmai ir ne duomenų infrastruktūra. Svarbiausia ne kur stovi jūsų serveriai, kokia kalba parašytos jūsų duomenų apdorojimo programos ar kuris kietas matematikas darys statistinę jūsų klientų analizę. Svarbiausia, ar jūsų kompanijos kultūra leis jums priimti verslo sprendimus remiantis šaltais ir objektyviais duomenimis, nekreipiant dėmesio į vidinį politikavimą ir norą prieš vadovą pasirodyti geresniu nei esi. Iš duomenų analizės jokios naudos (o netgi sakyčiau dar blogiau – ji žalinga!), jeigu ji naudojama tik savo išankstinei nuomonei apginti bei parodyti, kad jūsų padalinys dirba puikiai. Analitikai turėtų būti skatinami ieškoti kontraargumentų vyraujančiai nuomonei, nes duomenys tam ir yra, kad sprendimai būtų priimami ne vien tik pagal vadovo šeštąjį jausmą. Tai nelengva, jei vadovas galvoja, jog jis geriausiai viską išmano, o jam dirba tik jo valią vykdantys pavaldiniai.

Būti atviram pačiam sau nelengva bet kuriam vadovui. Kartais, žvelgiant į duomenis, reikia giliai įkvėpti ir pripažinti klydus: gal visgi už krentančius pardavimus yra kalti ne konkurentai ar oro temperatūra, o ne itin tobulas pačios kompanijos darbas. Gal nepataikyta su rinkodara, gal buvo problema su sandėliu, gal pritrūko vadybininkų, gal buvo broko ar kokių kitų nesklandumų. Duomenų analizės nauda prasideda nuo atvirumo sau, nuo nuoširdaus noro išsiaiškinti, kur yra problemos šaknys ir noro ją išspręsti. O tai neįmanoma, jeigu kompanijoje vyrauja kaltų paieškos kultūra: natūralu, kad visi stengsis duomenis pagražinti ir parodyti save kuo geresnėje šviesoje.

Tad kai šiomis dienomis kas nors manęs paklausia, ko reikia imtis pirmiausia, kad duomenys padėtų priimti verslo sprendimus, atsakau, jog tai vadovų tikėjimas duomenų kultūra ir realus noras prisikasti iki tiesos. Net geriausi algoritmai jūsų verslui nepadės, jei sprendimai ir toliau bus priimami vien tik remiantis nenuginčijama aukščiausio vadovo nuomone arba jei save pagiriant analizės bus naudojamos tik gražesniam paveikslui valdybai pateikti. Pradėti reikia nuo kompanijos kultūros.

Telefonas žino, kada tu nuėjai miegoti

Iš anksto įspėju: tai techniškas įrašas, kuris bus įdomus tik stiprokai užkietėjusiems duomenų analitikams, kurių negąsdina R ar Ruby. Jei šie dalykai jus nelabai domina, štai trumpa įrašo santrauka: jūsų telefonas gali kaupti daug įdomios informacijos apie jūsų judėjimą, mat jis moka būti ir žingsniamačiu. Tuos duomenis galima išsitraukti ir pribraižyti visokių gudrių grafikų, kurie parodo, kad kažkodėl antradieniais ir ketvirtadieniais jūs keliatės valandą anksčiau nei įprastai, 2015 metų gegužę kelias savaites praleidote kitoje Atlanto pusėje ar bent jau panašioje laiko zonoje, o tų pačių metų rugsėjo pradžioje buvote vakarėlyje, iš kurio grįžote apie 2 valandą ryto.

Išsitraukti duomenis iš iPhone telefono nesudėtinga: keli mygtukų paspaudimai, keletas minučių laukimo, ir sugeneruojamas nemažas XML archyvas. Jame yra ne vien tik nueiti žingsniai ir kilometrai, bet ir visi kiti Health programėlės duomenys: gal ten kada vedėtės savo svorį, gal dar koks Runkeeper ten saugojo bėgimo rezultatus ar panašiai – viskas bus viename archyve. Duomenų nemažokai: per pusantrų metų vien žingsniamačio duomenų buvo virš 130 tūkstančių įrašų. Iki 2015 kovo pabaigos, kai Apple išleido Apple Watch ir atnaujino žingsniamačio programinę įrangą, telefonas per dieną jų sugeneruodavo po kelis tūkstančius eilučių. Vos tik stabteli ir atsiranda naujas įrašas: per paskutinės keturias sekundes nuėjai 3,5 metro. Vėliau jau duomenys užrašinėjami ne tokiu jautrumu, tad duomenų mažiau, ir jie nebe tokie smulkūs (nors suminis nueitų žingsnių/kilometrų kiekis nepakito).

XML su Ruby konvertavau į CSV:

require 'nokogiri'
puts "start,end,source,dist"
doc = File.open('export.xml') { |f| Nokogiri.XML(f) }
doc.xpath("//Record[@type='HKQuantityTypeIdentifierDistanceWalkingRunning']").each do |record|
  puts "#{record['startDate']},#{record['endDate']},#{record['sourceName']},#{record['value']}"
end

Tada su R po nedidelių duomenų pakeitimų (tais atvejais, kai judėjimas tęsiasi per vidurnaktį, reikėjo įrašą išskaidyti į du segmentus: iki vidurnakčio ir po jo) sudėjau visus duomenis ant vieno grafiko. Aišku, kai duomenų eilučių šimtas tūkstančių, tai jis labiau primena baltąjį triukšmą, nors kai kurie dalykai visgi matosi: tarkim, galima matyti, jog 2015 gegužę judėjimo ir ramybės laikas ryškiai pasistūmęs, nes tuo metu buvau už Atlanto.

library(lubridate)
library(ggplot2)
library(data.table)

foo = read.csv("distances.csv")
foo$start_hour = hour(foo$start) + minute(foo$start)/60 + second(foo$start)/3600
foo$end_hour = hour(foo$end) + minute(foo$end)/60 + second(foo$end)/3600

foo_overlap = foo[end_hour < start_hour]
foo_overlap[end_hour < start_hour, start_hour := 0]
foo_overlap[end_hour < start_hour, start := end]
foo$end_hour = ifelse(foo$end_hour < foo$start_hour, 24, foo$end_hour)
foo_awesome = rbind(foo, foo_overlap)

ggplot(foo_awesome) + 
  geom_segment( 
    aes(
      x    = start_hour,
      xend = end_hour,
      y    = as.Date(start),
      yend = as.Date(start)
    ),
    size=0.7) +
  xlab("Paros laikas") + ylab("Data") + 
  scale_x_continuous(breaks=c(0,2,4,6,8,10,12,14,16,18,20,22,24), limits=c(0,24), expand=c(0,0)) + 
  scale_y_date(expand=c(0,0), date_breaks="2 month", date_labels = "%Y %b") + 
  guides(colour=FALSE)
Visi duomenys yra beveik kaip baltas triukšmas
Kai sudedi visus duomenis į vieną grafiką gauni beveik tik triukšmą

Akivaizdu, kad norint pamatyti ką nors gudresnio, reikia duomenis kaip nors pjaustyti ar grupuoti. Parą galima suskaidyti į intervalus po 10 minučių, ir kiekviename šių intervalų pažymėti ar buvo judama ar ne: duomenų kiekis sumažėja ir juos galima žymiai lengviau analizuoti. Grupuojant pagal savaitės dienas grafikas žymiai iškalbingesnis.

Mano aktyvumas pagal savaitės dienas
Mano aktyvumas pagal savaitės dienas: žalia – neaktyvu, kuo raudoniau/balčiau tuo daugiau judėjimo

Čia aiškiai matosi, kad antradieniais ir ketvirtadieniais keliuosi anksčiau, mat nuo 8 ryto einu į baseiną. Darbo dienomis apie 10 valandą būna mažokai judėjimo – tuo metu skaitau elektroninį paštą bei geriu kavą, kaip ir mažiau judėjimo apie 14-15 valandą, kai dirbu produktyviausiai. Savaitgaliais miegu dar ilgiau, o sekmadieniais iš lovos išlipu 9.30. Šeštadienis – aktyviausia diena, o sekmadienio vakaras tingus jau nuo pat 18-19 valandos.

Lietuvos toponimų žemėlapis

Prieš keletą dienų užtikęs smagią Vokietijos miestų priesagų vizualizaciją, užsinorėjau ką nors panašaus papaišyti ir su Lietuvos duomenimis. Juolab, kad tai galimybė pažaisti su vis naujais ir dar nepažintais įrankiais bei programomis: ne vien ką nors įdomaus išpeši iš duomenų, bet ir išmoksti ką nors naujo. Duomenis ėmiau iš geonames, analizei ir piešimui naudojau QGIS, MMQGIS bei Mapbox.

-aičiai yra visiškai žemaitiška priesaga
-aičiai yra visiškai žemaitiška priesaga

Įdomiausios priesagos pasirodė -aičiai ir -onys: pirmieji ryškiai dominuoja Žemaitijoje, o antrųjų pas žemaičius beveik nerasi. -ininkai lyg ir Dzūkijos bei Panemunės mada. -upiai žymiai populiaresni nei -ežeriai, kurių net ežeringiausiuose kraštuose retai sutiksi. Visi žemėlapiai ir priesagos šiame puslapyje.

-onių Žemaitijoje nerasi
-onių Žemaitijoje beveik nerasi

Negalima pasitikėti tuo, ką skaitai apie maisto naudą ar žalą

„Įrodyti“, kad vienas ar kitas maisto produktas yra labai sveikas ar didina grėsmę ligoms yra labai labai LABAI sunku. Todėl ir tiek konfliktuojančių teorijų bei madingų dietų. O gal tiesiog geriausia nekreipti į nieką dėmesio ir valgyti tai, kas patinka.

Šaltinis: You Can’t Trust What You Read About Nutrition | FiveThirtyEight

Kelionės trukmės žemėlapis Vilniuje

Vakar sėdėdamas kasdieniame Vilniaus kamštyje ir prisiminęs ryte skaitytą straipsnį apie paskutines vizualizacijos madas sugalvojau pabraižyti kelionės trukmių žemėlapį: gal čia tik man taip prastokai sekasi, kad tenka keliauti iš Lazdynų į Žirmūnų pabaigą. Per Google Maps API programiniu būdu gana nesunkiai galima išsitraukti planuojamą kelionės trukmę tarp kelių taškų (juos galima nurodyti ir geografinėmis koordinatėmis), tada duomenis sudėti į duomenų bazę ir su Tableau įvairiomis spalvomis perkelti ant žemėlapio. Žemėlapyje vaizduojama kelionės trukmė nuo Jonažolių gatvės Lazdynuose – pasirinkau savo namų atskaitos tašką: kuo žaliau, tuo kelionės trukmė trumpesnė, o kuo raudoniau, tuo keliauti teks ilgiau. Duomenys rinkti antradienio 10.00-10.30 valandą, tad kamščiai jau turėjo būti išsisklaidę.

Kelionės trukmė nuo Jonažolių gatvės
Kelionės trukmė nuo Jonažolių gatvės

Rezultatai gana gražūs ir labai aiškiai parodantys aplinkelių naudą: iš Lazdynų į Pilaitę, Pašilaičius ar Justiniškes patekti nesunku, lygiai taip kaip ir iki oro uosto. Užtat Žirmūnai, Antakalnis ir viskas į rytus nuo šiaurinės Geležinio Vilko gatvės dalies yra lyg kitas miestas: ten dominuoja geltona ir raudonos spalvos. Nors, ne piko metu skųstis nereiktų, mat vis tiek didžiausia prognozuojama kelionės trukmė automobiliu yra maždaug pusvalandis. Tiesa, piko metu vaizdas tikriausiai daug blogesnis: neretai pačiam tenka kamštyje prasėdėti virš valandos.

Duomenų analizė Twitter

Geras straipsnis apie tai, ką reiškia būti duomenų analitiku tokioje didelėje kompanijoje kaip Twitter: ką jie veikia, su kokiomis problemomis susiduria ir kodėl norinčiam knistis dideliuose duomenyse reikia mokėti programuoti. Jei sukūrei modelį R kalba savo kompiuteryje tai dar nereiškia, jog jį bus galima panaudoti praktikoje – ties juo dar nemažai turės prisidėti programuotojai, kol jis galės būti perkeltas į produkcinę aplinką.

Šaltinis: Doing Data Science at Twitter — Medium