-
Notifications
You must be signed in to change notification settings - Fork 1
/
functions.py
175 lines (103 loc) · 5.06 KB
/
functions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/usr/bin/env python
# coding: utf-8
# ### Funciones para Endpoints / ML
# En esta sección, nos centraremos en consumir los archivos que se generaron en el notebook **Consultas**. que serán utilizadas por la API. El objetivo principal es dar respuestas a los Endpoints y a los Modelos Machine Learning, garantizando rapidez y eficacia en la ejecución de la API.
# In[6]:
import pandas as pd
import os
# ### Endpoint 1
# **def PlayTimeGenre( genero : str ):** Debe devolver año con mas horas jugadas para dicho género.
#
# Ejemplo de retorno: {"Año de lanzamiento con más horas jugadas para Género X" : 2013}
#
# Input: **PlayTimeGenre.csv**
# In[ ]:
def PlayTimeGenre(genero: str):
result_df = pd.read_csv('PlayTimeGenre.csv')
# Filtrar el DataFrame para el género específico
filtered_df = result_df[result_df['genres'] == genero]
# Agrupar por año de lanzamiento y sumar las horas jugadas
grouped_df = filtered_df.groupby('year')['hours_game'].sum()
# Encontrar el año con más horas jugadas
max_hours_year = grouped_df.idxmax()
# Construye el response_data
response_data = {"Año de lanzamiento con más horas jugadas para {}: {}".format(genero, max_hours_year)}
# Muestra el resultado
return response_data
# ### Endpoint 2
# **def UserForGenre( genero : str ):** Debe devolver el usuario que acumula más horas jugadas para el género dado y una lista de la acumulación de horas jugadas por año.
#
# Ejemplo de retorno: {"Usuario con más horas jugadas para Género X" : us213ndjss09sdf, "Horas jugadas":[{Año: 2013, Horas: 203}, {Año: 2012, Horas: 100}, {Año: 2011, Horas: 23}]}
#
# Input: **UserForGenre.csv**
# In[ ]:
def UserForGenre(genero:str):
consulta2 = pd.read_csv('UserForGenre.csv')
# Filtrar el DataFrame por el género dado
genre_data = consulta2[consulta2['genres'] == genero]
# Encontrar al usuario con más horas jugadas para ese género
top_user = genre_data.loc[genre_data['hours_game'].idxmax()]['user_id']
# Crear una lista de acumulación de horas jugadas por año
hours_by_year = genre_data.groupby('year')['hours_game'].sum().reset_index()
hours_by_year = hours_by_year.rename(columns={'year': 'Año', 'hours_game': 'Horas'})
hours_list = hours_by_year.to_dict(orient='records')
# Crear el diccionario de retorno
result = {
"Usuario con más horas jugadas para Género {}".format(genero): top_user,
"Horas jugadas": hours_list
}
return result
# ### Endpoint 3
# **def UsersRecommend( año : int )**: Devuelve el top 3 de juegos MÁS recomendados por usuarios para el año dado. (reviews.recommend = True y comentarios positivos/neutrales)
#
# Ejemplo de retorno: [{"Puesto 1" : X}, {"Puesto 2" : Y},{"Puesto 3" : Z}]
#
# Input: **UsersRecommend.csv**
# In[ ]:
def UsersRecommend(year: int):
df = pd.read_csv('UsersRecommend.csv')
# Filtrar el DataFrame por el año especificado
result_df = df[df['year'] == year]
response_data = [{"Puesto 1": result_df.iloc[0]['name']},
{"Puesto 2": result_df.iloc[1]['name']},
{"Puesto 3": result_df.iloc[2]['name']}]
return response_data
# ### Endpoint 4
# **def UsersWorstDeveloper( año : int )**: Devuelve el top 3 de desarrolladoras con juegos MENOS recomendados por usuarios para el año dado. (reviews.recommend = False y comentarios negativos)
#
# Ejemplo de retorno: [{"Puesto 1" : X}, {"Puesto 2" : Y},{"Puesto 3" : Z}]
#
# Input: **UsersWorstDeveloper.csv**
# In[ ]:
def UsersWorstDeveloper(year: int):
df = pd.read_csv('UsersWorstDeveloper.csv')
# Filtrar el DataFrame por el año especificado
result_df = df[df['year'] == year]
response_data = [{"Puesto 1": result_df.iloc[0]['developer']},
{"Puesto 2": result_df.iloc[1]['developer']},
{"Puesto 3": result_df.iloc[2]['developer']}]
return response_data
# ### Endpoint 5
# **def sentiment_analysis( empresa desarrolladora : str )**: Según la empresa desarrolladora, se devuelve un diccionario con el nombre de la desarrolladora como llave y una lista con la cantidad total de registros de reseñas de usuarios que se encuentren categorizados con un análisis de sentimiento como valor.
#
# Ejemplo de retorno: {'Valve' : [Negative = 182, Neutral = 120, Positive = 278]}
#
# Input: **sentiment_analysis.csv**
# In[ ]:
def sentiment_analysis(empresa_desarrolladora: str):
df = pd.read_csv('sentiment_analysis.csv')
# Filtrar por la empresa desarrolladora
result_df = df[df['developer'] == empresa_desarrolladora]
# Convertir a formato de diccionario
response_data = result_df.set_index('developer').to_dict(orient='index')
return response_data
# ### ML
# ### Recomendación item-item
# In[7]:
def recomendacion_usuario(item_id):
df = pd.read_csv('recomienda_item_item.csv')
# Filtrar el DataFrame por el año especificado
result_df = df[df['item_id'] == item_id]
response_data = result_df['Recomendaciones']
return response_data
# In[ ]: