In [ ]:
using Gadfly
In [9]:
using DataFrames
In [12]:
birthdays = readtable("data-birthdays.csv")
Out[12]:
message_iddatestarsuserbody
1370026842017-05-0936thefourtheyeHappy Birthday @BenjaminGruenbaum :-)
2249529782015-08-0730rlemon@Zirak HAPPY BELATED BIRTHDAY!!!!!!
3326640122016-09-0528Some Guy@rlemon Happy birthday! :D
4179870632014-07-2927rlemonHAPPY BIRTHDAY ZIRAK!
5280426662016-01-1126Some Guy@FlorianMargaine Happy birthday! :D
6326201772016-09-0126Benjamin GruenbaumHappy birthday @MadaraUchiha!
7186950232014-09-0425Benjamin GruenbaumHappy Birthday @rlemon !!!
8331344822016-09-2824Some Guy@Loktar Happy birthday! :D
9336765882016-10-2423nduggerHAPPY BIRTHDAY BAE-DGER... GET IT!?
10416186992018-03-1423ShrekOverflowToday is PI Day, Albert Einstein's birthday and Stephen Hawking left us today. RIP Hawking.
11254485792015-09-0122Badger Cat@MadaraUchiha Happy birthday!
12397304602017-10-2422NeoaresHappy Birthday!! @BadgerCat
13393619752017-09-2822Badger Cat@Loktar Happy Birthday! ✨🎈🎊🇺🇸🎂🎂🎂🦅🥂✨
14246552262015-07-2422rlemonHAPPY BIRTHDAY JORDAN!
15304129442016-05-0822Badger Cat@BenjaminGruenbaum happy birthday!
16255274082015-09-0522LoktarHappy Birthday @rlemon you old man!
17350485442017-01-1121Badger Cat@FlorianMargaine happy birthday! :)
18231519352015-05-0721rlemonHAPPY BIRTHDAY DYSTROY!
19269408022015-11-1820Benjamin Gruenbaum@Mosho Happy Birthday Dude! Have an awesome year!
20259772522015-09-2820Sterling Archer@Loktar happy birthday bromigo!!
21393804962017-09-2920Badger Cat@BenFortune Happy birthday! 🎂🦄
22357568292017-02-2120Madara UchihaHappy Birthday @towc
23409213812018-01-2220Sterling Archer@KendallFrey happy birthday buddy <3
24413323912018-02-2120Badger Cat@KarelG happy birthday!! 🎂
25318902692016-07-2419Some Guy@SterlingArcher Happy birthday!
26413323962018-02-2119Badger Cat@towc happy birthday!! 🍕
27282077372016-01-1819rlemonHappy Birthday @Cereal
28264836242015-10-2419LoktarHappy Birthday @BadgerCat!!
29400905262017-11-1819Badger Cat@Mosho Happy birthday!!!
30109219652013-07-2919Benjamin Gruenbaum@Zirak Happy Birthday!
WARNING: both StatsBase and Compat export "stderr"; uses of it in module DataFrames must be qualified
In [14]:
typeof(birthdays)
Out[14]:
DataFrames.DataFrame

First things first, we want to count how many users wish other users a happy birthday. My gut feeling is BadgerCat will win by a landslide.

In [24]:
wishingUsers = birthdays[:, :user]
Out[24]:
100-element DataArrays.DataArray{String,1}:
 "thefourtheye"      
 "rlemon"            
 "Some Guy"          
 "rlemon"            
 "Some Guy"          
 "Benjamin Gruenbaum"
 "Benjamin Gruenbaum"
 "Some Guy"          
 "ndugger"           
 "ShrekOverflow"     
 "Badger Cat"        
 "Neoares"           
 "Badger Cat"        
 ⋮                   
 "Sterling Archer"   
 "Badger Cat"        
 "Badger Cat"        
 "Badger Cat"        
 "Badger Cat"        
 "jAndy"             
 "Badger Cat"        
 "Loktar"            
 "Zirak"             
 "user1596138"       
 "Badger Cat"        
 "Florian Margaine"  
