tilenklinc / APPR_projektna

Vzorčni repozitorij za projekt pri predmetu Analiza podatkov s programom R v študijskem letu 2020/21
Other
0 stars 0 forks source link

Zadnji popravki #8

Open tilenklinc opened 3 years ago

tilenklinc commented 3 years ago

Za svoj zadnji graf poskušam z interneta pridobiti podatke preko APIja, kjer bom z analizo pogosto pojavljenih besed v člankih našel poveazavo med uspehom delnic in pozitivnim/negativnim odzivom ljudstva. Za začetek le poskušam uvoziti graf, da ugotovim kako naj bi to potekalo. Ustvaril sem si račun na tej strani. Pridobil sem API ključ, sedaj pa mi po nekaj urah poskušanja še vedno ne uspe pridobiti podatkov iz linka http://api.marketstack.com/v1/eod. Kot odziv na pognano kodo namreč vedno dobim error code, da je bil vnešen Invalid API ključ.

tilenklinc commented 3 years ago

dodatek: poskusil sem dodati še novice iz google news, vendar zopet naletim na enako težavo, verjetno sem spregledal en vmesni korak. Vsi podatki, vključno z mojim api ključem v naslednji povezavi: https://newsapi.org/v2/everything?domains=techcrunch.com,thenextweb.com&apiKey=1d5aabc817834381ae545e3ce9174cec

jaanos commented 3 years ago

Najprej naj opozorim, da se API ključev ne sme javno objavljati - s tem, ko si svoja ključa vključil v commit oziroma v ta issue, ju lahko smatraš za kompromitirana in ju zato prekliči, preden gre kaj narobe (če ju kdo zlorabi, lahko nosiš odgovornost za to), ter si za uporabo generiraj nova.

Zato svetujem, da programa, ki bo pridobil podatke s pomočjo teh API ključev, ne vključuješ v svoj glavni program (tj., ga ne kličeš iz poročila ali drugih programov), pač pa teče samostojno in podatke zapiše v datoteko, ki jo potem prebereš v glavnem programu. Kot rečeno, samih API ključev ne objavljaj, zato naj bosta npr. v datoteki uvoz/apikeys.R:

# zamenjaj s ključi, ki jih boš dejansko uporabljal
marketstack_key <- "de25b9c5e84d9d201b7d8fa849a34f32"
newsapi_key <- "1d5aabc817834381ae545e3ce9174cec"

Da te datoteke ne boš pomotoma naložil v repozitorij, v .gitignore dodaj vrstico apikeys.R (oziroma kakor boš poimenoval datoteko). Potem lahko uvoz iz Marketstacka narediš npr. tako:

source("uvoz/apikeys.R")

...

data <- sprintf("http://api.marketstack.com/v1/eod?access_key=%s&symbols=%s&sort=DESC&date_from=%s",
                marketstack_key, symbol, date_from) %>% GET() %>% content() %>%
  .$data %>% lapply(as.data.frame, stringsAsFactors=FALSE) %>% bind_rows() %>%
  mutate(date=parse_datetime(date))

Za podani naslov iz Google news mi tak pristop (do content, nadaljnja obdelava bo nekoliko drugačna) prav tako deluje.

tilenklinc commented 3 years ago

Hvala za prijazno spisana navodila. Problem sem rešil. Uspel tudi pridobiti podatke iz novic.

Z zadnjim pushom menim, da je projektna naloga zaključena. Prosim za pregled in morebitne nove potrebne popravke.

katarinabrilej commented 3 years ago

Podatkov prebranih s pomočjo API ključev nisi zapisal v posebno datoteko, ki jo potem samo uvoziš v glavnem programu. Tako da se zdaj še vedno uvaža direktno v uvozu in zato se meni uvoz ne prevede, ker nimam dostopa do uvoz/apikeys.R.

Torej te podatke, ki jih pridobiš z uvozi.api in uvozi.news uvozi v nekem posebnem programu in jih potem zapiši v datoteko, to datoteko pa pokliči v uvozu (torej v tvojem glavnem programu).

tilenklinc commented 3 years ago

Z zadnjim pushom bi moralo delovati. V uvoznih funkcijah se namreč v mapi uvoz ustvari csv tabela, nato pa se ponovno prebere v naslednjem koraku izven funkcije. Po moji logiki bi sedaj moralo delovati.

katarinabrilej commented 3 years ago

Spodnji del mora biti v neki drugi datoteki in ne v uvoz2.r, ki jo kličeš v poročilu

uvozi.api <- function() {
  source("uvoz/apikeys.R")

  date_from = today()-dyears(5)

  content1 <- sprintf("http://api.marketstack.com/v1/eod?access_key=%s&symbols=%s&sort=DESC&date_from=%s",
                      marketstack_key, symbol, date_from) %>% GET()  %>% content() %>%
    .$data %>% lapply(as.data.frame, stringsAsFactors=FALSE) %>% bind_rows() %>% mutate(date=parse_datetime(date))

  #------------------urejanje tabele content1---------------------
  stock <- content1[,c(11, 13, 4, 2, 3, 1, 10)]

  names(stock)[c(1,7)] <- c("name","volume")
  stock <- as.data.frame(stock)

  write.csv2(stock, file = "uvoz/stock.csv")
}
uvozi.api()

