Sei sulla pagina 1di 28

Social Media mining

with R
José Fernando Padrón Tristán
Minería de datos
Dra. Claudia Guadalupe Gómez Santillán
Dra. Laura Cruz Reyes
API Twitter
En el portal https://developer.twitter.com En la sección API
details

Ir al campo Callback URLs y capturar la dirección de usuario de


twitter desarrollador
API Twitter
Se requerirán los datos de acceso de la API de twitter de la
sección Keys and tokens:
Instalació n librería twitteR
Instalar y cargar la librería twitteR
Install.packages(“twitteR”)

Seleccionar un mirror

Cargar la librería
Library(“twitteR”)
Certificado adicional
Para equipos con SO Windows, se debe descargar y guardar el
archivo cacert.pem, el cuál es parte de un cierto tipo de
certificación para transferencias por internet.
Descargar archivo cacert.pem de la siguiente url:
http://curl.haxx.se/ca/cacert.pem
y especificar la ubicación del archivo en el equipo
Librerías adicionales
Adicionalmente se deben cargar las librerías ROAuth y Rcurl:
install.packages(c(‘ROAuth’, ‘RCurl’))
require (‘ROAuth’)
require (‘RCurl’)
Requerir autorizació n de
twitter
Utilizar los datos de la API de twitter para solicitar autorización
de acceso a la información de este portal
my.key = "4Iwk7yF7ikAM6Zfv8CxG1xnrK“ #API key
my.secret = "a0o3c2TUEz6BimJSf6tq05BB8xg63PHVvtPWk7jTTPP44cPX3S“
#API secret key
cred <- OAuthFactory$new(consumerKey=my.key,
consumerSecret=my.secret,
requestURL='https://api.twitter.com/oauth/request_token',
accessURL='https://api.twitter.com/oauth/access_token',
authURL='https://api.twitter.com/oauth/authorize')
Uso del certificado
Con el siguiente comando, se especificará el certificado
para acceder a la información en twitter
cred$handshake(cainfo="c:/users/usuario/documents/cacert.pem")
R Responderá con una dirección que se debe 1) copiar y 2) pegar
en un navegador de internet
1

2
El navegador redireccionará con la variable oauth_verifier,
3) copiar el valor y 4) pegarlo en R
3

4
Salvar autenticació n
Para salvar la autenticación creada, escribir los siguientes
comandos en R
save(cred, file="twitter authentication.Rdata")
my.token = "273201166-kqNssTyyhVJVGv4iKWUk78H7tZ71BQziOQ7ORtVz"
my.tokensecret = "aCNzkrDSxChcSwYkTr9deUd6v6lL30PaaveL4jxy5RtQE"
setup_twitter_oauth(my.key, my.secret, my.token, my.tokensecret)
[1] "Using direct authentication"
Use a local file ('.httr-oauth'), to cache OAuth access credentials between R
sessions?

1: Yes
2: No

Selection: 1
Adding .httr-oauth to .gitignore
Recuperació n de tweets
searchTwitter retorna los últimos n tweets que contengan #bigdata en el texto
bigdata <- searchTwitter("#bigdata", n=1500)
class(bigdata) # retorna el tipo de estructura de bigdata
head(bigdata) # retorna unos cuantos objetos en la lista bigdata
bigdata[[4]] # imprime el cuarto elemento de la lista
length(bigdata) # imprime la cantidad de objetos en la lista bigdata
Límite de bú squedas para API
La API de twitter limita el número de búsquedas que se pueden
realizar en un periodo dado.
Para revisar los límites, las búsquedas realizadas y las restantes,
usar la función getCurRateLimitInfo
> rate.limit <- getCurRateLimitInfo(c("lists"))
> rate.limit
Crear archivo CSV
Para evitar sobrepasar el límite de las búsquedas, se puede
guardar la lista extraída a un archivo separado por comas: CSV
#convertir la lista bigdata a un dataframe
bigdata.df <- do.call(rbind, lapply(bigdata, as.data.frame))
# crear el archivo separado por comas
write.csv(bigdata.df, "C:/…/bigdata.csv")
Matriz documento-término
•Matriz
  donde cada fila representa un documento y cada término