In [30]:
wishingUsersCounts = countmap(wishingUsers)
Out[30]:
Dict{Union{DataArrays.NAtype, String},Int64} with 23 entries:
  "Benjamin Gruenbaum" => 12
  "Ben Fortune"        => 1
  "Zirak"              => 2
  "SomeKittens"        => 1
  "towc"               => 1
  "Loktar"             => 7
  "Badger Cat"         => 28
  "Kamil Solecki"      => 1
  "Neoares"            => 3
  "copy"               => 1
  "Sterling Archer"    => 5
  "monners"            => 2
  "ndugger"            => 1
  "Some Guy"           => 10
  "little pootis"      => 1
  "ShrekOverflow"      => 4
  "Madara Uchiha"      => 1
  "thefourtheye"       => 2
  "jAndy"              => 2
  "rlemon"             => 8
  "Kendall Frey"       => 2
  "user1596138"        => 1
  "Florian Margaine"   => 4

You might not believe me, but doing DataFrame(keys(...), values(...)) didn't actually work because of the associated types, but if we map them out to a simple array it's all good.

There might be a better way to convert them if I knew more about Julia's type system, but I'm fine with this.

In [70]:
df = DataFrame(User=map((x) -> x, keys(wishingUsersCounts)), Wishes=map((x) -> x, values(wishingUsersCounts)))
WARNING: imported binding for df overwritten in module Main
Out[70]:
UserWishes
1Benjamin Gruenbaum12
2Ben Fortune1
3Zirak2
4SomeKittens1
5towc1
6Loktar7
7Badger Cat28
8Kamil Solecki1
9Neoares3
10copy1
11Sterling Archer5
12monners2
13ndugger1
14Some Guy10
15little pootis1
16ShrekOverflow4
17Madara Uchiha1
18thefourtheye2
19jAndy2
20rlemon8
21Kendall Frey2
22user15961381
23Florian Margaine4
In [105]:
set_default_plot_size(800px, 400px);
Gadfly.with_theme(:default) do
    plot(df, x="User", y="Wishes", color="User",
        Geom.bar,Guide.xlabel(nothing), Guide.ylabel("Wish count"),
        Guide.colorkey(title=nothing, labels=[""], pos=[-100mm, -100mm]))
end
Out[105]:
Benjamin Gruenbaum Ben Fortune Zirak SomeKittens towc Loktar Badger Cat Kamil Solecki Neoares copy Sterling Archer monners ndugger Some Guy little pootis ShrekOverflow Madara Uchiha thefourtheye jAndy rlemon Kendall Frey user1596138 Florian Margaine User -40 -30 -20 -10 0 10 20 30 40 50 60 70 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 -30 0 30 60 -30 -28 -26 -24 -22 -20 -18 -16 -14 -12 -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 Wish count

okay, that was only somewhat more difficult than expected. First, the results: Not too surprising, BadgerCat is the clear victor, with BenjaminGruenbaum eating dirt behind, flanked by SomeGuy. The rest are simply noise.

Next up we have how many users were wished a happy birthday. We'll try to extract that from the message body, and work on from there.

