Abra uma planilha com 300 publicações brutas e o problema fica claro em poucos minutos: copiar, colar, ler, semicerrar os olhos, adivinhar, repetir — e, mesmo assim, você talvez continue sem saber se as pessoas amaram ou odiaram o lançamento que está acompanhando.
É exatamente para isso que existe a análise de sentimento. Mas tem um porém: a maioria dos tutoriais sobre o tema ficou presa em 2022. Eles partem do pressuposto de acesso gratuito à API que já não existe, recomendam modelos que engasgam com sarcasmo e emojis e pulam as etapas de pré-processamento que, na prática, definem se o resultado faz sentido. Tenho passado bastante tempo no universo de SaaS e automação (inclusive construindo Thunderbit), e vi o cenário de análise de sentimento mudar radicalmente. O caminho atualizado e honesto passa por fluxos em Python e sem código, com métodos de coleta de dados e modelos que refletem a realidade de 2026.
O que é Análise de Sentimento no Twitter?
Análise de sentimento no Twitter é o processo de classificar automaticamente publicações no X como positivas, negativas ou neutras, com base no texto, nos emojis e no contexto. Pense nisso como ensinar uma máquina a ler um tweet e responder: "Essa pessoa está feliz, irritada ou em algum ponto do meio?"
Ainda assim, análise de sentimento é diferente de social listening em geral. Social listening é acompanhar do que as pessoas estão falando — temas, tendências, volume. Já a análise de sentimento é a camada de pontuação e classificação sobre isso: ela mostra como as pessoas se sentem em relação ao que estão dizendo. O conceito tem raízes em linguística computacional e pesquisa de mineração de opinião há décadas, mas só virou uma ferramenta de negócios mainstream nos últimos anos.
Há alguns níveis comuns de classificação:
- Binária: Positivo ou negativo (mais simples, mas perde nuances)
- Ternária: Positivo, neutro ou negativo (o padrão mais comum)
- Granular: Muito positivo → muito negativo (útil para pesquisa e monitoramento detalhado de marca)
E existem tarefas relacionadas, mas diferentes — como detecção de emoção (raiva, tristeza, alegria), detecção de posição (a favor ou contra uma proposta), sentimento em nível de aspecto (como alguém se sente sobre preço versus qualidade) e detecção de sarcasmo/ironia. O benchmark TweetEval trata tudo isso como tarefas separadas, e com razão: uma única pontuação de sentimento não responde a todas as perguntas de negócio. Se você estiver acompanhando o lançamento de um produto, provavelmente vai querer sentimento por aspecto ("amo a câmera, odeio a bateria"). Se estiver monitorando uma crise, o que importa é emoção e volume, não apenas polaridade.
Por que a Análise de Sentimento no Twitter Importa para o seu Negócio
O X foi construído em torno de conversas em tempo real, então reações a lançamentos, eventos ao vivo e notícias urgentes podem se acumular muito rápido. Para empresas, justamente essa velocidade é o diferencial. A análise de sentimento transforma um fluxo massivo de texto não estruturado em dados estruturados que uma equipe pode revisar e usar para tomar decisões.
Os casos de uso mais comuns se dividem assim:
| Caso de uso | Equipe | Resultado de negócio |
|---|---|---|
| Monitoramento da reputação da marca | PR, Marketing | Detectar picos negativos antes que viralizem |
| Feedback de lançamento de produto | Produto, Marketing | Identificar em tempo real o que está funcionando e o que não está |
| Benchmarking competitivo | Estratégia, Marketing | Comparar a percepção da marca com a dos concorrentes em janelas equivalentes |
| Detecção de crise | PR, Operações | Acionar revisão humana quando o volume negativo dispara |
| Desempenho de campanha | Marketing | Medir mudança de sentimento por criativo, canal ou período |
| Sentimento de mercado/ações | Finanças, Pesquisa | Acompanhar o humor público em torno de resultados, eventos ou políticas |
| Pesquisa política e de políticas públicas | Pesquisa, Governo | Medir opinião pública sobre temas em escala |
Para deixar isso concreto: o resumo do Super Bowl 2026 no X reportou 16 milhões de Posts de 4 milhões de autores, 5 bilhões de impressões e 605 milhões de visualizações de vídeo em torno de um único evento — com metade da conversa acontecendo em tempo real. Esse é o tipo de escala em que a leitura manual se torna impossível e a pontuação automática de sentimento vira essencial.
E não se trata apenas de volume. A própria metodologia BrandRanx do X combina volume, engajamento e sentimento — o que reforça que o sentimento é mais poderoso quando vem junto com outros sinais, e não isoladamente.
Em resumo: se sua equipe toma decisões com base na percepção pública — produto, marca, campanha ou crise — a análise de sentimento dos dados do X é um dos ciclos de feedback mais rápidos que você pode ter.
A realidade da X API em 2026: como realmente obter dados de tweets
É aqui que a maioria dos tutoriais desmorona. Se você já seguiu um guia com Tweepy, colou o código e bateu em um paywall ou em um erro obscuro, você não está sozinho. Os antigos planos Free / Basic / Pro acabaram. Agora a API do X funciona com pagamento por uso e créditos pré-pagos, custos por endpoint e rastreamento de uso em tempo real.
Uma comparação honesta de todos os métodos atuais de coleta de dados:
| Método | Custo (2026) | Volume | Nível técnico | Observações |
|---|---|---|---|---|
| X API v2 (pagamento por uso) | $0,005/Post lido | Até 2 milhões de leituras de Post/mês (self-serve) | Intermediário (Python) | Oficial, reproduzível, compatível |
| Pesquisa em arquivo completo | US$ 0,005 por Post retornado; US$ 0,010 por solicitação de contagem em arquivo completo | Desde março de 2006 | Intermediário–avançado | Disponível para pagamento por uso e Enterprise |
| Filtered Stream | Leituras de Post cobradas na entrega | Tempo real, contínuo | Intermediário–avançado | Melhor para coleta ao vivo |
| Conjuntos de dados prontos (Kaggle, Sentiment140) | US$ 0 | Estáticos, apenas históricos | Iniciante | Ótimos para aprender, não para análise ao vivo |
| snscrape, Twint, Twikit etc. | US$ 0 | Não confiável / quebra com frequência | Avançado | snscrape não funciona para busca no X desde 2023; Twint está arquivado; Twikit usa métodos não oficiais |
| Seu próprio arquivo do X | US$ 0 | Apenas suas publicações | Iniciante | Útil para análise pessoal |
Alguns pontos importantes:
- Os antigos planos Free/Basic/Pro acabaram. Não siga nenhum tutorial que os trate como atuais.
- snscrape não funciona mais para X. O mantenedor confirmou em 2024 que a busca no Twitter via scraping deixou de funcionar. Twint está arquivado. Twikit usa scraping não oficial e cookies — atividade não é o mesmo que permissão.
- Os termos do X proíbem scraping no navegador sem consentimento prévio por escrito. Isso significa que Selenium, Playwright e extensões de navegador não são alternativas compatíveis para acesso à API do X.
X API v2: o que você realmente recebe
Uma leitura padrão de Post custa $0,005 por Post retornado. Leituras de usuário custam US$ 0,010 cada. Então 10.000 leituras únicas de Post saem por volta de US$ 50, sem contar outros custos de recursos. O limite self-serve é de 2 milhões de leituras de Post por mês. As tarifas podem mudar — sempre confira o Developer Console.
Para trabalhos de sentimento, você vai querer mais do que apenas id e text. Um esquema mínimo útil inclui created_at, lang, author_id, conversation_id, referenced_tweets, entities, context_annotations e public_metrics. Salve a resposta bruta e um registro imutável da sua consulta, endpoint, janela em UTC e tokens de paginação. Sem isso, seu corpus não é reproduzível.
Outro detalhe: a migração do índice de busca em 4 de maio de 2026 mudou o corpus observado. A busca REST por palavra-chave não retorna repostagens, enquanto o Filtered Stream permanece inalterado. Se você comparar resultados antes e depois dessa data, pode estar contando populações diferentes.
Conjuntos de dados prontos: bons para aprender, não para análise ao vivo
Sentiment140 (1,6 milhão de tweets, rótulos por supervisão distante) e vários datasets do Kaggle são gratuitos e ótimos para educação e benchmarking. Mas o Sentiment140 foi coletado em 2009. O subconjunto de sentimento do TweetEval usa dados do SemEval de 2013–2016. Eles não provam que o seu modelo funciona na linguagem, gírias ou eventos de 2026.
Uma observação sobre Thunderbit e dados do X
Quero ser transparente aqui, já que construímos o Thunderbit: Thunderbit é uma ferramenta de raspagem de sites e automação com IA que funciona em muitos sites compatíveis. Mas os termos atuais do X proíbem scraping no navegador sem consentimento. Então eu não vou posicionar o Thunderbit como um jeito de contornar custos da API do X ou controles de acesso — isso seria enganoso. Para dados do X, use a API oficial, um provedor autorizado ou o arquivo da sua própria conta. Onde o Thunderbit realmente entra em um fluxo de análise de sentimento é na etapa posterior: estruturar, rotular e exportar dados que você já coletou por uma via permitida. Mais sobre isso adiante.
Escolhendo o modelo certo de sentimento: VADER vs. TextBlob vs. RoBERTa

