-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.R
89 lines (83 loc) · 2.94 KB
/
functions.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# funciones para shiny app: "Conócete"
##########
# Función que crea data frame de palabras a partir del archivo de publicaciones con extensión .json
# descargado desde facebook (leer README para información de cómo descargar este archivo)
crear_df_nube <- function(aJsonPath) {
# el archivo JSON se lee con R utilizando la función fromJSON().
# Esto se guarda como una lista en R
result <- fromJSON(file = aJsonPath)
# Convertir archivo JSON a dataframe
json_data_frame <- lapply(result, function(aPost)
aPost$data)
df <- bind_rows(json_data_frame, .id = "column_label")
###########################
#### cleaning utf
df$post <- utf2win(df$post)
df <- mutate(df,
post_clean = gsub(
x = post,
pattern = "[0-9]+|[[:punct:]]|\\(.*\\)",
replacement = ""
)) # post_clean auxilia para recuperar post con palabra cliqueada.
# lo hice por un problema con palabras que rodeadas con puntos y otros símbolos.
}
# Función que crea nube de palabras que se repiten. top n_word
# dentro de tus publicaciones de facebook.
crear_nube <- function(aDataframe, n_word) { # yes... you know the N-word nobody can say
###########################
############ colectando palabras
# agregar stopwords de español
custom_stop_words <- bind_rows(stop_words,
tibble(word = stopwords("spanish"),
lexicon = "custom"))
############################
## Contar palabras
word_counts <-
aDataframe %>%
unnest_tokens("word", post_clean) %>%
anti_join(custom_stop_words, by = "word") %>%
count(word) %>%
filter(n > 1) %>% # que aparezcan repetidas
na.omit()
# reordenar
word_counts <- arrange(word_counts, desc(n))
# Definir colores de nube
my_palette <-
c("steelblue",
"firebrick",
"olivedrab",
"powderblue",
"purple",
"chocolate")
# CONTROL - DIRECTIVA
### NUMERO DE PALABRAS A MOSTRAR
##########################
top_word <- head(word_counts, n_word) # gimme head... shampoo!
# Crear nube -- esto regresa la función
wordcloud2(
top_word,
color = rep_len(my_palette,
nrow(top_word)),
shape = "star",
#size = 0.7, # dejar tamaño 100%, debugging Mavil error
backgroundColor = "White"
)
}
######## función para limpiar carácteres extraños importados por mala codificación
######## de archivo .json por parte de facebook.
# Todavía falta resolver problema de mayúsculas acentuadas
# esta fué una solución machetera.
utf2win <- function(x){
soll <- c( "ó", "ñ", "á", "é", "ú",
"¡", "¿", "ü",
"É", "Ó", "Ú",
"í", "-", "")
ist <- c("ó", "ñ", "á", "é", "ú",
"¡", "¿", "ü",
"É", "Ó", "Ú",
"Ã", "â", "ð")
for(i in 1: length(ist)){
x <- gsub(ist[i], soll[i], x)
}
return(x)
}