Open tilenklinc opened 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
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.
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.
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).
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.
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
.
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.
Š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"
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 :)
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:
news_words
pride do napake, saj se nizi preberejo kot faktorji (pretvorbo opraviš šele za tem). Da se temu izogneš, bo bolje namesto vgrajene funkcije read.csv2
(s piko) uporabiti funkcijo read_csv2
(s podčrtajem) iz knjižnice readr
, pri tem pa navesti ustrezno kodiranje znakov, npr.
news <- read_csv2("uvoz/news.csv", locale=locale(encoding="Windows-1250")) %>% select(-1)
Podobno lahko narediš tudi za razpredelnico stock
. Tako tudi ne bo potrebno pretvarjati datumov.
sentiment_summary
imaš stolpec Sentiment
(velika začetnica), medtem ko v graf8
pričakuješ sentiment
- to poenoti, da bo graf deloval.Š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.
Najprej hvala obema za tako učinkovito pomoč. Po vnesenih popravki deluje vse, izriše se tudi v Binderju. S tem zaključujem
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:
Najlepša hvala. Z zadnjim pushom dodadana še omenjena estetska popravka na grafih.
Trenutno poročilo ne deluje. Težave se pojavijo tukaj: https://github.com/tilenklinc/APPR_projektna/blob/7ffddb3112df109b7a5b7ef71117e1c42d1eadc9/analiza/analiza2.R#L18-L21
labs
manjka navednica na koncu.ggtitle
(theme
se uporabi za nastavitev izgleda in pri parametru title
pričakuje klic funkcije element_text
).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.
V redu, zdaj deluje, tako da sem posodobil povezavo.
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č.