único es representado en una columna.

Cada elemento representa el número de veces que aparece el


término j en el documento i

Corpus. Palabras únicas usadas en los documentos

Stopwords. Palabras más comunes en un lenguaje.


Matriz documento-término
install.packages("tm", dependencies=TRUE)
library("tm")
bigdata_list <- sapply(bigdata, function(x) x$getText())
bigdata_corpus <- Corpus(VectorSource(bigdata_list))
bigdata_corpus <- tm_map(bigdata_corpus, tolower)
bigdata_corpus <- tm_map(bigdata_corpus, removePunctuation)
bigdata_corpus<-
tm_map(bigdata_corpus,function(x)removeWords(x,stopwords()))
Matriz documento-término
WordClouds
Representación visual de las palabras que conforman un texto,
en donde el tamaño es mayor para las palabras que aparecen
con más frecuencia.
install.packages("wordcloud")
library("wordcloud")
wordcloud(bigdata_corpus)
Wordclouds
Resulta en el siguiente
gráfico
Matriz documento-término
Creando la matriz documento-término se obtendrá información
básica, como el número de términos y de documentos, las
celdas con valores no-cero , entre otros datos
findFreqTerms retorna los términos más comunes en la matriz
bigdata.tdm <- TermDocumentMatrix(bigdata_corpus)
bigdata.tdm
findFreqTerms(bigdata.tdm, lowfreq=10)
Asociaciones
Se pueden analizar los datos en un sentido asociativo buscando
colocaciones, es decir, aquellos términos que co-ocurren en un
documento frecuentemente con la función findAssocs

findAssocs(bigdata.tdm, 'people', 0.50)


Clustering (Agrupamiento)
• Agrupamiento es una forma de encontrar asociaciones entre
elementos.

• Se requiere una medida de lo lejos que está una observación de


las otras.

• Observaciones cercanas se agrupan, mientras que las más


separados se colocan en otros grupos .

• Se utilizará Agrupación jerárquica aglomerada.

• Se eliminan primero los términos más dispersos. Aquéllos que


sólo aparecen en una pequeña proporción de documentos
Clustering
• El argumento disperso detalla la proporción de ceros a
término debe tener antes de ser considerado escaso:

• La agrupación es sensible a la escala de los datos utilizados.

• La matriz de documento de término será escalada.

• La escala resta todos los elementos de un vector. Luego divide


cada elemento por la desviación estándar del vector.

• Una vez escalado, usamos el término matriz de documento


para calcular una matriz de distancia, donde
Clustering
bigdata2.tdm <-removeSparseTerms(bigdata.tdm, sparse=0.92)
bigdata2.df <- as.data.frame(bigdata2.tdm)
bigdata2.df.scale <- scale(bigdata2.df)
bigdata.fit <- hclust(bigdata.dist, method="ward")
plot(bigdata.fit, main="Cluster - Big Data")
groups <- cutree(bigdata.fit, k=5) # ejemplo con 5 clusters
rect.hclust(bigdata.fit, k=5, border="blue")
Informació n adicional
OauthFactory
https://
stackoverflow.com/questions/15058485/oauth-with-twitter-streaming-api-in-r
-using-rcurl
searchTwitter
https://
www.rdocumentation.org/packages/twitteR/versions/1.1.9/topics/searchTwitt
er
Stopwords
https://www.ranks.nl/stopwords
Nubes de palabras (wordclouds) https://
es.wikipedia.org/wiki/Nube_de_palabras
Agrupamiento
https://www.statmethods.net/advstats/cluster.html
Informació n adicional
Referencias

Potrebbero piacerti anche