0% encontró este documento útil (0 votos)
78 vistas11 páginas

Análisis de Sentimientos en Tweets

En el presente trabajo se resolverá el problema planteado a través del empleo de técnicas de text mining.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
78 vistas11 páginas

Análisis de Sentimientos en Tweets

En el presente trabajo se resolverá el problema planteado a través del empleo de técnicas de text mining.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ

FACULTAD DE CIENCIAS E INGENIERÍA

Analytics 2 (1IND51-0731)

Horario: 0731
Alumnos:

Apellidos y Nombres Código Participación


(%)

Chan Sosa, Melany Paloma 20172523 100

Cacho Zavaleta Sofía 20172721 100

Flavio Andre Fuertes Godenzzi 20180907 100

Frank Neil Huallpa Chura 20143024 100

2022-1
1. Resumen ejecutivo.

En el presente trabajo se resolverá el problema planteado a través del empleo de


técnicas de text mining.

El Text Mining consiste en automatizar el análisis de texto gracias al Machine


Learning. Para conseguirlo, se entrenan los algoritmos con ayuda de textos a modo
de datos de ejemplo

Para poder realizar el análisis tomamos las siguientes suposiciones

● Tiene que haber relaciones entre los datos.


● Los grupos en los cuales se segmentan datos son interpretables y se pueden
diferenciar entre sí
Indice ejecutivo

Página

1. Resumen ejecutivo
1

2. Indice ejecutivo
2

3. Objetivo de trabajo
3

4. Descripción de la base de datos asignadas


4

5. Análisis descriptivo de la base de datos


5

6. Identificación de las tecnicas de analitica aplicables a


cada caso 8

7. Código en R empleado
1
4

3. Objetivo del trabajo


● Emplear técnicas de text mining para poder determinar la tendencia de sentimiento
de los tweets proporcionados en la base de datos.
● Generar un código que mediante diversas funciones permite interpretar los tweet.

4. Descripción de la base de datos asignadas

Base de datos recolectada de Twiter segmentado mediante las siguientes clasificaciones:

Locación
Tweet Fecha
Tweet original
Etiqueta

Tabla 1 : Base de datos

5. Análisis descriptivo de la base de datos


La base de datos trabaja con tres tipos de variables, primero se definirán los tipos de
variables y luego se clasificarán las variables.
Las variables categóricas contienen un número limitado de clases o grupos distintos.
Una variable discreta es una variable que tiene un número contable de valores entre dos
valores cualesquiera.
Una variable continua es una variable que tiene un número infinito de valores entre dos
valores cualesquiera.

Ahora se presentan las variables con su tipo.

Locación ( variable categórica)


Tweet Fecha ( variable categórica)
Tweet original ( variable categórica)
Etiqueta ( variable categórica)

6. Identificación de las tecnicas de analitica aplicables a cada caso:

● Primero se crea una función para eliminar direcciones URL


● Función para remover caracteres distintos de palabras
● Personalizamos palabras conectores
● Construimos el corpus

Limpiamos el corpus , se convierte todo a minúsculas, se remueve número y


puntuación y retiramos los espacios en blanco.

● Completamos o cortamos las palabras a su raíz


● Reemplazo de palabras por palabras similares de mayor frecuencia
● Se construye la matriz término

7. Código de R empleado

#Fijamos los datos

setwd("C:/Users/Usuario/OneDrive/Documents/8vo ciclo/Analytics 2")


#Cargar datos

data_test <- [Link]("Corona_NLP_test.csv", "header" = TRUE, sep = ",",encoding =


"UTF-8")

data_train <- [Link]("Corona_NLP_train.csv", "header" = TRUE, sep = ",",encoding


= "UTF-8")

summary(data_test)

summary(data_train)

library(magrittr)

(n.data_test <- dim(data_test)[1])

#Instalamos el packages("NLP")

library(tm)

# Eliminamos el URL

removeURL <- function(x) gsub("http[^[:space:]]*", "", x)

# Funcion para remover cosas distintas de palabras

removeNumPunct <- function(x) gsub("[^[:alpha:][:space:]]*", "", x)

# Personalziando palabras conectoras

myStopwords <- c(setdiff(stopwords('english'), c("r", "big")),"use", "see", "used",


"via", "amp")

data_test $OriginalTweet[20] %>% strwrap(60) %>% writeLines()

data_test $OriginalTweet <- iconv(data1$OriginalTweet, "ASCII", "UTF-8", sub="byte")

#Creamos el corpus

[Link] <-data_test$OriginalTweet %>% VectorSource() %>% Corpus()

[Link] <- [Link] %>%