In [111]:
msg = birthdays[1, :]
Out[111]:
message_iddatestarsuserbody
1370026842017-05-0936thefourtheyeHappy Birthday @BenjaminGruenbaum :-)
In [123]:
match(r"happy birthday @(\S+)"i, msg[1, :body])
Out[123]:
RegexMatch("Happy Birthday @BenjaminGruenbaum", 1="BenjaminGruenbaum")
In [126]:
map((body) -> match(r"@(\S+)|happy birthday @?(\S+)"i, body), birthdays[:, :body])
Out[126]:
100-element DataArrays.DataArray{Any,1}:
 RegexMatch("Happy Birthday @BenjaminGruenbaum", 1=nothing, 2="BenjaminGruenbaum")
 RegexMatch("@Zirak", 1="Zirak", 2=nothing)                                       
 RegexMatch("@rlemon", 1="rlemon", 2=nothing)                                     
 RegexMatch("HAPPY BIRTHDAY ZIRAK!", 1=nothing, 2="ZIRAK!")                       
 RegexMatch("@FlorianMargaine", 1="FlorianMargaine", 2=nothing)                   
 RegexMatch("Happy birthday @MadaraUchiha!", 1=nothing, 2="MadaraUchiha!")        
 RegexMatch("Happy Birthday @rlemon", 1=nothing, 2="rlemon")                      
 RegexMatch("@Loktar", 1="Loktar", 2=nothing)                                     
 RegexMatch("HAPPY BIRTHDAY BAE-DGER...", 1=nothing, 2="BAE-DGER...")             
 nothing                                                                          
 RegexMatch("@MadaraUchiha", 1="MadaraUchiha", 2=nothing)                         
 RegexMatch("@BadgerCat", 1="BadgerCat", 2=nothing)                               
 RegexMatch("@Loktar", 1="Loktar", 2=nothing)                                     
 ⋮                                                                                
 RegexMatch("@ssube", 1="ssube", 2=nothing)                                       
 RegexMatch("@Mosho", 1="Mosho", 2=nothing)                                       
 RegexMatch("@nderscore", 1="nderscore", 2=nothing)                               
 RegexMatch("@monners", 1="monners", 2=nothing)                                   
 RegexMatch("@SomeGuy", 1="SomeGuy", 2=nothing)                                   
 RegexMatch("Happy Birthday @Loktar!", 1=nothing, 2="Loktar!")                    
 RegexMatch("@Shmiddty", 1="Shmiddty", 2=nothing)                                 
 RegexMatch("Happy Birthday @towc!", 1=nothing, 2="towc!")                        
 RegexMatch("@IvoWetzel", 1="IvoWetzel", 2=nothing)                               
 RegexMatch("Happy birthday @HatterisMad!", 1=nothing, 2="HatterisMad!")          
 RegexMatch("@NathanJones", 1="NathanJones", 2=nothing)                           
 RegexMatch("happy birthday @ircmaxell!", 1=nothing, 2="ircmaxell!")              

That gets most of them, let's see which ones it didn't get

In [127]:
for row in eachrow(birthdays)
    if match(r"@(\S+)|happy birthday @?(\S+)"i, row[:body]) === nothing
        println(row)
    end
end
DataFrameRow (row 10)
message_id  41618699
date        2018-03-14
stars       23
user        ShrekOverflow
body        Today is PI Day, Albert Einstein's birthday and Stephen Hawking left us today. RIP Hawking.

DataFrameRow (row 46)
message_id  33394844
date        2016-10-10
stars       17
user        monners
body        Happy Birthday... me.  (ಥ﹏ಥ)

DataFrameRow (row 51)
message_id  23533890
date        2015-05-27
stars       16
user        Some Guy
body        Happy birthday, GNi33!

Well that's a bit disheartening. First one's fine, we'll need to fix the regex for the 3rd one and correct some anomalies (e.g. bae-dger and "me").

In [128]:
birthdays[46, :body] = "Happy Birthday... @monners.  (ಥ﹏ಥ)"
Out[128]:
"Happy Birthday... @monners.  (ಥ﹏ಥ)"
In [131]:
birthdays[9, :body] = "HAPPY BIRTHDAY @BadgerCat... GET IT!?"
Out[131]:
"HAPPY BIRTHDAY @BadgerCat... GET IT!?"
search: end endof endswith ENDIAN_BOM send render append! corkendall QuoteNode

search: end endof endswith ENDIAN_BOM send render append! corkendall QuoteNode

In [129]:
for row in eachrow(birthdays)
    if match(r"@(\S+)|happy birthday[\s\.,]+@?(\S+)"i, row[:body]) === nothing
        println(row)
    end
end
DataFrameRow (row 10)
message_id  41618699
date        2018-03-14
stars       23
user        ShrekOverflow
body        Today is PI Day, Albert Einstein's birthday and Stephen Hawking left us today. RIP Hawking.

We're likely to discover more when we actually plot. We'll deal with them as they come. Let's create our data frame.

In [160]:
wishesCount = countmap(sort(map(function (body)
            m = match(r"@(\w+)|happy birthday[\s\.,]+@?(\w+)"i, body)
            if m === nothing
                return ""
            end

            if m.captures[1] === nothing
                lowercase(m.captures[2])
            else
                lowercase(m.captures[1])
            end
                end, birthdays[:, :body]).data))
