def ranges(): """calculates all possible combinations of parameters and writes to json file """ conn = server.connect() cur = conn.cursor() query = ''' SELECT array_agg(DISTINCT stream.channelid), array_agg(DISTINCT language.sk_language), array_agg(DISTINCT stream.scheduled), array_agg(DISTINCT stream.featured), array_agg(DISTINCT stream.mature), array_agg(DISTINCT stream.partner), array_agg(DISTINCT stream.sponsored), array_agg(DISTINCT game_name.giantbombid), array_agg(DISTINCT genres), array_agg(DISTINCT ratings), array_agg(DISTINCT platforms), MAX(stream.followers), MAX(stream.videos), MAX(stream.teams), 1, MAX(stream.viewers) FROM stream LEFT JOIN game_name ON game_name.name = stream.game LEFT JOIN ( SELECT genrebomb.genreid AS genres, giantbombid FROM genrebomb ) A ON A.giantbombid = game_name.giantbombid LEFT JOIN ( SELECT ratingbomb.ratingid AS ratings, giantbombid FROM ratingbomb ) B ON B.giantbombid = game_name.giantbombid LEFT JOIN ( SELECT platformgroup.groupid AS platforms, giantbombid FROM platformbomb INNER JOIN platformgroup ON platformgroup.platformid = platformbomb.platformid ) C ON C.giantbombid = game_name.giantbombid LEFT JOIN language ON language.iso6391code = stream.language WHERE stamp >= '2016-04-07' ''' cur.execute(query) fetch = cur.fetchall() conn.close() starscream = dill.load(open('application/models/full.dill', mode='rb+')) data, viewers = starscream.process(fetch) data['followers'] = [range(data['followers'][0] + 1)] data['videos'] = [range(data['videos'][0] + 1)] data['teams'] = [range(data['teams'][0] + 1)] data['times'] = [[datetime.datetime.date()]] data['viewers'] = [[data['viewers'][0]]] with open('application/models/range.json', mode='wb+') as f: f.write(json.dumps(data, indent=4, separators=(',', ': ')))
def predict_model(): """full model prediction: all features versus actual """ conn = server.connect() cur = conn.cursor() query = ''' SELECT stream.channelid, language.sk_language, stream.scheduled, stream.featured, stream.mature, stream.partner, stream.sponsored, game_name.giantbombid, genres, ratings, platforms, stream.followers, stream.videos, stream.teams, stream.stamp, stream.viewers FROM stream LEFT JOIN game_name ON game_name.name = stream.game LEFT JOIN ( SELECT array_agg(genrebomb.genreid) AS genres, giantbombid FROM genrebomb GROUP BY giantbombid ) A ON A.giantbombid = game_name.giantbombid LEFT JOIN ( SELECT array_agg(ratingbomb.ratingid) AS ratings, giantbombid FROM ratingbomb GROUP BY giantbombid ) B ON B.giantbombid = game_name.giantbombid LEFT JOIN ( SELECT array_agg(DISTINCT (platformgroup.groupid)) AS platforms, giantbombid FROM platformbomb INNER JOIN platformgroup ON platformgroup.platformid = platformbomb.platformid GROUP BY giantbombid ) C ON C.giantbombid = game_name.giantbombid LEFT JOIN language ON language.iso6391code = stream.language WHERE stamp >= '2016-04-07' ORDER BY stamp ASC ''' cur.execute(query) fetch = cur.fetchall() conn.close() starscream = dill.load(open('models/full.dill', mode='rb+')) data, viewers = starscream.process(fetch) machine = starscream.predict(data, viewers) print starscream.get_max(data, fetch, 10) print starscream.score(data, viewers) return data['times'], data['viewers'], machine, 'full'
def train_full_model(): """Gets all data and formats them for fitting in the full model """ conn = server.connect() cur = conn.cursor() query = ''' SELECT stream.channelid, language.sk_language, stream.scheduled, stream.featured, stream.mature, stream.partner, stream.sponsored, game_name.giantbombid, genres, ratings, platforms, stream.followers, stream.videos, stream.teams, stream.stamp, stream.viewers FROM stream LEFT JOIN game_name ON game_name.name = stream.game LEFT JOIN ( SELECT array_agg(genrebomb.genreid) AS genres, giantbombid FROM genrebomb GROUP BY giantbombid ) A ON A.giantbombid = game_name.giantbombid LEFT JOIN ( SELECT array_agg(ratingbomb.ratingid) AS ratings, giantbombid FROM ratingbomb GROUP BY giantbombid ) B ON B.giantbombid = game_name.giantbombid LEFT JOIN ( SELECT array_agg(DISTINCT (platformgroup.groupid)) AS platforms, giantbombid FROM platformbomb INNER JOIN platformgroup ON platformgroup.platformid = platformbomb.platformid GROUP BY giantbombid ) C ON C.giantbombid = game_name.giantbombid LEFT JOIN language ON language.iso6391code = stream.language WHERE stamp >= '2016-04-07' ORDER BY stamp ASC ''' cur.execute(query) fetch = cur.fetchall() conn.close() print 'data get' starscream = SVRTransformer() data, viewers = starscream.process(fetch) starscream.fit(data, viewers) dill.dump(starscream, open('application/models/full.dill', mode='wb+'))
def plot_fft(name='Dota 2'): """creates plot for fourier transform :param name: name of the game """ conn = server.connect() cur = conn.cursor() query = '''SELECT stamp, viewers FROM snapshot WHERE stamp >= '2016-04-07' AND name = %(name)s ORDER BY stamp ASC ''' cur.execute(query, dict(name=name)) fetch = cur.fetchall() conn.close() times, viewers = zip(*fetch) time_scale = numpy.array([(time - times[0]).total_seconds() for time in times]) viewers = numpy.array(viewers) y_fft = abs(fftpack.fft(viewers - viewers.mean())) print sorted(zip(y_fft, time_scale), reverse=True) data = [ dict( x=time_scale[:len(time_scale) / 2], y=y_fft[:len(time_scale) / 2] ) ] layout = dict( title='FFT', titlefont=dict( size=48, ), showlegend=False ) fig = dict(data=data, layout=layout ) plotly.plotly.image.save_as(fig, filename='static/img/plots/fft', format='png')
def game_list(num=10): """Polls database for top num of games :param num: number of games to fetch :return: list of game names """ conn = server.connect() cur = conn.cursor() query = ''' SELECT name FROM game_name ORDER BY viewer_total DESC LIMIT %(num)s ''' cur.execute(query, dict(num=num)) gamelist = cur.fetchall() conn.close() return [item[0] for item in gamelist]
def predict_time_model(name): """function to generate predicted time values :param name: name of the game :return times, viewers, machine, name: list of times, viewer count, predicted viewers, name of the game """ conn = server.connect() cur = conn.cursor() query = '''SELECT stamp, viewers FROM snapshot WHERE stamp >= '2016-04-07' AND name = %(name)s ORDER BY stamp ASC ''' cur.execute(query, dict(name=name)) fetch = cur.fetchall() conn.close() data = dict(zip(['times', 'viewers'], zip(*fetch))) starscream = dill.load(open('application/models/' + CLEANNAME.sub('', name) + '.dill', mode='rb+')) machine = starscream.predict(data) return data['times'], data['viewers'], machine, name
def train_time_model(name): """Gets the time data for game and trains a FFT model to it :param name: name of the game """ conn = server.connect() cur = conn.cursor() row = {'name': name} query = '''SELECT stamp, viewers FROM snapshot WHERE stamp >= '2016-04-07' AND name = %(name)s ORDER BY stamp ASC ''' cur.execute(query, row) fetch = cur.fetchall() conn.close() data = dict(zip(['times', 'viewers'], zip(*fetch))) starscream = FFTTransformer() starscream.fit(data, data['viewers']) dill.dump(starscream, open('application/models/' + CLEANNAME.sub('', name) + '.dill', mode='wb+'))