V datoteki uvoz2.r naj bo torej samo

 stock <- read.csv2("uvoz/stock.csv")

Podobno za uvozi.news.

katarinabrilej commented 3 years ago

Sedaj se mi uvoz prevede.

Problem se sedaj pojavi v datoteki analiza2.R pri news_words, spredaj dodaj naslednjo vrstico

news$articles.description <- as.character(news$articles.description)

Graf 3 v poročilu raje premakni v vizualizacijo in ga samo pokliči v poročilu.

Vsi grafi naj imajo oznake x in y osi in slovenska imena legende (npr. graf Letni donosi delnice GOOGL je nima). Oznake x in y osi naj bodo usklajene, torej npr. vse z veliko začetnico in v slovenščini.

Pri aplikaciji Shiny bi bilo boljše, če je pod StockCode možnost izbire oznake delnice, ne da jo je potrebno vtipkati.

Glede grafa5, meni se lepo prevede, če ga kar vključim v poročilo in ne samo sliko. Bi bilo pa za urediti tekst, ki se prikaže, ko se z miško pomakneš nad graf.

katarinabrilej commented 3 years ago

Še to, poročilo se trenutno v Binderju ne prevede, razlog so najbrž manjkajoči paketi v vnaprej pripravljeni sliki. Recimo naslednji:

"bea.R", "config", "gtrendsR", "newsanchor", "PerformanceAnalytics", "prophet", "textdata", "tidytext", "wordcloud"
tilenklinc commented 3 years ago

Hvala, upošteval vse popravke, razen pri shiny aplikaciji, kjer bi se z dropdown menujem omejil na naštete delnice, tako pa program uspe pridobiti podatke o katerikoli željeni delnici, ob pogoju, da je simbol pravilno prepisan iz spletne strani.

Ob zagonu binderja sem čakal 20minut, da so se namestili vsi potrebni paketi, nato pa naletel na error message, naj bo pa tako :)

jaanos commented 3 years ago

Pripravil sem novo sliko za Binder, ki vključuje zgoraj omenjene pakete - tako lahko zakomentiraš nameščanje v install.R, da zaganjanje ne bo teklo tako dolgo. Težave so se sicer pojavile s paketom prophet, tako da ga ni v novi sliki - kolikor vidim, pa ga sploh ne potrebuješ, tako da ga lahko odstraniš.

Sicer pa se poročilo ne prevede, saj graf5 ni definiran, oziroma ga definiraš šele v analiza2.R, tako da bo potrebno ta program klicati prej - pri tem pazi, da se velikost črk ujema z dejanskim imenom datoteke (trenutno ga namreč kličeš z malo končnico .r).

Pojavijo se še sledeče težave:

jaanos commented 3 years ago

Še to: v analiza2.R uporabiš funkcijo get_sentiments, ki te vpraša, ali želiš naložiti podatke, če ti še niso naloženi: https://github.com/tilenklinc/APPR_projektna/blob/59b3d319fef3738b88b14da5a394fa476fc7edfe/analiza/analiza2.R#L68 Pri poganjanju na Binderju jih še ne bo (saj se sistem vsakič postavi na novo), tako da tedaj pride do napake. Žal ne najdem nobene boljše možnosti, da se temu izogneš, kot da povoziš funkcijo za prikaz menija - to narediš tako, da pred klicem get_sentiments dodaš sledečo vrstico:

assignInNamespace("printer", function(data_name) 1, "textdata")

Tako početje sicer ni priporočljivo - bolje bi seveda bilo, če bi sama funkcija get_sentiments dovolila, da ji vnaprej damo dovoljenje za pridobivanje podatkov.

tilenklinc commented 3 years ago

Najprej hvala obema za tako učinkovito pomoč. Po vnesenih popravki deluje vse, izriše se tudi v Binderju. S tem zaključujem

jaanos commented 3 years ago

V redu, sedaj deluje, tako da bom dodal povezavo na repozitorij za zagovore. Če se še nisi, se lahko z @alenFMF domeniš za termi zagovora. Če boš do takrat še kaj spreminjal, mi javi, da posodobim povezavo.

Imam samo še dve manjši pripombi estetske narave:

tilenklinc commented 3 years ago

Najlepša hvala. Z zadnjim pushom dodadana še omenjena estetska popravka na grafih.

jaanos commented 3 years ago

Trenutno poročilo ne deluje. Težave se pojavijo tukaj: https://github.com/tilenklinc/APPR_projektna/blob/7ffddb3112df109b7a5b7ef71117e1c42d1eadc9/analiza/analiza2.R#L18-L21

tilenklinc commented 3 years ago

Prejle mi je vse delovalo, opazil sem, da sem vse to že popravil, vendar pred commitom nisem shranil datoteke, torej sem naložil starejšo verzijo. Sedaj prilagam delujočo.

jaanos commented 3 years ago

V redu, zdaj deluje, tako da sem posodobil povezavo.