Monday, February 23rd 2026
Analyze ~36,000 personal WhatsApp messages to:
WhatsApp exports lines like:
23/07/2020, 11:59 - Facundo Ipharraguerre: Para gastar más
Core regex:
r"^(\d{2}/\d{2}/\d{4}, \d{2}:\d{2}) - ([^:]+): (.+)"
Result: structured rows of:
(timestamp, participant, message)
Instead of per-user text files, use a relational model:
Key design:
messages tableBenefits:
Before sentiment, basic structural analysis:
This establishes behavioral baseline independent of emotional interpretation.
Used pysentimiento, a Spanish NLP toolkit built on transformers.
For each message, the model outputs probabilities:
NEG;NEU; POS
Example:
"La comida está bien, pero el servicio es lento."→ NEG 0.72
Instead of categorical labels, derive a numeric signal:
Properties:
This avoids a crude +1 / -1 encoding.
Messages grouped by ISO week:
Computed per week:
From the output:
Initial weekly sentiment showed a persistent negative offset (≈ −0.2). This likely reflects:
To focus on variation rather than absolute polarity, the weekly series was mean-centered:
This transformation:
Conceptually, this is equivalent to removing the DC component in signal processing.
After normalization:
This makes the graph about dynamics, not personality labeling.