#Limpieza del corpus

# Convertir todo a minúsculas


tm_map(content_transformer(tolower)) %>%

# Remover numeros y puntuación

tm_map(content_transformer(removeNumPunct)) %>%

# Retirar a las palabras conectoras

tm_map(removeWords, myStopwords) %>%

# Remover los espacios en blanco extras

tm_map(stripWhitespace)

#[Link]("SnowballC")

library(SnowballC)

#Completado/Cortado de palabras a palabras raiz

[Link] <- [Link] %>% tm_map(stemDocument)

#Completado a raiz

stemCompletion2 <- function(x, dictionary) {

x <- unlist(strsplit([Link](x), " "))

x <- x[x != ""]

x <- stemCompletion(x, dictionary=dictionary) #REVISAR

x <- paste(x, sep="", collapse=" ")

stripWhitespace(x)

[Link] <- [Link] %>%

lapply(stemCompletion2, dictionary=[Link]) %>%

VectorSource() %>% Corpus()

#Contador de frecuencia de palaras

wordFreq <- function(corpus, word) {

results <- lapply(corpus,

function(x) grep([Link](x), pattern=paste0("\\<",word)) )

sum(unlist(results))

[Link] <- [Link] %>% wordFreq("miner")


[Link] <- [Link] %>% wordFreq("mining")

cat([Link], [Link])

# Remplazo de palabra antigua con las palabras nuevas

replaceWord <- function(corpus, oldword, newword) {

tm_map(corpus, content_transformer(gsub),

pattern=oldword, replacement=newword)

[Link] <- [Link] %>%

replaceWord("miner", "mining") %>%

replaceWord("universidad", "university") %>%

replaceWord("scienc", "science")

#Construccion de la matriz de termino

## Build Term Document Matrix

tdm <- [Link] %>%

TermDocumentMatrix(control = list(wordLengths = c(1, Inf))) %>%

print

# ANALISIS EXPLORATORIO DE LA MATRIZ DE TERMINOS

# Identificar dentro de la matriz de terminos la busqueda de terminos relacionados a


"r"

idx <- which(dimnames(tdm)$Terms %in% c("r", "data", "mining"))

tdm[idx, 21:30] %>% [Link]()

# Terminos que cumplen con una frecuencia minima

[Link] <- tdm %>% findFreqTerms(lowfreq = 30) %>% print

# Tabla de frecuencia de terminos por encima de una frecuencia minima

[Link] <- tdm %>% [Link]() %>% rowSums()

[Link] <- [Link] %>% subset([Link] >= 20)


df <- [Link](term = names([Link]), freq = [Link])

df

## Frecuencia de terminos

library(ggplot2)

ggplot(df, aes(x=term, y=freq)) + geom_bar(stat="identity") +

xlab("Terms") + ylab("Count") + coord_flip() +

theme([Link]=element_text(size=14))

## word cloud

m <- tdm %>% [Link]

# calculate the frequency of words and sort it by frequency

[Link] <- m %>% rowSums() %>% sort(decreasing = T)

# colors

library(RColorBrewer)

pal <- [Link](9, "BuGn")[-(1:4)]

# plot word cloud

library(wordcloud)

wordcloud(words = names([Link]), freq = [Link], [Link] = 3,

[Link] = F, colors = "palegreen3")

## Medicion de nivel de relaci?n entre terminos

tdm %>% findAssocs("r", 0.2)

tdm %>% findAssocs("data", 0.2)

# Clustering Jerarquico
## clustering of terms remove sparse terms

m2 <- tdm %>% removeSparseTerms(sparse = 0.95) %>% [Link]()

# calculate distance matrix

[Link] <- m2 %>% scale() %>% dist()

fit <- [Link] %>% hclust(method = "ward.D")

#ploteo

plot(fit)

fit %>% [Link](k = 3) # cut tree into 6 clusters

groups <- fit %>% cutree(k = 3)

##CLUSTERING DE TERMINOS POR K MEDIAS

## k-means clustering of documents

m3 <- m2 %>% t() # transpose the matrix to cluster documents (tweets)

[Link](122) # set a fixed random seed to make the result reproducible

k <- 6 # number of clusters

kmeansResult <- kmeans(m3, k)

round(kmeansResult$centers, digits = 3)

for (i in 1:k) {

cat(paste("cluster ", i, ": ", sep = ""))

s <- sort(kmeansResult$centers[i, ], decreasing = T)

cat(names(s)[1:5], "\n")

# print the tweets of every cluster

# print(tweets[which(kmeansResult?cluster==i)])

También podría gustarte