Sotsiaalse Analüüsi Meetodite ja Metodoloogia õpibaas
Sissjuhatus R-i ja RStudiosse
Martin Kolnes
2020
Selle peatüki eesmärk on tutvustada algteadmisi R-i kasutamise kohta. Teemaplokkide lõpus on ülesanded, mis pakuvad võimaluse iseseisvalt R-i katsetada. Ülesannete tegemiseks installeerige R ja RStudio endale arvutisse (vaadake osa „R-i ja RStudio paigaldamine”). Lahendused ülesannetele leiate peatüki lõpust.
R-i ja RStudio paigaldamine
R on vabavaraline programmeerimiskeel, mis pakub suurepäraseid võimalusi andmete töötlemiseks, jooniste tegemiseks ja erinevate statistiliste analüüside teostamiseks. R-i kasutamise teeb mugavamaks kasutajaliides nimega RStudio. Nende programmide paigaldamiseks enda arvutisse kasutage järgnevaid linke:
- programmeerimiskeel R – http://ftp.eenet.ee/pub/cran
- RStudio – http://www.rstudio.com/products/rstudio/download
- abiks – https://www.youtube.com/watch?v=d-u_7vdag-0 [/accordion]
RStudio kasutamine
Tutvume esmalt RStudio keskkonnaga (joonis 1). Pärast RStudio esmakordset käivitamist on avatud kolm paneeli: Konsool (Console), Töökeskkond (Environment), Failid (Files). Konsooli kaudu saame „suhelda“ R-iga ehk saata koodiridu R-ile arvutamiseks. Töökeskkond näitab hetkel aktiivseid andmestikke, üleslaetud lisamooduleid ja faile. Paneeli „Files“ kaudu saame otsida üles arvutis olevaid materjale (nt andme- ja koodifailid). Lähemalt tuleb nendest paneelidest juttu allpool.
Kui teil on eelnevalt salvestatud R-i andmefailid või RStudio töökeskkond, siis saate need avada vastavalt kas paremal allosas paikneva paneeli „Files“ kaudu või paremal ülaosas oleva paneeli „Environment“ kaudu. Kõige lihtsam on RStudiosse importida andmestikke, mis on salvestatud R-i enda formaadis (.Rdata formaat). See formaat viitab sellele, et tegu on salvestatud RStudio töökeskkonnaga. Teistsuguses formaadis olevaid andmeid saab RStudiosse importida kahel viisil. Esimene ja lihtsam viis on kasutada paneelil Töökeskkond (Environment) olevat menüüriba Import Dataset. Teine viis on kasutada andmete importimiseks loodud funktsioone (nt read.csv(), read.xslx(), read.spss() jne). Seejuures on oluline teada, et osad funktsioonid nõuavad enne kasutamist R-i pakettide installeerimist. Näiteks funktsioonide read.xslx(), read.spss() kasutamiseks peab installeerima vastavalt paketi „xlsx“ ja paketi „foreign“.
Nendele funktsioonidele antakse esimeseks argumendiks andmete asukoht arvutis. Näiteks saame kasutada csv-formaadis andmete laadimiseks funktsiooni read.csv() koos vastava andmestiku asukohaga. Seejuures tuleb sisestada täpne andmestiku asukoht (nt juhul kui andmetega fail on kaustas asukohaga “C:/Users/Kasutaja/andmed/”, siis tuleks kasutada seda funktsiooni järgnevalt read.csv(file=“C:/Users/Kasutaja/andmed/faili_nimi.csv”)). Andmestiku asukoha kirjutamisel pange tähele, et asukoha nimes olevad kaldkriipsud oleksid kaldu paremale, mitte vasakule.
Rstudio kasutamise üks eeliseid on see, et me saame kasutada andmeanalüüsi kirjutamiseks teksti- ehk koodifaili (R Script). Arvutis olevaid R-i koodifaile saame avada näiteks konsooli üleval oleva nupu abil, aga samuti saab seda teha paneeli „Files“ kaudu (vt joonis 1). Uue koodifaili saame avada valides RStudio menüüribalt File -> New File -> R Script. Koodifaili saate hõlpsalt salvestada käsud, mida olete kasutanud andmete töötlemiseks ja analüüsimiseks. Uue koodfaili loomise järel peaks meil RStudios olema lahti neli akent (joonis 2).
Vaatame järjest RStudio erinevate akende funktsioonid üle.
Üleval vasakul olevasse aknasse kirjutame koodi, mille abil ütleme R-ile, mida andmetega teha. Kuidas käib koodi saatmine R-ile? Kui soovime saata ainult ühte rida korraga, siis tuleb viia kursor sellele koodireale ja seejärel vajutada koodiredaktori paneeli paremal ülaosas paiknevat nuppu nimega Run. Nupu asemel võib kasutada ka klahvikombinatsiooni Ctrl + Enter (Maci arvutitel Cmd + Enter). Kui soovime saata mitut koodirida korraga, siis tuleb need koodiredaktoris valida (st märkida need hiirega ära) ja seejärel vajutada Run-nuppu või klahvikombinatsiooni.
All vasakul on konsool (Console). Seal asubki arvutusi teostav R ise. Kui laseme R-il midagi arvutada, siis ilmuvad tulemused nähtavale just selles osas. Koodi võib põhimõtteliselt kirjutada ka otse konsoolile, aga enamasti on mugavam kasutada koodifaili, sest nii on lihtsam parandusi teha ja koodi korduvkasutada.
All paremal asuvad 5 erinevat paneeli:
-
Files: R-i koodi- ja andmefailide avamiseks.
NB! Selles aknas saame sättida enda “töökausta”. See annab R-ile teada, missuguse kaustaga parasjagu tööd tehakse. Kausta otsimiseks vajutage sümbolile “…”, seejärel otsige üles sobiv kaust ja vajutage “OK”. Seejärel vajutage nupule More ja valige Set As Working Directory. Soovitatav on kasutada töökeskkonnana kausta, kus on teie analüüsitavad andmed.
-
Plots: siia kuvatakse tehtud joonised.
-
Packages: selle osa abil saab installeerida ja laadida lisamooduleid, mis lisavad R-ile täiendavat funktsionaalsust. Lisamoodulite kasutamiseks tuleb need kõigepealt arvutisse installeerida. Vajutage nuppu Install ja kirjutage avanenud aknasse soovitud lisamooduli nimi. Mooduli funktsioonide kasutamiseks tuleb vastav moodul R-is aktiveerida. Aktiveerimiseks tuleb moodul Packages paneeli nimekirjast üles otsida ja selle nime eesasuvasse kasti linnukene teha. Lisamooduleid saab installida ja aktiveerida ka R-i koodi abil: install.packages(“lisamooduli nimi”) ja library(lisamooduli nimi).
-
Help: Abiinfo R-i funktsioonide kohta. Siin paneelis saame otsida R-is olevate funktsioonide kohta informatsiooni.
- Viewer: Selle osa abil saab teha keerulisemat tüüpi andmekuvamist, millel on lisaks joonisele ka kontrollelemendid, mis võimaldavad joonise parameetreid muuta.
Üleval paremal asuvad 3 paneeli:
-
Environment: selles osas näidatakse kasutusel olevaid andmeid.
-
History: R-i konsoolile saadetud käskude ülevaade.
- Connections: näitab, missugused ühendused on loodud andmebaasidega (seda võimalust ei ole tavalise andmetöötluse puhul vaja kasutada).
Tutvume natuke lähemalt paneeliga Töökeskkond (Environment), aga esmalt võtame harjutamiseks kasutusele RStudioga kaasas oleva andmefaili. Selleks kasutame funktsiooni data(), mille abil saame laadida näidisandmestiku RStudio töökeskkonda. Kirjutame R-i konsoolile järgmised read:
Selles näidisandmestikus on eksperimendi andmed, kus mõõdeti erinevate toidulisandite mõju tibude kaalule. Nüüd peaks paneel Töökeskkond välja nägema nagu alloleval pildil (joonis 3). Objekt nimega “chickwts” viitab konkreetse andmetabeli nimele. 71 obs of 2 variables näitab, et andmetabelis on 71 rida ja 2 veergu ehk tunnust. Seejuures peab igal andmetabelil olema ainulaadne nimi, sest selle abil saame vastavas andmetabelis olevaid tunnuseid kasutada.
Vajutage andmestiku nime ees oleval sinisel nupul (joonis 4). Meile näidatakse tabelis olevate veergude nimesid, andmetüüpe ja esimesi andmepunkte. Antud andmestikus kannab esimene veerg/muutuja nime “weight”. Andmetüüp on num, mis tuleb inglisekeelsest sõnast numeric, st tegemist on veeruga, mis koosneb arvtunnustest. Lisaks on R-is levinud numbriliste andmete tüüp tunnusega int ehk integer, mis näitab, et veerus on ainult täisarvud. Antud andmetabeli teine tulp kannab nime “feed”. Selle andmeveeru tüübiks on märgitud „Factor w/ 6 levels“. Faktor tähistab R-i kontekstis kategooriaid sisaldavat muutujat. Antud juhul on neid kategooriaid 6 tükki, vastavalt eksperimendis kasutatud toidulisandite arvule.
Kas teadsid?
RStudio Töökeskkonnas olevate andmete struktuuri uurimiseks saame kasutada ka funktsiooni str(). Selle funktsiooni kasutamiseks peab funktsioonile argumendiks andma ainult huvipakkuva andmestiku nime. Meie näidisandmestiku uurimiseks kirjutage konsoolile:
R-i süntaks
Enne andmete juurde asumist teeme väikse kõrvalepõike R-i süntaksiga tutvumiseks. Nagu juba eelnevalt mainitud, siis üldiselt on kasulik kirjutada koodi koodifaili (R Script), mis võimaldab tehtud töö salvestada enda arvutisse. Seevastu konsoolile kirjutatud koodiridu on pärast R-i taaskäivitamist raskem taastada.
Kui kasutate koodifaili, siis on soovitatav lisada R-ile saadetavate käskude juurde kommentaare, et hiljem oleks lihtsam endal või teistel koodist aru saada. Kommentaaride lisamiseks pange enda sisestatud märkuse ette sümbol „#“. See sümbol annab R-ile teada, et sellest sümbolist alates kuni sama rea lõpuni on kastujapoolne märkus, mida ei ole vaja R-il arvutada.
Aritmeetika
R-i võib kasutada tavalise kalkulaatorina. Proovige teha järgnevaid tehteid R-i konsoolil (joonis 5):
- liitmine: 2 + 2
- lahutamine: 4 – 5
- korrutamine: 5 * 7
- jagamine: 21 / 3
- astmesse tõstmine: 2^4
Muutujate loomine
Sageli on vajalik luua andmetöötluse käigus uus muutuja, kuhu on salvestatud mingi oluline väärtus. Uue muutuja loomiseks kasutatakse R-is tavaliselt sümbolit “<-”, aga töötab ka tavaline võrdusmärk “=”. Muutujate nimede puhul ei luba R tühikuid kasutada. Seega on pikema nime puhul hea kasutada punkti (“uus.muutuja”), alakriipsu (“uus_muutuja”) või suurtähti (“uusMuutuja”). Lisaks on oluline teada, et R on tõstutundlik, st väike- ja suurtähtede kasutamine peab olema muutujate nimede puhul läbivalt sama. Näiteks muutuja nimega „uusMuutuja“ on R-i jaoks erinev kui muutuja nimega „uusmuutuja“.
Muutuja loomiseks saame kasutada järgmist koodirida:
Nüüd on meil R-i töökeskkonnas („Environment“ aknas) muutuja nimega „uus_muutuja“.
Töökeskkonnas olevate muutujatega saame teha ka tavalisi aritmeetilisi tehteid. Korrutame näiteks eelnevalt loodud muutuja neljaga:
Andmetüübid ja vektorid
Andmestike puhul on alati kasulik teada, kuidas need andmed on R-is kodeeritud ehk mis on nende andmetüübid. Kõige tavalisemad andmetüübid on:
-
numbrilised (numeric, integer): 2.2, 3;
-
sõned (character): “hello”, “Tartu”;
-
tõeväärtused: TRUE, FALSE;
- faktorid (factors): tähistab kategoriaalset tunnust (nominaaltunnust või järjestustunnust).
Andmestiku ühte veergu võib käsitleda vektorina, mis koosneb teatud tüüpi elementidest. Vektorid võivad sisaldada ainult ühte tüüpi elemente. Vaatame kõigepealt, kuidas R-is saab vektoreid ise luua. Vektori loomiseks saame kasutada funktsiooni c(), mis võimaldab elemente siduda üheks vektoriks.
Numbrilise vektori saame luua järgmise koodireaga:
Sõnedega vektori loomine:
Tõeväärtustega vektori loomine:
Muutuja tüübi kontrollimiseks saame kasutada funktsiooni class():
Tehted vektoritega
Vektoritega saab samuti teha tavalisi aritmeetilisi tehteid.
Teeme esialgu kaks vektorit:
Nüüd liidame need vektorid omavahel:
Väljundist näeme, et vektorite liitmisel liidetakse samal positsioonil olevad väärtused. Vektorite esimesed väärtused liidetakse omavahel, teisel kohal olevad väärtused omavahel jne.
Samamoodi töötab ka näiteks korrutamine:
Paljud R-i funktsioonid vajavad arvutuste teostamiseks sisendiks vektoreid. Näiteks saame võtta ühe andmeveeru (ehk vektori andmetega) ja arvutada selle aritmeetilise keskmise, mediaani jms.
Keskmise väärtuse arvutamine:
Mediaani arvutamine:
Summa arvutamine:
Vektori elementide eristamine
R-i üks peamisi tugevusi peitub selles, et ta võimaldab hõlpsasti teha andmeteisendusi. Vektori elementide eristamiseks saab kasutada indekseid või loogikaavaldisi. Indeksiga andmete eraldamisel peame teadma huvipakkuvate andmete konkreetset asukohta vektoris (nt võtame andmereast kümnendal kohal oleva väärtuse). Loogikaavaldisega saame valida väärtused, mis vastavad meie poolt määratud reeglitele (nt jätame alles andmed, mis on suuremad kui etteantud väärtus).
Loome vektori nimega „v3“, mis sisaldab väärtusi 1st kuni 10ni sammuga 0,5:
Vektori vaatamiseks kirjutage konsoolile vektori nimi:
Vaatame antud vektori kümnendat väärtust:
Vaatame vektori väärtusi, mis asuvad 3. kuni 5. kohal:
Vaatame väärtusi, mis on suuremad kui 7:
Ülesanded – R-i süntaks
- Tehke kaks erinevat vektorit, kus on vähemalt 10 numbrilist elementi.
- Liitke need vektorid ja salvestage tulemus uude muutujasse. Arvutage uue muutuja keskmine, mediaan ja summa.
- Korrutage eelmises ülesandes saadud vektor kolmega.
- Tehke vektor, mis koosneb kolmest nimest.
Tehted andmetega
Enne alustamist veenduge, et teil oleks RStudio töökeskkonnas (Global Environment) andmestik nimega “chickwts” (joonis 3). Kui seda ei ole, siis kirjutage R-i konsoolile järgmised read:
Vaatame selle näidisandmestiku põhjal, kuidas saab suuremast andmestikust eraldada konkreetsemaid andmeveerge.
Tutvume lähemalt kolme võimalusega:
- dollarimärgi abil andmeveerule viitamine;
- nurgeliste sulgude kasutamine – R-is annavad nurgelised sulud märku, et mingist objektist/andmestikust tahetakse konkreetseid elemente kätte saada;
- funktsioon subset() – see funktsioon võimaldab teha sama, mida nurgelised sulud.
Veergude eraldamine
Dollarimärgi abil andmeveeru eraldamiseks peame teadma vastava veeru nime. Eraldame näidisandmestikust muutuja nimega “feed” ja kuvame need väärtused konsoolile:
Nurgeliste sulgudega andmete eraldamiseks peame teadma huvipakkuva veeru asukohta andmestikus. Nurgeliste sulgude sisse kirjutatakse kaks numbrit: esimene tähistab ridu ja teine tähistab veerge. Kui üks nendest tühjaks jätta, siis see annab R-ile teada, et me tahame andmetest eraldada kas kõiki ridu või veerge vastavalt sellele, kumma osa me tühjaks jätame. Järgnevalt on toodud välja mõned näited, kuidas nurgeliste sulgudega andmeid eraldada.
Vaatame elementi, mis paikneb esimeses reas ja esimeses veerus:
Vaatame elementi, mis paikneb esimeses reas ja teises veerus:
Vaatame kõiki elemente, mis paiknevad esimeses veerus. Selleks jätame rea väärtuse nurgeliste sulgude sisse kirjutamata:
Veerge saab eraldada ka funktsiooni subset() abil. Selle kasutamiseks peame teadma ainult veergude nimesid:
Eelnevalt vaatasime, kuidas saame andmetest võtta välja konkreetseid veerge. Vahepeal võib tekkida aga vajadus ühe veeru eemaldamiseks. Selleks saame kasutada veeru nimes või indeksi ees miinusmärki:
Ridade eraldamine
Järjekorra numbri abil saab ridasid samamoodi eraldada nagu veerge.
Vaatame ainult teises reas olevaid väärtusi:
Vaatame viies esimeses reas olevaid väärtusi:
Tingimuste kasutamine
Kuidas valida ridu, mis vastavad teatud tingimustele? Proovime näiteks võtta andmestikust need read, kus tibude kaal on alla 260.
Nurgeliste sulgudega:
Funktsiooniga subset():
Sarnaselt saame andmetest võtta välja read, mis vastavad teatud väärtusele. Näiteks püüame eraldada andmetest kõik read, kus kasutati toidulisandit nimega “casein”. Selleks saame nurgeliste sulgude sees täpsustada toidulisandi väärtuse loogikaavaldise abil, st täpsustame, et tahame neid ridu, kus toidulisandi väärtus võrdub meie etteantud väärtusega. Loogikaavaldiste puhul peame võrdlemiseks kasutama kahte võrdusmärki. Lisaks on oluline, et toidulisandi väärtus oleks jutumärkides.
Samasuguse tulemuse saame ka funktsiooniga subset():
Paar nõuannet ka koodi kirjutamise kohta. Esiteks, koodi kirjutamisel ei pea jätma tühikuid sulgude sees olevate käskude vahele, kuid koodi loetavuse mõttes on see siiski soovitatav. Teiseks kasutatakse punkte ja komasid R-is erinevatel juhtudel. Punkte kasutatakse komakohtade näitamiseks. Komasid kasutatakse aga erinevate elementide eristamiseks (näiteks 5.12 on üks arv, aga 5,12 on kaks arvu).
Ülesanded – tehted andmetega
- Eraldage andmetest veerg “feed”. Looge uus muutuja, kus on ainult see veerg.
- Tehke kaks uut andmestikku. Esimesse jätke alles ainult toidulisandit “horsebean” saanud tibud ja teise toidulisandit “soybean” saanud tibud.
Kirjeldav statistika
Teades, kuidas anda R-ile edasi ainult üks muutuja andmestikust, proovime saada selgemat ülevaadet tibude kaalust (tunnus „weight“). Järgnevalt on toodud näited osade kirjeldavate statistikute arvutamiseks.
Keskmise kaalu saame, kui anname funktsioonile mean() argumendiks vastava tunnuse nime:
Sarnaselt saame arvutada ka teisi kirjeldavaid statistikuid. Toon järgnevalt välja nendest ainult osad.
Mediaani arvutamine:
Standardhälbe arvutamine:
Miinimumi ja maksimumi arvutamine:
Kui veerus esineb puuduvaid väärtusi, siis annab R meile statistiku väärtuseks samuti puuduva väärtuse ehk NA (not available). Selleks, et puuduvad väärtused arvutustest välja jätta, tuleb funktsioonile lisada üks täiendav argument – “na.rm=TRUE”.
Kategooriaid sisaldava tunnuse kirjeldamisel on abiks sagedustabel:
Protsentuaalse jaotuse saame, kui lisame sagedustabeli ümber funktsiooni prop.table():
Kas teadsid?
Osa R-i funktsioonidest töötavad ka terve andmestiku peal. Näiteks kui funktsioonile summary() või str() anda argumendiks andmestiku nimi, siis saab kiire ülevaate andmetes olevatest muutujatest.
Funktsioon summary() kuvab arvuliste tunnuste puhul miinimumi, maksimumi, keskmise, mediaani, esimese ja kolmanda kvartiili. Kategoriaalsete tunnuste puhul näitab aga iga kategooria suurust. Meie näidisandmestiku puhul saame järgneva ülevaate:
Ülesanded – kirjeldav statistika
- Leidke erinevaid toidulisandeid saanud tibude keskmised kaalud.
-
Proovige funktsioone summary() ja str(). Rakendage neid funktsiooni ühe veeru ja seejärel terve andmestiku peal.
Histogramm
Andmete puhul on soovitatav enne analüüside tegemist uurida nende jaotust. Väga hea ülevaate andmete jaotusest saab histogrammi abil. Vaatame, kuidas jaotuvad meie andmetes tibude kaalud. Kasutame histogrammi tegemiseks funktsiooni hist(), millele saame sisendiks anda meid huvitava andmeveeru (joonis 6).
Histogrammi välimuse muutmiseks saab funktsioonile lisada erinevaid argumente:
- main – võimaldab muuta joonise pealkirja;
- xlab – võimaldab muuta x-telje nimetust;
- ylab – võimaldab muuta y-telje nimetust;
- col – võimaldab muuta tulpade värvi. Värvi väärtust saab muuta kahel viisil: 1) värvi nimega (nt “gray”, “red”, “blue”); 2) täpsemaid värvitoone saab valida värvi heksadetsimaalkoodi abil (nt #FF0000 on punase värvi kood). Need koodid leiate, kui sisestate interneti otsingumootorisse “hexadecimal color codes”;
- border – võimaldab valida tulpade äärejoone värvi;
- breaks – võimaldab muuta tulpade arvu histogrammis. Näiteks, joonisel 7 on selle argumendi väärtuseks pandud 20, mis tähendab seda, et me soovime jaotada andmeid 20-ks võrdseks tulbaks. Saadud tulpade arv joonisel ei pruugi alati vastata etteantud soovitusele, sest algoritm kasutab seda väärtust parima jaotuse leidmiseks. Hoolimata sellest saame suurendada või vähendada tulpade arvu joonisel, kui suurendame või vähendame selle argumendi väärtust.
Vaadake lisaks: https://www.r-bloggers.com/how-to-make-a-histogram-with-basic-r/
Ülesannete lahendused
Ülesanded R-i süntaks
- Tehke kaks erinevat vektorit, kus on vähemalt 10 numbrilist elementi.
- Liitke need vektorid ja salvestage tulemus uude muutujasse. Arvutage uue muutuja keskmine, mediaan ja summa.
- Korrutage eelmises ülesandes saadud vektor kolmega.
- Tehke vektor, mis koosneb kolmest nimest.
Ülesanded – tehted andmetega
- Eraldage andmetest veerg “feed”. Looge uus muutuja, kus on ainult see veerg.
- Tehke kaks uut andmestikku. Esimesse jätke alles ainult toidulisandit “horsebean” saanud tibude ja teise toidulisandit “soybean” saanud tibud.
Ülesanded – kirjeldav statistika
- Leidke erinevaid toidulisandeid saanud tibude keskmised kaalud.
Kas teadsid?
R-is on funktsioone, mis võimaldavad seda kõike teha veel kiiremini.
Näiteks funktsioon aggregate() jaotab andmestiku osadeks ja teostab seejärel kõikide osade peal korraga ette antud arvutuse.
Funktsiooni aggregate() kasutamine:
aggregate(y~x, data = andmestiku nimi, FUN = funktsiooni nimi), kus y on numbriline tunnus ja x on kategoriaalne tunnus.
Kui tahame leida erinevat toidulisandit saanud tibude kaalud selle funktsiooniga, siis peaksime kirjutama R-i konsoolile järgneva rea:
Kasulik on teada ka funktsiooni ddply(), mis kuulub paketti nimega „plyr“. See funktsioon võimaldab samuti arvutada erinevate tunnuste lõikes kirjeldavaid statistikuid, aga seejuures saame selle funktsiooni abil arvutada mitu näitajat korraga. Näiteks aritmeetilise keskmise ja standardhälbe saame antud funktsiooniga arvutada järgmiselt:
- Proovige funktsiooni summary(). Rakendage seda funktsiooni ühe veeru ja seejärel terve andmestiku peal.
Valminud Hariduse Infotehnoloogia Sihtasutuse IT Akadeemia programmi toel.