Wpis z mikrobloga

#programowanie #statistics

Mirki i Mirabelki, oto wizualizacja danych z ankiety zrobionej przez @Krugerz ()
Każdy może ją replikować u siebie po zainstalowaniu języka R.

Data scraping bezpośrednio z adresu URL ( ͡ ͜ʖ ͡)

Kod:

library(tidyverse)
library(reshape2)
library(viridis)
library(rvest)
library(plotly)

mirkoblog_url <- '[https://www.wykop.pl/wpis/30955941/udalo-mi-sie-juz-sporzadzic-wyniki-ankiety-%C2%BA-%CA%96-/'](https://www.wykop.pl/wpis/30955941/udalo-mi-sie-juz-sporzadzic-wyniki-ankiety-%C2%BA-%CA%96-/')

mirkoblog_subset <- sapply(mirkoblog_url, function(x) {x %>% read_html() %>% html_nodes("#itemsstream .text p") %>% html_text()})

mirkoblog_text <- mirkoblog_subset[1]
mirkoblog_text <- unlist(strsplit(mirkoblog_text, "*\n"))
mirkoblog_text <- mirkoblog_text[-c(1:30)]
mirkoblog_text <- mirkoblog_text[-83]

mirkoblog_text2 <- str_replace(mirkoblog_text, pattern = "^[0-9]+. ", replacement = "")

wypok1 <- rbind(
cbind(str_split_fixed(sort(mirkoblog_text2[2:19]), pattern = " - ", n = 2), "<18"),

cbind(str_split_fixed(sort(mirkoblog_text2[21:40]), pattern = " - ", n = 2), "18-24"),

cbind(str_split_fixed(sort(mirkoblog_text2[42:61]), pattern = " - ", n = 2), "25-40"),

cbind(str_split_fixed(sort(mirkoblog_text2[63:82]), pattern = " - ", n = 2), "40<")
)

wypok1[11,2] <- 7
wypok1 <- as.tibble(wypok1)
wypok1[,2] <- sapply(wypok1[,2], as.numeric)
colnames(wypok1) <- c("Religion", "Value", "Ages")
wypok1[,1]

wypok2 <- wypok1
wypok2[,1] <- str_replace_all(wypok1$Religion, pattern = "Bahaizm|Bia\U0142kizm|Latajacy potwór spagetti|Krugerz to ch\*j|pastarafanizm|Spirytyzm \(reinkarnacja\)|Satanizm|Krysznaizm Lucyferianizm|Kutasiaryzm|KAZ BALAGANE|Zoroastryzm|satanizm|Taka jak tego drzewa|korwinizm|\U017C*adnym|pastafarianizm|latajacy potwór spaghetti|Holograficzny \U015Bwiat|Asatru|Wykopizm xDDD|Jedi|Pastafarianizm|dyskordianizm|Hinduizm|Sikhizm|zadnym|latający potwór spaghetti|Lataj\U0105*cy potwór spagetti|lataj\U0105*cy potwór spaghetti|Wicca|KAZ BA\U0141*AGANE|Holograficzny świat|Holograficzny", replacement = "Other")
wypok2[,1] <- str_replace_all(wypok2$Religion, pattern = c("Apateizm"), replacement = c("Agnostisism"))
wypok2[,1] <- str_replace_all(wypok2$Religion, pattern = c("Ateizm"), replacement = c("Atheism"))
wypok2[,1] <- str_replace_all(wypok2$Religion, pattern = c("Agnostycyzm"), replacement = c("Agnostisism"))
wypok2[,1] <- str_replace_all(wypok2$Religion, pattern = c("Chrze\U015B*cija\U0144*stwo|Katolicyzm"), replacement = c("Christianity"))
wypok2[,1] <- str_replace_all(wypok2$Religion, pattern = c("Buddyzm"), replacement = c("Buddhism"))
wypok2[,1] <- str_replace_all(wypok2$Religion, pattern = c("Rodzimowierstwo|neopoga\U0144*stwo|Poga\U0144*stwo"), replacement = c("Neopaganism"))
wypok2[,1] <- str_replace_all(wypok2$Religion, pattern = c("Panteizm|Deizm"), replacement = c("Theism"))
wypok2[,1] <- str_replace_all(wypok2$Religion, pattern = c("Judaizm"), replacement = c("Judaism"))

wypok3 <- cbind(wypok2, as.vector(unlist(lapply(unique(wypok2$Ages), function(x) {
filter(wypok2, Ages == x)[2] * 100/sum(filter(wypok2, Ages == x)[2])
}))))

colnames(wypok3) <- c("Religion", "Value", "Ages", "Percent_in_age")

ggplot(wypok3, aes(x = Ages, y = Percent_in_age, fill = Religion)) +
geom_bar(stat = "identity") +
theme_minimal(base_size = 15, base_family = "") +
labs(x = "Age group", y = "Percent") +
ggtitle("Religion distribution on Wykop.pl (2018)", subtitle = "gathered by @Krugerz \nanalised by @Miii_Kiii") + scale_fill_viridis(alpha = 1, begin = 0, end = 1, discrete = T, option = "D")
MiiiKiii - #programowanie #statistics

Mirki i Mirabelki, oto wizualizacja danych z...

źródło: comment_X1q7ILhha3J33jnVqv0MoeCQp4ydMDFx.jpg

Pobierz
  • 50
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@robert-kuzba: Ha, widzę, że przyjrzałeś się tym regexom. A to nie wszystkie strony korzystają z uft-8 ? W każdym razie, web scrapping ściągnął mi text z polskimi znakami ale w R, by je wyłapać musiałem używać unicode. Nie na każdej maszynie tak jest, ja mam system angielski i to może dlatego. Można na początku sesji zmienić środowisko R na utf-8 jakoś, bo kiedyś to robiłem jak potrzebowałem wykresy z polskimi
  • Odpowiedz
@fra234: Dobre pytanie, muszę się podszkolić ze SciPy.
@Refusek: Ha, właśnie klory są przepiękne ( i rozpoznawalne dla osób ze ślepotą barw). To jest paleta viridis, pochodząca oryginalnie ze wspomnianego przez @fra234: matplotliba. Obecnie jest coraz bardziej "modna" w środowisku naukowym, dla mnie jest super. Są jej 4 odmiany jednak vanilla rządzi. Stosuje viridis do wszystkiego.
  • Odpowiedz
@Refusek: https://www.youtube.com/watch?v=xAoljeRJ3lU min 15:00 cyt: "aby było przyjazne dla widzenia ślepoty barw największe różnice muszą być na osi żółć-niebiski".
Nie wiem jaki rodzaj ślepoty barw ma @Isnen ale skoro wszytskie źródła mówią, że ta paleta jest na to dobra to tak musi być ()

Zresztą to tylko taki bonus przypadkowy, wybrałem ta paletę bo mi się bardzo podoba (ʘʘ)
  • Odpowiedz
@akap_chad: Dzięki, muszę się zabrać za tego pythona bo o wiele bardziej uniwersalny. No niestety moje studia mnie tylko R nauczyły bo robiłem genomika/transkryptomika a w bioinformatyce rządzi R, a w szczególności bioconductor. Poprostu do tej pory nie miałem gdzie uzywać Pythona ale chyba się pouczę Django, żeby apki robić.
  • Odpowiedz
@Miii_Kiii w pythonie jest sporo fajnych bibliotek bioinformatycznych, plus jest dużo przyjemniejszy :D
Kiedyś robiliśmy z kumplem sprawko z jakiegoś programu właśnie w R. Nie chciało nam pobrać biblioteki, nic nie działało i już myśleliśmy, że cały kod jest zły. Po dwóch godzinach po prostu zadziałało ¯_(ツ)_/¯
  • Odpowiedz