daniilak

Untitled

Jun 8th, 2023
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.16 KB | None | 0 0
  1. R = {
  2.     "Алтайский край": "22",
  3.     "Амурская область": "28",
  4.     "Архангельская область": "29",
  5.     "Астраханская область": "30",
  6.     "Белгородская область": "31",
  7.     "Брянская область": "32",
  8.     "Владимирская область": "33",
  9.     "Волгоградская область": "34",
  10.     "Вологодская область": "35",
  11.     "Воронежская область": "36",
  12.     "Еврейская автономная область": "79",
  13.     "Забайкальский край": "75",
  14.     "Ивановская область": "37",
  15.     "Иркутская область": "38",
  16.     "Кабардино-Балкария": "7",
  17.     "Калининградская область": "39",
  18.     "Калужская область": "40",
  19.     "Камчатский край": "41",
  20.     "Карачаево-Черкесия": "9",
  21.     "Кемеровская область": "42",
  22.     "Кировская область": "43",
  23.     "Костромская область": "44",
  24.     "Краснодарский край": "23",
  25.     "Красноярский край": "24",
  26.     "Курганская область": "45",
  27.     "Курская область": "46",
  28.     "Ленинградская область": "47",
  29.     "Липецкая область": "48",
  30.     "Магаданская область": "49",
  31.     "Москва": "77",
  32.     "Московская область": "50",
  33.     "Мурманская область": "51",
  34.     "Ненецкий автономный округ": "83",
  35.     "Нижегородская область": "52",
  36.     "Новгородская область": "53",
  37.     "Новосибирская область": "54",
  38.     "Омская область": "55",
  39.     "Оренбургская область": "56",
  40.     "Орловская область": "57",
  41.     "Пензенская область": "58",
  42.     "Пермский край": "59",
  43.     "Приморский край": "25",
  44.     "Псковская область": "60",
  45.     "Адыгея": "1",
  46.     "Республика Алтай": "4",
  47.     "Башкортостан": "2",
  48.     "Республика Бурятия": "3",
  49.     "Дагестан": "5",
  50.     "Ингушетия": "6",
  51.     "Калмыкия": "8",
  52.     "Республика Карелия": "10",
  53.     "Республика Коми": "11",
  54.     "Автономна Республіка Крим": "90",
  55.     "Республика Крым": "90",
  56.     "Марий Эл": "12",
  57.     "Мордовия": "13",
  58.     "Республика Саха (Якутия)": "14",
  59.     "Северная Осетия — Алания": "15",
  60.     "Татарстан": "16",
  61.     "Республика Тыва": "17",
  62.     "Республика Хакасия": "19",
  63.     "Ростовская область": "61",
  64.     "Рязанская область": "62",
  65.     "Самарская область": "63",
  66.     "Санкт-Петербург": "78",
  67.     "Саратовская область": "64",
  68.     "Сахалинская область": "65",
  69.     "Свердловская область": "66",
  70.     "Севастополь": "91",
  71.     "Смоленская область": "67",
  72.     "Ставропольский край": "26",
  73.     "Тамбовская область": "68",
  74.     "Тверская область": "69",
  75.     "Томская область": "70",
  76.     "Тульская область": "71",
  77.     "Тюменская область": "72",
  78.     "Удмуртия": "18",
  79.     "Ульяновская область": "73",
  80.     "Хабаровский край": "27",
  81.     "Ханты-Мансийский автономный округ — Югра": "86",
  82.     "Челябинская область": "74",
  83.     "Чечня": "20",
  84.     "Чувашия": "21",
  85.     "Чукотский автономный округ": "87",
  86.     "Ямало-Ненецкий автономный округ": "89",
  87.     "Ярославская область": "76"
  88. }
  89. from time import time
  90. import geojson
  91. from shapely.geometry import Point, Polygon, MultiPolygon
  92. import json
  93. import pyproj
  94. import geopandas as gpd
  95. import pandas as pd
  96. from shapely.geometry import Point
  97. from concurrent.futures import ThreadPoolExecutor
  98.  
  99. def get_tag_name(x):
  100.     return R.get(x.get('name', ''), '')
  101.    
  102. df = gpd.read_file('russia.geo.json')[['id', 'geometry', 'tags']]
  103. df['tags'] = df['tags'].apply(get_tag_name)
  104. df = df[['id', 'geometry', 'tags']]
  105. df = df.to_crs('EPSG:4326')
  106.  
  107. ad = pd.read_csv('addresses_adverts.csv', sep="\t")
  108.  
  109.  
  110. def get_region(lon, lat):
  111.     # global df
  112.     points_inside = gpd.sjoin(
  113.         gpd.GeoDataFrame(geometry=[Point(lon, lat)], crs='EPSG:4326'),
  114.         df,
  115.         predicate='within'
  116.     )
  117.     if len(points_inside) == 0:
  118.         return -1
  119.     return int(points_inside['tags'].iloc[0])
  120.  
  121. start_time = time()
  122. with ThreadPoolExecutor() as executor:
  123.     ad['region_id'] = list(executor.map(lambda x, y: get_region(x, y), ad['geo_lon'], ad['geo_lat']))
  124.  
  125. ad.to_csv('export_geo.csv',encoding='utf-8', sep="\t")
  126.  
  127. print(time() - start_time)
Add Comment
Please, Sign In to add comment