Twitter Mood Light - världens humör i en låda (11 / 13 steg)
Steg 11: Programmering 5: Computing världen humör
Det är viktigt att noggrant normalisera och släta data och justera tröskelvärdena för att ge rätt nivå av lyhördhet och larm. (dvs det ska blinka när en rubrik nyhet
händer och när TV visar startar, GMT)
Känslor, humör och temperament
För det första, "världens emotion" beräknas genom att söka twitter för tweets med de olika 7 humör (kärlek, glädje, förvåning, ilska, rädsla, avund, sad).
Ett mått på "tweets per minut" används för att beräkna den aktuella känslan. Ett högre antal tweets per minut föreslår mer folk för närvarande känner denna känsla.
Känslor är flyktiga, så dessa kortlivade känslotillstånd utjämnas över tid med hjälp av en "snabbt exponentiellt glidande medelvärdet"
(se en.wikipedia.org/wiki/Moving_average#Exponential_moving_average)
Detta ger oss nyckeltal för de olika stämningar.
Varje humör förhållandet jämförs sedan med en baslinje, en "långsam exponentiella glidande medelvärde", som jag kallar "världens temperament".
Den stämning som har avvikit längst bort från dess temperament utgångsvärde anses vara den nuvarande världen humör.
Avvikelsen skall mätas i procent, så, till exempel om fruktar ändras från står för 5% av tweets till 10% så är det viktigare än glädje ändra från 40% till 45% (de är båda en + 5% i tillsatsen termer, men rädd ökade med 100% multiplikativ sett.)
Slutligen är världen temperament värdena fixade något mot bakgrund av detta nya resultat. Detta ger systemet en själv justera egendom så att världen temperament kan mycket långsamt förändras över tiden.
Dessa värden i WorldMood.pde används för att justera hur känslig systemet är för information.
- Vill du ha det till när människor är glada över ett sport resultat eller rädd om vädret?
- Eller skulle du föredra att endast följa upp stora händelser som naturkatastrofer eller terroristattacker?
justera därefter...
#define emotionSmoothingFactor (0.1f)
#define moodSmoothingFactor (0.05f)
#define moderateMoodThreshold (2.0f)
#define extremeMoodThreshold (4.0f)
MOOD_TYPEWorldMood::ComputeCurrentMood() {/ / hitta aktuella nyckeltal floatsum = 0; för (inti = 0; jag < NUM_MOOD_TYPES; i ++) {summa += m_worldMoodCounts [i];} om (summan < 1e-4f) {#ifdefDEBUG m_printer -> print ("oväntade totala m_worldMoodCounts"), #endif / / ifdef DEBUG returnm_worldMood;} för (inti = 0; jag < NUM_MOOD_TYPES; i ++) {m_worldMoodRatios [i] = m_worldMoodCounts [i] / summera;} / / hitta förhållandet att har ökat med mest , i förhållande till dess glidande medelvärde. Så att, till exempel en ökning från 5% till 10% är mer betydande än en ökning från 50% till 55%. floatmaxIncrease = - 1.0f; för (inti = 0; jag < NUM_MOOD_TYPES; i ++) {floatdifference = m_worldMoodRatios [i] - m_worldTemperamentRatios [i]; om (m_worldTemperamentRatios [i] < 1e-4f) {#ifdefDEBUG m_printer -> print ("oväntade m_worldTemperamentRatios"), #endif / / ifdef DEBUG fortsätta;} skillnad / = m_worldTemperamentRatios [i]; om (skillnaden > maxIncrease) {maxIncrease = skillnad; m_worldMood = (MOOD_TYPE) i. / / Detta är nu den mest dominerande humör av världen!}} / / uppdatera världen temperament , som ett exponentiellt glidande medelvärdet på stämningen. Detta gör de originalplan nyckeltal, dvs världen temperament, att ändra långsamt över tid. Detta innebär, i affekt, att 2: a derivatan av världen humör wrt tid är en del av den nuvarande humör calcuation. och så efter en stor ilska-inducerande händelse, kan vi se när folk börjar att bli mindre arga. summa = 0; för (inti = 0; jag < NUM_MOOD_TYPES; i ++) {om (m_worldTemperamentRatios [i] < = 0) {#ifdefDEBUG m_printer -> print ("m_worldTemperamentRatios bör vara förberetts på bygget"), #endif / / #ifdef DEBUG m_worldTemperamentRatios [i] = m_worldMoodRatios [i];} annat {constfloata = m_moodSmoothingFactor; m_worldTemperamentRatios [i] = (m_worldTemperamentRatios [i] * (1.0f - en)) + (m_worldMoodRatios [i] * en);} summa += m_worldTemperamentRatios [i];} om (summan < 1e-4f) {#ifdefDEBUG m_printer -> print ("oväntade totala m_worldTemperamentRatios totala"), #endif / / #ifdef DEBUG returnm_worldMood;} / / och slutligen , renormalise, att hålla med summan av de rörliga genomsnittliga tal som 1.0f för (inti = 0; jag < NUM_MOOD_TYPES; i ++) {m_worldTemperamentRatios [i] * = 1.0f / summan; #ifdefDEBUG m_printer -> print ("temperament förhållandet:"); m_printer -> println(m_worldTemperamentRatios[i]); #endif} #ifdefDEBUG / / felsöka kod - kontrollera summan är 1. summa = 0; för (inti = 0; jag < NUM_MOOD_TYPES; i ++) {summa += m_worldTemperamentRatios [i];} om (summa > 1.0f + 1e-4f || summera < 1.0f - 1e-4f) {m_printer -> println ("oväntade renormalise resultat");} #endif / / #ifdef DEBUG returnm_worldMood; }