Mineração de dados e Twitter

Entre as redes sociais, o Twitter é mais adequado do que outros para a extração de dados de texto devido à restrição estrita do tamanho da mensagem na qual os usuários são forçados a colocar tudo o que é mais essencial.


Sugiro adivinhar que tecnologia essa palavra nuvem enquadra?


Cloud


Usando a API do Twitter, você pode extrair e analisar uma grande variedade de informações. Um artigo sobre como fazer isso com a linguagem de programação R.


Escrever o código não leva muito tempo, podem surgir dificuldades devido a alterações e restrições da API do Twitter, aparentemente a empresa estava seriamente preocupada com questões de segurança depois de ter sido arrastada para fora no Congresso dos EUA após a investigação da influência de "hackers russos" nas eleições dos EUA em 2016.


API de acesso


Por que alguém precisaria recuperar dados industriais do Twitter? Bem, por exemplo, ajuda a fazer previsões mais precisas sobre o resultado de eventos esportivos. Mas tenho certeza de que existem outros cenários de usuário.


Para começar, é claro que você precisa ter uma conta no Twitter com um número de telefone. Isso é necessário para criar o aplicativo, é esta etapa que dá acesso à API.


Vamos para a página do desenvolvedor e clique no botão Criar um aplicativo . A seguir, é apresentada a página na qual você precisa preencher as informações sobre o aplicativo. Atualmente, a página consiste nos seguintes campos.


apps


  • AppName - nome do aplicativo (obrigatório).
  • Descrição do aplicativo - descrição do aplicativo (obrigatório).
  • URL do site - página do site do aplicativo (obrigatório), você pode inserir qualquer coisa que se pareça com um URL.
  • Ativar login no Twitter (caixa de seleção) - O login na página do aplicativo no Twitter pode ser omitido.
  • URLs de retorno de chamada - o retorno de chamada do aplicativo durante a autenticação (obrigatório) e necessário , você pode deixar http://127.0.0.1:1410 .

Os campos a seguir são opcionais: o endereço da página para os termos de serviço, o nome da organização etc.


Ao criar uma conta de desenvolvedor, escolha uma das três opções possíveis.


  • Padrão - A versão básica, você pode procurar registros até uma profundidade de ≤ 7 dias, gratuitamente.
  • Premium - Uma opção mais avançada, você pode procurar registros com profundidade ≤ 30 dias e desde 2006. Grátis, mas eles não são exibidos imediatamente ao considerar um aplicativo.
  • Empresa - Classe executiva, tarifa paga e confiável.

Eu escolhi o Premium , demorou cerca de uma semana para aguardar a aprovação. Não posso dizer a todos se eles fazem isso em sequência, mas vale a pena tentar de qualquer maneira, e o Standard não vai a lugar nenhum.


Conexão com o Twitter


Depois de criar o aplicativo, um conjunto contendo os seguintes elementos aparecerá na guia Chaves e tokens . Abaixo estão os nomes e variáveis ​​correspondentes de R.


Chaves da API do consumidor


  • Chave da API - api_key
  • Chave secreta da API - api_secret

Acessar token e acessar token secret


  • Token de acesso - access_token
  • Segredo do token de acesso - access_token_secret

Instale os pacotes necessários.


 install.packages("rtweet") install.packages("tm") install.packages("wordcloud") 

Este trecho de código ficará assim.


 library("rtweet") api_key <- "" api_secret <- "" access_token <- "" access_token_secret <- "" appname="" setup_twitter_oauth ( api_key, api_secret, access_token, access_token_secret) 

Após a autenticação, o R solicitará que você salve os códigos OAuth no disco para uso posterior.


 [1] "Using direct authentication" Use a local file to cache OAuth access credentials between R sessions? 1: Yes 2: No 

Ambas as opções são aceitáveis, eu escolhi o primeiro.


Pesquisar e filtrar resultados


 tweets <- search_tweets("hadoop", include_rts=FALSE, n=600) 

A tecla include_rts permite controlar se os retweets são incluídos ou excluídos da pesquisa. Na saída, obtemos uma tabela com muitos campos nos quais há detalhes e detalhes de cada registro. Aqui estão os 20 primeiros.


 > head(names(tweets), n=20) [1] "user_id" "status_id" "created_at" [4] "screen_name" "text" "source" [7] "display_text_width" "reply_to_status_id" "reply_to_user_id" [10] "reply_to_screen_name" "is_quote" "is_retweet" [13] "favorite_count" "retweet_count" "hashtags" [16] "symbols" "urls_url" "urls_t.co" [19] "urls_expanded_url" "media_url" 

