Пример #1
0
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=(',', ': ')))
Пример #2
0
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'
Пример #3
0
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+'))
Пример #4
0
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')
Пример #5
0
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]
Пример #6
0
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
Пример #7
0
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+'))