daniilak

Untitled

Jun 8th, 2023
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.52 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import pandas as pd
  3. import geopandas as gpd
  4. from shapely.geometry import Point
  5. import json
  6.  
  7.  
  8. R = { "Алтайский край": "22", "Амурская область": "28", "Архангельская область": "29", "Астраханская область": "30", "Белгородская область": "31", "Брянская область": "32", "Владимирская область": "33", "Волгоградская область": "34", "Вологодская область": "35", "Воронежская область": "36", "Еврейская автономная область": "79", "Забайкальский край": "75", "Ивановская область": "37", "Иркутская область": "38", "Кабардино-Балкария": "7", "Калининградская область": "39", "Калужская область": "40", "Камчатский край": "41", "Карачаево-Черкесия": "9", "Кемеровская область": "42", "Кировская область": "43", "Костромская область": "44", "Краснодарский край": "23", "Красноярский край": "24", "Курганская область": "45", "Курская область": "46", "Ленинградская область": "47", "Липецкая область": "48", "Магаданская область": "49", "Москва": "77", "Московская область": "50", "Мурманская область": "51", "Ненецкий автономный округ": "83", "Нижегородская область": "52", "Новгородская область": "53", "Новосибирская область": "54", "Омская область": "55", "Оренбургская область": "56", "Орловская область": "57", "Пензенская область": "58", "Пермский край": "59", "Приморский край": "25", "Псковская область": "60", "Адыгея": "1", "Республика Алтай": "4", "Башкортостан": "2", "Республика Бурятия": "3", "Дагестан": "5", "Ингушетия": "6", "Калмыкия": "8", "Республика Карелия": "10", "Республика Коми": "11", "Автономна Республіка Крим": "90", "Республика Крым": "90", "Марий Эл": "12", "Мордовия": "13", "Республика Саха (Якутия)": "14", "Северная Осетия — Алания": "15", "Татарстан": "16", "Республика Тыва": "17", "Республика Хакасия": "19", "Ростовская область": "61", "Рязанская область": "62", "Самарская область": "63", "Санкт-Петербург": "78", "Саратовская область": "64", "Сахалинская область": "65", "Свердловская область": "66", "Севастополь": "91", "Смоленская область": "67", "Ставропольский край": "26", "Тамбовская область": "68", "Тверская область": "69", "Томская область": "70", "Тульская область": "71", "Тюменская область": "72", "Удмуртия": "18", "Ульяновская область": "73", "Хабаровский край": "27", "Ханты-Мансийский автономный округ — Югра": "86", "Челябинская область": "74", "Чечня": "20", "Чувашия": "21", "Чукотский автономный округ": "87", "Ямало-Ненецкий автономный округ": "89", "Ярославская область": "76" }
  9.  
  10. df = gpd.read_file('russia.geo.json')[['id', 'geometry', 'tags']]
  11. df['reg'] = df['tags'].map(lambda x: int(R.get(x.get('name', 0), 0)))
  12. df = df[['geometry', 'reg']]
  13. df['reg'] = df['reg'].astype(int)
  14. df = df[df.reg != 0]
  15. df = df.to_crs('EPSG:4326')
  16.  
  17. ad = pd.read_csv('addresses_adverts.csv', sep="\t")
  18. ad_list = ad.to_dict(orient='records')
  19.  
  20.  
  21.  
  22. for index, item in enumerate(ad_list):
  23.     pnts = gpd.GeoDataFrame(geometry=[Point(item['geo_lon'], item['geo_lat'])], crs='EPSG:4326')
  24.     points_inside = gpd.sjoin(pnts, df, predicate='within')
  25.     region_id = -1 if len(points_inside) == 0 else int(points_inside['region_id'].iloc[0])
  26.  
  27.     ad_list[index]['region_id'] = region_id
  28.  
  29. with open('result.json', 'w') as file:
  30.     json.dump(ad_list, file)
  31.  
Add Comment
Please, Sign In to add comment