load_new_model_and_ao

dev
AlexP077 3 years ago committed by Dmitry Titov
parent e01a7d56fb
commit 47284e43e2

@ -21,6 +21,14 @@
- Система администрирования проекта по адресу (используйте логин и пароль администратора доступа): - Система администрирования проекта по адресу (используйте логин и пароль администратора доступа):
[https://REACT_APP_DOMAIN/admin/](https://REACT_APP_DOMAIN/admin/) [https://REACT_APP_DOMAIN/admin/](https://REACT_APP_DOMAIN/admin/)
- Для загрузки Округов и районов запустить консоль
```bash
python manage.py shell
```
Далее в консоли выполнить
```bash
from service.utils import load_ao_and_rayons
load_ao_and_rayons()
### Команды для обновления проекта: ### Команды для обновления проекта:
- Обновите проект и перезапустите его: - Обновите проект и перезапустите его:
```bash ```bash

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,4 +1,6 @@
from django.contrib import admin from django.contrib import admin
from django.db import models from django.db import models
from service.models import PlacementPoint from service.models import PlacementPoint,AO,Rayon
admin.site.register(PlacementPoint) admin.site.register(PlacementPoint)
admin.site.register(AO)
admin.site.register(Rayon)

@ -0,0 +1,180 @@
# Generated by Django 3.2 on 2023-02-23 15:29
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('service', '0002_auto_20230218_1927'),
]
operations = [
migrations.CreateModel(
name='AO',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, null=True, verbose_name='Округ')),
],
),
migrations.RenameField(
model_name='placementpoint',
old_name='age',
new_name='age_day',
),
migrations.RemoveField(
model_name='placementpoint',
name='delta',
),
migrations.RemoveField(
model_name='placementpoint',
name='location_id',
),
migrations.RemoveField(
model_name='placementpoint',
name='plan',
),
migrations.RemoveField(
model_name='placementpoint',
name='prediction',
),
migrations.AddField(
model_name='placementpoint',
name='address',
field=models.TextField(blank=True, null=True, verbose_name='Адрес'),
),
migrations.AddField(
model_name='placementpoint',
name='delta_current',
field=models.IntegerField(blank=True, null=True, verbose_name='Разница текущая'),
),
migrations.AddField(
model_name='placementpoint',
name='delta_first',
field=models.IntegerField(blank=True, null=True, verbose_name='Разница начальная'),
),
migrations.AddField(
model_name='placementpoint',
name='doors',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='enrg_cls',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='flat_cnt',
field=models.IntegerField(blank=True, null=True, verbose_name='Количество квартир'),
),
migrations.AddField(
model_name='placementpoint',
name='flats_cnt',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='levels',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='mat_nes',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='name',
field=models.TextField(blank=True, null=True, verbose_name='Название'),
),
migrations.AddField(
model_name='placementpoint',
name='other_post_cnt',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='plan_current',
field=models.IntegerField(blank=True, null=True, verbose_name='Плановый показатель текущий'),
),
migrations.AddField(
model_name='placementpoint',
name='plan_first',
field=models.IntegerField(blank=True, null=True, verbose_name='Плановый показатель начальный'),
),
migrations.AddField(
model_name='placementpoint',
name='popul_home',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='popul_job',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='prediction_current',
field=models.IntegerField(blank=True, null=True, verbose_name='Прогноз текущий'),
),
migrations.AddField(
model_name='placementpoint',
name='prediction_first',
field=models.IntegerField(blank=True, null=True, verbose_name='Прогноз начальный'),
),
migrations.AddField(
model_name='placementpoint',
name='start_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='target_post_cnt',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='year_bld',
field=models.IntegerField(blank=True, null=True, verbose_name='Год постройки'),
),
migrations.AddField(
model_name='placementpoint',
name='yndxfood_cnt',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='yndxfood_cnt_cst',
field=models.IntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='placementpoint',
name='yndxfood_sum',
field=models.IntegerField(blank=True, null=True),
),
migrations.AlterField(
model_name='placementpoint',
name='sample_trn',
field=models.BooleanField(blank=True, null=True),
),
migrations.CreateModel(
name='Rayon',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, null=True, verbose_name='Район')),
('AO', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='service.ao')),
],
),
migrations.AlterField(
model_name='placementpoint',
name='okrug',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='service.ao'),
),
migrations.AlterField(
model_name='placementpoint',
name='rayon',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='service.rayon'),
),
]

@ -0,0 +1,24 @@
# Generated by Django 3.2 on 2023-02-23 15:39
import django.contrib.gis.db.models.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('service', '0003_auto_20230223_1829'),
]
operations = [
migrations.AddField(
model_name='ao',
name='polygon',
field=django.contrib.gis.db.models.fields.MultiPolygonField(null=True, srid=4326),
),
migrations.AddField(
model_name='rayon',
name='polygon',
field=django.contrib.gis.db.models.fields.MultiPolygonField(null=True, srid=4326),
),
]

@ -0,0 +1,18 @@
# Generated by Django 3.2 on 2023-02-23 16:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('service', '0004_auto_20230223_1839'),
]
operations = [
migrations.AlterField(
model_name='placementpoint',
name='enrg_cls',
field=models.TextField(blank=True, null=True),
),
]

@ -0,0 +1,18 @@
# Generated by Django 3.2 on 2023-02-23 16:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('service', '0005_alter_placementpoint_enrg_cls'),
]
operations = [
migrations.AlterField(
model_name='placementpoint',
name='mat_nes',
field=models.TextField(blank=True, null=True),
),
]

@ -1,16 +1,46 @@
from django.db import models
from django.contrib.gis.db import models as gis_models from django.contrib.gis.db import models as gis_models
from django.db import models
class PlacementPoint(models.Model): class PlacementPoint(models.Model):
location_id = models.IntegerField(null=True, blank=True, verbose_name='Id локации') address = models.TextField(null=True, blank=True, verbose_name='Адрес')
geometry = gis_models.PointField(srid=4326, null=True, verbose_name='Координаты') name = models.TextField(null=True, blank=True, verbose_name='Название')
status = models.TextField(null=True, blank=True, verbose_name='Статус')
category = models.TextField(null=True, blank=True, verbose_name='Категория') category = models.TextField(null=True, blank=True, verbose_name='Категория')
prediction = models.IntegerField(null=True, blank=True, verbose_name='Прогноз') status = models.TextField(null=True, blank=True, verbose_name='Статус')
age = models.IntegerField(null=True, blank=True, verbose_name='Возраст') start_date = models.DateTimeField(null=True, blank=True)
plan = models.IntegerField(null=True, blank=True, verbose_name='Плановый показатель') age_day = models.IntegerField(null=True, blank=True, verbose_name='Возраст')
prediction_first = models.IntegerField(null=True, blank=True, verbose_name='Прогноз начальный')
prediction_current = models.IntegerField(null=True, blank=True, verbose_name='Прогноз текущий')
plan_first = models.IntegerField(null=True, blank=True, verbose_name='Плановый показатель начальный')
plan_current = models.IntegerField(null=True, blank=True, verbose_name='Плановый показатель текущий')
fact = models.IntegerField(null=True, blank=True, verbose_name='Фактический показатель') fact = models.IntegerField(null=True, blank=True, verbose_name='Фактический показатель')
delta = models.IntegerField(null=True, blank=True, verbose_name='Разница') delta_first = models.IntegerField(null=True, blank=True, verbose_name='Разница начальная')
sample_trn = models.IntegerField(null=True, blank=True) delta_current = models.IntegerField(null=True, blank=True, verbose_name='Разница текущая')
okrug = models.TextField(null=True, blank=True, verbose_name='Округ') sample_trn = models.BooleanField(null=True, blank=True)
rayon = models.TextField(null=True, blank=True, verbose_name='Район') flat_cnt = models.IntegerField(null=True, blank=True, verbose_name='Количество квартир')
year_bld = models.IntegerField(null=True, blank=True, verbose_name='Год постройки')
levels = models.IntegerField(null=True, blank=True)
enrg_cls = models.TextField(null=True, blank=True)
mat_nes = models.TextField(null=True, blank=True)
doors = models.IntegerField(null=True, blank=True)
flats_cnt = models.IntegerField(null=True, blank=True)
popul_home = models.IntegerField(null=True, blank=True)
popul_job = models.IntegerField(null=True, blank=True)
other_post_cnt = models.IntegerField(null=True, blank=True)
target_post_cnt = models.IntegerField(null=True, blank=True)
yndxfood_cnt = models.IntegerField(null=True, blank=True)
yndxfood_sum = models.IntegerField(null=True, blank=True)
yndxfood_cnt_cst = models.IntegerField(null=True, blank=True)
okrug = models.ForeignKey("AO", on_delete=models.CASCADE, null=True, blank=True)
rayon = models.ForeignKey("Rayon", on_delete=models.CASCADE, null=True, blank=True)
geometry = gis_models.PointField(srid=4326, null=True, verbose_name='Координаты')
class AO(models.Model):
name = models.TextField(null=True, blank=True, verbose_name='Округ')
polygon = gis_models.MultiPolygonField(null=True,srid=4326)
class Rayon(models.Model):
name = models.TextField(null=True, blank=True, verbose_name='Район')
AO = models.ForeignKey("AO", on_delete=models.CASCADE)
polygon = gis_models.MultiPolygonField(null=True,srid=4326)

@ -1,8 +1,11 @@
import geojson
import pandas as pd import pandas as pd
import sqlalchemy import sqlalchemy
from django.conf import settings from django.conf import settings
from django.contrib.gis.geos import GEOSGeometry
from geojson import MultiPolygon
from tqdm import tqdm from tqdm import tqdm
import numpy as np
from service import models from service import models
@ -65,7 +68,32 @@ 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:] df = pd.read_csv(filepath).iloc[:, 1:]
df = df.replace(np.nan, None)
df = df.replace('NaT', None)
for row in tqdm(df.to_dict('records'), desc='Loading data...'): for row in tqdm(df.to_dict('records'), desc='Loading data...'):
data = {k: row[k] for k in row.keys() if k not in ['lat', 'lon']} data = {k: row[k] for k in row.keys() if k not in ['okrug','rayon','age_month']}
data['geometry'] = f'POINT({row["lon"]} {row["lat"]})' data['okrug']=models.AO.objects.get(name=row['okrug'])
data['rayon'] = models.Rayon.objects.get(name=row['rayon'])
models.PlacementPoint.objects.create(**data) models.PlacementPoint.objects.create(**data)
def load_ao_and_rayons(ao_filepath: str='./fixtures/okrug.geojson', rayons_filepath: str = './fixtures/rayon.geojson'):
models.AO.objects.all().delete()
models.Rayon.objects.all().delete()
with open(ao_filepath) as f:
gj = geojson.load(f)
objs = gj['features']
for obj in objs:
name = obj['properties']['okrug']
coords = obj['geometry']['coordinates']
models.AO.objects.create(**{'name': name, 'polygon': GEOSGeometry(str(MultiPolygon(coords)))})
with open(rayons_filepath) as f:
gj = geojson.load(f)
objs = gj['features']
for obj in objs:
name = obj['properties']['rayon']
coords = obj['geometry']['coordinates']
okr = obj['properties']['okrug']
ao = models.AO.objects.get(name=okr)
models.Rayon.objects.create(**{'name': name, 'polygon': GEOSGeometry(str(MultiPolygon(coords))), 'AO': ao})
print('AO and Rayons loaded')
Loading…
Cancel
Save