Objetivo: Ir recopilando cositas de twitter para ver si al final hago un proyecto medio serio



Twitter

Cosas

Musica - Lyrics

Web Services

--- title: "Proyecto Twitter" author: "Pedro J. Pérez" date: "`r format(Sys.time(), '%d %B, %Y')`" output: html_document: #code_folding: show theme: cosmo highlight: textmate toc: yes toc_float: yes self_contained: yes --- ```{r chunk_setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, cache = FALSE, cache.path = "./caches/", eval = TRUE ) ``` ```{r options_setup, echo = FALSE} options(scipen = 999) #- para quitar la notacion científica ``` ```{r cargar_pkgs, echo = FALSE} #library("personal.pjp") library("tidyverse") library("here") ``` ------------------------- **Objetivo:** Ir recopilando cositas de twitter para ver si al final hago un proyecto medio serio
------------------------- ## Twitter - [[Build an instant Twitter dashboard, with just a little code]](https://pushpullfork.com/build-an-instant-twitter-dashboard-with-just-a-little-code/). Otro pkg, coge los tweets con phyton, pero luego loas naliza con R y hace un shiny facil - [[Interseccion de followers]](https://www.cultureofinsight.com/blog/2018/01/25/2018-01-25-visualising-twitter-follower-overlap/) - [[R: Collecting and Analyzing Twitter Data featuring {rtweet}]](https://mkearney.github.io/nicar_tworkshop/#1). Muy buenas slides - [[Exploring the CRAN social network]](http://www.pieceofk.fr/?p=431). Lo mando Bellosta es la comunidad R - [[Charla de Pedersen sobre igraph]](https://www.rstudio.com/resources/videos/tidying-up-your-network-analysis-with-tidygraph-and-ggraph/) - [[Un ejemplo de tweets de una conferencia]](https://github.com/mkearney/rstudioconf_tweets)@kearneymw: Github repo on collecting and exploring the #rstudioconf Twitter data: https://github.com/mkearney/rstudioconf_tweets. It includes instructions on how to re-gather the data [for yourself] and a few pretty charts - [[21 Recipes for Mining Twitter Data with rtweet]](https://rud.is/books/21-recipes/). Bookdown de Bod Rudis. GOOOOOOD - [[A bookdown “Hello World” : Twenty-one (minus two) Recipes for Mining Twitter with rtweet]](https://rud.is/b/2018/01/05/a-bookdown-hello-world-twenty-one-minus-two-recipes-for-mining-twitter/). Bob Rudis post sobre su bookdown - [[A Gentle Introduction to Network Visualisation]](http://colinfay.me/back-budapest/?utm_content=buffer7bc86&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer). Un blog de un frances que hace analisis de text y tiene unas slides good [aqui](https://github.com/ColinFay/conf/blob/master/2017-11-budapest/fay_colin_visualise_network.pdf) - [[Using rtweet to Create a tidyverse Twitterbot]](https://www.wjakethompson.com/post/tidyverse-tweets/). Mas de twitter. MUY BUENO. - [[Large-scale appropriation of Americans’ IDs suggested by Fake Pro-Repeal Net Neutrality Commenters’ response]](https://hackernoon.com/we-are-uncovering-more-fake-pro-repeal-net-neutrality-comments-that-suggest-large-scale-244c900f5043). Encontrar fake commenters ## Cosas - [[A simple package for extracting useful features from character objects.]](https://github.com/mkearney/textfeatures). un pkg que extrae cosas de text, p.ej. exclamaciones etc... - [[A comparison between spaCy and UDPipe for Natural Language Processing for R users ]](http://www.bnosac.be/index.php/blog/75-a-comparison-between-spacy-and-udpipe-for-natural-language-processing-for-r-users) - @ma_salmon: Nowadays when I remember someone tweeted something & need that something, I look for the tweet using #rstats @rtweet_pkg get_timeline and @rstudio View() - [[An R Package for the Structural Topic Model]](http://www.structuraltopicmodel.com/). Para topicos - [[Capture Tweets with tweet_shot()]](https://www.r-bloggers.com/r%e2%81%b6-capture-tweets-with-tweet_shot/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+RBloggers+%28R+bloggers%29). captura tweets - [[2017. Quantified. In. R.]](https://www.r-bloggers.com/2017-quantified-in-r/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+RBloggers+%28R+bloggers%29) hbrtmaster cuantifica el 2017, incluido tweeter. [Aqui tienes el post](https://rud.is/rpubs/2017-year-in-review/) - [[tidytext: Text mining using dplyr, ggplot2, and other tidy tools]](https://github.com/juliasilge/tidytext). Julia Silge explica en este post q hay muchos diccionarios, tb spanish - [[A Rstats Twitter sorting hat/ sorting stat.]](https://github.com/thoughtfulbloke/sorting_stat). MUCHO GOOD - [[My #Best9of2017 tweets]](http://www.masalmon.eu/2017/12/30/best9of2017/). Maelme sus 9 mejores tweets ## Musica - Lyrics - [[Paroles, paroles et paroles]](https://mtmx.github.io/blog/paroles_chansonfr/). Scrappea lyrics en frnaces y hace analisis de sentimineto ## Web Services - [[ropensci/webservices]](https://github.com/ropensci/webservices). Listado fantastico de R-opensci de servicios web. API etc.... etc... GOOD ## Netwoks - [[Network visualization with R]](http://kateto.net/network-visualization)#- https://twitter.com/hrbrmstr/status/1172465471670640640 library(hrbrthemes) #remotes::install_github("hrbrmstr/ggchicklet") library(ggchicklet) library(stringi) library(tidyverse) debates_src <- jsonlite::fromJSON("https://int.nyt.com/newsgraphics/2019/debates/2019-09-12-dem-debate/data.json") debates_src %>% as_tibble() %>% mutate( speaker = stri_trans_totitle(speaker), timestamp = parse_time(timestamp), elapsed = as.numeric(elapsed) / 60, topic = stri_trans_totitle(topic) ) %>% mutate( speaker = case_when( speaker == "Orourke" ~ "O'Rourke", TRUE ~ speaker ) ) %>% filter( !is.na(timestamp), speaker != "Moderator" ) %>% mutate( speaker = fct_reorder(speaker, elapsed, sum, .desc=FALSE), topic = fct_inorder(topic) ) -> debates count(debates, speaker, wt=elapsed, sort=TRUE) %>% mutate(speaker = fct_reorder(speaker, n, sum, .desc=FALSE)) %>% mutate(speaker = fct_inorder(speaker) %>% fct_rev()) debates %>% mutate(speaker = fct_reorder(speaker, elapsed, sum, .desc=FALSE)) %>% ggplot() + geom_chicklet( aes(speaker, elapsed, group = timestamp, fill = topic), width = 0.75 ) + scale_x_discrete(expand = c(0,0)) + scale_y_continuous( expand = c(0, 0.0625), position = "right", breaks = seq(0, 14, 2), labels = c(0, sprintf("%d min.", seq(2, 14, 2))) ) + ggthemes::scale_fill_tableau("Tableau 20") + coord_flip() + labs( x = NULL, y = NULL, fill = NULL, title = "How Long Each Candidate Spoke", subtitle = "Septemnber 2019 Democratic Debates", caption = "Each bar segment represents the length of a candidate’s response to a question.\n\nOriginal \n#rstats reproduction by @hrbrmstr" ) + theme_ipsum_rc(grid="X") + theme(axis.text.x = element_text(color = "gray60", size = 10)) + theme(legend.position = "top") #- quiero hacer un jercicio de mandar mails personalizados #- remotes::install_github("rich-iannone/blastula") #- https://github.com/rich-iannone/blastula #- https://www.r-bloggers.com/emayili-sending-email-from-r/  Fy![Q)#[@pT!!Abajar-ggsheets_Awordcloud.R Fy![acO)#[@c##Abajar-LAS-NAVESA.R. Fy![XJO)#[@3 3 Abajar-respuestaAs_grupo_F.R Fy![{]O)#[@ C"C"ABAJAR_PROG.R% Fy![/SEO)#[@ 7$Aword_cloud.R#- bajar respuestas grupo F, GADE, 2019-20 #- https://cran.r-project.org/web/packages/googlesheets/vignettes/basic-usage.html #- en tamil: https://www.programmingwithr.com/how-to-do-tamil-text-analysis-nlp-in-r/ #- language detection: https://cran.r-project.org/web/packages/languagelayeR/vignettes/Introduction.html #- https://github.com/ropensci/cld3 (otro detector de lenguaje) library(tidyverse) #--------------------------- el nuevo pkg #devtools::install_github("tidyverse/googlesheets4") library(googlesheets4) aa <- read_sheet("https://docs.google.com/spreadsheets/d/15uWJK72B3zWyl1hiUbaYQZEqU47UOGLYF8QaIKQw1es/edit#gid=1657499539") bb <- gs4_find() cc <- read_sheet(as.character(bb[2,2])) #- el viejo package library(googlesheets) my_sheets <- gs_ls() #- devuelve lista de googles sheets q tienes en tu drive space my_sheets %>% glimpse() #- seleccionas el sheet q te interesa x su título, p.ej: "Econometría. Grupo F (respuestas)" my_selected_sheet <- gs_title("Econometría. Grupo F (respuestas)") #- usando la f. gs_title() my_selected_sheet <- gs_title("Programación y manejo de datos (2019-2020) (respuestas)") #- usando la f. gs_title() # df %>% gs_browse() #- si quieres ir a la página de Google sheet en el explorador # gs_ws_ls(my_selected_sheet) #- List the worksheets in a spreadsheet #- lee las respuestas del sheet seleccionado df_Total <- gs_read(my_selected_sheet) names(df_Total) <- names(df_Total) %>% str_replace(" ", "_") %>% str_replace("-", "") #- Las paso todas a texto, para así ponerlas en un vector library(purrr) df_text <- df_Total %>% map_df(as.character) df_text <- df_text %>% slice(-c(1:2)) #- quito las 2 primeras q eran fake #- cojo informacion personal de contacto e_mails <- df_text %>% pull(email) nombres <- df_text %>% pull(Nombre) apellidos <- df_text %>% pull(Apellidos) npas <- df_text %>% pull(NPA) #- las respuestas a la primera pregunta están en la columna 6. text <- df_text %>% pull(6) text_1 <- paste(text, collapse = " ") #- http://www.bnosac.be/index.php/blog/77-an-overview-of-keyword-extraction-techniques library(udpipe) library(textrank) ## First step: Take the Spanish udpipe model and annotate the text. Note: this takes about 3 minutes ud_model <- udpipe_download_model(language = "spanish") ud_model <- udpipe_load_model(ud_model$file_model) x <- udpipe_annotate(ud_model, x = df_text$Pregunta_1) x <- as.data.frame(x) x #- ocurrencia de nombres stats <- subset(x, upos %in% "NOUN") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Nombres más frecuentes", xlab = "Freq") #- ocurrencia de verbos stats <- subset(x, upos %in% "VERB") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Verbos más frecuentes", xlab = "Freq") #- ocurrencia de adjetivos stats <- subset(x, upos %in% "ADJ") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Adjetivos más frecuentes", xlab = "Freq") ## Collocation (words following one another) stats <- keywords_collocation(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), ngram_max = 4) ## Co-occurrences: How frequent do words occur in the same sentence, in this case only nouns or adjectives stats <- cooccurrence(x = subset(x, upos %in% c("NOUN", "ADJ")), term = "lemma", group = c("doc_id", "paragraph_id", "sentence_id")) ## Co-occurrences: How frequent do words follow one another stats <- cooccurrence(x = x$lemma, relevant = x$upos %in% c("NOUN", "ADJ")) ## Co-occurrences: How frequent do words follow one another even if we would skip 2 words in between stats <- cooccurrence(x = x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), skipgram = 2) head(stats) #- Visualisation of these co-occurrences can be done using a network plot as follows for the top 30 most frequent co-occurring nouns and adjectives. library(igraph) library(ggraph) library(ggplot2) wordnetwork <- head(stats, 30) wordnetwork <- graph_from_data_frame(wordnetwork) ggraph(wordnetwork, layout = "fr") + geom_edge_link(aes(width = cooc, edge_alpha = cooc), edge_colour = "pink") + geom_node_text(aes(label = name), col = "darkgreen", size = 4) + theme_graph(base_family = "Arial Narrow") + theme(legend.position = "none") + labs(title = "Coocurrencías (a 3 palabras de distancia)", subtitle = "Nouns & Adjective") #- Option 3: Textrank (word network ordered by Google Pagerank) stats <- textrank_keywords(x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 8, sep = " ") stats <- subset(stats$keywords, ngram > 1 & freq >= 2) library(wordcloud) wordcloud(words = stats$keyword, freq = stats$freq) #- Option 4: Rapid Automatic Keyword Extraction: RAKE stats <- keywords_rake(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 4) head(subset(stats, freq > 3)) #- Option 5: Phrases ## Simple noun phrases (a adjective+noun, pre/postposition, optional determiner and another adjective+noun) x$phrase_tag <- as_phrasemachine(x$upos, type = "upos") stats <- keywords_phrases(x = x$phrase_tag, term = x$token, pattern = "(A|N)+N(P+D*(A|N)*N)*", is_regex = TRUE, ngram_max = 4, detailed = FALSE) head(subset(stats, ngram > 2)) #- Option 6: Use dependency parsing output to get the nominal subject and the adjective of it stats <- merge(x, x, by.x = c("doc_id", "paragraph_id", "sentence_id", "head_token_id"), by.y = c("doc_id", "paragraph_id", "sentence_id", "token_id"), all.x = TRUE, all.y = FALSE, suffixes = c("", "_parent"), sort = FALSE) stats <- subset(stats, dep_rel %in% "nsubj" & upos %in% c("NOUN") & upos_parent %in% c("ADJ")) stats$term <- paste(stats$lemma_parent, stats$lemma, sep = " ") stats <- txt_freq(stats$term) library(wordcloud) wordcloud(words = stats$key, freq = stats$freq, min.freq = 3, max.words = 100, random.order = FALSE, colors = brewer.pal(6, "Dark2")) #----------------------- TIDY TEXT --------------------------------- #----------------------- TIDY TEXT --------------------------------- #- tidytext: https://www.tidytextmining.com/tidytext.html library(tidyverse) library(tidytext) text_df <- df_text %>% select(6) %>% mutate(line = 1:nrow(df_text)) %>% select(2,1) %>% rename(text = Pregunta_1) str(text_df) text_df_a <- text_df %>% unnest_tokens(word, text) #- we’ve split each row so that there is one token (word) in each row stop_words <- stop_words #- son ingleses #library(tm) #stop_words <- stopwords(kind = "es") %>% as.data.frame() names(stop_words) <- "word" text_df_aa <- text_df_a %>% anti_join(stop_words) #- contamos palabros aa <- text_df_aa %>% count(word, sort = TRUE) library(scales) # expect a warning about rows with missing values being removed aaa <- aa %>% slice(1:8) plot2 <- ggplot(aaa, aes(x=word, y=n)) + geom_bar(stat = "identity") #------- R & Flowers library(syuzhet) letras <- df_text %>% pull(6) letras <- tolower(letras) letras <- base::chartr('áéíóú' , 'aeiou',letras) #- quitar tildes letras <- gsub(';|,|\\.|?|¿|!|¡|(|)' , '', letras) #- comas, puntos y comas .... letras <- chartr('?¿()!¡',' ',letras) #- interrogantes, parentesis y exclamaciones sentiment_NV <- get_nrc_sentiment(letras) row.names(sentiment_NV) <- nombres sentiment_NV library(tm) library(wordcloud) corpus = Corpus(VectorSource(letras)) #- construye un corpus corpus = tm_map(corpus, content_transformer(tolower)) #- a minusculas corpus = tm_map(corpus, removeWords, c(stopwords("spanish"), "camila_vallejo")) #- quita "palabras vacias" corpus = tm_map(corpus, stripWhitespace) #- quita espacion en blanco tdm <- TermDocumentMatrix(corpus) #- crea una matriz de términos m = as.matrix(tdm) #- convierte en matriz wf <- sort(rowSums(m),decreasing=TRUE) #- conteo de palabras en orden decreciente dm <- data.frame(word = names(wf), freq=wf) #- crea un df con las palabras wordcloud(dm$word, dm$freq, random.order=FALSE, colors=brewer.pal(8, "Dark2")) #- bajar respuestas grupo F, GADE, 2019-20 #- https://cran.r-project.org/web/packages/googlesheets/vignettes/basic-usage.html #- en tamil: https://www.programmingwithr.com/how-to-do-tamil-text-analysis-nlp-in-r/ #- language detection: https://cran.r-project.org/web/packages/languagelayeR/vignettes/Introduction.html #- https://github.com/ropensci/cld3 (otro detector de lenguaje) library(tidyverse) library(googlesheets) #--------------------------- my_sheets <- gs_ls() #- devuelve lista de googles sheets q tienes en tu drive space my_sheets %>% glimpse() #- seleccionas el sheet q te interesa x su título, p.ej: "Econometría. Grupo F (respuestas)" my_selected_sheet <- gs_title("Datos terminosxperiodico") #- usando la f. gs_title() # df %>% gs_browse() #- si quieres ir a la página de Google sheet en el explorador # gs_ws_ls(my_selected_sheet) #- List the worksheets in a spreadsheet #- lee las respuestas del sheet seleccionado df_Total <- gs_read(my_selected_sheet, readr::locale(encoding = "latin1")) rio::export(df_Total, "./pruebas/dff.csv") fallas <- read_delim("./pruebas/dff.csv", delim = ";", locale = readr::locale(encoding = "latin1")) fallas <- read_delim("./pruebas/dff.csv", delim = ",",locale = readr::locale(encoding = "utf-8")) df_Total <- gs_read(my_selected_sheet, readr::locale(encoding = "latin1")) names(df_Total) <- names(df_Total) %>% str_replace(" ", "_") %>% str_replace("-", "") df_1 <- df_Total %>% fallas <- read_delim("http://mapas.valencia.es/lanzadera/opendata/Monumentos_falleros/CSV", delim = ";", locale = readr::locale(encoding = "latin1")) #- Las paso todas a texto, para así ponerlas en un vector library(purrr) df_text <- df_Total %>% map_df(as.character) df_text <- df_text %>% slice(-c(1:2)) #- quito las 2 primeras q eran fake #- cojo informacion personal de contacto e_mails <- df_text %>% pull(email) nombres <- df_text %>% pull(Nombre) apellidos <- df_text %>% pull(Apellidos) npas <- df_text %>% pull(NPA) #- df_a <- df_Total %>% slice(28:36) df_aa <- df_a %>% select(6) df_a <- df_text %>% slice(28:36) df_aa <- df_a %>% select(6) bb <- df_aa[1,1] %>% as.character() cat(bb) #- las respuestas a la primera pregunta están en la columna 6. text <- df_text %>% pull(6) text_1 <- paste(text, collapse = " ") #- http://www.bnosac.be/index.php/blog/77-an-overview-of-keyword-extraction-techniques library(udpipe) library(textrank) ## First step: Take the Spanish udpipe model and annotate the text. Note: this takes about 3 minutes ud_model <- udpipe_download_model(language = "spanish") ud_model <- udpipe_load_model(ud_model$file_model) x <- udpipe_annotate(ud_model, x = df_text$Pregunta_1) x <- as.data.frame(x) x #- ocurrencia de nombres stats <- subset(x, upos %in% "NOUN") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Nombres más frecuentes", xlab = "Freq") #- ocurrencia de verbos stats <- subset(x, upos %in% "VERB") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Verbos más frecuentes", xlab = "Freq") #- ocurrencia de adjetivos stats <- subset(x, upos %in% "ADJ") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Adjetivos más frecuentes", xlab = "Freq") ## Collocation (words following one another) stats <- keywords_collocation(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), ngram_max = 4) ## Co-occurrences: How frequent do words occur in the same sentence, in this case only nouns or adjectives stats <- cooccurrence(x = subset(x, upos %in% c("NOUN", "ADJ")), term = "lemma", group = c("doc_id", "paragraph_id", "sentence_id")) ## Co-occurrences: How frequent do words follow one another stats <- cooccurrence(x = x$lemma, relevant = x$upos %in% c("NOUN", "ADJ")) ## Co-occurrences: How frequent do words follow one another even if we would skip 2 words in between stats <- cooccurrence(x = x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), skipgram = 2) head(stats) #- Visualisation of these co-occurrences can be done using a network plot as follows for the top 30 most frequent co-occurring nouns and adjectives. library(igraph) library(ggraph) library(ggplot2) wordnetwork <- head(stats, 30) wordnetwork <- graph_from_data_frame(wordnetwork) ggraph(wordnetwork, layout = "fr") + geom_edge_link(aes(width = cooc, edge_alpha = cooc), edge_colour = "pink") + geom_node_text(aes(label = name), col = "darkgreen", size = 4) + theme_graph(base_family = "Arial Narrow") + theme(legend.position = "none") + labs(title = "Coocurrencías (a 3 palabras de distancia)", subtitle = "Nouns & Adjective") #- Option 3: Textrank (word network ordered by Google Pagerank) stats <- textrank_keywords(x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 8, sep = " ") stats <- subset(stats$keywords, ngram > 1 & freq >= 2) library(wordcloud) wordcloud(words = stats$keyword, freq = stats$freq) #- Option 4: Rapid Automatic Keyword Extraction: RAKE stats <- keywords_rake(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 4) head(subset(stats, freq > 3)) #- Option 5: Phrases ## Simple noun phrases (a adjective+noun, pre/postposition, optional determiner and another adjective+noun) x$phrase_tag <- as_phrasemachine(x$upos, type = "upos") stats <- keywords_phrases(x = x$phrase_tag, term = x$token, pattern = "(A|N)+N(P+D*(A|N)*N)*", is_regex = TRUE, ngram_max = 4, detailed = FALSE) head(subset(stats, ngram > 2)) #- Option 6: Use dependency parsing output to get the nominal subject and the adjective of it stats <- merge(x, x, by.x = c("doc_id", "paragraph_id", "sentence_id", "head_token_id"), by.y = c("doc_id", "paragraph_id", "sentence_id", "token_id"), all.x = TRUE, all.y = FALSE, suffixes = c("", "_parent"), sort = FALSE) stats <- subset(stats, dep_rel %in% "nsubj" & upos %in% c("NOUN") & upos_parent %in% c("ADJ")) stats$term <- paste(stats$lemma_parent, stats$lemma, sep = " ") stats <- txt_freq(stats$term) library(wordcloud) wordcloud(words = stats$key, freq = stats$freq, min.freq = 3, max.words = 100, random.order = FALSE, colors = brewer.pal(6, "Dark2")) #----------------------- TIDY TEXT --------------------------------- #----------------------- TIDY TEXT --------------------------------- #- tidytext: https://www.tidytextmining.com/tidytext.html library(tidyverse) library(tidytext) text_df <- df_text %>% select(6) %>% mutate(line = 1:nrow(df_text)) %>% select(2,1) %>% rename(text = Pregunta_1) str(text_df) text_df_a <- text_df %>% unnest_tokens(word, text) #- we’ve split each row so that there is one token (word) in each row stop_words <- stop_words #- son ingleses #library(tm) #stop_words <- stopwords(kind = "es") %>% as.data.frame() names(stop_words) <- "word" text_df_aa <- text_df_a %>% anti_join(stop_words) #- contamos palabros aa <- text_df_aa %>% count(word, sort = TRUE) library(scales) # expect a warning about rows with missing values being removed aaa <- aa %>% slice(1:8) plot2 <- ggplot(aaa, aes(x=word, y=n)) + geom_bar(stat = "identity") #------- R & Flowers library(syuzhet) letras <- df_text %>% pull(6) letras <- tolower(letras) letras <- base::chartr('áéíóú' , 'aeiou',letras) #- quitar tildes letras <- gsub(';|,|\\.|?|¿|!|¡|(|)' , '', letras) #- comas, puntos y comas .... letras <- chartr('?¿()!¡',' ',letras) #- interrogantes, parentesis y exclamaciones sentiment_NV <- get_nrc_sentiment(letras) row.names(sentiment_NV) <- nombres sentiment_NV library(tm) library(wordcloud) corpus = Corpus(VectorSource(letras)) #- construye un corpus corpus = tm_map(corpus, content_transformer(tolower)) #- a minusculas corpus = tm_map(corpus, removeWords, c(stopwords("spanish"), "camila_vallejo")) #- quita "palabras vacias" corpus = tm_map(corpus, stripWhitespace) #- quita espacion en blanco tdm <- TermDocumentMatrix(corpus) #- crea una matriz de términos m = as.matrix(tdm) #- convierte en matriz wf <- sort(rowSums(m),decreasing=TRUE) #- conteo de palabras en orden decreciente dm <- data.frame(word = names(wf), freq=wf) #- crea un df con las palabras wordcloud(dm$word, dm$freq, random.order=FALSE, colors=brewer.pal(8, "Dark2")) #- bajar respuestas grupo F, GADE, 2019-20 #- https://cran.r-project.org/web/packages/googlesheets/vignettes/basic-usage.html library(tidyverse) library(googlesheets) #--------------------------- my_sheets <- gs_ls() #- devuelve lista de googles sheets q tienes en tu drive space my_sheets %>% glimpse() #- seleccionas el sheet q te interesa x su título, p.ej: "Econometría. Grupo F (respuestas)" # Eco_grupo_F <- my_sheets %>% filter(sheet_title == "Econometría. Grupo F (respuestas)") #- con dplyr my_selected_sheet <- gs_title("Econometría. Grupo F (respuestas)") #- usando la f. gs_title() my_selected_sheet <- gs_title("Programación y manejo de datos (2019-2020) (respuestas)") #- curso Prog. y Big Data # df %>% gs_browse() #- si quieres ir a la página de Google sheet en el explorador # gs_ws_ls(my_selected_sheet) #- List the worksheets in a spreadsheet #- lee las respuestas del sheet seleccionado df_Total <- gs_read(my_selected_sheet) #- Las paso todas a texto, para así ponerlas en un vector library(purrr) df_text <- df_Total %>% map_df(as.character) #- cojo informacion personal de contacto e_mails <- df_text %>% pull(`e-mail`) nombres <- df_text %>% pull(Nombre) apellidos <- df_text %>% pull(Apellidos) npas <- df_text %>% pull(NPA) #- df_info_personal <- df_text %>% select(2:5) #- voy a sacar las respuestas de cada estudiante como un vector y luego comparar con el vector de respuestas correctas df_text %>% pull(2) for(i in 1:nrow(df_text)) { print(i) zz <- df_text %>% pull(i) #- otro enfoque es comparar cada columna con su respuesta y poner 1 o 0 y luego sumar las 10 columnas (si creo q este enfoque es mejor) #- seleccionar las respuestas de esa tanda for (seq_along(df_text)) df <- df_Total %>% slice(c(1:3)) #-------------------------------------------------------------------- ARREGLO names names(df) <- names(df) %>% str_replace(" ", "_") #-------------------------------------------------------------------- definir respuestas correctas correctas <- data.frame(1.23, 17826647882 ,12345, "feo", 22, 33, 44, "petardo", "micky", "adios") library(prodlim) # NOT RUN { tab <- data.frame(num=1:26,abc=letters) x <- c(3,"c") row.match(x,tab) x <- data.frame(n=c(3,8),z=c("c","h")) row.match(x,tab) #- bajar respuestas grupo F, GADE, 2019-20 #- https://cran.r-project.org/web/packages/googlesheets/vignettes/basic-usage.html #- en tamil: https://www.programmingwithr.com/how-to-do-tamil-text-analysis-nlp-in-r/ #- language detection: https://cran.r-project.org/web/packages/languagelayeR/vignettes/Introduction.html #- https://github.com/ropensci/cld3 (otro detector de lenguaje) library(tidyverse) library(googlesheets) #--------------------------- my_sheets <- gs_ls() #- devuelve lista de googles sheets q tienes en tu drive space my_sheets %>% glimpse() #- seleccionas el sheet q te interesa x su título, p.ej: "Econometría. Grupo F (respuestas)" my_selected_sheet <- gs_title("Econometría. Grupo F (respuestas)") #- usando la f. gs_title() my_selected_sheet <- gs_title("Programación y manejo de datos (2019-2020) (respuestas)") #- usando la f. gs_title() # df %>% gs_browse() #- si quieres ir a la página de Google sheet en el explorador # gs_ws_ls(my_selected_sheet) #- List the worksheets in a spreadsheet #- lee las respuestas del sheet seleccionado df_Total <- gs_read(my_selected_sheet) names(df_Total) <- names(df_Total) %>% str_replace(" ", "_") %>% str_replace("-", "") #- Las paso todas a texto, para así ponerlas en un vector library(purrr) df_text <- df_Total %>% map_df(as.character) df_text <- df_text %>% slice(-c(1:2)) #- quito las 2 primeras q eran fake #- cojo informacion personal de contacto e_mails <- df_text %>% pull(email) nombres <- df_text %>% pull(Nombre) apellidos <- df_text %>% pull(Apellidos) npas <- df_text %>% pull(NPA) #- df_a <- df_Total %>% slice(28:36) df_aa <- df_a %>% select(6) df_a <- df_text %>% slice(28:36) df_aa <- df_a %>% select(6) bb <- df_aa[1,1] %>% as.character() cat(bb) #- las respuestas a la primera pregunta están en la columna 6. text <- df_text %>% pull(6) text_1 <- paste(text, collapse = " ") #- http://www.bnosac.be/index.php/blog/77-an-overview-of-keyword-extraction-techniques library(udpipe) library(textrank) ## First step: Take the Spanish udpipe model and annotate the text. Note: this takes about 3 minutes ud_model <- udpipe_download_model(language = "spanish") ud_model <- udpipe_load_model(ud_model$file_model) x <- udpipe_annotate(ud_model, x = df_text$Pregunta_1) x <- as.data.frame(x) x #- ocurrencia de nombres stats <- subset(x, upos %in% "NOUN") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Nombres más frecuentes", xlab = "Freq") #- ocurrencia de verbos stats <- subset(x, upos %in% "VERB") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Verbos más frecuentes", xlab = "Freq") #- ocurrencia de adjetivos stats <- subset(x, upos %in% "ADJ") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Adjetivos más frecuentes", xlab = "Freq") ## Collocation (words following one another) stats <- keywords_collocation(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), ngram_max = 4) ## Co-occurrences: How frequent do words occur in the same sentence, in this case only nouns or adjectives stats <- cooccurrence(x = subset(x, upos %in% c("NOUN", "ADJ")), term = "lemma", group = c("doc_id", "paragraph_id", "sentence_id")) ## Co-occurrences: How frequent do words follow one another stats <- cooccurrence(x = x$lemma, relevant = x$upos %in% c("NOUN", "ADJ")) ## Co-occurrences: How frequent do words follow one another even if we would skip 2 words in between stats <- cooccurrence(x = x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), skipgram = 2) head(stats) #- Visualisation of these co-occurrences can be done using a network plot as follows for the top 30 most frequent co-occurring nouns and adjectives. library(igraph) library(ggraph) library(ggplot2) wordnetwork <- head(stats, 30) wordnetwork <- graph_from_data_frame(wordnetwork) ggraph(wordnetwork, layout = "fr") + geom_edge_link(aes(width = cooc, edge_alpha = cooc), edge_colour = "pink") + geom_node_text(aes(label = name), col = "darkgreen", size = 4) + theme_graph(base_family = "Arial Narrow") + theme(legend.position = "none") + labs(title = "Coocurrencías (a 3 palabras de distancia)", subtitle = "Nouns & Adjective") #- Option 3: Textrank (word network ordered by Google Pagerank) stats <- textrank_keywords(x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 8, sep = " ") stats <- subset(stats$keywords, ngram > 1 & freq >= 2) library(wordcloud) wordcloud(words = stats$keyword, freq = stats$freq) #- Option 4: Rapid Automatic Keyword Extraction: RAKE stats <- keywords_rake(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 4) head(subset(stats, freq > 3)) #- Option 5: Phrases ## Simple noun phrases (a adjective+noun, pre/postposition, optional determiner and another adjective+noun) x$phrase_tag <- as_phrasemachine(x$upos, type = "upos") stats <- keywords_phrases(x = x$phrase_tag, term = x$token, pattern = "(A|N)+N(P+D*(A|N)*N)*", is_regex = TRUE, ngram_max = 4, detailed = FALSE) head(subset(stats, ngram > 2)) #- Option 6: Use dependency parsing output to get the nominal subject and the adjective of it stats <- merge(x, x, by.x = c("doc_id", "paragraph_id", "sentence_id", "head_token_id"), by.y = c("doc_id", "paragraph_id", "sentence_id", "token_id"), all.x = TRUE, all.y = FALSE, suffixes = c("", "_parent"), sort = FALSE) stats <- subset(stats, dep_rel %in% "nsubj" & upos %in% c("NOUN") & upos_parent %in% c("ADJ")) stats$term <- paste(stats$lemma_parent, stats$lemma, sep = " ") stats <- txt_freq(stats$term) library(wordcloud) wordcloud(words = stats$key, freq = stats$freq, min.freq = 3, max.words = 100, random.order = FALSE, colors = brewer.pal(6, "Dark2")) #----------------------- TIDY TEXT --------------------------------- #----------------------- TIDY TEXT --------------------------------- #- tidytext: https://www.tidytextmining.com/tidytext.html library(tidyverse) library(tidytext) text_df <- df_text %>% select(6) %>% mutate(line = 1:nrow(df_text)) %>% select(2,1) %>% rename(text = Pregunta_1) str(text_df) text_df_a <- text_df %>% unnest_tokens(word, text) #- we’ve split each row so that there is one token (word) in each row stop_words <- stop_words #- son ingleses #library(tm) #stop_words <- stopwords(kind = "es") %>% as.data.frame() names(stop_words) <- "word" text_df_aa <- text_df_a %>% anti_join(stop_words) #- contamos palabros aa <- text_df_aa %>% count(word, sort = TRUE) library(scales) # expect a warning about rows with missing values being removed aaa <- aa %>% slice(1:8) plot2 <- ggplot(aaa, aes(x=word, y=n)) + geom_bar(stat = "identity") #------- R & Flowers library(syuzhet) letras <- df_text %>% pull(6) letras <- tolower(letras) letras <- base::chartr('áéíóú' , 'aeiou',letras) #- quitar tildes letras <- gsub(';|,|\\.|?|¿|!|¡|(|)' , '', letras) #- comas, puntos y comas .... letras <- chartr('?¿()!¡',' ',letras) #- interrogantes, parentesis y exclamaciones sentiment_NV <- get_nrc_sentiment(letras) row.names(sentiment_NV) <- nombres sentiment_NV library(tm) library(wordcloud) corpus = Corpus(VectorSource(letras)) #- construye un corpus corpus = tm_map(corpus, content_transformer(tolower)) #- a minusculas corpus = tm_map(corpus, removeWords, c(stopwords("spanish"), "camila_vallejo")) #- quita "palabras vacias" corpus = tm_map(corpus, stripWhitespace) #- quita espacion en blanco tdm <- TermDocumentMatrix(corpus) #- crea una matriz de términos m = as.matrix(tdm) #- convierte en matriz wf <- sort(rowSums(m),decreasing=TRUE) #- conteo de palabras en orden decreciente dm <- data.frame(word = names(wf), freq=wf) #- crea un df con las palabras wordcloud(dm$word, dm$freq, random.order=FALSE, colors=brewer.pal(8, "Dark2")) #- bajar respuestas grupo F, GADE, 2019-20 #- https://cran.r-project.org/web/packages/googlesheets/vignettes/basic-usage.html #- en tamil: https://www.programmingwithr.com/how-to-do-tamil-text-analysis-nlp-in-r/ #- language detection: https://cran.r-project.org/web/packages/languagelayeR/vignettes/Introduction.html #- https://github.com/ropensci/cld3 (otro detector de lenguaje) library(tidyverse) library(googlesheets) #--------------------------- my_sheets <- gs_ls() #- devuelve lista de googles sheets q tienes en tu drive space my_sheets %>% glimpse() #- seleccionas el sheet q te interesa x su título, p.ej: "Econometría. Grupo F (respuestas)" #my_selected_sheet <- gs_title("Econometría. Grupo F (respuestas)") #- usando la f. gs_title() my_selected_sheet <- gs_title("Programación y manejo de datos (2019-2020) (respuestas)") #- usando la f. gs_title() # df %>% gs_browse() #- si quieres ir a la página de Google sheet en el explorador # gs_ws_ls(my_selected_sheet) #- List the worksheets in a spreadsheet #- lee las respuestas del sheet seleccionado df_Total <- gs_read(my_selected_sheet) names(df_Total) <- names(df_Total) %>% str_replace(" ", "_") %>% str_replace("-", "") #- Las paso todas a texto, para así ponerlas en un vector library(purrr) df_text <- df_Total %>% map_df(as.character) #- cojo informacion personal de contacto e_mails <- df_text %>% pull(email) nombres <- df_text %>% pull(Nombre) apellidos <- df_text %>% pull(Apellidos) npis <- df_text %>% pull(NPI) #- las respuestas a la primera pregunta están en la columna 6. text <- df_text %>% pull(6) text_1 <- paste(text, collapse = " ") text_2 <- str_c(text, collapse = " ") text_3 <- str_c(text, collapse = " ") #- http://www.bnosac.be/index.php/blog/77-an-overview-of-keyword-extraction-techniques library(udpipe) library(textrank) ## First step: Take the Spanish udpipe model and annotate the text. Note: this takes about 3 minutes ud_model <- udpipe_download_model(language = "spanish") ud_model <- udpipe_load_model(ud_model$file_model) x <- udpipe_annotate(ud_model, x = df_text$Pregunta_1) x <- as.data.frame(x) #- ocurrencia de nombres stats <- subset(x, upos %in% "NOUN") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Nombres más frecuentes", xlab = "Freq") #- ocurrencia de verbos stats <- subset(x, upos %in% "VERB") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Verbos más frecuentes", xlab = "Freq") #- ocurrencia de adjetivos stats <- subset(x, upos %in% "ADJ") stats <- txt_freq(x = stats$lemma) library(lattice) stats$key <- factor(stats$key, levels = rev(stats$key)) barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Adjetivos más frecuentes", xlab = "Freq") ## Collocation (words following one another) stats <- keywords_collocation(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), ngram_max = 4) ## Co-occurrences: How frequent do words occur in the same sentence, in this case only nouns or adjectives stats <- cooccurrence(x = subset(x, upos %in% c("NOUN", "ADJ")), term = "lemma", group = c("doc_id", "paragraph_id", "sentence_id")) ## Co-occurrences: How frequent do words follow one another stats <- cooccurrence(x = x$lemma, relevant = x$upos %in% c("NOUN", "ADJ")) ## Co-occurrences: How frequent do words follow one another even if we would skip 2 words in between stats <- cooccurrence(x = x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), skipgram = 2) head(stats) #- Visualisation of these co-occurrences can be done using a network plot as follows for the top 30 most frequent co-occurring nouns and adjectives. library(igraph) library(ggraph) library(ggplot2) wordnetwork <- head(stats, 30) wordnetwork <- graph_from_data_frame(wordnetwork) ggraph(wordnetwork, layout = "fr") + geom_edge_link(aes(width = cooc, edge_alpha = cooc), edge_colour = "pink") + geom_node_text(aes(label = name), col = "darkgreen", size = 4) + theme_graph(base_family = "Arial Narrow") + theme(legend.position = "none") + labs(title = "Cooccurrences within 3 words distance", subtitle = "Nouns & Adjective") #- Option 3: Textrank (word network ordered by Google Pagerank) stats <- textrank_keywords(x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 8, sep = " ") stats <- subset(stats$keywords, ngram > 1 & freq >= 2) library(wordcloud) wordcloud(words = stats$keyword, freq = stats$freq) #- Option 4: Rapid Automatic Keyword Extraction: RAKE stats <- keywords_rake(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 4) head(subset(stats, freq > 3)) #- Option 5: Phrases ## Simple noun phrases (a adjective+noun, pre/postposition, optional determiner and another adjective+noun) x$phrase_tag <- as_phrasemachine(x$upos, type = "upos") stats <- keywords_phrases(x = x$phrase_tag, term = x$token, pattern = "(A|N)+N(P+D*(A|N)*N)*", is_regex = TRUE, ngram_max = 4, detailed = FALSE) head(subset(stats, ngram > 2)) #- Option 6: Use dependency parsing output to get the nominal subject and the adjective of it stats <- merge(x, x, by.x = c("doc_id", "paragraph_id", "sentence_id", "head_token_id"), by.y = c("doc_id", "paragraph_id", "sentence_id", "token_id"), all.x = TRUE, all.y = FALSE, suffixes = c("", "_parent"), sort = FALSE) stats <- subset(stats, dep_rel %in% "nsubj" & upos %in% c("NOUN") & upos_parent %in% c("ADJ")) stats$term <- paste(stats$lemma_parent, stats$lemma, sep = " ") stats <- txt_freq(stats$term) library(wordcloud) wordcloud(words = stats$key, freq = stats$freq, min.freq = 3, max.words = 100, random.order = FALSE, colors = brewer.pal(6, "Dark2")) ɂ Fy![A)Y)#[k@$  Amail_01_bienvenAida_e_instalaciAon.txtwFy![ FVFy![$@-AoldSFy![~#YFy![@"'A23-24#- Programación y manejo de datos - Información sobre el curso y tareas previas #- Miercoles 9 de septiembre (antes de la primera clase) Hola, soy Pedro Pérez, vuestro profesor en la asignatura "Programación y manejo de datos en la era del Big Data" de la que estáis matriculados. El curso es una introducción a la ciencia de datos con R. Tienes información acerca del funcionamiento del curso en la web de la asignatura: https://perezp44.github.io/intro-ds-24-25-web/. Puedes hacerte una idea de lo que haremos en el curso leyendo la sección "Guía del curso" y viendo los trabajos que hicieron los estudiantes de cursos pasados Como puedes leer en la web, es un curso en el que hace falta venir a clase con regularidad y trabajar todas las semanas, principalmente al principio de curso; por contra, si se trabaja durante el curso, no hace falta estudiar para el examen. Es un curso que creo que puede seros útil y que creo que os gustará PERO, si por el motivo que sea, anticipas que no vas a poder venir a clase con regularidad y trabajar todas las semanas quizás sería mejor que te planteases cambiar de optativa. Casi todas las semanas, principalmente durante las primeras semanas, os mandaré tareas para realizar antes de vernos en clase. En concreto, Las tareas para hacer antes de la primera clase son 3/4: 0) Leer la sección "Guía del curso" de la web del curso: https://perezp44.github.io/intro-ds-24-25-web/ Leyendo esta sección y viendo los trabajos de estudiantes de años anteriores tienes que decidir si continuar en la asignatura o elegir otra optativa. 1) Si ya has decidido que quieres seguir en la asignatura, quiero conocer un poco el background que tenéis en cuanto a programación, así que, por favor, contéstame a las preguntas que figuran en este cuestionario: https://perezp44.github.io/intro-ds-24-25-web/mas-cosas/cuestionario-inicial.html El objetivo es tan solo hacerme una idea de vuestros conocimientos de programación y R, pero seguramente utilizaremos vuestras respuestas para hacer algún análisis durante el curso, así que tomároslo en serio y contestad al cuestionario antes de hacer las otras tareas. 2) La principal tarea de esta semana consiste en que os instaléis el software necesario para seguir las clases. Para seguir las clases necesitaréis un ordenador portátil (y un ratón). Desde el primer día vamos a trabajar con R, por eso necesito que vengáis a la primera clase con todo instalado. Tienes las instrucciones de instalación en está dirección: https://perezp44.github.io/intro-ds-24-25-web/02-logistica.html Si tienes algún problema con la instalación, etc... contacta conmigo por e-mail (pedro.j.perez@uv.es). 3) Lee el primer tutorial: https://perezp44.github.io/intro-ds-24-25-web/materiales/tt_01_introduccion.html Es solo leer, no hay que estudiar nada; además se lee fácil. Se trata simplemente de poner en contexto el curso y hablar un poco sobre qué es esto de la “era del Big Data”, la ciencia de datos etc … Nos vemos el martes 17 en clase. Ánimo con la instalación y tareas. PD: Espero que, a pesar del trabajo, os acabe gustando el curso. Seguro!! Nos vemos el martes 17 en clase. Ánimo con la instalación y tareas. PD: Espero que, a pesar del trabajo, os acabe gustando el curso. Seguro!!  Fy![F"S)#[d@$v]1 1 Amail_01_bienvenAida-e-instalaciAon.txt`v Fy![x]2S)#[@%c99Amail_02_tareas-Apara-segunda-clAase.txty Fy![^>U)#[d@%\  Amail_03_tareas-Apara-tercera-clAase.txtY9 Fy![|LJS)#[d@f))Amail_04_entregaA_04_casa.txtI Fy![oZPS)#[@Amail_05_entregaA_05_casa.txt Fy![QXS)#[d@Amail_06_entregaA_06_casa.txt, Fy![W^S)#[d@VVAmail_entrega_08BFy![+FVFy![@ Aold_2020-21#- Programación y manejo de datos - Información sobre el curso y tareas previas Hola, soy Pedro Pérez, vuestro profesor en la asignatura "Programación y manejo de datos en la era del Big Data" de la que estáis matriculados. El curso es una introducción a la ciencia de datos con R. Tienes información acerca del funcionamiento del curso en la web de la asignatura: Para seguir las clases necesitaréis un ordenador portátil. Desde el primer día vamos a trabajar con R, por eso necesito que vengáis a la primera clase con todo el software instalado. Tienes las instrucciones de instalación en está dirección: . Si tienes algún problema con la instalación, etc... contacta conmigo por email (pedro.j.perez@uv.es). Como puedes leer en la web, es un curso en el que hace falta trabajar principalmente al principio de curso, por contra no hace falta estudiar para el examen. Las tareas para hacer antes de la primera clase están en la sección calendario de la web de la asignatura. La principal tarea que tenéis antes de que comience el curso el 17 de septiembre es instalaros el software necesario para seguir las clases. Aparte de esto, quiero conocer un poco el background que tenéis en cuanto a programación, así que, por favor, contestadme a las preguntas que figuran en el archivo adjunto. Las contestaciones a las preguntas tenéis que mandármelas a través del siguiente cuestionario de Google: El cuestionario es solo para tener una idea de vuestros conocimientos de programación y R, pero seguramente utilizaremos vuestras respuestas para hacer algún análisis el primer día de curso, así que tomároslo en serio y contestad al cuestionario antes de hacer las tareas. Espero que, a pesar del trabajo, os acabe gustando el curso. Nos vemos el 17 en clase. Ánimo con la instalación y tareas. Hola, soy Pedro Pérez, vuestro profesor en la asignatura "Programación y manejo de datos ..." de la que estáis matriculados. Os recuerdo que tenéis que hacer unas tareas antes de asistir a la clase del viernes. Las tareas las podéis ver en esta dirección: https://perezp44.github.io/intro-ds-21-22-web/03-calendario.html Además, los que no habéis contestado al cuestionario, hacedlo cuanto antes. Quiero conocer un poco el background que tenéis en cuanto a programación, así que, por favor, contestadme a las preguntas que figuran en el archivo adjunto. Nos vemos el viernes #- BigData tareas para hacer ANTES de la próxima clase Hola, soy vuestro profe de BigData. Creo que la clase funcionó más o menos bien, así que graciaaas!! He colgado en la web las tareas para la próxima sesión del curso; de hecho la primera tarea es leer este mail, así que good, ya estás haciendo las tareas. Las 2 tareas, extra-oficiales,de las que os hablo en la web: 1) Una de las tareas oficiales que has de hacer y que aparece en la web, es configurar RStudio, aprovecha que lo configuras para intentar hallar tu "color ideal" para RStudio. para ello sigue esta ruta de menús: Tools>Global options > Appearance y allí probar varias opciones del "Editor theme", a ver con cual estáis más cómodas. Esta tarea es opcional y siempre puedes volver a cambiar al default theme. Mi "theme" favorito es "Tomorrow Night Blue". El theme por defecto se llama "TextMate" 2) Esta tarea parece broma pero no lo es (del todo). Tenéis que decirle al primero que os encontréis por casa lo siguiente: "Hola , sabes que, el viernes fui a un curso muy chulo, vamos a aprender a programar con R a través de RStudio, utilizando Rprojects que contendrán scripts o ficheros .R y cuando ya pilotemos un poco más, igual lo hacemos con ficheros Rmarkdown". Tenéis que ser convincentes, vamos tenéis que estar cómodos con la frase. Si el interlocutor muestra interés (??) le decís, ¿Cuál crees tú que es la relación entre BigData y Data Science? seguramente no sabrá responderte , así que ten preparada tu respuesta. Con 3-4 frases es suficiente, le puedes hablar de que la abundancia de datos ha supuesto un cambio de enfoque en la Inteligencia artificial y que muchos de los avances que vemos se deben al Machine Learning. Si muestra interés cuéntale un poco que es el tidyverse. También puedes decirle: los programas de point&click con menús son fabulosos, pero no sirven para hacer análisis reproducibles 😁 Puedes acabar la conversación diciéndole: creo que quiero ser científico de datos. Además hay una tercera tarea, esta tercera tarea sí es oficial; es decir, sí es obligatoria, hay que hacerla, pero como cuesta un poco más de explicar, he preferido explicarla aquí en el mail: 3) Vamos a hacer la primera tarea para casa "evaluable", don't panic, no cuenta para nada: es un simulacro para ir entrenando y ver que todo funciona. Es la entrega_00. El uploader para entregar las tareas lo abriré el miércoles sobre el mediodía; es decir, antes no podréis entregarlas. Fecha límite de entrega el jueves a las 23:59. Os cuento la tarea: tenéis que crear un Rproject llamado "entrega_00___". Dentro del proyecto tiene que haber un fichero .R llamado "my-meme.R" y ese fichero debe contener un comentario y las instrucciones necesarias para hacer dos memes: uno con una foto que hayas hecho tu, puede ser de tu perro, de un parque, de lo que quieras, pero la foto debe estar en una subcarpeta del Rproject llamada "imagenes". El segundo meme hazlo con una foto de internet. Puedes apoyarte en el fichero "ej_001_hacer-memes.R" que tenéis en el Rproject que descargamos ayer al final de la clase. Las instrucciones de entrega las tienes aquí: https://perezp44.github.io/intro-ds-21-22-web/mas-recursos/04_como-entregar-las-tareas-uploader.html Recuerda que es solo un simulacro para practicar, ver que todo funciona y que sabes hacerlo. Si no sabes no te preocupes pero intenta hacerlo, no vale sentarse y decir no sé. Recuerda que puedes preguntar a tus compañeros en el foro. Para poder acceder a los foros tengo que darte acceso, así que contestame a este mail diciéndome tu nombre completo y tu usuario de Github, y si te has decidido, dime cual es tu theme/skin favorito para RStudio. Ánimo con las tareas oficiales, no son tantas, pim-pam, pim-pam y en un rato están hechas, además, y totalmente en serio, lo que más cuesta en R es el principio, empezar a rodar. Un poco de ánimo si tenéis problemas con R, al principio es normal. Recordad que no hay que gritar al ordenador!! Un saludo y buena semana PD: Por favor intentad no faltar las primeras sesiones. Si pensáis que no vais a poder (por la razón que sea) asistir a clase y trabajar un poco durante la semana, entonces es mejor que os planteéis cambiar de optativa porque no aprovechareis el curso. BigData - primera entrega (entrega_01) Hola, ya he colgado en la web las tareas a hacer durante esta semana. La primera es leer este mail, así que ya has empezado, good. Esta semana tenéis que efectuar la segunda entrega. Esta vez hay que efectuar la primera entrega que forma parte de la evaluación continua. Tenéis que entregar otro Rproject, esta vez llamado: entrega_01_ ..... Fíjate que es la entrega_01_ y recuerda las instrucciones de entrega: https://perezp44.github.io/intro-ds-21-22-web/mas-recursos/04_como-entregar-las-tareas-uploader.html En el Rproject tenéis que hacer 2 cosas: 1) crear una función que multiplique 2 números y luego calcule la raíz cuadrada del resultado de la multiplicación. La definición de la función tiene que estar en un archivo llamado my-funcion.R 2) Volver a hacer los 2 memes (pueden ser los mismos, pero si os apetece cambiar genial, así me rio más, ... espero; además os podeís plantear usar memes del pkg "memer") PERO esta vez en lugar de en un script, ahora lo tenéis que hacer en un fichero Rmarkdown. Hicimos ayer uno en clase: es utilizar el mismo código que tenéis pero meterlo dentro de unas marcas etc... etc... vamos, lo que vimos ayer en clase. El fichero Rmarkdown que hace los memes se ha de llamar mys_memes.Rmd. Lógicamente habéis de knitear el fichero .Rmd, para enviarme el resultado final, que lógicamente se llamará mys_memes.html A algunos les saldrá muy fácil y otros se atascarán. Normal. Pedid ayuda, mejor en los foros. No tengo claro del todo si los foros de Github funcionarán bien, sí serán cómodos de usar, pero hemos de probarlo. En las preguntas se pueden adjuntar ficheros, asií que podéis adjuntar código en un fichero .R o .Rmd y también pantallazos. Por favor, los que pidáis ayuda en el foro, hacedlo bien; es decir, tratad de plantear bien el problema: hay que ser escuetos pero claros y poner un título ilustrativo. Muchas veces, cuando estas redactando la pregunta para pedir ayuda acabas resolviendo tú mismo el problema, cosas que pasan. Ánimo con las tareas PD: No pasa nada si no lo hacéis bien, PERO yo creo que ya todo el mundo pondrá bien el nombre del fichero y me enviará un único archivo .zip con TODO el Rproject. Si tenéis que enviar varias veces la tarea, poned al final del nombre _v2, _v3 .... PD2: los que tenéis fotos en vertical, para que se vea el texto podéis usar la opción/argumento vjust = 0.3. Si ponéis meme ( ........, vjust = 0.3) 0.3 o por ahí. os funcionará Si no os funciona, no pasa nada. Ahora lo importante es seguir practicando con RStudio y que os peleéis para que se os quede (más o menos) las partes y marcas de un documento .Rmd. No son importantes los memes. BigData - entrega_04 Hola, os mando las tareas para hacer esta semana. Están en el archivo adjunto. Es la entrega_04 Además hay que leer, está vez sí, leer todo lo que podáis del tutorial 5 y ver y ejecutar el código de las "Slides-05: Data munging". Por favor, intentad poneros al día, si no, la próxima clase (una de las más "complicadas") se os hará cuesta arriba. Sermón: intentad trabajar ahora. Es cuando hace falta. Si no lo hacéis ahora corréis el riesgo de quedaros atrás del todo. De verdad que en 2 o 3 semanas "acaban" las dificultades y (igual) empezáis a "divertiros" con R ... pero tenéis que trabajarlo ahora, no al final de de curso, será tarde. Además, muchas veces, los fallos son "fácilmente" solucionables si te das cuenta y pides ayuda, pero para ello hay que ..... trabajar/estudiar y si puedes no lo hagas aislado, intentad apoyaros en vuestros compañeros de equipo y en los foros. Suerte con la tarea. PD: os envio tb las slides_05 en html, así las podeís ver en local y el ordenador irá más holgado (espero) BigData - entrega_5 Hola, al final creo que es mejor que continuéis con las tareas que empezamos ayer en clase. Os adjunto, otra vez, la plantilla con las tareas de el entrega_05. Sí, sigue siendo la entrega_05. Por favor intentad poner bien el nombre del archivo: entrega_05_perez_pedro_GG445566 . Todo minúsculas, menos el NPA, y cuatro guiones bajos. La semana que viene corregiremos la entrega_05, acabaremos dplyr y seguramente haremos otra prueba (sencilla I promise; bueno, igual no tanto pero es que se trata de aprender, así que no os preocupéis, además trabajaréis en parejas). Después del descanso empezaremos con ggplot2 Venga ánimo con la entrega_05 Buen finde PD: mejor si utilizáis la plantilla que os envío ahora. Son las mismas preguntas. Las preguntas son exactamente iguales, solo que en la pregunta nº 5 se me coló una pista falsa, ponía que había que pivotar y no es cierto #- BigData - entrega_06 Hola R-adictos o R-atrapados o in the midle, que de todo habrá, ya dije en clase que para la próxima semana tenéis que enviarme la entrega_06. Está prácticamente acabada, hicimos (si no me equivoco) hasta la pregunta 9 incluida, así que sólo me tenéis que entregar las preguntas 10 y siguientes. No me entreguéis el resto please. Los que lleváis bien dplyr no creo que os cueste mas de 10 minutos, así que aprovechad para empezar a leer el tutorial sobre ggplot. Los que no lleváis muy bien dplyr, intentad poneros al día con él, es importante manejarse relativamente bien con dplyr. A veces cuesta un poco pero todo llega Id pensando en el tema del trabajo en grupo, pronto os pediré, en una entrega, que me contéis de qué va vuestro trabajo Saludos #- BigData - entrega_08 Hola R-students, os envío la entrega_08. Espero que os sirva para asentar vuestros conocimientos de ggplot2 y que no se os haga muy cuesta arriba. Creo que no!!! Anna, Angela, o cualquiera que vea que le cuesta la entrega_08, o en general la asignatura, si podéis y os hace falta, podemos quedar a las 15:00 en el aula de clase. Avisadme por correo si alguien quiere y puede venir, sería como una especie de tutorías. Además, sabéis que hay horas de tutoría oficiales. Tenéis el horario en Aula Virtual Venga, nos vemos el próximo viernes. Ànim con la entrega = Fy![3'Q)#[@"dAmail-01-instalaAcion-y-cuestionAario- Fy![3Q)#[d@!a+JJAmail-02-tareas-Apara-segunda-clAase> Fy![X:Q)#[d@!Amail-03-tareas-Apara-tercera-clAasej Fy![EQ)#[@ hAmail-04-tareas-Apara-cuarta-claAseS Fy!["`QQ)#[@ gK  Amail-05-tareas-Apara-quinta-claAseC Fy![ΚuQ)#[d@#Amail_08-tarea_0A8-para -decima-Aclase# Fy![QQ)#[d@!9vjjAmail_09-para-irA-cerrando-el-cuArsoo Fy![ogQ)#[@!T  Amail_11-para-suAbir-repos-a GitAhub Fy![gQ)#[d@ Ϟm m Amail_12-para-loAs-trabajos-equiApo Fy![Q)#[d@oAmail_13_ayuda-eAn-Piazza#- mail para q se instalen R y me contesten al cuestionario ------------------------------ Hola, soy Pedro Pérez, vuestro profesor en la asignatura "Programación y manejo de datos ..." de la que estáis matriculados. El curso es una introducción a la ciencia de datos con R. Tienes información acerca del funcionamiento del curso en la web de la asignatura: Para seguir el curso **necesitareis un ordenador portátil**, ya que el aula 513 es un aula de teoría. Desde el primer día vamos a trabajar con R, por eso necesito que vengáis a la primera clase con todo el software instalado. Tienes las instrucciones de instalación en está dirección: . Si tienes algún problema con la instalación, etc... contacta conmigo por email (pedro.j.perez@uv.es) Además, quiero conocer un poco el background que tenéis en cuanto a programación, así que, por favor, contestadme a las preguntas que figuran en el archivo adjunto. Las contestaciones a las preguntas teneis que mandármelas a través del siguiente cuestionario de Google: El cuestionario es solo para tener una idea de vuestros conocimientos de programación y R, pero seguramente utilizaremos vuestras respuestas para hacer algún análisis el primer día de curso, así que tomároslo en serio. Nos vemos en clase PD: si tienes algún problema con la instalación de los programas en tu portátil, por favor, contacta conmigo lo antes posible. No lo dejes para el día de clase.Hola, como sabéis, ya he colgado en la web las tareas para la próxima sesión del curso; de hecho la primera tarea es leer este mail, así que good, ya estás haciendo las tareas. La clase funcionó, a pesar de la circunstancias, creo que bastante bien, así que enhorabuena y GRACIAS ..... pero... respecto al "protocolo-covid"; a pesar de que cumplisteis/cumplimos bastante bien el protocolo, creo que con un poco de cuidado y sin muchas mas molestias, podemos mejorar bastante y evitar salir en la tele, o peor, ir al hospital. Ahora iba a escribiros un sermón de 3-4 párrafos para convenceros apelando a la responsabilidad etc... , pero prefiero dejarlo para dároslo el viernes de viva voz. Serán 2 minutos y ya os he dicho que lo hicimos bastante bien y que no se puede estar alerta todo el tiempo. Bueno el viernes os lo cuento. En lugar de esos 3-4 párrafos: mirad esta noticia: https://www.eldiario.es/sociedad/incidencias-covid-centros-educativos-suben-700_1_6230886.html , con que leáis el titular es suficiente en ella nos dicen que ya hay más de 700 incidencias covid en colegios: Las 3 tareas, extra-oficiales,de las que os hablo en la web: 1) ver un video de de los Stay Homas, la grabaron el 23 de marzo, en pleno confinamiento. Es un poco parodia del rap pero está muy bien y casi convalida el sermón que voy a echaros el próximo día. El sermón serán 2 minutos y con todo mi corazón. El video está aquí: https://www.youtube.com/watch?v=NzEKhz-6MaY 2) Una de las tareas oficiales que has de hacer y que aparece en la web, es configurar RStudio, aprovecha que lo configuras para intentar hallar tu "color ideal" para RStudio. para ello sigue esta ruta de menús: Tools>Global options > Appearance y allí probar varias opciones del "Editor theme", a ver con cual estáis más cómodas. Esta tarea es opcional y siempre puedes volver a cambiar al default theme. 3) Esta tarea parece broma pero no lo es (del todo). Tenéis que decirle al primero que os encontréis por casa lo siguiente: "Hola , sabes que, el viernes fui a un curso muy chulo, vamos a aprender a programar con R a través de RStudio, utilizando Rprojects que contendrán scripts o ficheros .R y cuando ya pilotemos un poco más, igual lo hacemos con ficheros Rmarkdown". Tenéis que ser convincentes, vamos tenéis que estar cómodos con la frase. Si el interlocutor muestra interés (??) le decís, ¿Cuál crees tú que es la relación entre BigData y Data Science? seguramente no sabrá responderte , así que ten preparada tu respuesta. Con 3-4 frases es suficiente, le puedes hablar de que la abundancia de datos ha supuesto un cambio de enfoque en la Inteligencia artificial y que muchos de los avances que vemos se deben al Machine Learning. Si muestra interés cuéntale un poco que es el tidyverse. Puedes acabar la conversación diciéndole: creo que quiero ser científico de datos. Además hay una cuarta tarea, esta cuarta tarea sí es oficial; es decir, sí es obligatoria, hay que hacerla, pero como cuesta un poco más de explicar, he preferido explicarla aquí en el mail: 4) Vamos a hacer la primera tarea para casa "evaluable", don't panic, os va a costar 5 minutos y no cuenta para nada: es un simulacro para ir entrenando y ver que todo funciona. Os cuento la tarea: tenéis que crear un Rproject llamado "my-project-04". Dentro del proyecto tiene que haber un fichero .R llamado "mis-calculos.R" y en el fichero debe haber una instrucción R, la que queráis, puede ser 2+ 2, y un comentario. Una vez tengáis el Rproject con el fichero .R listo, lo comprimís en un fichero .zip. El fichero .zip deber llamarse -- .zip. En el nombre del fichero no puede haber tildes ni espacios en blanco, y debe haber solo 2 guiones. Lo explico con un ejemplo. Por ejemplo, imagina una persona cuyo nombre fuera María Antonia, y sus apellidos fueran Pérez-Martinez Vázquez. Fijate que sus nombre tiene tildes y su primer apellido es compuesto. Para esta persona, su fichero .zip debería llamarse "CP557788-Perez-Maria.zip". Tenéis que entregármelo a través del uploader: https://driveuploader.com/upload/x1Qx7fev79/ , acabo de abrirlo. Recurad que en el uploader tienes que enviarme un solo archivo comprimido, el .zip . Recuerda que es solo un simulacro para practicar, ver que todo funciona y que sabes hacerlo. Ánimo con las tareas oficiales Un saludo y buena semana PD: aprovecho para decir que, además de los que nombré en clase,también están aprobados (virtualmente, eh!!) Hugo, por poner Turnedo de Iván Ferreiro, además Hugo ya pilota un poco en R porque estudio en Castellón, y Laura por poner a los Stay Homas. Estos chicos (los Homas) se merecen un Nobel como a Dylan, no sé si de música, pero Nobel al buen rollo seguro: lo que hicieron durante el confinamiento fue espectaculaaaaaarrr!!!! Y estoy pensando en aprobar a uno o dos más, o suspenderlos, no lo tengo claro aún, porque se me han metido sus canciones en la cabeza y no me las saco. No os pongo la lista de hits porque no quiero distraeros, que tenéis tareas varias que hacer. Ahora en serio, venga ánimo con las tareas, no son tantas, pim-pam, pim-pam y en un rato están hechas, ademas, y ahora sí totalmente en serio, lo que más cuesta en R es el principio, empezar a rodar. Un poco de animo si tenéis problemas con R, al principio es normal.