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 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)