Nedavno sam razgovarao s kolegom s Ekonomskog fakulteta o mogućem utjecaju velikih količina podataka na (makro)ekonomiju. U razgovoru smo se dotakli jednog praktičnog primjera o korištenju javno dostupnih, nestrukturiranih, relativno velikih podataka u makroekonomskim istraživanjima. Riječ je o tekstovima koji se nalaze na webu. Dok se podaci statističkih zavoda uglavnom nalaze u strukturiranoj formi, za analizu tekstova dostupnih na webu potrebno je uložiti određeni napor da bi se podatci preuzeli i uredili za statističku ili neku drugu analizu. Jedna vrsta tih podataka su i tekstovi koji se nalaze na posjećenim hrvatskim web portalima, poput Indexa, 24 sata, jutarnjeg, večernjeg lista i td. Podaci prikupljeni s ovih stranica mogu se koristiti u makroekonomskoj analizi. U konkretnom slučaju o kojem smo raspravljali, radilo s o prikupljanju podataka o učestalosti korištenja riječi “recesija” na javnim portalima, što se može koristiti kao indikator moguće recesije. U ovom postu ću pokušati na jednostavnom primjeru prikazati kako bi se podaci za takvu analizu mogli prikupiti pomoću programskog paketa R.
Proces prikupljanja sadržaja sa web stranica naziva se web crawling, a skripta koja automatski prikuplja podatke naziva se bot. Jednostavno rečeno, bot posjećuje željene web stranice, preuzima željeni sadržaj (cjelokupan ili parcijalan) i prati poveznice koje se nalaze na stranici. Cilj je posjetiti sve željene stranice i preuzeti sve podatke od interesa. To može uključivati kompletan tekst sa neke domene (što nije preporučljivo) ili samo određeni tekst sa nekih poveznica (recimo naslove filmova znanstvene fantastike). Najpoznatiji bot na svijetu je Google. Iako do sada možda niste razmišljali na ovaj način, Google ustvari crawla ogromni broj poveznica i sprema sadržaje pronađene na poveznicama na vlastite servere. Potom omogućuje pretragu teksta koji se nalazi na serveru.
R ima razvijen paket upravo za ovu svrhu, a zove se Rcrawler
. Ovaj paket je vrlo jednostavan i mogu ga koristiti čak i apsolutni početnici u programiranju i web crawlingu. Osobno ne koristim predmetni paket jer mi ne daje potpunu kontrolu nad procesom web crawlinga, ali za početnike je najbolji izbor. Prije web scrapinga uvijek je preporučljivo pročitati opće uvjete korištenja koji se nalaze na stranici. Stranice uglavnom ne dopuštaju brzo i masovno preuzimanje podataka. Korisno je crawler napraviti na način da se preuzimaju samo ciljane web stranice i dijelove teksta koji su zaista potrebni. Nije poželjno koristiti veliki broj paralelnih R procesa jer će Vam vrlo vjerojatno pristup biti zabranjen. Također, poželjno je između svakog GET zahtjeva koristiti određen vremenski zastoj.
U nastavku prikazujem jednostavnu analizu podataka teksta na temelju članaka preuzetih sa hrvatskog web portala Večernji.hr. Podaci uključuju razdoblje 1.1.2018. - 28.3.2019. Baza podataka sadrži ukupno 65.822 tekstova iz raznih područja (vijesti, posao, showbizz i td.). Prije analize je bilo potrebno urediti podatke i strukturirati podatke. Prvo sam napravio tokenizaciju svih objavljenih tekstova. Tokenizacija podrazumijeva transformaciju tekstova u tokene (riječi). Primjerice, rečenica: “Čitam blog CroEcon” se pretvara u vektor tokena: (“čitam”, “blog”, “croecon”). Nakon tokenizacije, iz vektora su izbačene “stop riječi”. “Stop riječi” su riječi koje se vrlo često pojavljuju u nekom jeziku. Primjer stop riječi u hrvatskom su “a”, “ali”, “bi” itd. Treba napomenuti da različiti NLP (Natural language processing) paketi sadrže različiti skup stop riječi. Za potrebe ovog posta sam koristio riječi paketa quanteda.
Nakon prilagodbe podataka, možemo napraviti nekoliko jednostavnih analiza. Za početak je korisno pogledati najkorištenije riječi u svim tekstovima. Prikazat ćemo 50 najkorištenijih riječi.
Token | Frekvencija |
---|---|
godine | 61822 |
više | 56024 |
zbog | 46307 |
rekao | 39575 |
godina | 37604 |
ima | 37531 |
može | 34849 |
prema | 32467 |
dok | 31274 |
kad | 30697 |
dana | 30034 |
hrvatske | 29848 |
jedan | 28411 |
posto | 27551 |
ljudi | 27227 |
bez | 26860 |
danas | 26849 |
sada | 26428 |
protiv | 26319 |
hrvatskoj | 26309 |
oko | 26151 |
kuna | 25961 |
kaže | 25238 |
hrvatska | 24233 |
tri | 23636 |
pogledajte | 23367 |
mogu | 23241 |
toga | 23092 |
dva | 22752 |
gdje | 22555 |
vrijeme | 22124 |
im | 22105 |
treba | 21509 |
1 | 21303 |
kod | 20704 |
milijuna | 20579 |
ove | 19957 |
prvi | 19570 |
kojem | 18451 |
nekoliko | 18449 |
uvijek | 17434 |
dvije | 17387 |
čak | 17338 |
kojoj | 16954 |
2 | 16936 |
ovo | 16730 |
dobro | 16451 |
puno | 16408 |
hdz | 16232 |
sad | 15924 |
Najkorištenija riječ je riječ “godine”, dok je riječ istog korijena, “godina”, na petom mjestu. Može se primijetiti veliki broj često korištenih riječi, poput “više” i “zbog”. Neki NLP paketi ove riječi uključuju u “stop” riječi (npr. poznati python paket spacy). Zanimljivo je da se na vrlo visokom 49. mjestu nalazi ¸“hdz”. Pojam “hdz” je čak učestaliji i od riječi sad. Zanimljivo je primjetiti da se na dosta visokom mjestu nalazi i riječ kuna. Na visokom mjestu su i pojmovi “novci” i “milijuni”, što ukazuje na vrlo veliki broj tekstova na o novcu i ekonomiji.
Prethodnu analizu sam ponovio na tekstovima s najvećim brojem komentara. Dakle, htio sam vidjeti koje riječi koreliraju sa velikim brojem komentara. Za jasnu identifikaciju bi bilo potrebno provesti statistički tekst, ali ova jednostavna analiza može stvoriti predodžbu o korelacijama između riječi i komentara. Dakle, prvo sam izabrao 100 tekstova sa najviše komentara te sam izdovjio najfrekventnije riječi.
Token | Frekvencija |
---|---|
hrvatske | 325 |
rekao | 273 |
ljudi | 227 |
prema | 222 |
hrvatska | 218 |
zbog | 215 |
foto | 201 |
oko | 190 |
trgu | 186 |
više | 184 |
hrvatskoj | 172 |
sati | 165 |
bana | 134 |
jelačića | 134 |
između | 130 |
protiv | 129 |
može | 128 |
danas | 121 |
gdje | 118 |
ima | 118 |
godine | 117 |
vučić | 115 |
trga | 107 |
trg | 105 |
pixsell | 102 |
rekla | 102 |
kaže | 101 |
predsjednik | 99 |
dok | 95 |
policija | 95 |
srbije | 95 |
pogledajte | 94 |
reprezentacije | 94 |
republike | 94 |
hdz | 93 |
kad | 92 |
migranata | 90 |
putin | 90 |
vatrenima | 88 |
im | 87 |
kazao | 86 |
policije | 85 |
godina | 84 |
put | 83 |
autobus | 82 |
među | 81 |
posto | 81 |
ulica | 81 |
zagrebu | 81 |
dana | 80 |
Osim uobičajenih riječi, koje se pojavljuju, u svim tekstovima, poput “rekao”, “prema”, “ljudi”, postoje određene riječi koje se ne pojavljuju na listi najčešće korištenih riječi u tablici 1. To se posebno odnosi na riječi “vučić” i “srbije”. Očito je da tekstovi o Srbiji i Srpskom predsjedniku privlače veliki broj komentara. Vrlo visoko se nalazi i pojam “reprezentacije” i “vatreni”, što znači da ljudi vrlo često komentiraju nastupe reprezentacije. Od zanimljivijih riječi se još pojavljuju i pojmovi “migranta” i “putin”. Pogledajmo još prikaz najučestalijih riječi poznatog autora Nine Raspudića, koji ima ukupno 70 tekstova:
Token | Frekvencija |
---|---|
hdz | 242 |
više | 222 |
kad | 197 |
može | 183 |
im | 162 |
bez | 159 |
zašto | 154 |
ljudi | 148 |
nitko | 146 |
onda | 142 |
tko | 141 |
prema | 138 |
danas | 133 |
godina | 131 |
ima | 130 |
sada | 130 |
hrvatskoj | 126 |
dok | 117 |
zbog | 117 |
dakle | 116 |
plenković | 108 |
treba | 108 |
kojem | 103 |
oko | 103 |
kojeg | 99 |
dana | 97 |
hrvatske | 97 |
godine | 95 |
jedan | 94 |
protiv | 93 |
vrijeme | 89 |
eu | 87 |
poput | 87 |
hrvatska | 86 |
mogu | 85 |
možda | 85 |
čemu | 82 |
tom | 81 |
čini | 80 |
prvi | 79 |
malo | 78 |
primjerice | 76 |
puno | 76 |
sdp | 76 |
drugi | 75 |
kojoj | 75 |
dio | 74 |
radi | 73 |
toga | 72 |
Iz ove pregledne analize bi se dalo zaključiti da Nino Raspudić najviše piše o HDZ-u i premijeru Plenkoviću. Vjerujem da čitatelji već mogu uvidjeti koristi od analize tekstova, kako za analizu medija, politike, tako i za analizu ekonomije.
S obzirom da je primjena analize teksta na ekonomske fenomene bila motivacijski pokretač ovog posta, dodatno sam analizirao određene ekonomske pojmove. Pogledajmo primjerice koliko često se pojam recesije pojavljivao u tekstovima:
Graf pokazuje relativno ujednačenu frekvenciju pojma “recesija” do veljače 2019. Pojam recesija je naviše puta spomenut 23.2.2019. Međutim, važno je podsjetiti da jedan članak može više puta koristiti isti pojam. Primjerice, 23.02. objavljen je tekst pod naslovom: “Je li Hrvatska pred novom recesijom? Stručnjak otkriva što je slično kao i 2008. godine”. Očito je da samo taj jedan tekst može sadržavati veliki broj pojmova recesija. Sljedeća tablica pokazuje pet datuma sa najvećom frekvencijom pojma “recesija”:
datumShort | Frekvencija |
---|---|
2019-02-23 | 21 |
2019-02-01 | 16 |
2018-09-27 | 14 |
2019-01-31 | 12 |
2019-02-12 | 12 |
2019-02-15 | 12 |
Ako bi se iz grafa zaključivalo o riziku pojave nove recesije. čini se da je postojao signal pojave recesije u veljači i ožujku, ali da u posljednjih nekoliko dana ovaj signal oslabio. Ova kretanja su možda povezana i s događanjima u Uljaniku:
Cijela ova analiza pokazuje veliki potencijal primjene tekstualne analize na analizu teksta, medija, politike i ostalih područja. Najveće ograničenje predstavlja prikupljanje podataka s web-a (čime se inače bavimo :)), dok je analiza teksta lakši i zanimljivi dio U budućnosti možemo očekivati sve više tekstualnih analiza u ekonomiju, posebno u području nowcastinga.
Preplatite se
Preplatite se putem newslettera ili RSS feeda