Out[160]:
Dict{String,Int64} with 47 entries:
  "badgercat"         => 3
  "madarauchiha"      => 3
  "ssube"             => 1
  "phenomnomnominal"  => 3
  "luggage"           => 1
  "nderscore"         => 1
  "benfortune"        => 3
  "jhoopins"          => 1
  "cereal"            => 1
  "nathanjones"       => 1
  "jandy"             => 3
  "hatterismad"       => 1
  "capricasix"        => 1
  "monners"           => 3
  "ivowetzel"         => 1
  "someguy"           => 3
  "thiefmaster"       => 5
  "m59"               => 1
  "kendallfrey"       => 2
  "dugger"            => 2
  "jordan"            => 1
  "cerbrus"           => 2
  "benjamingruenbaum" => 4
  "copy"              => 3
  "dystroy"           => 1
  ⋮                   => ⋮
In [166]:
wishesdf = DataFrame(User=map((x) -> x, keys(wishesCount)), Wishes=map((x) -> x, values(wishesCount)))
Out[166]:
UserWishes
1badgercat3
2madarauchiha3
3ssube1
4phenomnomnominal3
5luggage1
6nderscore1
7benfortune3
8jhoopins1
9cereal1
10nathanjones1
11jandy3
12hatterismad1
13capricasix1
14monners3
15ivowetzel1
16someguy3
17thiefmaster5
18m591
19kendallfrey2
20dugger2
21jordan1
22cerbrus2
23benjamingruenbaum4
24copy3
25dystroy1
26esailija1
27gni333
28abhishrek1
29simonsarris2
30shmiddty2
In [177]:
plot(sort(wishesdf, cols=[order(:User)]), x="User", y="Wishes", color="User",
    Geom.bar, Guide.xlabel(nothing), Guide.ylabel("Wishes received"),
    Guide.colorkey(title=nothing, labels=[""], pos=[-100mm, -100mm]))
Out[177]:
abhishrek badgercat badgergirl bartekbanachewicz benfortune benjamingruenbaum capricasix cerbrus cereal copy dugger dystroy esailija florianmargaine gni33 hatterismad hilli_micha ircmaxell ivowetzel jandy jhawins jhoopins jordan karelg kendallfrey loktar luggage m59 madarauchiha monners mosho nathanjones nderscore phenomnomnominal rlemon ryankinal secondrikudo shmiddty simonsarris someguy ssube sterlingarcher tere thiefmaster towc zirak User -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0 -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 7.2 7.4 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0 9.2 9.4 9.6 9.8 10.0 -5 0 5 10 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 Wishes received

If only gadfly had support for pie charts, but alas, we'll have to make do.

Now that we have that out of the way, let's do something a bit more interesting and sum up the amount of stars the birthday-recipients received.

Because I totally thought this through, we'll have to re-use our user-matching function from before.

In [184]:
birthdayStars = map(function (row)
            m = match(r"@(\w+)|happy birthday[\s\.,]+@?(\w+)"i, row[:body])
            if m === nothing
                return ["", 0]
            end

            [if m.captures[1] === nothing
                lowercase(m.captures[2])
            else
                lowercase(m.captures[1])
            end, row[:stars]]
        end, eachrow(birthdays))
Out[184]:
100-element Array{Array{Any,1},1}:
 Any["benjamingruenbaum", 36]
 Any["zirak", 30]            
 Any["rlemon", 28]           
 Any["zirak", 27]            
 Any["florianmargaine", 26]  
 Any["madarauchiha", 26]     
 Any["rlemon", 25]           
 Any["loktar", 24]           
 Any["badgercat", 23]        
 Any["", 0]                  
 Any["madarauchiha", 22]     
 Any["badgercat", 22]        
 Any["loktar", 22]           
 ⋮                           
 Any["ssube", 12]            
 Any["mosho", 12]            
 Any["nderscore", 12]        
 Any["monners", 12]          
 Any["someguy", 11]          
 Any["loktar", 11]           
 Any["shmiddty", 11]         
 Any["towc", 11]             
 Any["ivowetzel", 11]        
 Any["hatterismad", 11]      
 Any["nathanjones", 11]      
 Any["ircmaxell", 11]        
