pygeokit 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pygeokit/__init__.py +19 -0
- pygeokit/_help.py +83 -0
- pygeokit/core.py +764 -0
- pygeokit/data/admin1.csv +3866 -0
- pygeokit/data/cities.csv.gz +0 -0
- pygeokit/data/countries.csv +253 -0
- pygeokit-0.1.0.dist-info/METADATA +95 -0
- pygeokit-0.1.0.dist-info/RECORD +11 -0
- pygeokit-0.1.0.dist-info/WHEEL +5 -0
- pygeokit-0.1.0.dist-info/licenses/LICENSE +25 -0
- pygeokit-0.1.0.dist-info/top_level.txt +1 -0
pygeokit/__init__.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""pygeokit - offline geo features from latitude / longitude.
|
|
2
|
+
|
|
3
|
+
import pygeokit as gk
|
|
4
|
+
gk.help() # cheat sheet
|
|
5
|
+
feats = gk.get_features(df, lat_col="lat", lon_col="lon")
|
|
6
|
+
"""
|
|
7
|
+
from ._help import help
|
|
8
|
+
from .core import (
|
|
9
|
+
bearing, cat_columns, center_features, city_shape, city_gravity, count_within, dist_to_capital,
|
|
10
|
+
dist_to_nearest, find_centers, get_capital, get_city_type, get_country,
|
|
11
|
+
get_country_info, get_features, get_main_city, get_nearest_city, grid_cell,
|
|
12
|
+
group_stats, haversine, hex_cell, huff_probabilities, load_cities,
|
|
13
|
+
load_countries, make_X, manhattan, multi_center_features, neighbor_features,
|
|
14
|
+
oof_neighbor_features, reilly_breakpoint, spatial_groups, to_km,
|
|
15
|
+
travel_minutes, zipf_expected,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
__version__ = "0.1.0"
|
|
19
|
+
__all__ = [n for n in dir() if not n.startswith("_")]
|
pygeokit/_help.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
HELP = r"""
|
|
2
|
+
pygeokit - шпаргалка import pygeokit as gk; gk.help()
|
|
3
|
+
Везде: lat = широта, lon = долгота (в градусах). Принимаются числа, массивы, Series.
|
|
4
|
+
Расстояния в км. Подробности по функции: help(gk.get_features)
|
|
5
|
+
|
|
6
|
+
== ГОТОВЫЙ X ДЛЯ CATBOOST ==================================================
|
|
7
|
+
X_tr, cat = gk.make_X(train.drop(columns=["target"]), "lat", "lon")
|
|
8
|
+
X_te, _ = gk.make_X(test, "lat", "lon", ref=train) # плотность считать по train
|
|
9
|
+
model = CatBoostRegressor(cat_features=cat).fit(X_tr, y)
|
|
10
|
+
возвращает ДВЕ вещи: X и список категориальных колонок.
|
|
11
|
+
X = копия твоего X + все гео-признаки (справочник, положение в городе,
|
|
12
|
+
ячейки сетки, плотность точек). Таргет не используется, утечки нет.
|
|
13
|
+
|
|
14
|
+
== ВСЁ СРАЗУ (только справочные признаки) ==================================
|
|
15
|
+
feats = gk.get_features(df, lat_col="lat", lon_col="lon") # ~30 признаков
|
|
16
|
+
df = pd.concat([df, feats], axis=1)
|
|
17
|
+
страна, регион, ближайший город, главный город рядом (население, тип, размер,
|
|
18
|
+
ранг в стране), расстояния до столицы / центра региона / города 100к / 1 млн,
|
|
19
|
+
число городов и население в 10/50/100 км, "притяжение" крупных городов.
|
|
20
|
+
Текстовые колонки -> в cat_features CatBoost.
|
|
21
|
+
|
|
22
|
+
== СПРАВОЧНИК ГОРОДОВ И СТРАН =============================================
|
|
23
|
+
gk.get_country(lat, lon) -> 'RU' (код страны)
|
|
24
|
+
gk.get_country_info('RU') -> dict (столица, население, площадь, ...)
|
|
25
|
+
gk.get_capital('RU') -> dict name/lat/lon/population
|
|
26
|
+
gk.get_nearest_city(lat, lon, min_population=0, k=1, types=None)
|
|
27
|
+
gk.get_main_city(lat, lon, radius_km=60) # самый крупный город в радиусе
|
|
28
|
+
gk.get_city_type(lat, lon) -> city_type + size_class
|
|
29
|
+
city_type : capital / region_center / district_center / local_center /
|
|
30
|
+
settlement / city_section
|
|
31
|
+
size_class: tiny <10k, small <50k, medium <100k, big <250k, large <1M, million
|
|
32
|
+
gk.dist_to_capital(lat, lon)
|
|
33
|
+
gk.load_cities(min_population=0), gk.load_countries() # сырые таблицы
|
|
34
|
+
|
|
35
|
+
== РАССТОЯНИЯ =============================================================
|
|
36
|
+
gk.haversine(lat1, lon1, lat2, lon2) # км по сфере
|
|
37
|
+
gk.manhattan(...) # "по кварталам"
|
|
38
|
+
gk.bearing(...) # направление, 0=север, 90=восток
|
|
39
|
+
gk.to_km(lat, lon) # -> x,y в км (для KMeans/HDBSCAN/евклида)
|
|
40
|
+
gk.travel_minutes(km, mode="walk") # walk 5 км/ч, bike 15, car 30
|
|
41
|
+
15-минутный город: пешком 15 мин ~ 1.25 км
|
|
42
|
+
|
|
43
|
+
== СВОИ ТОЧКИ (метро, магазины, конкуренты) ===============================
|
|
44
|
+
gk.dist_to_nearest(lat, lon, ref_lat, ref_lon, k=1)
|
|
45
|
+
gk.count_within(lat, lon, ref_lat, ref_lon, radius_km=1.25)
|
|
46
|
+
|
|
47
|
+
== ПЛОТНОСТЬ И СОСЕДИ =====================================================
|
|
48
|
+
gk.neighbor_features(lat, lon) # сколько точек рядом
|
|
49
|
+
gk.neighbor_features(lat, lon, ref_lat, ref_lon, values=v) # + sum/mean/std v
|
|
50
|
+
!!! если values = таргет:
|
|
51
|
+
tr_f = gk.oof_neighbor_features(tr.lat, tr.lon, y) # трейн, без утечки
|
|
52
|
+
te_f = gk.neighbor_features(te.lat, te.lon, tr.lat, tr.lon, values=y) # тест
|
|
53
|
+
|
|
54
|
+
== УСТРОЙСТВО ГОРОДА (кольца / секторы / несколько ядер) ==================
|
|
55
|
+
c = gk.find_centers(lat, lon, weight=turnover, n_centers=3) # ядра по данным
|
|
56
|
+
gk.center_features(lat, lon, c.lat[0], c.lon[0]) # расстояние, кольцо, сектор
|
|
57
|
+
gk.multi_center_features(lat, lon, c) # до каждого ядра + ближайшее
|
|
58
|
+
центр из справочника: m = gk.get_main_city(lat, lon)
|
|
59
|
+
gk.center_features(lat, lon, m.lat.values, m.lon.values)
|
|
60
|
+
|
|
61
|
+
тип города из лекции (кольцевой / секторный / несколько ядер), ЭВРИСТИКА:
|
|
62
|
+
gk.city_shape(lat, lon, weight=None, group=city_id) # строка на город:
|
|
63
|
+
shape = ring / sector / multi_core + elongation, core2_ratio, core_sep, ...
|
|
64
|
+
|
|
65
|
+
== СЕТКИ И ВАЛИДАЦИЯ ======================================================
|
|
66
|
+
gk.grid_cell(lat, lon, size_km=1) # id квадрата -> категориальный признак
|
|
67
|
+
gk.hex_cell(lat, lon, res=8) # H3 (нужен pip install h3)
|
|
68
|
+
gk.spatial_groups(lat, lon, size_km=50) # groups для GroupKFold
|
|
69
|
+
gk.group_stats(df, by="cell", value="amount") # n, sum, mean(ср. чек), median...
|
|
70
|
+
|
|
71
|
+
== ЭКОНОМИКА ГОРОДОВ ======================================================
|
|
72
|
+
gk.city_gravity(lat, lon) # притяжение крупных городов
|
|
73
|
+
gk.huff_probabilities(dist, attractiveness) # вероятность выбрать каждый центр
|
|
74
|
+
gk.reilly_breakpoint(dist_ab, pop_a, pop_b) # граница зон притяжения A и B
|
|
75
|
+
gk.zipf_expected(largest_pop, rank) # закон Ципфа: pop = max / rank
|
|
76
|
+
|
|
77
|
+
Данные: GeoNames (geonames.org), лицензия CC BY 4.0.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def help():
|
|
82
|
+
"""Print the cheat sheet (in Russian)."""
|
|
83
|
+
print(HELP)
|