ftyfvytvt
Browse files- main.py +0 -144
- modelo_recomendacion.pkl +3 -0
main.py
DELETED
@@ -1,144 +0,0 @@
|
|
1 |
-
#Import libraries
|
2 |
-
from fastapi import FastAPI, Request, Form
|
3 |
-
import pandas as pd
|
4 |
-
import numpy as np
|
5 |
-
from flask import Flask, request
|
6 |
-
from fastapi.responses import HTMLResponse
|
7 |
-
from fastapi.staticfiles import StaticFiles
|
8 |
-
from fastapi.templating import Jinja2Templates
|
9 |
-
from fastapi.responses import JSONResponse
|
10 |
-
from fastapi.exceptions import HTTPException
|
11 |
-
from typing import Optional
|
12 |
-
import pickle
|
13 |
-
|
14 |
-
app = FastAPI()
|
15 |
-
|
16 |
-
|
17 |
-
df= pd.read_csv('platforms_and_score.csv', sep=",")
|
18 |
-
|
19 |
-
# Configure a sample rate
|
20 |
-
app.mount("/static", StaticFiles(directory="static"), name="static")
|
21 |
-
|
22 |
-
templates = Jinja2Templates(directory="templates")
|
23 |
-
|
24 |
-
@app.get("/", response_class=HTMLResponse)
|
25 |
-
async def index(request: Request):
|
26 |
-
return templates.TemplateResponse("index.html", {"request": request})
|
27 |
-
|
28 |
-
# Loading information for the API
|
29 |
-
@app.get('/about')
|
30 |
-
async def about():
|
31 |
-
return 'API created with FastAPI and Uvicorn'
|
32 |
-
|
33 |
-
#API 1)
|
34 |
-
@app.get("/get_max_duration")
|
35 |
-
def get_max_duration(year: Optional[int] = None, platform: Optional[str] = None, duration_type: Optional[str] = None):
|
36 |
-
# Convert year to integer if provided
|
37 |
-
if year is not None and year != "":
|
38 |
-
year = int(year)
|
39 |
-
# Filter the DataFrame
|
40 |
-
if duration_type is not None:
|
41 |
-
filtered_df = df[df['duration_type'] == duration_type]
|
42 |
-
else:
|
43 |
-
filtered_df = df.copy()
|
44 |
-
if year is not None:
|
45 |
-
filtered_df = filtered_df[filtered_df['year'] == year]
|
46 |
-
if platform is not None:
|
47 |
-
filtered_df = filtered_df[filtered_df['platform'] == platform]
|
48 |
-
# Sort the DataFrame and get the row with the maximum duration
|
49 |
-
sorted_df = filtered_df.sort_values(by='duration_int', ascending=False)
|
50 |
-
max_duration = sorted_df.iloc[0][['title']]
|
51 |
-
|
52 |
-
return max_duration
|
53 |
-
"""
|
54 |
-
This function calculates the Movie with the longest duration with optional filters of YEAR, PLATFORM and TYPE OF DURATION.
|
55 |
-
(the function should be called get_max_duration(year, platform, duration_type))
|
56 |
-
"""
|
57 |
-
|
58 |
-
#API 2)
|
59 |
-
@app.get("/get_score_count/")
|
60 |
-
def get_score_count(platform: str, scored: int, year:int):
|
61 |
-
# Filter data based on conditions
|
62 |
-
df_filtered = df[(df["platform"] == platform) & (df["scored"] >= scored) & (df["year"] == year)]
|
63 |
-
# Count the number of rows that meet the conditions
|
64 |
-
cantidad = len(df_filtered)
|
65 |
-
# Return the number of times the condition is met
|
66 |
-
return cantidad
|
67 |
-
"""
|
68 |
-
This function calculates the number of movies by platform with a score greater than XX in a given year.
|
69 |
-
(the function must be called get_score_count(platform, scored, year))
|
70 |
-
"""
|
71 |
-
|
72 |
-
#API 3)
|
73 |
-
@app.get('/get_count_platform')
|
74 |
-
def get_count_platform(platform=None):
|
75 |
-
# if a platform is provided, filter the dataframe by that platform
|
76 |
-
if platform:
|
77 |
-
df_filtered = df[df['platform'] == platform]
|
78 |
-
else:
|
79 |
-
df_filtered = df
|
80 |
-
|
81 |
-
# count the number of movies per platform
|
82 |
-
count_by_platform = df_filtered['platform'].value_counts()
|
83 |
-
|
84 |
-
# if the platform exists in the dataframe, return the amount as an integer
|
85 |
-
if platform in count_by_platform.index:
|
86 |
-
return int(count_by_platform[platform])
|
87 |
-
|
88 |
-
# if no frame was provided, return the sum of all movies in the dataframe
|
89 |
-
elif platform is None:
|
90 |
-
return int(count_by_platform.sum())
|
91 |
-
|
92 |
-
# if the platform does not exist in the dataframe, return 0
|
93 |
-
else:
|
94 |
-
return 0
|
95 |
-
"""
|
96 |
-
The above function calculates the number of movies per platform with the PLATFORM filter.
|
97 |
-
(The function should be called get_count_platform(platform))
|
98 |
-
"""
|
99 |
-
#API 4)
|
100 |
-
@app.get('/get_actor')
|
101 |
-
def get_actor(platform:str, year:int):
|
102 |
-
global df
|
103 |
-
# Filter by year and platform
|
104 |
-
filtered_df = df[(df['platform'] == platform) & (df['year'] == year)]
|
105 |
-
|
106 |
-
# Count the number of times each actor appears in the 'cast' column
|
107 |
-
actor_count = filtered_df['cast'].str.split(',').explode().str.strip().value_counts()
|
108 |
-
|
109 |
-
# Return the actor that repeats the most
|
110 |
-
if actor_count.empty:
|
111 |
-
return None
|
112 |
-
else:
|
113 |
-
return actor_count.index[0]
|
114 |
-
"""
|
115 |
-
The previous function identifies the Actor that is repeated the most according to platform and year.
|
116 |
-
(The function should be called get_actor(platform, year))
|
117 |
-
"""
|
118 |
-
|
119 |
-
def cargar_modelo():
|
120 |
-
with open('C:/Users/rocio/OneDrive/Escritorio/FastAPI//modelo_recomendacion.pkl', 'rb') as archivo_modelo:
|
121 |
-
model = pickle.load('modelo_recomendacion.pkl')
|
122 |
-
return model
|
123 |
-
|
124 |
-
#API 4)
|
125 |
-
@app.get("/get_predictions")
|
126 |
-
async def get_predictions(userId: str, id: str):
|
127 |
-
|
128 |
-
# Cargar el modelo desde un archivo
|
129 |
-
with open('modelo_recomendacion.pkl', 'rb') as archivo:
|
130 |
-
model = pickle.load(archivo)
|
131 |
-
|
132 |
-
predictions = model.predict(userId, id)
|
133 |
-
|
134 |
-
if predictions.est >= 4:
|
135 |
-
mensaje = "Muy recomendada"
|
136 |
-
elif predictions.est >=3 and predictions.est < 4:
|
137 |
-
mensaje = "Recomendada"
|
138 |
-
else:
|
139 |
-
mensaje = "No te la recomiendo", predictions.est
|
140 |
-
return {"mensaje": mensaje}
|
141 |
-
|
142 |
-
"""
|
143 |
-
LOREM
|
144 |
-
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
modelo_recomendacion.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:6d39c693a1ac70a046d139a76c862dc5906c543f9bd4538a8c07b32a02848b42
|
3 |
+
size 143445896
|