dev
AlexP077 3 years ago
parent 558c93bec7
commit 95e952c58a

@ -1,15 +1,18 @@
import pandas as pd
from django.conf import settings
import sqlalchemy
from service import models
from django.conf import settings
from tqdm import tqdm
from service import models
def raschet_real(df, koefs):
koef_summ = sum(koefs.values())
df['rate'] = df[list(koefs.keys())].apply(lambda x: sum([x[k]*koefs[k] for k in list(koefs.keys())]), axis=1)
df['rate'] = df[list(koefs.keys())].apply(lambda x: sum([x[k] * koefs[k] for k in list(koefs.keys())]), axis=1)
df['rate'] = df['rate'] / koef_summ
return df
def raschet(tables, filters, koefs, method):
conn = sqlalchemy.create_engine(settings.DB_URL, connect_args={'options': '-csearch_path=public'})
msk_ao = filters.get('msk_ao')
@ -23,11 +26,14 @@ def raschet(tables, filters, koefs, method):
for table in tables:
if 'point' in table:
if msk_ao is not None:
query = f"select * from {table} where msk_ao={msk_ao} and category in ({categories});" if len(categories) > 0 else f"select * from {table} where msk_ao={msk_ao};"
query = f"select * from {table} where msk_ao={msk_ao} and category in ({categories});" if len(
categories) > 0 else f"select * from {table} where msk_ao={msk_ao};"
elif msk_rayon is not None:
query = f"select * from {table} where msk_rayon={msk_rayon} and category in ({categories});" if len(categories) > 0 else f"select * from {table} where msk_rayon={msk_rayon};"
query = f"select * from {table} where msk_rayon={msk_rayon} and category in ({categories});" if len(
categories) > 0 else f"select * from {table} where msk_rayon={msk_rayon};"
else:
query = f"select * from {table} where category in ({categories});" if len(categories) > 0 else f"select * from {table};"
query = f"select * from {table} where category in ({categories});" if len(
categories) > 0 else f"select * from {table};"
points = pd.read_sql(query, conn)
if method == 'rate':
points_df = raschet_real(points, koefs)
@ -58,8 +64,7 @@ def raschet(tables, filters, koefs, method):
def load_data(filepath: str):
models.PlacementPoint.objects.all().delete()
df = pd.read_csv(filepath).iloc[:,1:].to_dict('records')
df = pd.read_csv(filepath).iloc[:, 1:].to_dict('records')
for data in tqdm(df, desc='Loading data...'):
dt = models.PlacementPoint(**data)
dt.save()

@ -1,14 +1,3 @@
from rest_framework.response import Response
from rest_framework import permissions
from django.core.cache import cache
import json
from service.utils import raschet as raschet_alg
import pandas as pd
from io import BytesIO
from django.http import HttpResponse
from rest_framework.generics import GenericAPIView
from rest_framework.viewsets import ReadOnlyModelViewSet
from service import serializers, models, pagination
import json
from io import BytesIO

Loading…
Cancel
Save