In [203]:
starsCount = foldl(function reducer(accum, item)
    accum[item[1]] = get(accum, item[1], 0) + item[2]
    accum
end, Dict(), birthdayStars)
Out[203]:
Dict{Any,Any} with 47 entries:
  "badgercat"         => 64
  "madarauchiha"      => 63
  "ssube"             => 12
  "phenomnomnominal"  => 44
  "luggage"           => 19
  "nderscore"         => 12
  "benfortune"        => 44
  "jhoopins"          => 13
  "cereal"            => 19
  "nathanjones"       => 11
  "jandy"             => 49
  "hatterismad"       => 11
  "capricasix"        => 17
  "monners"           => 43
  "ivowetzel"         => 11
  "someguy"           => 42
  "thiefmaster"       => 69
  "m59"               => 13
  "dugger"            => 32
  "kendallfrey"       => 36
  "jordan"            => 22
  "cerbrus"           => 30
  "benjamingruenbaum" => 89
  "dystroy"           => 21
  "copy"              => 45
  ⋮                   => ⋮
In [204]:
starsdf = DataFrame(User=map((x) -> x, keys(starsCount)), Wishes=map((x) -> x, values(starsCount)))
Out[204]:
UserWishes
1badgercat64
2madarauchiha63
3ssube12
4phenomnomnominal44
5luggage19
6nderscore12
7benfortune44
8jhoopins13
9cereal19
10nathanjones11
11jandy49
12hatterismad11
13capricasix17
14monners43
15ivowetzel11
16someguy42
17thiefmaster69
18m5913
19dugger32
20kendallfrey36
21jordan22
22cerbrus30
23benjamingruenbaum89
24dystroy21
25copy45
26esailija12
27gni3342
28abhishrek19
29simonsarris27
30shmiddty23
In [205]:
plot(sort(starsdf, cols=[order(:User)]), x="User", y="Wishes", color="User",
    Geom.bar, Guide.xlabel(nothing), Guide.ylabel("Wishes received"),
    Guide.colorkey(title=nothing, labels=[""], pos=[-100mm, -100mm]))
Out[205]:
abhishrek badgercat badgergirl bartekbanachewicz benfortune benjamingruenbaum capricasix cerbrus cereal copy dugger dystroy esailija florianmargaine gni33 hatterismad hilli_micha ircmaxell ivowetzel jandy jhawins jhoopins jordan karelg kendallfrey loktar luggage m59 madarauchiha monners mosho nathanjones nderscore phenomnomnominal rlemon ryankinal secondrikudo shmiddty simonsarris someguy ssube sterlingarcher tere thiefmaster towc zirak User -150 -100 -50 0 50 100 150 200 250 -100 -95 -90 -85 -80 -75 -70 -65 -60 -55 -50 -45 -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 -100 0 100 200 -100 -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 Wishes received

Now ordered by star count:

In [208]:
plot(sort(starsdf, cols=[order(:Wishes)], rev=true), x="User", y="Wishes", color="User",
    Geom.bar, Guide.xlabel(nothing), Guide.ylabel("Wishes received"),
    Guide.colorkey(title=nothing, labels=[""], pos=[-100mm, -100mm]))
Out[208]:
loktar rlemon benjamingruenbaum florianmargaine zirak thiefmaster badgercat madarauchiha towc mosho jandy copy ryankinal phenomnomnominal benfortune monners someguy gni33 karelg kendallfrey jhawins sterlingarcher dugger cerbrus simonsarris tere shmiddty jordan dystroy luggage cereal abhishrek bartekbanachewicz capricasix badgergirl secondrikudo jhoopins m59 hilli_micha ssube nderscore esailija nathanjones hatterismad ivowetzel ircmaxell User -150 -100 -50 0 50 100 150 200 250 -100 -95 -90 -85 -80 -75 -70 -65 -60 -55 -50 -45 -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 -100 0 100 200 -100 -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 Wishes received

But that's not fair, as some users may have been wished a happy birthday less often! Let's do a half-assed job of accounting for that:

In [216]:
totalStars = sum(birthdays[:stars])
Out[216]:
1678
In [217]:
weightedStarsCount = map(pair -> Pair(pair[1], pair[2] / totalStars), starsCount)
Out[217]:
Dict{String,Float64} with 47 entries:
  "badgercat"         => 0.0381406
  "madarauchiha"      => 0.0375447
  "ssube"             => 0.00715137
  "phenomnomnominal"  => 0.0262217
  "luggage"           => 0.011323
  "nderscore"         => 0.00715137
  "benfortune"        => 0.0262217
  "jhoopins"          => 0.00774732
  "cereal"            => 0.011323
  "nathanjones"       => 0.00655542
  "jandy"             => 0.0292014
  "hatterismad"       => 0.00655542
  "capricasix"        => 0.0101311
  "monners"           => 0.0256257
  "ivowetzel"         => 0.00655542
  "someguy"           => 0.0250298
  "thiefmaster"       => 0.0411204
  "m59"               => 0.00774732
  "dugger"            => 0.0190703
  "kendallfrey"       => 0.0214541
  "jordan"            => 0.0131108
  "cerbrus"           => 0.0178784
  "benjamingruenbaum" => 0.0530393
  "dystroy"           => 0.0125149
  "copy"              => 0.0268176
  ⋮                   => ⋮

Now we have the percentage of how each user's stars accounted for the total stars.

This did not explain anything but I have the flu and what I'm doing is graphs so flip off.

In [220]:
weighteddf = starsdf = DataFrame(User=map((x) -> x, keys(weightedStarsCount)), Weight=map((x) -> x, values(weightedStarsCount)));
In [222]:
plot(sort(starsdf, cols=[order(:Weight)], rev=true), x="User", y="Weight", color="User",
    Geom.bar, Guide.xlabel(nothing), Guide.ylabel("Stars weight"),
    Guide.colorkey(title=nothing, labels=[""], pos=[-100mm, -100mm]))
Out[222]:
loktar rlemon benjamingruenbaum florianmargaine zirak thiefmaster badgercat madarauchiha towc mosho jandy copy ryankinal phenomnomnominal benfortune monners someguy gni33 karelg kendallfrey jhawins sterlingarcher dugger cerbrus simonsarris tere shmiddty jordan dystroy luggage cereal abhishrek bartekbanachewicz capricasix badgergirl secondrikudo jhoopins m59 hilli_micha ssube nderscore esailija nathanjones hatterismad ivowetzel ircmaxell User -0.07 -0.06 -0.05 -0.04 -0.03 -0.02 -0.01 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 -0.062 -0.060 -0.058 -0.056 -0.054 -0.052 -0.050 -0.048 -0.046 -0.044 -0.042 -0.040 -0.038 -0.036 -0.034 -0.032 -0.030 -0.028 -0.026 -0.024 -0.022 -0.020 -0.018 -0.016 -0.014 -0.012 -0.010 -0.008 -0.006 -0.004 -0.002 0.000 0.002 0.004 0.006 0.008 0.010 0.012 0.014 0.016 0.018 0.020 0.022 0.024 0.026 0.028 0.030 0.032 0.034 0.036 0.038 0.040 0.042 0.044 0.046 0.048 0.050 0.052 0.054 0.056 0.058 0.060 0.062 0.064 0.066 0.068 0.070 0.072 0.074 0.076 0.078 0.080 0.082 0.084 0.086 0.088 0.090 0.092 0.094 0.096 0.098 0.100 0.102 0.104 0.106 0.108 0.110 0.112 0.114 0.116 0.118 0.120 0.122 -0.1 0.0 0.1 0.2 -0.065 -0.060 -0.055 -0.050 -0.045 -0.040 -0.035 -0.030 -0.025 -0.020 -0.015 -0.010 -0.005 0.000 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060 0.065 0.070 0.075 0.080 0.085 0.090 0.095 0.100 0.105 0.110 0.115 0.120 0.125 Stars weight

In conclusion, it's obvious to see that loktar is the most loved room member. 2.9 loktar.