O modelo escolhido importa mais do que a maioria dos tutoriais admite. E a maior lacuna nos guias concorrentes é que quase nenhum cobre modelos baseados em transformer ajustados para tweets — justamente onde hoje estão alguns dos melhores baselines práticos.
A comparação lado a lado está abaixo. De propósito, não estou colocando números universais de F1 nesta tabela, porque os resultados mudam conforme dataset, divisão, definição de rótulo, período e métrica. Em vez disso, vou descrever o desempenho relativo e indicar os benchmarks para você conferir.
| Modelo / biblioteca | Abordagem | Lida com sarcasmo? | Lida com gírias/emojis? | Precisão relativa em tweets | Complexidade de configuração |
|---|---|---|---|---|---|
| VADER (NLTK) | Léxico baseado em regras | Fraco | Algum suporte a emojis | A mais baixa | Muito baixa |
| TextBlob | Baseado em padrões | Fraco | Não | Baixa | Muito baixa |
| Naive Bayes / Logistic Regression (TF-IDF) | ML clássico | Não | Não | Moderada | Média |
| CardiffNLP RoBERTa | Transformer (ajustado em tweets) | Melhor (não perfeito) | Sim | A mais alta entre esses | Média (pipeline HuggingFace) |
VADER: rápido e simples, mas limitado
VADER é uma abordagem léxica baseada em regras criada para texto social. É rápido, interpretável, não precisa de dados de treinamento e lida com alguns emojis e emoticons. Considera negação, intensificadores, pontuação e uso de maiúsculas. Para um baseline rápido ou quando processamento e transparência importam, VADER é útil. Onde ele falha: sarcasmo, gírias, significado dependente de contexto e qualquer coisa que exija compreensão além de palavras isoladas. Os limiares padrão do compound score (≥0,05 = positivo, ≤-0,05 = negativo) são apenas padrões, não thresholds universais de negócio — ajuste-os no seu próprio conjunto de validação.
TextBlob: ainda mais simples, ainda mais limitado
TextBlob é um baseline educacional minúsculo. O PatternAnalyzer padrão não foi treinado em texto no estilo de tweets. Serve para uma primeira experiência em NLP, mas não para análise de tweets em produção.
ML clássico: Naive Bayes, Logistic Regression, SVM
Um pipeline de TF-IDF com palavras e caracteres + regressão logística ou LinearSVC ainda é um baseline supervisionado valioso. É barato, interpretável e muitas vezes revela se um transformer traz valor suficiente para justificar sua complexidade. Regra essencial: ajuste o vetorizador apenas depois da divisão entre treino e validação para evitar vazamento de vocabulário e IDF.
Esses modelos superam abordagens baseadas em regras em grandes conjuntos rotulados, mas ainda deixam passar contexto, sarcasmo e gírias.
CardiffNLP RoBERTa: o padrão de 2026 para sentimento em tweets
cardiffnlp/twitter-roberta-base-sentiment-latest é um modelo de três classes mantido ativamente, focado em tweets, e um baseline forte e sensato para 2026. Ele foi pré-treinado em um grande corpus de tweets e ajustado para sentimento, então lida com emojis, gírias e linguagem informal muito melhor do que abordagens baseadas em regras ou ML clássico.
Aqui está um snippet mínimo em HuggingFace para executá-lo:
from transformers import pipeline
classifier = pipeline(
"text-classification",
model="cardiffnlp/twitter-roberta-base-sentiment-latest",
top_k=None,
)
scores = classifier("@user Adoro esperar três horas pelo suporte 😒 http")
print(scores)
Algumas observações:
- A saída é uma pontuação do modelo, não uma probabilidade de negócio calibrada. Faça calibração ou adicione um limite de abstenção em uma amostra rotulada atual.
- Modelos contextuais normalmente superam sistemas baseados em regras em muitas tarefas com tweets, mas sarcasmo, alvos mistos, falta de contexto do thread, dialeto e linguagem codificada continuam sendo fontes estruturais de erro. Não prometa que qualquer modelo "entende sarcasmo" — é mais correto dizer que ele lida com isso melhor, não perfeitamente.
- Alternativas incluem BERTweet, TimeLMs e modelos multilíngues Twitter-XLM-R, dependendo do idioma e da tarefa.
Então, a análise de sentimento no Twitter pode realmente ser precisa? Sim — quando o modelo, o pré-processamento, a definição dos rótulos e a amostra de avaliação estão alinhados com a tarefa. Um script genérico de VADER copiado de um tutorial de 2019 é um baseline, não prova de qualidade de produção.
Um pipeline real de pré-processamento de tweets (não apenas text.lower())

Se você alimentar um modelo de sentimento com URLs brutas, @menções e entidades HTML, até um modelo decente pode devolver lixo. A maioria dos tutoriais (inclusive os que aparecem no topo das buscas) só coloca o texto em minúsculas antes de passá-lo ao modelo. Isso sabota a precisão em silêncio — especialmente em ML clássico, onde a qualidade do pré-processamento pode importar tanto quanto a escolha do modelo.
O que limpar (e por que isso importa)
| Elemento | O que fazer | Por quê |
|---|---|---|
| URLs | Substituir por um placeholder como http | URLs são ruído para sentimento; remover o texto ao redor pode quebrar o contexto |
| @menções | Substituir handles por @user | Mantém a estrutura e remove vazamento de identidade do autor |
| Emoji/emoticons | Preservar para tokenizadores modernos; testar versão convertida para texto em modelos esparsos | Emojis carregam sinal forte de sentimento — removê-los é desperdiçar dado |
| Hashtags | Manter o token; opcionalmente adicionar uma versão segmentada (ex.: #ClimateChangeIsReal → Climate Change Is Real) | Hashtags muitas vezes contêm a opinião |
| Negação | Preservar not, no, never, contrações e palavras de contraste | Listas genéricas de stopwords costumam remover isso e inverter o sentimento |
| Caixa alta/pontuação | Preservar para VADER e modelos compatíveis | VADER usa maiúsculas e pontuação como features |
| Prefixo RT | Remover o marcador RT | É metadado, não sentimento |
| Reposts/duplicados | Detectar duplicados exatos e quase duplicados antes de dividir os dados | Duplicatas entre treino e teste causam vazamento |
Antes e depois: o que o pré-processamento realmente faz com um tweet
Veja um exemplo concreto:
| Etapa | Texto |
|---|---|
| Tweet bruto | RT @BrandX: Uau, #CustomerServiceFail 😡😡 https://t.co/abc123 estou esperando há 3 horas, sem brincadeira, isso é horrível |
| Após remover URL | RT @BrandX: Uau, #CustomerServiceFail 😡😡 http estou esperando há 3 horas, sem brincadeira, isso é horrível |
| Após normalizar a menção | RT @user: Uau, #CustomerServiceFail 😡😡 http estou esperando há 3 horas, sem brincadeira, isso é horrível |
| Após remover RT | @user: Uau, #CustomerServiceFail 😡😡 http estou esperando há 3 horas, sem brincadeira, isso é horrível |
| Após segmentar a hashtag | @user: Uau, #CustomerServiceFail Customer Service Fail 😡😡 http estou esperando há 3 horas, sem brincadeira, isso é horrível |
| Após converter emoji em texto (para modelos esparsos) | @user: Uau, #CustomerServiceFail Customer Service Fail angry_face angry_face http estou esperando há 3 horas, sem brincadeira, isso é horrível |
| Final (para CardiffNLP RoBERTa) | @user Uau, #CustomerServiceFail Customer Service Fail 😡😡 http estou esperando há 3 horas, sem brincadeira, isso é horrível |
Perceba que, para um transformer como o CardiffNLP RoBERTa, você preserva emoji, pontuação e caixa alta — o modelo foi treinado com textos parecidos com esse. Para um modelo TF-IDF, você pode transformar emoji em texto, colocar em minúsculas e lematizar.
Código Python de pré-processamento para copiar e colar
Uma função limpa e modular para pré-processamento compatível com transformers:
import html
import re
import unicodedata
URL_RE = re.compile(r"https?://\S+|www\.\S+", re.I)
MENTION_RE = re.compile(r"(?<!\w)@[A-Za-z0-9_]+")
def normalize_social_text(text: str) -> str:
"""Normaliza um tweet para modelos de sentimento baseados em transformer."""
text = html.unescape(text)
text = unicodedata.normalize("NFC", text)
text = URL_RE.sub("http", text)
text = MENTION_RE.sub("@user", text)
text = re.sub(r"\bRT\b", "", text)
return " ".join(text.split())
Para pipelines de ML clássico, você ampliaria isso com lowercasing, conversão de emoji para texto (usando emoji ou demoji), segmentação de hashtags (com wordninja ou ekphrasis), normalização de gírias, remoção de stopwords e lematização (via spaCy ou NLTK). O princípio central é: ajuste o pré-processamento ao seu modelo. O BERTweet, por exemplo, usa sua própria convenção documentada de normalização — não force todos os modelos por um único pipeline.
Passo a passo: Análise de Sentimento no Twitter com Python
Este é o fluxo completo, conectando tudo o que vimos acima. Você pode seguir do início ao fim.
Antes de começar:
- Dificuldade: Intermediária (assumindo alguma familiaridade com Python)
- Tempo necessário: ~30–60 minutos para o pipeline completo; ~10 minutos para o caminho rápido com transformer
- O que você vai precisar: Python 3.8+, um Google Colab gratuito ou ambiente local,
pandas,transformers,scikit-learn,matplotlib,seaborne opcionalmentewordcloud
Passo 1: Coletar os dados dos seus tweets
Vou usar o conjunto de dados Sentiment140 para este tutorial (gratuito, 1,6 milhão de tweets, disponível no Kaggle). Ele é ótimo para aprendizado e benchmarking, apesar de ser histórico.
Se você quiser dados ao vivo, use o plano pago por uso da X API v2. Uma leitura padrão de Post custa $0,005. Para 10.000 Posts, isso dá cerca de US$ 50.
Carregue o dataset:
import pandas as pd
columns = ["target", "id", "date", "flag", "user", "text"]
df = pd.read_csv(
"training.1600000.processed.noemoticon.csv",
encoding="latin-1",
names=columns,
)
# Rótulos: o Sentiment140 usa 0 = negativo, 4 = positivo
df["label"] = df["target"].map({0: "negative", 4: "positive"})
print(df[["text", "label"]].head())
Você deverá ver um DataFrame com o texto bruto do tweet e uma coluna de rótulo.
Passo 2: Limpar e pré-processar seus tweets
Aplique a função de pré-processamento da seção anterior:
df["clean_text"] = df["text"].apply(normalize_social_text)
print(df[["text", "clean_text"]].head())
Confira algumas linhas para confirmar que URLs foram substituídas, menções foram normalizadas e o prefixo RT foi removido.
Passo 3: Escolher seu modelo e classificar o sentimento
Caminho A: ML clássico com TF-IDF + Logistic Regression
Este é o caminho para "entender os fundamentos". Divida os dados, ajuste o vetorizador apenas no conjunto de treino e treine um classificador de regressão logística:
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
X_train, X_test, y_train, y_test = train_test_split(
df["clean_text"], df["label"], test_size=0.2, random_state=42
)
vectorizer = TfidfVectorizer(max_features=50000, ngram_range=(1, 2))
X_train_tfidf = vectorizer.fit_transform(X_train)
X_test_tfidf = vectorizer.transform(X_test)
clf = LogisticRegression(max_iter=1000)
clf.fit(X_train_tfidf, y_train)
y_pred = clf.predict(X_test_tfidf)
print(classification_report(y_test, y_pred))
Você deverá ver um relatório com precision, recall e F1 para cada classe. No Sentiment140, a regressão logística com TF-IDF normalmente tem desempenho respeitável — mas lembre-se de que esse dataset é de 2009 e usa supervisão distante (emoticons como rótulos), então não trate esses números como benchmark de produção.
Caminho B: CardiffNLP RoBERTa via HuggingFace
Para obter a melhor precisão em texto de tweet, use o transformer pré-treinado:
from transformers import pipeline
classifier = pipeline(
"text-classification",
model="cardiffnlp/twitter-roberta-base-sentiment-latest",
top_k=None,
)
sample_tweets = [
"@user Adoro esperar três horas pelo suporte 😒 http",
"@user Essa nova atualização está fantástica, a melhor até agora!",
"@user O evento foi ok, nada demais.",
]
for tweet in sample_tweets:
result = classifier(tweet)
print(f"Tweet: {tweet}\nScores: {result}\n")
Você verá uma lista de pontuações por rótulo (negativo, neutro, positivo) para cada tweet. O tweet sarcástico ("Adoro esperar três horas...") deve receber uma pontuação mais alta para negativo do que um modelo baseado em regras apontaria — embora nenhum modelo seja perfeito aqui.
Passo 4: Avaliar os resultados
Agora gere um heatmap da matriz de confusão para o caminho de ML clássico:
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred, labels=["negative", "positive"])
sns.heatmap(cm, annot=True, fmt="d", xticklabels=["negative", "positive"],
yticklabels=["negative", "positive"], cmap="Blues")
plt.xlabel("Previsto")
plt.ylabel("Real")
plt.title("Matriz de Confusão: Regressão Logística no Sentiment140")
plt.show()
No caminho com transformer, rotule manualmente uma pequena amostra atual (50–100 tweets), rode o modelo e compare. Informe macro F1, precision e recall por classe, além da matriz de confusão. Se isso for para um projeto real, verifique também a calibração e defina um limite de abstenção para casos ambíguos.
Passo 5: Testar casos extremos
Tente alguns tweets que testem sarcasmo, emoji e gírias:
edge_cases = [
"Ah, claro, mais uma atualização que quebra tudo 🙄",
"ngl esse produto é absurdo de bom 🔥🔥🔥",
"A câmera é ótima, mas a bateria é péssima",
"Acabei de receber meu pedido. Está... ok. Acho eu.",
]
for tweet in edge_cases:
clean = normalize_social_text(tweet)
result = classifier(clean)
print(f"Tweet: {tweet}\nScores: {result}\n")
Observe onde o modelo acerta e onde ele tropeça. Tweets com sentimento misto ("câmera é ótima mas a bateria é péssima") são um desafio conhecido — sentimento por aspecto é uma tarefa separada.
Análise de Sentimento no Twitter sem escrever código
Nem todo mundo quer programar em Python, e tudo bem. Se você é marketer, gerente de marca ou líder de operações e precisa de insights de sentimento sem mexer em código, este é o caminho.
Um alerta honesto: ferramentas sem código trocam customização por velocidade. Elas são ideais para monitoramento rápido de marca, não para análise de nível de pesquisa ou treinamento de modelos personalizados.
Opções sem código em resumo
| Ferramenta | Melhor para | Sentimento integrado? | Faixa de preço |
|---|---|---|---|
| AWS Comprehend | Análise de texto em escala corporativa | Sim | Pagamento por uso |
| Brandwatch / Sprinklr | Suite completa de social listening | Sim | Preço enterprise |
| Google Sheets + complementos de NLP | Análise rápida e leve | Via complemento | Gratuito–baixo |
| Thunderbit + planilha | Estruturar e rotular dados de páginas compatíveis | AI Field Prompt para rótulos exploratórios | Plano gratuito disponível |
Fluxo sem código: coletar dados e classificar em uma planilha
Um fluxo prático para quem já tem dados de tweets (coletados via API oficial do X, um provedor autorizado ou seu próprio arquivo):
- Exporte os dados dos tweets para uma planilha. Se você usou a X API, exporte o JSON para CSV ou use uma ferramenta como Thunderbit para estruturar e exportar dados de páginas compatíveis nas quais você tenha permissão para automatizar.
- Abra no Google Sheets. Cole ou importe o texto dos tweets em uma coluna.
- Aplique um classificador de sentimento. Use um complemento de NLP do Google Sheets (verifique o marketplace para opções atuais) ou um serviço como o AWS Comprehend. Alguns complementos permitem classificar sentimento diretamente em uma fórmula de célula.
- Revise e visualize. Use os gráficos nativos do Google Sheets para criar um gráfico de barras da distribuição de sentimento ou uma linha de sentimento ao longo do tempo.
O AI Field Prompt do Thunderbit também pode adicionar um rótulo de sentimento baseado em prompt durante a extração em páginas compatíveis — útil para monitoramento exploratório. Mas, para decisões auditadas ou de alto impacto, valide uma amostra e use um modelo documentado.
Quando usar sem código vs. Python
| Cenário | Caminho recomendado |
|---|---|
| Checagem rápida de marca, baixo volume | Sem código (planilha + complemento) |
| Dashboard de equipe, relatórios semanais | Sem código ou low-code |
| Análise em grande escala, modelos personalizados | Python |
| Pesquisa acadêmica, reprodutibilidade | Python |
| Monitoramento em tempo real em escala | Python + API + pipeline agendado |
Visualizando os resultados da análise de sentimento no Twitter

