Created
June 4, 2024 05:35
-
-
Save jbodah/3c16d49807243526434389555023b646 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[1] pry(#<Context>)> u = User.new(user_id: "disobedientlib") | |
=> #<BggTools::User:0x0000000106557fb0 @user_id="disobedientlib"> | |
[2] pry(#<Context>)> u.owned.map(&:rating).select { |r| r.to_i > 0 }.flat_map { |r| r.item.mechanics.map { |m| [m, r.to_i]}}.group_by {|k,v|k}.select { |k,v| v.size > 4 }.map {|k,v| [k, v.map(&:last).mean.round(2), v.size]}.sort_by {|k,v,p| -v}.first(15) | |
=> [["Deck Construction", 8.67, 6], | |
["Simulation", 8.42, 12], | |
["Turn Order: Progressive", 8.36, 11], | |
["Card Play Conflict Resolution", 8.36, 14], | |
["Hexagon Grid", 8.33, 15], | |
["Campaign / Battle Card Driven", 8.3, 10], | |
["Tags", 8.29, 7], | |
["Player Elimination", 8.29, 7], | |
["Movement Points", 8.29, 7], | |
["Action Points", 8.27, 15], | |
["Scenario / Mission / Campaign Game", 8.24, 21], | |
["Closed Drafting", 8.22, 9], | |
["Multi-Use Cards", 8.2, 10], | |
["Increase Value of Unchosen Resources", 8.2, 5], | |
["Critical Hits and Failures", 8.2, 5]] | |
[3] pry(#<Context>)> u.owned.map(&:rating).select { |r| r.to_i > 0 }.flat_map { |r| r.item.mechanics.map { |m| [m, r.to_i]}}.group_by {|k,v|k}.select { |k,v| v.size > 4 }.map {|k,v| [k, v.map(&:last).mean.round(2), v.size]}.sort_by {|k,v,p| -v}.last(15) | |
=> [["Grid Coverage", 7.83, 6], | |
["Follow", 7.8, 5], | |
["Sudden Death Ending", 7.8, 5], | |
["Network and Route Building", 7.8, 5], | |
["Bingo", 7.78, 9], | |
["Layering", 7.67, 6], | |
["Narrative Choice / Paragraph", 7.67, 6], | |
["Set Collection", 7.67, 48], | |
["Re-rolling and Locking", 7.64, 11], | |
["Area Movement", 7.64, 11], | |
["Worker Placement with Dice Workers", 7.63, 8], | |
["Square Grid", 7.63, 8], | |
["Secret Unit Deployment", 7.6, 5], | |
["Auction/Bidding", 7.56, 9], | |
["Ladder Climbing", 7.2, 5]] | |
[4] pry(#<Context>)> u.owned.map(&:rating).select { |r| r.to_i > 0 }.flat_map { |r| r.item.categories.map { |m| [m, r.to_i]}}.group_by {|k,v|k}.select { |k,v| v.size > 4 }.map {|k,v| [k, v.map(&:last).mean.round(2), v.size]}.sort_by {|k,v,p| -v}.first(15) | |
=> [["World War II", 8.42, 12], | |
["Political", 8.4, 5], | |
["Movies / TV / Radio theme", 8.29, 7], | |
["Space Exploration", 8.25, 8], | |
["Industry / Manufacturing", 8.2, 5], | |
["Fighting", 8.17, 29], | |
["Wargame", 8.15, 20], | |
["Mythology", 8.14, 7], | |
["Adventure", 8.11, 35], | |
["Horror", 8.09, 11], | |
["Territory Building", 8.08, 13], | |
["Ancient", 8.07, 14], | |
["Miniatures", 8.06, 16], | |
["Science Fiction", 8.03, 31], | |
["Economic", 8.0, 19]] | |
[5] pry(#<Context>)> u.owned.map(&:rating).select { |r| r.to_i > 0 }.flat_map { |r| r.item.categories.map { |m| [m, r.to_i]}}.group_by {|k,v|k}.select { |k,v| v.size > 4 }.map {|k,v| [k, v.map(&:last).mean.round(2), v.size]}.sort_by {|k,v,p| -v}.last(15) | |
=> [["Civilization", 7.9, 10], | |
["Dice", 7.89, 37], | |
["Puzzle", 7.88, 8], | |
["Fantasy", 7.88, 59], | |
["Nautical", 7.87, 15], | |
["Novel-based", 7.86, 7], | |
["Animals", 7.84, 19], | |
["Deduction", 7.8, 5], | |
["Card Game", 7.74, 102], | |
["Zombies", 7.67, 6], | |
["Print & Play", 7.65, 17], | |
["Humor", 7.4, 5], | |
["Abstract Strategy", 7.17, 6], | |
["Party Game", 7.0, 6], | |
["Video Game Theme", 7.0, 5]] | |
[6] pry(#<Context>)> u.owned.map(&:rating).select { |r| r.to_i > 0 }.map(&:to_i).mean.round(2) | |
=> 7.84 | |
[7] pry(#<Context>)> u.owned.select(&:played?).map { |n| n.plays.size }.mean | |
=> 2.4301075268817205 | |
[8] pry(#<Context>)> u.rated.flat_map { |g| g.item.description.split.map { |word| [word.downcase.gsub(/[^\w\d]/, ''), g.rating.to_i] }.uniq }.group_by { |word, rating| word }.transform_values {|vs| [vs.map(&:last).mean.round(2), vs.size]}.select { |k, (a,b)| b > 5 }.sort_by { |k, (a,b)| -a }.first(20) | |
=> [["bosses", [8.29, 7]], | |
["playable", [8.17, 6]], | |
["harbor", [8.17, 6]], | |
["narrative", [8.14, 7]], | |
["hostile", [8.13, 8]], | |
["changing", [8.13, 8]], | |
["period", [8.1, 10]], | |
["swords", [8.09, 11]], | |
["behind", [8.0, 11]], | |
["depths", [8.0, 7]], | |
["interesting", [8.0, 7]], | |
["occurs", [8.0, 7]], | |
["eg", [8.0, 8]], | |
["targets", [8.0, 7]], | |
["rome", [8.0, 8]], | |
["alliance", [8.0, 6]], | |
["snow", [8.0, 6]], | |
["navigate", [8.0, 7]], | |
["shared", [8.0, 8]], | |
["normandy", [8.0, 6]]] | |
[9] pry(#<Context>)> u.owned.select(&:rated?).flat_map { |g| g.item.description.split.map { |word| [word.downcase.gsub(/[^\w\d]/, ''), g.rating.to_i] }.uniq }.group_by { |word, rating| word }.transform_values {|vs| [vs.map(&:last).mean.round(2), vs.size]}.select { |k, (a,b)| b > 2 }.sort_by { |k, (a,b)| -a }.first(20) | |
=> [["famous", [8.75, 4]], | |
["tackle", [8.75, 4]], | |
["monstrous", [8.67, 3]], | |
["manipulate", [8.67, 3]], | |
["unfolds", [8.67, 3]], | |
["becoming", [8.67, 3]], | |
["courage", [8.67, 3]], | |
["purchasing", [8.67, 3]], | |
["valor", [8.67, 3]], | |
["invites", [8.67, 3]], | |
["driven", [8.67, 3]], | |
["almost", [8.67, 3]], | |
["division", [8.67, 3]], | |
["desert", [8.67, 3]], | |
["streets", [8.67, 3]], | |
["broken", [8.67, 3]], | |
["currently", [8.67, 3]], | |
["surprises", [8.67, 3]], | |
["ai", [8.67, 3]], | |
["adapt", [8.67, 3]]] | |
[10] pry(#<Context>)> u.owned.select(&:rated?).map { |g| [g.rating.to_i, g.plays.size] }.group_by {|a,b| a}.map { |k,v| [k, v.map(&:last)] }.map {|k,v| [k, v.mean.round(2)]}.sort_by {|a,b| a} | |
=> [[5.0, 1.0], [6.0, 0.25], [7.0, 1.03], [8.0, 1.81], [9.0, 3.58]] | |
[11] pry(#<Context>)> u.owned.select(&:rated?).select(&:played?).map { |g| [g.rating.to_i, g.plays.size] }.group_by {|a,b| a}.map { |k,v| [k, v.map(&:last)] }.map {|k,v| [k, v.mean.round(2)]}.sort_by {|a,b| a} | |
=> [[5.0, 1.0], [6.0, 1.0], [7.0, 1.69], [8.0, 2.38], [9.0, 4.21]] | |
[12] pry(#<Context>)> u.rated.map { |g| [g.rating.to_i, g.plays.size] }.group_by {|a,b| a}.map { |k,v| [k, v.map(&:last)] }.map {|k,v| [k, v.mean.round(2)]}.sort_by {|a,b| a} | |
=> [[2.0, 0.0], [3.0, 0.25], [4.0, 0.14], [5.0, 0.03], [6.0, 0.11], [7.0, 0.69], [8.0, 1.59], [9.0, 3.5]] | |
[13] pry(#<Context>)> u.rated.select(&:played?).map { |g| [g.rating.to_i, g.plays.size] }.group_by {|a,b| a}.map { |k,v| [k, v.map(&:last)] }.map {|k,v| [k, v.mean.round(2)]}.sort_by {|a,b| a} | |
=> [[3.0, 1.0], [4.0, 1.0], [5.0, 1.0], [6.0, 1.0], [7.0, 1.67], [8.0, 2.32], [9.0, 4.1]] | |
[14] pry(#<Context>)> u.owned.sort_by { |g| g.item.rank }.map { |g| [g.rating.to_i, g.item.rank, g.item.name] }.group_by_and_repack { |a,b,c| [a, [b,c]] }.transform_values(&:last).sort_by(&:first).reverse | |
=> [[9.0, [11010, "Genshin Tarot: The Fan Made Genshin Impact Board Game"]], | |
[8.0, [13393, "Dungeon Date"]], | |
[7.0, [11460, "The Lucky Seven"]], | |
[6.0, [15768, "Bermuda Triangle"]], | |
[5.0, [16233, "Counter Warfare: The Surprisingly Strategic Party Royale"]], | |
[0.0, [20410, "APBA Soccer"]]] | |
[15] pry(#<Context>)> u.owned.sort_by { |g| -g.item.avg_rating }.map { |g| [g.rating.to_i, g.item.avg_rating, g.item.name] }.group_by_and_repack { |a,b,c| [a, [b,c]] }.transform_values(&:last).sort_by(&:first).reverse | |
=> [[9.0, [6.83594, "Incan Gold"]], | |
[8.0, [6.17382, "Unbroken"]], | |
[7.0, [5.63639, "Mastermind"]], | |
[6.0, [5.63135, "Bermuda Triangle"]], | |
[5.0, [7.20732, "Counter Warfare: The Surprisingly Strategic Party Royale"]], | |
[0.0, [5.14286, "Pestilence"]]] | |
[16] pry(#<Context>)> u.owned.sort_by { |g| -g.item.num_ratings }.map { |g| [g.rating.to_i, g.item.num_ratings, g.item.name] }.group_by_and_repack { |a,b,c| [a, [b,c]] }.transform_values(&:last).sort_by(&:first).reverse | |
=> [[9.0, [57, "Genshin Tarot: The Fan Made Genshin Impact Board Game"]], | |
[8.0, [3, "Tetralchemia"]], | |
[7.0, [7, "Scribbly Gum: Print at Home Edition"]], | |
[6.0, [755, "Beacon Patrol"]], | |
[5.0, [41, "Counter Warfare: The Surprisingly Strategic Party Royale"]], | |
[0.0, [1, "Outbreak on Hypatia"]]] | |
[17] pry(#<Context>)> u.owned.sort_by { |g| g.item.num_want - g.item.num_for_trade }.map { |g| [g.rating.to_i, g.item.num_want - g.item.num_for_trade, g.item.name] }.group_by_and_repack { |a,b,c| [a, [b,c]] }.transform_values(&:last).sort_by(&:first).reverse | |
=> [[9.0, [1166, "Terraforming Mars"]], | |
[8.0, [1357, "Heat: Pedal to the Metal"]], | |
[7.0, [534, "Clank! Legacy: Acquisitions Incorporated"]], | |
[6.0, [50, "Beacon Patrol"]], | |
[5.0, [-3, "Counter Warfare: The Surprisingly Strategic Party Royale"]], | |
[0.0, [709, "Ark Nova"]]] | |
[18] pry(#<Context>)> u.owned.sort_by { |g| - (g.item.num_want - g.item.num_for_trade) }.map { |g| [g.rating.to_i, - (g.item.num_want - g.item.num_for_trade), g.item.name] }.group_by_and_repack { |a,b,c| [a, [b,c]] }.transform_values(&:last).sort_by(&:first).reverse | |
=> [[9.0, [456, "Gloomhaven: Jaws of the Lion"]], | |
[8.0, [854, "A Game of Thrones: The Board Game (Second Edition)"]], | |
[7.0, [1434, "Dominion"]], | |
[6.0, [1430, "The Resistance"]], | |
[5.0, [3, "Counter Warfare: The Surprisingly Strategic Party Royale"]], | |
[0.0, [435, "Cry Havoc"]]] | |
[19] pry(#<Context>)> u.owned.flat_map { |g| g.item.families.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 1}.sort_by {|_, (m, c)| -m}.select { |k, _| k =~ /Country: / } | |
=> [["Country: Norway", [8.5, 2]], | |
["Country: Soviet Union", [8.5, 2]], | |
["Country: Italy", [8.33, 3]], | |
["Country: China", [8.0, 2]], | |
["Country: France", [5.44, 9]], | |
["Country: Great Britain", [5.33, 3]], | |
["Country: Greece", [5.33, 3]], | |
["Country: United Kingdom", [4.5, 2]], | |
["Country: Belgium", [4.5, 2]], | |
["Country: USA", [4.0, 6]], | |
["Country: Japan", [3.45, 11]], | |
["Country: Germany", [3.3, 10]], | |
["Country: Spain", [2.67, 3]], | |
["Country: England", [0.0, 2]]] | |
[20] pry(#<Context>)> u.rated.flat_map { |g| g.item.families.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 1}.sort_by {|_, (m, c)| -m}.select { |k, _| k =~ /Animals: / } | |
=> [["Animals: Owls", [8.0, 2]], | |
["Animals: Birds", [8.0, 3]], | |
["Animals: Eagles", [8.0, 2]], | |
["Animals: Squirrels", [8.0, 2]], | |
["Animals: Raccoons", [8.0, 2]], | |
["Animals: Rabbits", [8.0, 2]], | |
["Animals: Hedgehogs / Porcupines", [8.0, 2]], | |
["Animals: Foxes", [7.8, 5]], | |
["Animals: Cattle / Cows", [7.5, 2]], | |
["Animals: Fish / Fishes", [7.38, 8]], | |
["Animals: Mice", [7.33, 3]], | |
["Animals: Sheep", [7.0, 2]], | |
["Animals: Sharks", [7.0, 2]], | |
["Animals: Crabs", [7.0, 2]], | |
["Animals: Dogs", [7.0, 2]], | |
["Animals: Cats", [6.8, 5]], | |
["Animals: Insects", [6.5, 2]]] | |
[21] pry(#<Context>)> u.rated.flat_map { |g| g.item.families.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 2}.sort_by {|_, (m, c)| -m}.select { |k, _| k =~ /Country: / } | |
=> [["Country: Egypt", [8.0, 3]], | |
["Country: Soviet Union", [8.0, 3]], | |
["Country: Germany", [7.56, 9]], | |
["Country: Greece", [7.5, 4]], | |
["Country: Italy", [7.5, 6]], | |
["Country: France", [7.46, 13]], | |
["Country: USA", [7.18, 11]], | |
["Country: Japan", [7.1, 10]], | |
["Country: Portugal", [7.0, 3]], | |
["Country: China", [7.0, 4]], | |
["Country: England", [6.67, 3]]] | |
[22] pry(#<Context>)> u.rated.flat_map { |g| g.item.families.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 2}.sort_by {|_, (m, c)| -m}.select { |k, _| k =~ /Creatures: / } | |
=> [["Creatures: Goblins", [8.0, 5]], | |
["Creatures: Aliens / Extraterrestrials", [7.86, 7]], | |
["Creatures: Dragons", [7.45, 11]], | |
["Creatures: Monsters", [7.25, 20]], | |
["Creatures: Zombies", [7.0, 8]], | |
["Creatures: Fairies / Elves / Pixies", [6.33, 3]], | |
["Creatures: Werewolves", [5.67, 3]]] | |
[23] pry(#<Context>)> u.rated.flat_map { |g| g.item.families.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 4}.sort_by {|_, (m, c)| -m}.select { |k, _| k =~ /Series: / } | |
=> [["Series: Bookshelf (Gryphon Games)", [7.8, 5]]] | |
[24] pry(#<Context>)> u.rated.flat_map { |g| g.item.families.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 3}.sort_by {|_, (m, c)| -m}.select { |k, _| k =~ /Theme: / } | |
=> [["Theme: Under the Sea", [7.8, 5]], | |
["Theme: Vikings", [7.75, 4]], | |
["Theme: City", [7.75, 4]], | |
["Theme: Post-Apocalyptic", [7.65, 20]], | |
["Theme: Anthropomorphic Animals", [7.64, 11]], | |
["Theme: Construction", [7.5, 6]], | |
["Theme: Superheroes", [7.43, 7]], | |
["Theme: Nature", [7.4, 15]], | |
["Theme: Boss Battle", [7.33, 9]], | |
["Theme: Trees and Forests", [7.25, 4]], | |
["Theme: Gardening", [7.25, 4]], | |
["Theme: Art", [7.2, 5]], | |
["Theme: Colonial", [7.17, 6]], | |
["Theme: Pirates", [7.17, 6]], | |
["Theme: Anime / Manga", [7.14, 7]], | |
["Theme: Food / Cooking", [7.0, 8]], | |
["Theme: Chibis", [7.0, 4]], | |
["Theme: Witches", [7.0, 4]], | |
["Theme: Villainy", [6.86, 7]], | |
["Theme: Science", [6.83, 6]], | |
["Theme: Books / Libraries", [6.83, 6]], | |
["Theme: Retro", [6.5, 8]]] | |
[25] pry(#<Context>)> u.owned.flat_map { |g| g.item.families.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 1}.sort_by {|_, (m, c)| -c}.select { |k, _| k =~ /Theme: / } | |
=> [["Theme: Post-Apocalyptic", [6.06, 17]], | |
["Theme: Anthropomorphic Animals", [5.25, 12]], | |
["Theme: Nature", [4.91, 11]], | |
["Theme: Boss Battle", [5.67, 9]], | |
["Theme: Books / Libraries", [4.14, 7]], | |
["Theme: Food / Cooking", [6.33, 6]], | |
["Theme: Pirates", [4.8, 5]], | |
["Theme: Superheroes", [5.0, 5]], | |
["Theme: Anime / Manga", [5.0, 5]], | |
["Theme: Trees and Forests", [3.0, 5]], | |
["Theme: Retro", [1.75, 4]], | |
["Theme: Construction", [6.0, 4]], | |
["Theme: Survival", [4.0, 4]], | |
["Theme: Gardening", [5.5, 4]], | |
["Theme: Under the Sea", [6.0, 4]], | |
["Theme: Siege", [4.25, 4]], | |
["Theme: Flowers", [2.33, 3]], | |
["Theme: Tropical", [7.67, 3]], | |
["Theme: Villainy", [8.0, 3]], | |
["Theme: Tropical Islands", [5.33, 3]], | |
["Theme: Fishing / Angling", [5.33, 3]], | |
["Theme: Science", [5.67, 3]], | |
["Theme: Witches", [7.33, 3]], | |
["Theme: Love / Romance", [2.67, 3]], | |
["Theme: Colonial", [7.67, 3]], | |
["Theme: City", [8.0, 3]], | |
["Theme: Time Travel", [4.0, 2]], | |
["Theme: Zoos, Aquaria, Safari Parks", [0.0, 2]], | |
["Theme: Alchemy", [3.5, 2]], | |
["Theme: Art", [7.5, 2]], | |
["Theme: Submarines", [4.5, 2]], | |
["Theme: Vikings", [8.0, 2]], | |
["Video Game Theme: Bloodborne", [3.5, 2]], | |
["Theme: Circus", [4.0, 2]], | |
["Theme: Cacti and Succulents", [3.5, 2]], | |
["Theme: Archaeology / Paleontology", [8.5, 2]], | |
["Theme: Chibis", [8.0, 2]], | |
["Theme: Camping", [7.5, 2]]] | |
[26] pry(#<Context>)> u.rated.map { |g| [g.item.yearpublished, g.rating.to_i] }.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 4}.sort_by {|_, (m, c)| -m} | |
=> [[2022, [7.97, 39]], | |
[2020, [7.71, 31]], | |
[2021, [7.65, 37]], | |
[2023, [7.59, 34]], | |
[2019, [7.3, 47]], | |
[2016, [7.06, 32]], | |
[2018, [7.04, 47]], | |
[2017, [7.02, 51]], | |
[2013, [6.88, 16]], | |
[2011, [6.8, 10]], | |
[2012, [6.77, 13]], | |
[2014, [6.35, 17]], | |
[2015, [6.25, 20]], | |
[2004, [6.2, 5]], | |
[2008, [5.0, 5]]] | |
[27] pry(#<Context>)> u.owned.map { |g| [g.item.yearpublished, g.rating.to_i] }.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 3}.sort_by {|_, (m, c)| -m} | |
=> [[2017, [6.5, 24]], | |
[2018, [6.16, 25]], | |
[2016, [5.87, 15]], | |
[2020, [5.33, 33]], | |
[2015, [5.13, 8]], | |
[2019, [5.05, 41]], | |
[2011, [5.0, 5]], | |
[2014, [4.44, 9]], | |
[2022, [4.24, 70]], | |
[2023, [4.1, 62]], | |
[2021, [4.06, 51]], | |
[2012, [4.0, 4]], | |
[2024, [3.56, 9]], | |
[2013, [3.33, 12]]] | |
[28] pry(#<Context>)> u.owned.map { |g| [g.item.yearpublished, g.rating.to_i] }.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 2}.sort_by {|_, (m, c)| -c} | |
=> [[2022, [4.24, 70]], | |
[2023, [4.1, 62]], | |
[2021, [4.06, 51]], | |
[2019, [5.05, 41]], | |
[2020, [5.33, 33]], | |
[2018, [6.16, 25]], | |
[2017, [6.5, 24]], | |
[2016, [5.87, 15]], | |
[2013, [3.33, 12]], | |
[2014, [4.44, 9]], | |
[2024, [3.56, 9]], | |
[2015, [5.13, 8]], | |
[2011, [5.0, 5]], | |
[2012, [4.0, 4]], | |
[1981, [0.0, 3]]] | |
[29] pry(#<Context>)> u.rated.select { |g| g.rating.to_i > 5 }.map { |g| [g.item.yearpublished, g.rating.to_i] }.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 3}.sort_by {|_, (m, c)| -c} | |
=> [[2019, [7.4, 45]], | |
[2017, [7.31, 45]], | |
[2018, [7.23, 43]], | |
[2022, [7.97, 39]], | |
[2021, [7.65, 37]], | |
[2023, [7.78, 32]], | |
[2020, [7.71, 31]], | |
[2016, [7.31, 29]], | |
[2015, [7.0, 14]], | |
[2013, [7.31, 13]], | |
[2012, [6.77, 13]], | |
[2014, [7.18, 11]], | |
[2011, [7.0, 9]], | |
[2004, [6.75, 4]], | |
[2024, [8.0, 4]]] | |
[30] pry(#<Context>)> u.rated.select { |g| g.rating.to_i > 6 }.map { |g| [g.item.yearpublished, g.rating.to_i] }.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 3}.sort_by {|_, (m, c)| -c} | |
=> [[2019, [7.54, 41]], | |
[2022, [7.97, 39]], | |
[2017, [7.59, 37]], | |
[2021, [7.74, 35]], | |
[2018, [7.56, 34]], | |
[2023, [7.84, 31]], | |
[2020, [7.77, 30]], | |
[2016, [7.58, 24]], | |
[2013, [7.55, 11]], | |
[2012, [7.25, 8]], | |
[2015, [7.75, 8]], | |
[2014, [7.86, 7]], | |
[2011, [7.8, 5]], | |
[2024, [8.0, 4]]] | |
[31] pry(#<Context>)> u.rated.select { |g| g.rating.to_i > 7 }.map { |g| [g.item.yearpublished, g.rating.to_i] }.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 3}.sort_by {|_, (m, c)| -c} | |
=> [[2022, [8.19, 32]], [2021, [8.18, 22]], [2023, [8.18, 22]], [2019, [8.05, 21]], [2017, [8.1, 20]], [2020, [8.28, 18]], [2018, [8.12, 17]], [2016, [8.4, 10]], [2013, [8.0, 6]], [2014, [8.2, 5]], [2015, [8.2, 5]]] | |
[32] pry(#<Context>)> u.rated.select { |g| g.rating.to_i > 8 }.map { |g| [g.item.yearpublished, g.rating.to_i] }.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 3}.sort_by {|_, (m, c)| -c} | |
=> [[2022, [9.0, 6]], [2020, [9.0, 5]], [2023, [9.0, 4]], [2021, [9.0, 4]], [2016, [9.0, 4]]] | |
[33] pry(#<Context>)> u.rated.select { |g| g.rating.to_i > 8 }.map { |g| [g.item.yearpublished, g.rating.to_i] }.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 2}.sort_by {|_, (m, c)| -c} | |
=> [[2022, [9.0, 6]], [2020, [9.0, 5]], [2023, [9.0, 4]], [2021, [9.0, 4]], [2016, [9.0, 4]]] | |
[34] pry(#<Context>)> u.rated.flat_map { |g| g.item.designers.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 5}.sort_by {|_, (m, c)| -m}.first(10) | |
=> [["David Thompson (I)", [8.38, 8]], | |
["Trevor Benjamin", [8.17, 6]], | |
["Jamey Stegmaier", [7.5, 6]], | |
["Bruno Cathala", [7.29, 7]], | |
["Ben Pinchback", [7.17, 6]], | |
["Matt Riddle", [7.17, 6]], | |
["(Uncredited)", [7.09, 11]], | |
["Eric M. Lang", [7.0, 7]], | |
["Antoine Bauza", [6.71, 7]]] | |
[35] pry(#<Context>)> u.rated.flat_map { |g| g.item.designers.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 5}.sort_by {|_, (m, c)| -c}.first(10) | |
=> [["(Uncredited)", [7.09, 11]], | |
["David Thompson (I)", [8.38, 8]], | |
["Eric M. Lang", [7.0, 7]], | |
["Antoine Bauza", [6.71, 7]], | |
["Bruno Cathala", [7.29, 7]], | |
["Ben Pinchback", [7.17, 6]], | |
["Matt Riddle", [7.17, 6]], | |
["Jamey Stegmaier", [7.5, 6]], | |
["Trevor Benjamin", [8.17, 6]]] | |
[36] pry(#<Context>)> u.owned.flat_map { |g| g.item.designers.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 2}.sort_by {|_, (m, c)| -m}.first(10) | |
=> [["Paul Dennen", [8.5, 4]], | |
["Jacob Fryxelius", [8.33, 3]], | |
["Stefan Feld", [8.33, 3]], | |
["Isaac Childres", [8.33, 3]], | |
["Geoff Engelstein", [8.25, 4]], | |
["Jamey Stegmaier", [8.0, 4]], | |
["Shem Phillips", [8.0, 3]], | |
["Jason Glover", [7.75, 4]], | |
["Steven Aramini", [7.25, 4]], | |
["Phil Walker-Harding", [7.25, 4]]] | |
[37] pry(#<Context>)> u.rated.flat_map { |g| g.item.publishers.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 5}.sort_by {|_, (m, c)| -m}.first(10) | |
=> [["Fox in the Box", [8.14, 7]], | |
["Giant Roc", [8.13, 8]], | |
["Don't Panic Games", [8.0, 6]], | |
["Dan Verssen Games (DVG)", [8.0, 7]], | |
["MeepleBR", [7.85, 13]], | |
["株式会社ケンビル (KenBill)", [7.83, 6]], | |
["Surfin' Meeple China", [7.82, 11]], | |
["YOKA Games", [7.78, 9]], | |
["Feuerland Spiele", [7.75, 12]], | |
["Lucrum Games", [7.75, 8]]] | |
[38] pry(#<Context>)> u.rated.flat_map { |g| g.item.publishers.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 5}.sort_by {|_, (m, c)| -m}.last(10) | |
=> [["Lifestyle Boardgames Ltd", [6.39, 23]], | |
["(Web published)", [6.36, 11]], | |
["Smart Ltd", [6.29, 7]], | |
["Bureau de Juegos", [6.22, 9]], | |
["uplay.it edizioni", [6.09, 11]], | |
["Enigma (Bergsala Enigma)", [6.0, 13]], | |
["Nordic Games GmbH", [5.83, 6]], | |
["Wargames Club Publishing", [5.71, 7]], | |
["Boardgame Space", [5.63, 8]], | |
["Buró", [5.5, 6]]] | |
[39] pry(#<Context>)> u.owned.flat_map { |g| g.item.publishers.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 5}.sort_by {|_, (m, c)| -m}.first(10) | |
=> [["Surfin' Meeple China", [8.33, 6]], | |
["Stronghold Games", [7.86, 7]], | |
["Lex Games", [7.71, 7]], | |
["Arclight Games", [7.58, 26]], | |
["CrowD Games", [7.36, 11]], | |
["Lord of Boards", [7.36, 11]], | |
["MIPL", [7.33, 15]], | |
["Renegade Game Studios", [7.31, 16]], | |
["Schwerkraft-Verlag", [7.14, 21]], | |
["Swan Panasia Co., Ltd.", [7.07, 14]]] | |
[40] pry(#<Context>)> u.owned.flat_map { |g| g.item.publishers.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 5}.sort_by {|_, (m, c)| -m}.last(10) | |
=> [["Parker Brothers", [3.83, 6]], | |
["AMIGO", [3.5, 8]], | |
["Pandasaurus Games", [3.5, 6]], | |
["(Web published)", [3.45, 11]], | |
["Zvezda", [3.43, 7]], | |
["Board Game Rookie", [3.43, 7]], | |
["Eagle-Gryphon Games", [3.1, 10]], | |
["GMT Games", [3.0, 6]], | |
["Fractal Juegos", [3.0, 7]], | |
["New Mill Industries", [1.33, 6]]] | |
[41] pry(#<Context>)> u.owned.flat_map { |g| g.item.artists.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 2}.sort_by {|_, (m, c)| -c}.first(10) | |
=> [["Beth Sobel", [5.57, 7]], | |
["Mihajlo Dimitrievski", [6.5, 6]], | |
["Dennis Lohausen", [6.33, 6]], | |
["Franz Vohwinkel", [3.67, 6]], | |
["Henning Ludvigsen", [4.8, 5]], | |
["別府さい (Sai Beppu)", [3.4, 5]], | |
["Lina Cossette", [8.0, 5]], | |
["Chris Quilliams", [5.5, 4]], | |
["Kwanchai Moriya", [3.75, 4]], | |
["Oliver Freudenreich", [3.5, 4]]] | |
[42] pry(#<Context>)> u.owned.flat_map { |g| g.item.artists.map { |f| [f, g.rating.to_i] }}.group_by_and_repack { |f, r| [f, r] }.transform_values { |rs| [rs.mean.round(2), rs.count] }.select { |_, (m, c)| c > 2}.sort_by {|_, (m, c)| -m}.first(10) | |
=> [["Nate Storm", [8.5, 4]], | |
["Anthony Cournoyer", [8.33, 3]], | |
["Raul Ramos", [8.33, 3]], | |
["Clay Brooks", [8.33, 3]], | |
["Damien Mammoliti", [8.25, 4]], | |
["Jason D. Kingsley", [8.0, 3]], | |
["Sam Phillips", [8.0, 3]], | |
["Claus Stephan", [8.0, 3]], | |
["Lina Cossette", [8.0, 5]], | |
["David Forest", [8.0, 3]]] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment