dev
AlexP077 3 years ago
parent 558c93bec7
commit 95e952c58a

@ -1,15 +1,18 @@
import pandas as pd import pandas as pd
from django.conf import settings
import sqlalchemy import sqlalchemy
from service import models from django.conf import settings
from tqdm import tqdm from tqdm import tqdm
from service import models
def raschet_real(df, koefs): def raschet_real(df, koefs):
koef_summ = sum(koefs.values()) 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 df['rate'] = df['rate'] / koef_summ
return df return df
def raschet(tables, filters, koefs, method): def raschet(tables, filters, koefs, method):
conn = sqlalchemy.create_engine(settings.DB_URL, connect_args={'options': '-csearch_path=public'}) conn = sqlalchemy.create_engine(settings.DB_URL, connect_args={'options': '-csearch_path=public'})
msk_ao = filters.get('msk_ao') msk_ao = filters.get('msk_ao')
@ -23,11 +26,14 @@ def raschet(tables, filters, koefs, method):
for table in tables: for table in tables:
if 'point' in table: if 'point' in table:
if msk_ao is not None: 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: 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: 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) points = pd.read_sql(query, conn)
if method == 'rate': if method == 'rate':
points_df = raschet_real(points, koefs) points_df = raschet_real(points, koefs)
@ -58,8 +64,7 @@ def raschet(tables, filters, koefs, method):
def load_data(filepath: str): def load_data(filepath: str):
models.PlacementPoint.objects.all().delete() 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...'): for data in tqdm(df, desc='Loading data...'):
dt = models.PlacementPoint(**data) dt = models.PlacementPoint(**data)
dt.save() 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 import json
from io import BytesIO from io import BytesIO

Loading…
Cancel
Save