A maioria dos tutoriais para na classificação. Mas, se você quiser comunicar achados para uma equipe ou tomar uma decisão, precisa de visualizações.
Gráfico de barras da distribuição de sentimento
O output mais básico, mas universalmente útil:
import matplotlib.pyplot as plt
import seaborn as sns
sentiment_counts = df["label"].value_counts()
sns.barplot(x=sentiment_counts.index, y=sentiment_counts.values, palette="coolwarm")
plt.xlabel("Sentimento")
plt.ylabel("Quantidade de tweets")
plt.title("Distribuição de Sentimento")
plt.show()
Nuvem de palavras por classe de sentimento
Nuvens de palavras separadas para tweets positivos e negativos revelam o que as pessoas estão realmente dizendo:
from wordcloud import WordCloud
for sentiment in ["positive", "negative"]:
text = " ".join(df[df["label"] == sentiment]["clean_text"])
wc = WordCloud(width=800, height=400, background_color="white").generate(text)
plt.figure(figsize=(10, 5))
plt.imshow(wc, interpolation="bilinear")
plt.axis("off")
plt.title(f"Nuvem de palavras: tweets {sentiment.capitalize()}")
plt.show()
Sentimento ao longo do tempo: o gráfico que quase ninguém mostra
Esta é a visualização que transforma dados brutos em história. Se você tiver timestamps, pode acompanhar como o sentimento muda durante um evento, lançamento ou crise:
df["date"] = pd.to_datetime(df["date"])
df["day"] = df["date"].dt.date
sentiment_map = {"positive": 1, "neutral": 0, "negative": -1}
df["score"] = df["label"].map(sentiment_map)
daily = df.groupby("day")["score"].mean()
plt.figure(figsize=(12, 5))
daily.plot()
plt.xlabel("Data")
plt.ylabel("Pontuação média de sentimento")
plt.title("Sentimento ao Longo do Tempo")
plt.axhline(0, color="gray", linestyle="--")
plt.show()
Uma queda brusca no dia do lançamento? Esse é o sinal para investigar os tweets negativos e descobrir o que deu errado.
Heatmap da matriz de confusão
Já mostrado na etapa de avaliação acima. O principal é observar onde o modelo confunde positivo com negativo (ou vice-versa). São esses tweets que vale a pena ler manualmente.
Para quem não codifica: gráficos no Google Sheets ou Notion
Se você exportou os dados rotulados por sentimento para uma planilha, pode criar gráficos de distribuição e tendência diretamente no Google Sheets, Notion ou qualquer ferramenta de BI. Sem precisar de Python.
Armadilhas comuns na análise de sentimento no Twitter (e como evitá-las)
Nos fluxos reais de sentimento, os mesmos erros continuam aparecendo.
Sarcasmo e ironia
O maior assassino de precisão. "Adoro esperar três horas pelo suporte 😒" parece positivo para um modelo baseado em regras. Modelos transformer se saem melhor, mas sarcasmo continua sendo estruturalmente difícil — especialmente quando a publicação sozinha não traz contexto (o thread, o histórico do autor, o evento). Em casos de alto impacto, combine a saída do modelo com checagens humanas.
Pontos cegos com emojis e gírias
Se o seu pré-processamento remove emojis em vez de convertê-los em texto (para modelos esparsos) ou preservá-los (para transformers), você está jogando fora alguns dos sinais de sentimento mais fortes do conjunto de dados. O mesmo vale para gírias — "ngl this slaps" é positivo, mas um modelo treinado em inglês formal não vai saber disso.
Tutoriais antigos de API e scrapers quebrados
Se um tutorial usa Tweepy com API v1.1, ele está desatualizado. Se recomendar snscrape, isso não funciona para busca no X desde 2023. Sempre confira a data e a versão da API de qualquer tutorial que você seguir.
Overfitting em um único dataset
Sentiment140 é ótimo para treinamento, mas é de 2009. Uma auditoria de 2024 da EMNLP sobre 20 datasets de mídias sociais mostrou que remover duplicatas reduziu o F1 em 14 de 19 datasets testados e alterou o ranking dos modelos em 17 de 19. Use divisões por tempo, sem sobreposição de eventos e, de preferência, sem sobreposição de autores. Teste seu modelo em tweets recentes para ver se ele generaliza.
Tratar scores de sentimento como verdade absoluta
A pontuação de um modelo não é uma probabilidade calibrada. Não acione respostas automáticas nem decisões públicas com base apenas em um rótulo de sentimento. Para decisões que afetam indivíduos ou respostas a crises, sempre exija revisão humana.
Privacidade, política da plataforma e uso responsável
Esta seção não é opcional.
A Developer Policy do X enfatiza privacidade, controle do usuário, exclusão de conteúdo e restrições a correlação fora do X. Regras práticas:
- Colete apenas os campos necessários.
- Agregue os resultados em vez de publicar handles brutos.
- Guarde os Post IDs e os timestamps de coleta para conformidade.
- Remova ou atualize conteúdo armazenado após exclusão, mudanças de proteção ou solicitações elegíveis.
- Não infira atributos sensíveis sobre indivíduos.
- Não una scores de sentimento a identidades de CRM sem base permitida e consentimento.
- Não treine nem faça fine-tuning de um foundation model com conteúdo do X quando isso for proibido pelas regras de uso restrito.
- Documente tamanho da amostra, termos de consulta, janela temporal, filtros de idioma e exclusões.
- Nunca automatize uma resposta pública apenas a partir de um score de sentimento.
A análise de sentimento é uma ferramenta poderosa, mas vem com responsabilidades reais. Trate-a dessa forma.
Conclusão e principais aprendizados
A análise de sentimento no Twitter funciona em 2026 — mas só se você atualizar sua abordagem para a realidade atual. A receita antiga (API gratuita, pré-processamento só com lowercase, VADER ou Naive Bayes, sem avaliação) está quebrada. O que realmente funciona:
- Obtenha os dados por um caminho permitido. Use a X API v2 (pagamento por uso), um provedor autorizado ou um dataset transparente. Não dependa de scrapers quebrados ou gambiarras no navegador.
- Pré-processamento para o modelo, não só para parecer bonito. Preserve emoji, negação e caixa alta para transformers. Normalize URLs e menções. Alinhe o pipeline ao dado usado no treinamento do modelo.
- Compare um baseline barato com um transformer específico para tweets. TF-IDF + regressão logística ainda é um ótimo teste de sanidade. CardiffNLP RoBERTa é o padrão forte atual para sentimento em tweets.
- Avalie com honestidade. Informe macro F1, métricas por classe e matriz de confusão. Use uma amostra recente rotulada manualmente. Defina um limite de abstenção para casos ambíguos.
- Visualize para decidir, não só para enfeitar. Gráficos de sentimento ao longo do tempo e nuvens de palavras contam uma história que o relatório de classificação não consegue mostrar.
- Mantenha humanos no ciclo. Nenhum modelo é perfeito com sarcasmo, alvos mistos ou significado dependente de contexto. Em casos de alto impacto, combine a saída do modelo com revisão humana.
Se você está começando agora, pegue um dataset gratuito, abra o Google Colab e rode o pipeline do HuggingFace. Em menos de dez minutos você terá scores de sentimento funcionando. Se quiser coletar e estruturar dados da web sem código para outras partes do seu fluxo, o Thunderbit pode ajudar em páginas compatíveis nas quais você tenha permissão para automatizar.
E se você está montando isso para portfólio ou entrevista de emprego: adicionar uma comparação de transformer, um pipeline de pré-processamento real e um gráfico de sentimento ao longo do tempo vai destacar seu projeto instantaneamente em relação ao padrão de bootcamp.
Saiba mais
- Como dominar a raspagem automatizada de dados usando Thunderbit
- 6 melhores scrapers de Twitter (x.com) em 2026
- Como extrair tweets do Twitter usando Python em 2025
- Como usar scraping com IA no Twitter para obter insights de dados aprimorados
- Estatísticas do Twitter (X) 2026: usuários, demografia e anúncios
Perguntas frequentes
A análise de sentimento no Twitter é precisa?
Depende do modelo e de como você avalia. Ferramentas baseadas em regras, como o VADER, ficam na faixa mais baixa em dados de tweets. Modelos transformer como o CardiffNLP RoBERTa têm desempenho significativamente melhor — mas os números exatos variam conforme dataset, divisão, definição de rótulo e métrica. A qualidade do pré-processamento também importa. Sempre avalie em uma amostra atual rotulada manualmente, em vez de confiar em um único número de benchmark.
Posso fazer análise de sentimento no Twitter de graça?
Sim. Use um dataset gratuito (Sentiment140 no Kaggle), um ambiente Python gratuito (Google Colab) e um modelo pré-treinado do HuggingFace. Para dados ao vivo, a X API cobra $0,005 por leitura de Post, então a coleta em pequena escala é acessível. O Thunderbit oferece um plano gratuito para estruturar dados em páginas compatíveis.
Qual é a melhor biblioteca Python para análise de sentimento no Twitter?
Para prototipagem rápida: VADER via NLTK. Para melhor precisão em tweets: a biblioteca transformers da HuggingFace com o modelo RoBERTa do CardiffNLP. Para baselines clássicos de ML: scikit-learn com TF-IDF. A escolha certa depende do volume, da precisão desejada e do orçamento de computação.
Como lidar com sarcasmo na análise de sentimento do Twitter?
Modelos transformer lidam melhor com sarcasmo do que modelos baseados em regras ou ML clássico, porque processam contexto, não apenas palavras isoladas. Mas nenhum modelo é perfeito nisso — pesquisas mostram que até anotadores humanos discordam sobre intenção sarcástica. Para casos críticos, combine a saída do modelo com revisão humana e considere usar datasets específicos de sarcasmo para avaliação.
Posso analisar sentimento no Twitter sem programar?
Sim. Colete seus dados por um caminho permitido (X API, provedor autorizado ou seu próprio arquivo), exporte para o Google Sheets e aplique um classificador de sentimento sem código via um complemento de NLP para Sheets ou um serviço como AWS Comprehend. O Thunderbit também pode adicionar rótulos de sentimento baseados em prompt durante a estruturação dos dados em páginas compatíveis. Para saber mais sobre fluxos de dados sem código, confira nosso guia de ferramentas de IA para Google Sheets.


