import geojson import numpy as np import pandas as pd from django.contrib.gis.geos import GEOSGeometry from geojson import MultiPolygon from tqdm import tqdm from service import models from service.enums import PointStatus def load_data(filepath: str): statuses = {point.value: point.name for point in PointStatus} models.PlacementPoint.objects.all().delete() df = pd.read_csv(filepath) df = df.replace(np.nan, None) df = df.replace('NaT', None) for row in tqdm(df.to_dict('records'), desc='Loading data...'): data = { k: row[k] for k in row.keys() if k not in ['id', 'status', 'location_id', 'okrug', 'rayon', 'age_month'] } data['status'] = statuses[row['status']] data['okrug'] = models.AO.objects.get(name=row['okrug']) data['rayon'] = models.Rayon.objects.get(name=row['rayon']) models.PlacementPoint.objects.create(**data) def load_ao_and_rayons( ao_filepath: str, rayons_filepath: str, ): models.AO.objects.all().delete() models.Rayon.objects.all().delete() gj = geojson.load(ao_filepath) objs = gj['features'] for obj in tqdm(objs, desc='Loading AOs...'): name = obj['properties']['okrug'] coords = obj['geometry']['coordinates'] models.AO.objects.create(**{'name': name, 'polygon': GEOSGeometry(str(MultiPolygon(coords)))}) gj = geojson.load(rayons_filepath) objs = gj['features'] for obj in tqdm(objs, desc='Loading Rayons...'): 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}) def load_rivals(filepath: str): models.Rivals.objects.all().delete() df = pd.read_csv(filepath) df = df.replace(np.nan, None) df = df.replace('NaT', None) for row in tqdm(df.to_dict('records'), desc='Loading data...'): models.Rivals.objects.create(**row) def load_dist(filepath: str): models.PointDist.objects.all().delete() df = pd.read_csv(filepath) for row in tqdm(df.to_dict('records'), desc='Loading data...'): row['id1'] = models.PlacementPoint.objects.get(pk=row.get('id1')) row['id2'] = models.PlacementPoint.objects.get(pk=row.get('id2')) models.PointDist.objects.create(**row)