Пример #1
0
 def _insert_country_vectors(self):
     session.query(CountryVector).delete()
     for country_id, country_vector in self.implicit_mf.country_vectors.vectors.iterrows(
     ):
         session.add(
             CountryVector(country_id=int(country_id), **country_vector))
     session.commit()
Пример #2
0
def get_recommended_songs():
    country_ids = request.get_json()['country_ids']
    operator_ids = request.get_json()['operator_ids']
    country_vector_objects = session.query(CountryVector).filter(CountryVector.country_id.in_(country_ids)).all()
    operator_objects = session.query(Operator).filter(Operator.id.in_(operator_ids)).all()
    recommended_songs = [{'artist': artist, 'title': title, 'url': url} for title, artist, url in RecommendedSongGenerator(country_vector_objects, operator_objects)]
    return jsonify({'songs': recommended_songs}), 200
Пример #3
0
def get_countries():
    countries = [{
        'id': country.id,
        'name': country.name,
        'value': country.value
    } for country in session.query(Country)]
    return jsonify({'countries': countries}), 200
Пример #4
0
def get_operators():
    operators = [{
        'id': operator.id,
        'name': operator.name,
        'value': operator.value
    } for operator in session.query(Operator)]
    return jsonify({'operators': operators}), 200
Пример #5
0
    def _build_R_ui(self):
        top_songs_sorted = session.query(TopSong)\
            .order_by(TopSong.date.desc(), TopSong.song_id.desc())\
            .limit(self.n_top_songs)\
            .subquery('top_songs_sorted')

        top_songs = session.query(
            top_songs_sorted.c.country_id,
            top_songs_sorted.c.song_id,
            func.sum(top_songs_sorted.c.streams).label('total_streams'))\
        .group_by(top_songs_sorted.c.country_id, top_songs_sorted.c.song_id)\
        .all()

        ratings_matrix = pd.DataFrame(top_songs).pivot(
            'country_id', 'song_id', 'total_streams').fillna(0).astype(float)
        return np.log(1 + ratings_matrix / self.eps)
Пример #6
0
 def _top_song_exists(top_song):
     return session.query(exists()\
         .where(TopSong.song_id==top_song.song_id)\
         .where(TopSong.country_id==top_song.country_id)\
         .where(TopSong.rank==top_song.rank)\
         .where(TopSong.streams==top_song.streams)\
         .where(TopSong.date==top_song.date)
     ).scalar()
Пример #7
0
    def _build_R_ui(self):
        top_songs = session.query(
            TopSong.country_id,
            TopSong.song_id,
            func.sum(TopSong.streams).label('total_streams')
        ).group_by(TopSong.country_id, TopSong.song_id).all()

        return pd.DataFrame(top_songs).pivot(
            'country_id', 'song_id', 'total_streams').fillna(0).astype(float)
Пример #8
0
    def test_implicit_mf_pipeline_inserts_correct_song_vectors(self):
        implicit_mf = ImplicitMF(ratings_matrix=DummyRatingsMatrix(),
                                 f=TestImplicitMF.LATENT_FEATURES,
                                 alpha=TestImplicitMF.ALPHA,
                                 lmbda=TestImplicitMF.LAMBDA,
                                 n_iterations=TestImplicitMF.N_ITERATIONS)
        pipeline = ImplicitMFPipeline(implicit_mf=implicit_mf)
        pipeline.run()

        song_vector_objects = session.query(SongVector).all()
        actual_song_vectors = self._extract_numeric_vectors(
            vector_objects=song_vector_objects, id_col='song_id')

        assert_frame_equal(actual_song_vectors,
                           TestImplicitMF.EXPECTED_SONG_VECTORS)
Пример #9
0
def get_recommended_songs():
    country_ids = request.get_json()['country_ids']
    operator_ids = request.get_json()['operator_ids']
    operator_objects = session.query(Operator).filter(
        Operator.id.in_(operator_ids)).all()
    country_vectors = filter_country_vectors(
        country_vectors=COUNTRY_VECTOR_COLLECTION.numeric_vectors,
        country_ids=country_ids)

    recommended_songs_generator = RecommendedSongGenerator(
        operator_objects=operator_objects,
        song_vector_objects=SONG_VECTOR_COLLECTION,
        country_vectors=country_vectors,
    )
    recommended_songs = [{
        'artist': artist,
        'title': title,
        'url': url
    } for title, artist, url in recommended_songs_generator]
    return jsonify({'songs': recommended_songs}), 200
Пример #10
0
 def _insert_country_vectors(self):
     session.query(CountryVector).delete()
     for country_id, country_vector in self.implicit_mf.country_vectors.vectors.iterrows():
         session.add(CountryVector(country_id=int(country_id), **country_vector))
     session.commit()
Пример #11
0
 def __iter__(self):
     aggregate_vector = self._compute_aggregate_vector()
     predicted_preferences = pd.DataFrame(self.song_vectors).apply(lambda vec: np.dot(vec, aggregate_vector), axis=1)
     for song_id, vector in predicted_preferences.sort_values(ascending=False).head(self.NUM_SONGS_TO_RECOMMEND).iteritems():
         song = session.query(Song).filter(Song.id == int(song_id)).first()
         yield (song.title, song.artist, song.url)
Пример #12
0
 def __init__(self, country_vector_objects, operator_objects):
     self.country_vector_objects = country_vector_objects
     self.operator_objects = operator_objects
     self.song_vector_objects = session.query(SongVector).all()
     self.country_vectors = self._extract_country_vectors()
     self.song_vectors = self._extract_song_vectors()
Пример #13
0
def get_operators():
    operators = [{'id': operator.id, 'name': operator.name, 'value': operator.value} for operator in session.query(Operator)]
    return jsonify({'operators': operators}), 200
Пример #14
0
 def _query_all_vectors(self):
     return session.query(self._model).all()
Пример #15
0
def get_countries():
    countries = [{'id': country.id, 'name': country.name, 'value': country.value} for country in session.query(Country)]
    return jsonify({'countries': countries}), 200
Пример #16
0
 def tearDown(self):
     session.query(CountryVector).delete()
     session.query(SongVector).delete()
     session.query(Song).delete()
     session.commit()
Пример #17
0
    def __iter__(self):
        predicted_preferences = self._compute_predicted_preferences()

        for song_id, vector in predicted_preferences.sort_values(ascending=False).head(self.NUM_SONGS_TO_RECOMMEND).iteritems():
            song = session.query(Song).filter(Song.id == int(song_id)).first()
            yield (song.title, song.artist, song.url)
Пример #18
0
 def _insert_song_vectors(self):
     session.query(SongVector).delete()
     for song_id, song_vector in self.implicit_mf.song_vectors.vectors.iterrows(
     ):
         session.add(SongVector(song_id=int(song_id), **song_vector))
     session.commit()
Пример #19
0
 def _insert_song_vectors(self):
     session.query(SongVector).delete()
     for song_id, song_vector in self.implicit_mf.song_vectors.vectors.iterrows():
         session.add(SongVector(song_id=int(song_id), **song_vector))
     session.commit()