Você pode compor uma sequência de pesquisa mais complexa.


 search_string <- paste0(c("data mining","#bigdata"),collapse = "+") search_tweets(search_string, include_rts=FALSE, n=100) 

Os resultados da pesquisa podem ser salvos em um arquivo de texto.


 write.table(tweets$text, file="datamine.txt") 

Nos fundimos no corpo dos textos, filtramos as palavras de serviço, os sinais de pontuação e traduzimos tudo para minúsculas.


Há outra função de pesquisa - searchTwitter , que requer a biblioteca twitteR . De certa forma, é mais conveniente do que os search_tweets , mas de certa forma inferior a ele.


Plus - a presença de um filtro por tempo.


  tweets <- searchTwitter("hadoop", since="2017-09-01", n=500) text = sapply(tweets, function(x) x$getText()) 

Menos - a saída não é uma tabela, mas um objeto do tipo status . Para usá-lo em nosso exemplo, precisamos extrair um campo de texto da saída. Isso faz sapply na segunda linha.


 corpus <- Corpus(VectorSource(tweets$text)) clearCorpus <- tm_map(corpus, function(x) iconv(enc2utf8(x), sub = "byte")) tdm <- TermDocumentMatrix(clearCorpus, control = list(removePunctuation = TRUE, stopwords = c("com", "https", "hadoop", stopwords("english")), removeNumbers = TRUE, tolower = TRUE)) 

Na segunda linha, a função tm_map necessária para converter todos os tipos de caracteres emoji para minúsculas, caso contrário, a conversão para minúsculas usando tolower falhará.


Construindo uma nuvem de palavras


As nuvens de palavras apareceram pela primeira vez na hospedagem de fotos do Flickr , até onde eu sei, e desde então ganharam popularidade. Para esta tarefa, precisamos da biblioteca wordcloud .


 m <- as.matrix(tdm) word_freqs <- sort(rowSums(m), decreasing=TRUE) dm <- data.frame(word=names(word_freqs), freq=word_freqs) wordcloud(dm$word, dm$freq, scale=c(3, .5), random.order=FALSE, colors=brewer.pal(8, "Dark2")) 

A função search_string permite definir o idioma como parâmetro.


 search_tweets(search_string, include_rts=FALSE, n=100, lang="ru") 

No entanto, devido ao fato de o pacote NLP para R ser pouco russificado, em particular, não há uma lista de serviço ou palavras de parada, não consegui criar uma nuvem de palavras com uma pesquisa em russo. Ficarei feliz se você encontrar uma solução melhor nos comentários.


Bem, na verdade ...


script inteiro
 library("rtweet") library("tm") library("wordcloud") api_key <- "" api_secret <- "" access_token <- "" access_token_secret <- "" appname="" setup_twitter_oauth ( api_key, api_secret, access_token, access_token_secret) oauth_callback <- "http://127.0.0.1:1410" setup_twitter_oauth (api_key, api_secret, access_token, access_token_secret) appname="my_app" twitter_token <- create_token(app = appname, consumer_key = api_key, consumer_secret = api_secret) tweets <- search_tweets("devops", include_rts=FALSE, n=600) corpus <- Corpus(VectorSource(tweets$text)) clearCorpus <- tm_map(corpus, function(x) iconv(enc2utf8(x), sub = "byte")) tdm <- TermDocumentMatrix(clearCorpus, control = list(removePunctuation = TRUE, stopwords = c("com", "https", "drupal", stopwords("english")), removeNumbers = TRUE, tolower = TRUE)) m <- as.matrix(tdm) word_freqs <- sort(rowSums(m), decreasing=TRUE) dm <- data.frame(word=names(word_freqs), freq=word_freqs) wordcloud(dm$word, dm$freq, scale=c(3, .5), random.order=FALSE, colors=brewer.pal(8, "Dark2")) 

Materiais usados.


Links curtos:



Links originais:


https://stats.seandolinar.com/collecting-twitter-data-getting-started/
https://opensourceforu.com/2018/07/using-r-to-mine-and-analyse-popular-sentiments/
http://dkhramov.dp.ua/images/edu/Stu.WebMining/ch17_twitter.pdf
http://opensourceforu.com/2018/02/explore-twitter-data-using-r/
https://cran.r-project.org/web/packages/tm/vignettes/tm.pdf


PS Dica, a palavra-chave nuvem no KDPV não é usada no programa, está associada ao meu artigo anterior .

Source: https://habr.com/ru/post/pt426657/


All Articles