# I osa - veebiloengud, videod, artiklid (5 punkti)

1.  (**2 punkti**) Vaata Johns Hopkinsi reprodutseeritava analüüsi videosid:

-   [Reproducible Research: Concepts and Ideas (Part 1/3)](https://www.youtube.com/watch?v=4rBX6r5emgQ&index=1&list=PLjTlxb-wKvXOU4WW4p3qc4VKWTI4gLNUf)
-   [Reproducible Research: Concepts and Ideas (Part 2/3)](https://www.youtube.com/watch?v=GXSRP--d3Q4&index=2&list=PLjTlxb-wKvXOU4WW4p3qc4VKWTI4gLNUf)
-   [Reproducible Research: Concepts and Ideas (Part 3/3)](https://www.youtube.com/watch?v=bwQWhZQmDuc&list=PLjTlxb-wKvXOU4WW4p3qc4VKWTI4gLNUf&index=3)

Vasta järgmistele küsimustele:

-   Selgitage, mida tähendab, et *reprodutseeritav analüüs* on kompromiss *uuringu replikeerimise* ja *mitte millegi* vahel.

**SINU VASTUS:**

-   Mis on sinu arvates reprodutseeritava analüüsi suurim väljakutse? Põhjenda. Kuidas sellega toime tulla?

**SINU VASTUS:**

2.  (**1 punkt**) Vaata videot [Data Management Course: Sharing your data](https://www.youtube.com/watch?v=eUC7MweyyFA)

Vasta järgmisele küsimusele:

-   Nimeta vähemalt 3 olulist aspekti seoses andmete talletamise ning andmehaldusega, millele videos viidati.

**SINU VASTUS:**

3.  (**2 punkti**) Loe artiklit [Researchers Finally Replicated Reinhart-Rogoff, and There Are Serious Problems](https://seekingalpha.com/article/1345701-researchers-finally-replicated-reinhart-rogoff-and-there-are-serious-problems).

Artikkel kirjeldab majandusteadlaste Reinhart'i ja Rogoff'i 2010. aasta publikatsiooni *Growth in a Time of Debt* ning mis vigu riigivõla ja majanduskasvu uurimisel tehti. Järgmises praktikumis uurime sama andmestikku, mida käsitleti ka Reinhart'i ja Rogoff'i artiklis.

Vasta järgmistele küsimustele:

-   Nimeta, mis oli Reinhart'i ja Rogoff'i artikli üks olulisemaid tulemusi.

**SINU VASTUS:**

-   Millel põhines teadlaste Herndon'i, Ash'i ja Pollin'i kriitika majandusteadlaste Reinhart'i ja Rogoff'i teadusartiklile *Growth in a Time of Debt.* (nimeta 3 probleemi).

**SINU VASTUS:**

# II osa - andmete analüüs (20 punkti)

## Sissejuhatus

Mati "Raha" Masin töötab investeerimispangas ning ta vastutab igapäevase aktsiaturu ülevaate koostamise eest. Ta vihkab oma tööd selle rutiinsuse pärast. Vaja on kopeerida uued aktsiaturu andmed Exceli tabeli õigesse lahtrisse, klikkida vajalikel nuppudel ja kopeerida tulemused raportisse.

Peale selle, et tegevus on igav, võib andmete, valemite ja tulemuste kopeerimisel tekkida mitmeid vigu. Seega kontrollib Mati mitu korda üle ega kopeerimisel vigu ei tekkinud, sest ta teab, et andmete kopeerimisel võivad eksida isegi [Harvardi majandusteadlased](http://en.wikipedia.org/wiki/Growth_in_a_Time_of_Debt) (praktikum 2 teema).

Ta unistab automaatsest statistikaraportist - andmed ning analüüsi tulemused uuenevad automaatselt ja raporti genereerimine on automatiseeritud. Selles praktikumis vaatamegi, kuidas sellist tööprotsessi automatiseerida R-is.

Eesmärgiks on koostada automaatselt uuenev raport, kus on:

-   suurimad tõusjad ja kukkujad;
-   aktsiaturu ülevaade sektorite lõikes;
-   aktsiate ostusoovitused.

Andmetabelist info kättesaamiseks kasutame R-i paketti *dplyr*. Selle paketi kohta loe täpsemalt praktikumimaterjalist ning uuri sealseid minimalistlikke näiteid.

## Ülevaade andmestikust

Andmestikus on näidatud 505 ettevõtte (kõik need ettevõtted, mis on kuulsas S&P 500 indeksis) kohta järgmised tunnused:

-   *symbol*: ettevõtte ID börsil
-   *nimi*: ettevõtte nimi
-   *sektor*: sektor, kus ettevõte tegutseb
-   *hind*: viimase aktsiatehingu hind
-   *tootlus*: aktsiahinna muutus võrreldes eelmise päevaga protsentides
-   *kogus*: aktsiate arv, mis vahetas omanikku päeva jooksul
-   *kasum_aktsia_kohta*: ettevõtte aastakasum / aktsiate koguarv
-   *dividend_aktsia_kohta*: väljamakstud dividendid aastas / aktsiate koguarv

Lae alla andmestik [Aktsiad 2022.csv](https://andmeteadus.github.io/2023/data/Aktsiad%202022.csv) ning loe andmestik töökeskonda.

## Kodutöö raport

Kodutöö tulemusena peab valmima raport, kus kajastuvad järgnevate ülesannete lahendused. Allpool on toodud nii raportile esitatavad täpsemad nõuded (vt ülesanne 5) kui ka näidisraport. Ülesannete lahendamisel on vaja kasutada *dplyr* paketi funktsioone.

### Ülesanne 1 (3 punkti) - Suurimad tõusjad. Suurimad kukkujad.

> Mati tahab oma turuülevaates näidata kolme suurimat tõusjat ja kukkujat.

Kõigepealt leia kolm kõige suurema päevase tootlusega aktsiat ning väljasta nende kohta:

1.  ettevõtte sümbol
2.  ettevõtte nimi
3.  hind
4.  tootlus.

Seejärel leia kolm kõige madalama päevase tootlusega aktsiat ning väljasta nende kohta samasugune info.

Näpunäide: Abiks on funktsioonid `arrange()`, `select()` ja `top_n()`.

```{r}
# SINU LAHENDUS

```

### Ülesanne 2 (5 punkti) - Ülevaade sektorite lõikes

> Mati soovib raportis näidata ülevaadet ka sektorite lõikes, sest kliente võib huvitadada, kas ehitussektori aktsiatega kaubeldi rohkem kui IT-sektori aktsiatega?

Iga sektori kohta, kus on vähemalt 30 ettevõtet, väljasta järgnev info:

1.  sektori keskmine tootlus
2.  sektori kogukäive
3.  sektori keskmine käive
4.  ettevõtete arv sektoris

Juhised:

-   Lisa andmestikku tunnus *käive*, mis näitab, kui suure summa eest igat aktsiat kaubeldi. (Selleks tuleb korrutada päeva jooksul kaubeldud aktsiate arv viimase tehingu hinnaga.)
-   Arvuta iga sektori kohta
    -   keskmine tootlus,
    -   kogukäive,
    -   keskmine käive,
    -   ettevõtete arv.\
        Näpunäide 1: Kasuta paketi *dplyr* funktsioone `group_by()` ja `summarise()`.\
        Näpunäide 2: Summade ja keskmiste arvutamisel ära võta arvesse puuduvaid väärtusi (puuduvate väärtuse välja jätmiseks võib funktsioonide `sum` ja `mean` argumendi `na.rm` väärtuseks seada `TRUE`).
-   Näita ainult neid sektoreid, kus on vähemalt 30 ettevõtet.
-   Sorteeri tabel tunnuse *kogukäive* alusel kahanevalt.

```{r}
# SINU LAHENDUS

```

### Ülesanne 3 (5 punkti) - kauplemisalgoritm

> Mati arvates annab iga vähegi nupukam aktsiaanalüütik klientidele aktsiate ostusoovitusi, et klient saaks oma vara kasvatada.

Kirjuta funktsioon *kauplemisalgoritm*, mille sisendiks on andmestik *data* ja mis tagastab kolme kõige atraktiivsema ettevõtte sümbolid, mis saavadki ostusoovitusteks.

Juhised:

-   Kõigepealt tekita andmestikku juurde järgmised kaks tunnust:
    -   kasumi-aktsiahinna suhe (kasum_aktsia_kohta/hind) [kui sa tead, mida tähendab PE suhe, siis me arvutame PE suhte pöördväärtust]
    -   dividendi määr (dividend_aktsia_kohta/hind) [pane tähele, et mõnel ettevõttel on `dividend_aktsia_kohta` väärtus `NA`. Asenda esmalt puuduvad väärtused 0-ga]
-   Arvuta iga aktsia kohta atraktiivsuse skoor, mis on arvutatud järgnevalt `0.5 * kasumi-aktsiahinna suhe + 0.5 * dividendi määr`
-   Ostusoovituseks leia kolm kõige suurema skooriga aktsiat.

Kui eelnevaga oled hakkama saanud, siis proovi eelnev kood kirjutada funktsiooniks, mis võtab sisendiks suvalise andmestiku ning väljastab kolme kõige atraktiivsema ettevõtte aktsiate sümbolid **vektorina** (meenutus: `andmestik$tunnus`). Funktsioon võib välja näha näiteks nii:

```{r, eval=FALSE}
kauplemisalgoritm = function(x){
  # tekitame andmestikule x juurde tunnused kasumi-aktsiahinna suhe 
  # ja dividendi määr
  # [sinu kood]
  
  # arvutame iga aktsia kohta atraktiivsuse skoori
  # [sinu kood]
  
  # tagasta kolme kõige suurema skooriga ettevõtte sümbolid vektorina
}
```

### Ülesanne 4 (2 punkti) - turvaline kauplemisalgoritm ja ostusoovitused

> Mati ei ole veel vanemanalüütiku staatust saanud ning ta kardab veidi oma soovituste pärast. Mis juhtub kui aktsiasoovitus osutub katastroofiks? Kui kliendid saavad Mati soovituste pärast hiigelsuuri kahjumeid, siis kõigub ka tema töökoht. Mis oleks kui soovitada ainult populaarseid aktsiaid? Siis saab ju alati öelda, et vanemanalüütikud teistes pankades soovitasid ka ...

Nüüd kirjuta funktsioon *kauplemisalgoritm_turvaline*, kus valid atraktiivseid aktsiaid vaid populaarsete aktsiate hulgast. Populaarsed aktsiad on järgnevad: AAPL, AMZN, FB, GOOG, IBM, NFLX, NVDA.

Juhised:

-   Vali andmestikust välja ainult aktsiad AAPL, AMZN, FB, GOOG, IBM, NFLX, NVDA.
-   Rakenda saadud alamandmestikul eelnevas ülesandes kirjutatud funktsiooni.

Kui eelnev töötab, siis kirjuta eelnev kood funktsiooniks.

Kasutades funktsiooni *kauplemisalgoritm_turvaline*, väljasta 3 ostusoovitust.

```{r, eval=FALSE}
kauplemisalgoritm_turvaline = function(x){
  # sinu kood
}
```

### Ülesanne 5 (5 punkti) - raporti vormistamine

Vormistage eelnevate ülesannete lahendused raportiks nii, et

-   Kõik andmestike väljatrükid oleks toodud tabelitena. Selleks kasuta näiteks funktsiooni `kable`. (Näpunäide: funktsiooni `kable` kasutades saab komakohtade arvu määrata parameetri `digits` abil ja selleks, et suured arvud paremini loetavad oleks, saab täiendava argumendina lisada `format.args = list(big.mark = " ")`, mis lisab tuhandeliste vahele tühiku. Selleks, et vabaneda teaduslikust arvuformaadist, st arvu eksponentkujul esitamisest, tuleb koodi algusesse lisada `options(scipen=1000)`.)

-   Ostusoovitus (ül 4 tulemus) lisage teksti sisse reasisese R-i koodi abil (*inline R code*).

-   Ära raportis R-i koodi (ega muud müra) näita. Koodi väljajätmiseks kasuta näiteks iga koodibloki päises valikut `echo=FALSE`. Oodatud tulemus on toodud ära [praktikumi lehel](https://andmeteadus.github.io/2023/praktikum1_aktsiad/).

```{r}
# SINU LAHENDUS

```

### Boonusülesanne 1 (1 punkt): raporti täiendamine

Kasuta paketti `kableExtra`, et vormindada ühte või enamat raportis olevat tabelit. Paketi võimalustega tutvumiseks saab kasutada näiteks seda [abimaterjali](https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html).

### Boonusülesanne 2 (3 punkti): andmete automaatne uuenemine

Muuda kodutööd selliselt, et staatilise faili *Aktsiad 2022.csv* asemel kasutatakse reaalajas andmeid, mis on saadud portaalist *finance.yahoo.com*.

Mõned näpunäited:

-   kasuta R-i paketti `quantmod`
-   kasuks tuleb funktsioon `getQuote`
-   tunnuste loetelu nägemiseks, mida on võimalik *finance.yahoo.com* portaalist saada, on abiks funktsioon `yahooQF()`
-   hinnana kasuta tunnust *Last Trade (Price Only)*, sümbolina *Symbol*, tootlusena *Change in Percent*, kogusena *Volume*, kasumina aktsia kohta *Earnings/Share*, dividendina aktsia kohta *Dividend/Share*
-   ettevõtete nime ja sektori saab Wikipedia lehelt alla laadida järgmise koodijupi abil:

```{r, eval=FALSE}
library(rvest) # Vajalik eelnevalt installida pakett rvest
sp500_wiki <- read_html(
  "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies")

aktsiad_wiki <- sp500_wiki %>%
  html_nodes("#constituents")
  html_table()

aktsiad_wiki <- aktsiad_wiki[[1]][,c(1,2,4)]
colnames(aktsiad_wiki) = c("symbol", "nimi", "sektor")
aktsiad_wiki$symbol = gsub(".", "-", aktsiad_wiki$symbol, fixed = TRUE)
```

-   ühenda Wikist laetud andmestik Yahoo'st saadud andmestikuga tunnuse *symbol* alusel (vt`?join` või `?merge`)

# Kodutöö lõpp

## Esita Moodlesse nii .Rmd fail kui ka knitr abil loodud .html väljund.
