Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
40 строки
1.3 KiB
Python
40 строки
1.3 KiB
Python
|
|
import logging
|
|
import pandas as pd
|
|
import pickle as pkl
|
|
import psycopg2
|
|
from datetime import datetime
|
|
|
|
logger = logging.getLogger("uvicorn.error")
|
|
class FastAPIHandler():
|
|
|
|
def __init__(self):
|
|
logger.warning('Loading model...')
|
|
try:
|
|
self.model = pkl.load(open('../models/model.pkl', 'rb'))
|
|
logger.info('Model is loaded')
|
|
except Exception as e:
|
|
logger.error('Error loading model')
|
|
|
|
def predict(self, flat_id, item_features:dict):
|
|
item_df = pd.DataFrame(data=item_features, index=[0])
|
|
prediction = self.model.predict(item_df)
|
|
|
|
db_cred = {"dbname": "my_db_name",
|
|
"user": 'admin',
|
|
"password": 'admin',
|
|
"host": "database"}
|
|
|
|
db_conn = psycopg2.connect(**db_cred)
|
|
cur = db_conn.cursor()
|
|
|
|
now = datetime.now()
|
|
cur.execute(f"INSERT INTO public.features \
|
|
(flat_id, ts, geo_lon, geo_lat, area) \
|
|
VALUES ({flat_id}, '{now}', {item_features['geo_lon']}, {item_features['geo_lat']}, {item_features['area']});")
|
|
cur.execute(f"INSERT INTO public.predictions \
|
|
(flat_id, ts, price) VALUES ({flat_id}, '{now}', {prediction[0]});")
|
|
|
|
db_conn.commit()
|
|
|
|
return (prediction[0]) |