import pandas as pd
import numpy as np
import pprint as pp
import os
# don't try this at home
import warnings
warnings.filterwarnings("ignore")
# ! say "Welcome to the presentation!"
# ! curl -O https://s3.amazonaws.com/demo-datasets/beer_reviews.tar.gz
home = os.environ['HOME']
# or wherever you've saved it locally
filename = os.path.join(home, "Dropbox/yhathq/datasets/beer_reviews/beer_reviews.csv")
df = pd.read_csv(filename)
There's nothing quite like an arbitrarily defining selection size in the morning.
n = 250
top_n = df.beer_name.value_counts().index[:n]
df = df[df.beer_name.isin(top_n)]
df.head()
brewery_id | brewery_name | review_time | review_overall | review_aroma | review_appearance | review_profilename | beer_style | review_palate | review_taste | beer_name | beer_abv | beer_beerid | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
798 | 1075 | Caldera Brewing Company | 1212201268 | 4.5 | 4.5 | 4 | grumpy | American Double / Imperial Stout | 4.0 | 4.5 | Imperial Stout | NaN | 42964 |
1559 | 11715 | Destiny Brewing Company | 1137124057 | 4.0 | 3.5 | 4 | blitheringidiot | American Pale Ale (APA) | 3.5 | 3.5 | Pale Ale | 4.5 | 26420 |
1560 | 11715 | Destiny Brewing Company | 1129504403 | 4.0 | 2.5 | 4 | NeroFiddled | American Pale Ale (APA) | 4.0 | 3.5 | Pale Ale | 4.5 | 26420 |
1563 | 11715 | Destiny Brewing Company | 1137125989 | 3.5 | 3.0 | 4 | blitheringidiot | American IPA | 4.0 | 4.0 | IPA | NaN | 26132 |
1564 | 11715 | Destiny Brewing Company | 1130936611 | 3.0 | 3.0 | 3 | Gavage | American IPA | 4.0 | 3.5 | IPA | NaN | 26132 |
df_wide = pd.pivot_table(df, values=["review_overall"],
rows=["beer_name", "review_profilename"],
aggfunc=np.mean).unstack()
df_wide.shape
(250, 22140)
# any cells that are missing data (i.e. a user didn't buy a particular product) we're going to set to 0
df_wide = df_wide.fillna(0)
df_wide.ix[0:5, 0:5]
review_overall | |||||
---|---|---|---|---|---|
review_profilename | 0110x011 | 02maxima | 03SVTCobra | 05Harley | 0Naught0 |
beer_name | |||||
#9 | 0 | 0 | 0 | 0 | 0 |
120 Minute IPA | 0 | 0 | 0 | 4 | 0 |
1554 Enlightened Black Ale | 0 | 0 | 0 | 0 | 0 |
60 Minute IPA | 0 | 0 | 0 | 0 | 0 |
90 Minute IPA | 5 | 0 | 0 | 4 | 0 |
df_wide.columns[:10]
MultiIndex [(u'review_overall', u'0110x011'), (u'review_overall', u'02maxima'), (u'review_overall', u'03SVTCobra'), (u'review_overall', u'05Harley'), (u'review_overall', u'0Naught0'), (u'review_overall', u'0beerguy0'), (u'review_overall', u'0runkp0s'), (u'review_overall', u'0tt0'), (u'review_overall', u'1000Bottles'), (u'review_overall', u'1001111.0')]
pd.Series(df_wide.index[:10])
0 #9 1 120 Minute IPA 2 1554 Enlightened Black Ale 3 60 Minute IPA 4 90 Minute IPA 5 Aecht Schlenkerla Rauchbier Märzen 6 AleSmith IPA 7 AleSmith Speedway Stout 8 Allagash White 9 Alpha King Pale Ale dtype: object
This is the key. we're going to use cosine_similarity from scikit-learn to compute the distance between all beers
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.metrics.pairwise import manhattan_distances
from sklearn.metrics.pairwise import euclidean_distances
#from sklearn.metrics.pairwise import
dists = cosine_similarity(df_wide)
dists
array([[ 1. , 0.27540494, 0.27410345, ..., 0.32928048, 0.34805798, 0.31249922], [ 0.27540494, 1. , 0.25151873, ..., 0.2854835 , 0.23301356, 0.2802485 ], [ 0.27410345, 0.25151873, 1. , ..., 0.31629515, 0.22521858, 0.2737628 ], ..., [ 0.32928048, 0.2854835 , 0.31629515, ..., 1. , 0.28025764, 0.34504013], [ 0.34805798, 0.23301356, 0.22521858, ..., 0.28025764, 1. , 0.25526913], [ 0.31249922, 0.2802485 , 0.2737628 , ..., 0.34504013, 0.25526913, 1. ]])
dists = pd.DataFrame(dists, columns=df_wide.index)
# give the indicies (equivalent to rownames in R) the name of the product id
dists.index = dists.columns
dists.ix[0:10, 0:10]
beer_name | #9 | 120 Minute IPA | 1554 Enlightened Black Ale | 60 Minute IPA | 90 Minute IPA | Aecht Schlenkerla Rauchbier Märzen | AleSmith IPA | AleSmith Speedway Stout | Allagash White | Alpha King Pale Ale |
---|---|---|---|---|---|---|---|---|---|---|
beer_name | ||||||||||
#9 | 1.000000 | 0.275405 | 0.274103 | 0.388364 | 0.365175 | 0.253841 | 0.228479 | 0.227612 | 0.340681 | 0.293315 |
120 Minute IPA | 0.275405 | 1.000000 | 0.251519 | 0.378258 | 0.410366 | 0.262425 | 0.315971 | 0.337541 | 0.282273 | 0.336796 |
1554 Enlightened Black Ale | 0.274103 | 0.251519 | 1.000000 | 0.319887 | 0.314028 | 0.252486 | 0.266866 | 0.261761 | 0.260275 | 0.307296 |
60 Minute IPA | 0.388364 | 0.378258 | 0.319887 | 1.000000 | 0.533042 | 0.316928 | 0.312343 | 0.307627 | 0.360975 | 0.385249 |
90 Minute IPA | 0.365175 | 0.410366 | 0.314028 | 0.533042 | 1.000000 | 0.312861 | 0.344218 | 0.358754 | 0.356804 | 0.418582 |
Aecht Schlenkerla Rauchbier Märzen | 0.253841 | 0.262425 | 0.252486 | 0.316928 | 0.312861 | 1.000000 | 0.244490 | 0.246063 | 0.297672 | 0.263248 |
AleSmith IPA | 0.228479 | 0.315971 | 0.266866 | 0.312343 | 0.344218 | 0.244490 | 1.000000 | 0.521889 | 0.277409 | 0.400741 |
AleSmith Speedway Stout | 0.227612 | 0.337541 | 0.261761 | 0.307627 | 0.358754 | 0.246063 | 0.521889 | 1.000000 | 0.273930 | 0.420247 |
Allagash White | 0.340681 | 0.282273 | 0.260275 | 0.360975 | 0.356804 | 0.297672 | 0.277409 | 0.273930 | 1.000000 | 0.295666 |
Alpha King Pale Ale | 0.293315 | 0.336796 | 0.307296 | 0.385249 | 0.418582 | 0.263248 | 0.400741 | 0.420247 | 0.295666 | 1.000000 |
beers_i_like = ['Sierra Nevada Pale Ale', '120 Minute IPA', 'Allagash White']
dists[beers_i_like].head()
beer_name | Sierra Nevada Pale Ale | 120 Minute IPA | Allagash White |
---|---|---|---|
beer_name | |||
#9 | 0.373968 | 0.275405 | 0.340681 |
120 Minute IPA | 0.301693 | 1.000000 | 0.282273 |
1554 Enlightened Black Ale | 0.330033 | 0.251519 | 0.260275 |
60 Minute IPA | 0.459641 | 0.378258 | 0.360975 |
90 Minute IPA | 0.441189 | 0.410366 | 0.356804 |
Yes, there are many ways to do this
# axis = 1 b/c we want 1 score per beer, which are rows
beers_summed = dists[beers_i_like].apply(lambda row: np.sum(row), axis=1)
#beers_summed = beers_summed.reset_index()
#beers_summed.columns = ['beer_name', 'total_distance']
#beers_summed.sort(['beer_name'], ascending=False).head(10)
#beers_summed.sort(['total_distance'], ascending=False).head(10)
beers_summed.order(ascending=False)
beer_name Sierra Nevada Pale Ale 1.654205 Allagash White 1.634784 120 Minute IPA 1.583966 HopDevil Ale 1.224217 Sierra Nevada Celebration Ale 1.215156 90 Minute IPA 1.208359 60 Minute IPA 1.198874 Stone Ruination IPA 1.194210 Stone IPA (India Pale Ale) 1.193193 Storm King Stout 1.192405 Arrogant Bastard Ale 1.189981 Sierra Nevada Bigfoot Barleywine Style Ale 1.178245 Prima Pils 1.178093 Brooklyn Black Chocolate Stout 1.156365 Ayinger Celebrator Doppelbock 1.148356 ... Budweiser 0.758390 Furious 0.757417 New Holland Dragons Milk Oak Barrel Ale 0.756746 Raging Bitch Belgian-Style IPA 0.752031 Terrapin Coffee Oatmeal Imperial Stout 0.750240 Hobgoblin 0.748117 Shiner Bock 0.739454 The Abyss 0.723008 Miller Lite 0.716208 Leinenkugels Sunset Wheat 0.710691 Bud Light 0.710377 Corona Extra 0.682882 Miller High Life 0.682360 Coors Light 0.670167 Vanilla Porter 0.664363 Length: 250, dtype: float64
ranked_beers = beers_summed.index[beers_summed.index.isin(beers_i_like)==False]
ranked_beers = ranked_beers.tolist()
ranked_beers[:5]
['#9', '1554 Enlightened Black Ale', '60 Minute IPA', '90 Minute IPA', 'Aecht Schlenkerla Rauchbier M\xc3\xa4rzen']
def get_similar(beers, n=None):
"""
calculates which beers are most similar to the beers provided. Does not return
the beers that were provided
Parameters
----------
beers: list
some beers!
Returns
-------
ranked_beers: list
rank ordered beers
"""
beers = [beer for beer in beers if beer in dists.columns]
beers_summed = dists[beers].apply(lambda row: np.sum(row), axis=1)
beers_summed = beers_summed.order(ascending=False)
ranked_beers = beers_summed.index[beers_summed.index.isin(beers)==False]
ranked_beers = ranked_beers.tolist()
if n is None:
return ranked_beers
else:
return ranked_beers[:n]
for beer in get_similar(["120 Minute IPA"], 10):
print beer
World Wide Stout 90 Minute IPA Double Bastard Ale Stone Ruination IPA Stone Imperial Russian Stout Storm King Stout 60 Minute IPA Oaked Arrogant Bastard Ale Sierra Nevada Bigfoot Barleywine Style Ale Brooklyn Black Chocolate Stout
for i, beer in enumerate(get_similar(["Coors Light", "Bud Light", "Amstel Light"], 10)):
print "%d) %s" % (i+1, beer)
1) Miller Lite 2) Budweiser 3) Corona Extra 4) Samuel Adams Boston Lager 5) Heineken Lager Beer 6) Blue Moon Belgian White 7) Guinness Draught 8) Miller High Life 9) Samuel Adams Summer Ale 10) Sierra Nevada Pale Ale
from yhat import Yhat, YhatModel, preprocess
class BeerRec(YhatModel):
@preprocess(in_type=dict, out_type=dict)
def execute(self, data):
beers = data.get("beers")
n = data.get("n")
suggested_beers = get_similar(beers, n)
result = []
for beer in suggested_beers:
result.append({"beer": beer})
return result
BeerRec().execute({"beers": ["Coors Light", "Bud Light", "Amstel Light"]})
[{'beer': 'Miller Lite'}, {'beer': 'Budweiser'}, {'beer': 'Corona Extra'}, {'beer': 'Samuel Adams Boston Lager'}, {'beer': 'Heineken Lager Beer'}, {'beer': 'Blue Moon Belgian White'}, {'beer': 'Guinness Draught'}, {'beer': 'Miller High Life'}, {'beer': 'Samuel Adams Summer Ale'}, {'beer': 'Sierra Nevada Pale Ale'}, {'beer': 'Stella Artois'}, {'beer': 'Samuel Adams Winter Lager'}, {'beer': 'Pabst Blue Ribbon (PBR)'}, {'beer': 'Red Stripe Jamaican Lager'}, {'beer': 'Samuel Adams Octoberfest'}, {'beer': 'Newcastle Brown Ale'}, {'beer': 'Bass Pale Ale'}, {'beer': 'Samuel Adams Black Lager'}, {'beer': 'Samuel Adams Cherry Wheat'}, {'beer': 'Yuengling Traditional Lager'}, {'beer': 'Samuel Adams Boston Ale (Stock Ale)'}, {'beer': 'Anchor Steam Beer'}, {'beer': 'Arrogant Bastard Ale'}, {'beer': 'Dead Guy Ale'}, {'beer': 'Guinness Extra Stout (Original)'}, {'beer': 'Youngs Double Chocolate Stout'}, {'beer': 'Fat Tire Amber Ale'}, {'beer': 'Stone IPA (India Pale Ale)'}, {'beer': 'Samuel Adams White Ale'}, {'beer': 'Samuel Adams Old Fezziwig Ale'}, {'beer': 'Samuel Adams Cream Stout'}, {'beer': '60 Minute IPA'}, {'beer': 'Pilsner Urquell'}, {'beer': 'Sierra Nevada Celebration Ale'}, {'beer': 'HopDevil Ale'}, {'beer': 'Sierra Nevada Summerfest Lager'}, {'beer': '#9'}, {'beer': 'Samuel Smiths Oatmeal Stout'}, {'beer': 'Prima Pils'}, {'beer': 'Franziskaner Hefe-Weisse'}, {'beer': '90 Minute IPA'}, {'beer': 'Samuel Adams Holiday Porter'}, {'beer': 'La Fin Du Monde'}, {'beer': 'Hoegaarden Original White Ale'}, {'beer': 'Duvel'}, {'beer': 'Samuel Smiths Nut Brown Ale'}, {'beer': 'Sierra Nevada Porter'}, {'beer': 'Stone Ruination IPA'}, {'beer': 'Spaten Optimator'}, {'beer': 'Long Hammer IPA'}, {'beer': 'Anchor Liberty Ale'}, {'beer': 'Weihenstephaner Hefeweissbier'}, {'beer': 'Old Rasputin Russian Imperial Stout'}, {'beer': 'Doggie Style Classic Pale Ale'}, {'beer': 'Shiner Bock'}, {'beer': 'Ayinger Celebrator Doppelbock'}, {'beer': 'Storm King Stout'}, {'beer': 'Chocolate Stout'}, {'beer': 'Schneider Aventinus'}, {'beer': 'Samuel Adams Cranberry Lambic'}, {'beer': 'Pale Ale'}, {'beer': 'Samuel Smiths Imperial Stout'}, {'beer': 'Murphys Irish Stout'}, {'beer': 'Sierra Nevada Bigfoot Barleywine Style Ale'}, {'beer': 'Spaten Oktoberfestbier Ur-M\xc3\xa4rzen'}, {'beer': 'St. Bernardus Abt 12'}, {'beer': 'Sierra Nevada Stout'}, {'beer': 'Samuel Adams Noble Pils'}, {'beer': 'Chimay Premi\xc3\xa8re (Red)'}, {'beer': 'Boddingtons Pub Ale'}, {'beer': 'Samuel Smiths, The Famous Taddy Porter'}, {'beer': 'Samuel Adams Double Bock (Imperial Series)'}, {'beer': 'Stone Smoked Porter'}, {'beer': 'Salvator Doppel Bock'}, {'beer': 'Trois Pistoles'}, {'beer': 'Hennepin (Farmhouse Saison)'}, {'beer': 'Raison Detre'}, {'beer': 'India Pale Ale'}, {'beer': 'Maudite'}, {'beer': 'Golden Monkey'}, {'beer': 'Chimay Grande R\xc3\xa9serve (Blue)'}, {'beer': 'Two Hearted Ale'}, {'beer': 'Indian Brown Ale'}, {'beer': 'Snake Dog IPA'}, {'beer': 'Oaked Arrogant Bastard Ale'}, {'beer': 'Chimay Tripel (White)'}, {'beer': 'Paulaner Oktoberfest-M\xc3\xa4rzen'}, {'beer': 'Shakespeare Oatmeal Stout'}, {'beer': 'Mocha Porter'}, {'beer': 'Leinenkugels Sunset Wheat'}, {'beer': 'Paulaner Hefe-Weissbier Naturtr\xc3\xbcb'}, {'beer': 'Fullers ESB'}, {'beer': 'Fullers London Porter'}, {'beer': 'Harpoon IPA'}, {'beer': 'Brooklyn Black Chocolate Stout'}, {'beer': 'Hop Rod Rye'}, {'beer': 'Brooklyn Lager'}, {'beer': 'Hop Wallop'}, {'beer': 'Oatmeal Stout'}, {'beer': 'Racer 5 India Pale Ale'}, {'beer': 'Anchor Porter'}, {'beer': 'Stone Imperial Russian Stout'}, {'beer': 'Stone Pale Ale'}, {'beer': 'Samuel Adams Chocolate Bock'}, {'beer': 'Punkin Ale'}, {'beer': 'Bells Oberon Ale'}, {'beer': 'Ommegang (Abbey Ale)'}, {'beer': 'Three Philosophers Belgian Style Blend (Quadrupel)'}, {'beer': 'Dales Pale Ale'}, {'beer': 'Double Bastard Ale'}, {'beer': 'Sierra Nevada Torpedo Extra IPA'}, {'beer': 'Nut Brown Ale'}, {'beer': '1554 Enlightened Black Ale'}, {'beer': 'India Pale Ale (IPA)'}, {'beer': 'Lindemans Framboise'}, {'beer': 'Gonzo Imperial Porter'}, {'beer': 'Santas Private Reserve Ale'}, {'beer': '\xc3\x89ph\xc3\xa9m\xc3\xa8re (Apple)'}, {'beer': 'Yeti Imperial Stout'}, {'beer': 'Samuel Smiths Winter Welcome Ale'}, {'beer': 'ApriHop'}, {'beer': 'Sierra Nevada Anniversary Ale (2007-2009)'}, {'beer': 'Midas Touch Golden Elixir'}, {'beer': 'Blanche De Chambly'}, {'beer': 'Great Lakes Edmund Fitzgerald Porter'}, {'beer': 'Left Hand Milk Stout'}, {'beer': 'Trappistes Rochefort 10'}, {'beer': 'Orval Trappist Ale'}, {'beer': 'Titan IPA'}, {'beer': 'Leffe Blonde'}, {'beer': 'Old Chub - Scottish Style Ale'}, {'beer': 'Bells Kalamazoo Stout'}, {'beer': 'Stone Levitation Ale'}, {'beer': 'Hazelnut Brown Nectar'}, {'beer': 'Oktoberfest'}, {'beer': 'Red Rocket Ale'}, {'beer': 'Northern Hemisphere Harvest Wet Hop Ale'}, {'beer': 'Delirium Tremens'}, {'beer': 'Don de Dieu'}, {'beer': 'Stone Sublimely Self-Righteous Ale'}, {'beer': 'IPA'}, {'beer': 'Fullers London Pride'}, {'beer': 'Trappistes Rochefort 8'}, {'beer': 'Chicory Stout'}, {'beer': 'Lagunitas IPA'}, {'beer': 'Allagash White'}, {'beer': 'Brutal Bitter Ale'}, {'beer': 'Rare Vos (Amber Ale)'}, {'beer': 'Hercules Double IPA'}, {'beer': 'St. Bernardus Tripel'}, {'beer': 'Great Lakes Dortmunder Gold'}, {'beer': 'Imperial Stout'}, {'beer': 'Saison Dupont'}, {'beer': 'Sierra Nevada Kellerweis Hefeweizen'}, {'beer': 'Hobgoblin'}, {'beer': 'Aecht Schlenkerla Rauchbier M\xc3\xa4rzen'}, {'beer': 'Gulden Draak (Dark Triple)'}, {'beer': 'Westmalle Trappist Tripel'}, {'beer': 'Founders Centennial IPA'}, {'beer': 'Ruedrichs Red Seal Ale'}, {'beer': 'Great Lakes Burning River Pale Ale'}, {'beer': 'Christmas Ale'}, {'beer': 'Tr\xc3\xb6egs Hopback Amber Ale'}, {'beer': 'Ten FIDY'}, {'beer': 'Porter'}, {'beer': 'Festina P\xc3\xaache'}, {'beer': 'Oak Aged Yeti Imperial Stout'}, {'beer': 'Founders Dirty Bastard'}, {'beer': 'Pranqster'}, {'beer': 'Hop Ottin IPA'}, {'beer': 'Weihenstephaner Korbinian'}, {'beer': 'Double Dog Double Pale Ale'}, {'beer': 'GKnight Imperial Red Ale'}, {'beer': 'Sierra Nevada Southern Hemisphere Harvest Fresh Hop Ale'}, {'beer': 'Anchor Old Foghorn'}, {'beer': 'Smuttynose IPA "Finest Kind"'}, {'beer': 'Alpha King Pale Ale'}, {'beer': 'Palo Santo Marron'}, {'beer': 'Bells Special Double Cream Stout'}, {'beer': 'Bells Expedition Stout'}, {'beer': 'Founders Reds Rye PA'}, {'beer': 'Maximus'}, {'beer': 'Brown Shugga'}, {'beer': 'Black Butte Porter'}, {'beer': 'Big Bear Black Stout'}, {'beer': 'Schneider Aventinus Weizen-Eisbock'}, {'beer': 'Founders Breakfast Stout'}, {'beer': 'Old Horizontal'}, {'beer': 'Old Stock Ale'}, {'beer': 'Tr\xc3\xb6egs Nugget Nectar'}, {'beer': 'Maharaja'}, {'beer': '120 Minute IPA'}, {'beer': 'Vanilla Porter'}, {'beer': 'P\xc3\xa9ch\xc3\xa9 Mortel (Imperial Stout Au Cafe)'}, {'beer': 'Samichlaus Bier'}, {'beer': 'Double Simcoe IPA'}, {'beer': 'Houblon Chouffe Dobbelen IPA Tripel'}, {'beer': 'Piraat Ale'}, {'beer': 'Old Ruffian Barley Wine'}, {'beer': 'Heavy Seas - Loose Cannon (Hop3 Ale)'}, {'beer': 'Bells Java Stout'}, {'beer': 'Brooklyn Monster Ale'}, {'beer': 'Troegenator Double Bock'}, {'beer': 'Duchesse De Bourgogne'}, {'beer': 'Green Flash West Coast I.P.A.'}, {'beer': 'Hop Stoopid'}, {'beer': 'World Wide Stout'}, {'beer': 'Hibernation Ale'}, {'beer': 'Smuttynose Robust Porter'}, {'beer': 'Choklat'}, {'beer': 'Burton Baton'}, {'beer': 'Bourbon County Brand Stout'}, {'beer': 'Great Lakes Blackout Stout'}, {'beer': 'Bells Hopslam Ale'}, {'beer': 'Tripel Karmeliet'}, {'beer': 'Westmalle Trappist Dubbel'}, {'beer': 'Unearthly (Imperial India Pale Ale)'}, {'beer': 'Matilda'}, {'beer': 'Gumballhead'}, {'beer': 'Cappuccino Stout'}, {'beer': 'AleSmith IPA'}, {'beer': 'Dreadnaught IPA'}, {'beer': 'Harvest Ale'}, {'beer': 'Tr\xc3\xb6egs Mad Elf'}, {'beer': 'Raging Bitch Belgian-Style IPA'}, {'beer': 'Creme Brulee (Imperial Milk Stout)'}, {'beer': 'AleSmith Speedway Stout'}, {'beer': 'Pliny The Elder'}, {'beer': 'Trappist Westvleteren 12'}, {'beer': 'Immort Ale'}, {'beer': 'Blind Pig IPA'}, {'beer': 'Founders KBS (Kentucky Breakfast Stout)'}, {'beer': 'Damnation'}, {'beer': 'Pumking'}, {'beer': 'Dark Lord Imperial Stout'}, {'beer': 'Hopsickle Imperial India Pale Ale'}, {'beer': 'Founders Devil Dancer'}, {'beer': 'Founders Imperial Stout'}, {'beer': 'Founders Double Trouble'}, {'beer': 'Sculpin India Pale Ale'}, {'beer': 'Imperial IPA'}, {'beer': 'Furious'}, {'beer': 'Founders Porter'}, {'beer': 'Terrapin Coffee Oatmeal Imperial Stout'}, {'beer': 'New Holland Dragons Milk Oak Barrel Ale'}, {'beer': 'Founders Backwoods Bastard'}, {'beer': 'The Abyss'}, {'beer': 'Supplication'}]
payload = {"beers": ["Sierra Nevada Pale Ale", "Bud Light", "Amstel Light"], "n": 5}
BeerRec().execute(payload)
[{'beer': 'Samuel Adams Boston Lager'}, {'beer': 'Sierra Nevada Celebration Ale'}, {'beer': 'Samuel Adams Winter Lager'}, {'beer': 'Budweiser'}, {'beer': 'Samuel Adams Summer Ale'}]
# BeerRec().run()
yh = Yhat("hmardukas", "0D86697D12FC4E5F802DFD4D51829FFE", "http://cloud.yhathq.com/")
# this will ask you if you want to deploy so just make sure you accept!
yh.deploy("BeerRec", BeerRec, globals())
Are you sure you want to deploy? (y/N): y
{u'lang': u'python', u'message': u'Your model had been uploaded and is currently being built. You can check the status by loggining into your Yhat account and viewing: /model/BeerRec/', u'model_endpoint': u'/greg/models/BeerRec/', u'modelname': u'BeerRec', u'status': u'success', u'timestamp': 1393539414776, u'version': 2}
payload = {"beers": ["Coors Light", "Bud Light", "Amstel Light"]}
yh.predict("BeerRec", payload)
{u'result': [{u'beer': u'Miller Lite'}, {u'beer': u'Budweiser'}, {u'beer': u'Corona Extra'}, {u'beer': u'Samuel Adams Boston Lager'}, {u'beer': u'Heineken Lager Beer'}, {u'beer': u'Blue Moon Belgian White'}, {u'beer': u'Guinness Draught'}, {u'beer': u'Miller High Life'}, {u'beer': u'Samuel Adams Summer Ale'}, {u'beer': u'Sierra Nevada Pale Ale'}], u'yhat_id': u'b2305ad3-5f94-437c-b52c-19de30b46828', u'yhat_model': u'BeerRec'}
payload = {"beers": ["Sierra Nevada Pale Ale", "Bud Light"]}
yh.predict("BeerRec", payload)
{u'result': [{u'beer': u'Samuel Adams Boston Lager'}, {u'beer': u'Sierra Nevada Celebration Ale'}, {u'beer': u'Samuel Adams Winter Lager'}, {u'beer': u'Budweiser'}, {u'beer': u'Samuel Adams Summer Ale'}, {u'beer': u'Stone IPA (India Pale Ale)'}, {u'beer': u'Arrogant Bastard Ale'}, {u'beer': u'Samuel Adams Octoberfest'}, {u'beer': u'Guinness Draught'}, {u'beer': u'60 Minute IPA'}], u'yhat_id': u'6993643f-ec62-4797-b1eb-b3e06547cec2', u'yhat_model': u'BeerRec'}
$ git clone git@github.com:yhat/flask-beer.git $ cd flask-beer $ pip install -r requirements.txt $ # replace "USERNAME" and "APIKEY" in app.py $ python app.py