Python para Análise de Sentimentos em Redes Sociais

Com bilhões de pessoas compartilhando opiniões em plataformas como Twitter (X), FacebookInstagram e LinkedIn, as redes sociais se tornaram um dos maiores repositórios de dados não estruturados do mundo.

Essas opiniões refletem sentimentos — positivos, negativos ou neutros — que podem ser extraídos e analisados com técnicas de Processamento de Linguagem Natural (NLP) e Machine Learning.

Neste artigo, vamos aprender como realizar análise de sentimentos em redes sociais com Python, passando por coleta de dados, pré-processamento, modelagem e visualização de resultados.



1. O que é Análise de Sentimentos?

A análise de sentimentos é uma técnica de NLP que busca identificar a opinião ou emoção expressa em um texto.
Exemplo:

  • Positivo: “Amei o novo celular, a câmera é fantástica!”

  • Negativo: “O atendimento foi horrível, não recomendo.”

  • Neutro: “O produto chegou ontem e ainda não testei.”

Aplicações práticas:


2. Coleta de Dados de Redes Sociais

2.1 Coletando tweets com Tweepy

import tweepy

# Autenticação na API do Twitter (X)
api_key = "SUA_API_KEY"
api_key_secret = "SUA_API_SECRET"
access_token = "SEU_ACCESS_TOKEN"
access_token_secret = "SEU_ACCESS_SECRET"

auth = tweepy.OAuthHandler(api_key, api_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

# Coleta de tweets sobre um tema
query = "inteligência artificial -filter:retweets"
tweets = tweepy.Cursor(api.search_tweets, q=query, lang="pt", tweet_mode="extended").items(100)

dados = [[tweet.full_text, tweet.created_at] for tweet in tweets]
import pandas as pd
df = pd.DataFrame(dados, columns=["texto", "data"])
print(df.head())

3. Pré-processamento dos Textos

Dados de redes sociais são ruidosos (cheios de emojishashtags, links e gírias). Precisamos limpar o texto.

import re
import nltk
from nltk.corpus import stopwords
nltk.download("stopwords")
stopwords_pt = stopwords.words("portuguese")

def limpar_texto(texto):
    texto = texto.lower()  # minúsculas
    texto = re.sub(r"http\S+|www\S+", "", texto)  # remove links
    texto = re.sub(r"@\w+", "", texto)  # remove menções
    texto = re.sub(r"#", "", texto)  # remove hashtag
    texto = re.sub(r"[^a-zA-Zá-úÁ-Ú0-9\s]", "", texto)  # remove caracteres especiais
    palavras = [p for p in texto.split() if p not in stopwords_pt]
    return " ".join(palavras)

df["texto_limpo"] = df["texto"].apply(limpar_texto)

4. Análise de Sentimentos com VADER

VADER (Valence Aware Dictionary for sEntiment Reasoning) é ótimo para redes sociais porque entende gírias, emojis e intensificadores.

from nltk.sentiment.vader import SentimentIntensityAnalyzer
nltk.download("vader_lexicon")

analisador = SentimentIntensityAnalyzer()
df["sentimento"] = df["texto_limpo"].apply(lambda x: analisador.polarity_scores(x)["compound"])

# Classificação
df["polaridade"] = df["sentimento"].apply(lambda x: "positivo" if x > 0.05 else ("negativo" if x < -0.05 else "neutro"))
print(df.head())

5. Visualização dos Resultados

5.1 Distribuição dos sentimentos

import matplotlib.pyplot as plt

df["polaridade"].value_counts().plot(kind="bar", color=["green","red","gray"])
plt.title("Distribuição de Sentimentos")
plt.show()

5.2 Nuvem de palavras

from wordcloud import WordCloud

texto_total = " ".join(df["texto_limpo"])
nuvem = WordCloud(width=800, height=400, background_color="white").generate(texto_total)

plt.imshow(nuvem, interpolation="bilinear")
plt.axis("off")
plt.show()

6. Modelos de Machine Learning para Sentimentos

Além do VADER, podemos treinar nossos próprios classificadores.

6.1 Vetorização de texto

from sklearn.feature_extraction.text import TfidfVectorizer

vetor = TfidfVectorizer(max_features=500)
X = vetor.fit_transform(df["texto_limpo"])
y = df["polaridade"]

6.2 Treinando um modelo (Naive Bayes)

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

modelo = MultinomialNB()
modelo.fit(X_train, y_train)
y_pred = modelo.predict(X_test)

print(classification_report(y_test, y_pred))

7. Análise de Sentimentos com Deep Learning (Bônus)

Usando redes neurais e embeddings pré-treinados, como BERT ou Transformers, é possível atingir resultados ainda melhores.

from transformers import pipeline

analisador = pipeline("sentiment-analysis", model="nlptown/bert-base-multilingual-uncased-sentiment")
print(analisador("Esse filme foi incrível, amei!"))

8. Desafios e Limitações

  • Ironia e sarcasmo: “Adorei esperar 3 horas na fila 😒” → difícil para modelos entenderem.

  • Contexto cultural: palavras mudam de significado em diferentes regiões.

  • Ambiguidade: “O celular é pequeno” pode ser bom ou ruim.

  • Necessidade de atualização constante: novas gírias e expressões surgem rapidamente.


9. Boas Práticas

  • Sempre combine métodos: dicionários (VADER), ML clássico (Naive Bayes, SVM) e deep learning.

  • Faça validação cruzada para evitar overfitting.

  • Atualize dicionários com gírias locais.

  • Visualize os resultados com dashboards interativos (Dash, Streamlit, Plotly).


10. Conclusão

análise de sentimentos em redes sociais com Python é uma ferramenta poderosa para empresas, pesquisadores e analistas de dados. Com ela, podemos monitorar tendências, entender clientes e antecipar crises de imagem.

Bibliotecas como NLTK, Scikit-learn e Transformers tornam possível construir desde soluções rápidas até sistemas robustos baseados em inteligência artificial.

No futuro, veremos cada vez mais aplicações que combinam NLP + análise em tempo real + visualização interativa, permitindo decisões mais inteligentes e rápidas.

Comentários

Postagens mais visitadas deste blog

Python para Computação Quântica: Introdução com Qiskit

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Estrutura Básica de um Programa C# com exemplos