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 def load_data(filepath: str): 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', 'location_id', 'okrug', 'rayon', 'age_month']} 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}) print('AO and Rayons loaded') 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)