Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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"
- }
- from time import time
- import geojson
- from shapely.geometry import Point, Polygon, MultiPolygon
- import json
- import pyproj
- import geopandas as gpd
- import pandas as pd
- from shapely.geometry import Point
- from concurrent.futures import ThreadPoolExecutor
- def get_tag_name(x):
- return R.get(x.get('name', ''), '')
- df = gpd.read_file('russia.geo.json')[['id', 'geometry', 'tags']]
- df['tags'] = df['tags'].apply(get_tag_name)
- df = df[['id', 'geometry', 'tags']]
- df = df.to_crs('EPSG:4326')
- ad = pd.read_csv('addresses_adverts.csv', sep="\t")
- def get_region(lon, lat):
- # global df
- points_inside = gpd.sjoin(
- gpd.GeoDataFrame(geometry=[Point(lon, lat)], crs='EPSG:4326'),
- df,
- predicate='within'
- )
- if len(points_inside) == 0:
- return -1
- return int(points_inside['tags'].iloc[0])
- start_time = time()
- with ThreadPoolExecutor() as executor:
- ad['region_id'] = list(executor.map(lambda x, y: get_region(x, y), ad['geo_lon'], ad['geo_lat']))
- ad.to_csv('export_geo.csv',encoding='utf-8', sep="\t")
- print(time() - start_time)
Add Comment
Please, Sign In to add comment