diff --git a/geocache.json b/geocache.json new file mode 100644 index 0000000..10cdff5 --- /dev/null +++ b/geocache.json @@ -0,0 +1,1358 @@ +{ + "\u041c\u043e\u0441\u043a\u0432\u0430": [ + 55.7504461, + 37.6174943 + ], + "\u0423\u043b\u044c\u044f\u043d\u043e\u0432\u0441\u043a": [ + 54.3107593, + 48.3642771 + ], + "\u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433": [ + 59.938732, + 30.316229 + ], + "Sheffield": [ + 53.3806626, + -1.4702278 + ], + "Antalya": [ + 36.8872942, + 30.7074549 + ], + "Dubai": [ + 25.074282349999997, + 55.18853865430702 + ], + "Karlovy Vary": [ + 50.2306216, + 12.8701437 + ], + "\u041e\u0434\u0438\u043d\u0446\u043e\u0432\u043e": [ + 55.6711507, + 37.2727963 + ], + "\u042e\u0436\u043d\u043e-\u0421\u0430\u0445\u0430\u043b\u0438\u043d\u0441\u043a": [ + 46.9574273, + 142.727438 + ], + "Amsterdam": [ + 52.3730796, + 4.8924534 + ], + "\u041a\u0443\u0437\u043e\u0432\u0430\u0442\u043e\u0432\u043e": [ + 53.5405729, + 47.6850699 + ], + "\u0421\u0430\u043c\u0430\u0440\u0430": [ + 53.198627, + 50.113987 + ], + "\u041f\u0435\u0440\u043c\u044c": [ + 58.014965, + 56.246723 + ], + "\u0420\u043e\u0441\u0442\u043e\u0432-\u043d\u0430-\u0414\u043e\u043d\u0443": [ + 47.2216548, + 39.7096061 + ], + "\u041c\u044b\u0442\u0438\u0449\u0438": [ + 55.9094928, + 37.7339358 + ], + "\u0414\u0438\u043c\u0438\u0442\u0440\u043e\u0432\u0433\u0440\u0430\u0434": [ + 54.2188995, + 49.6038982 + ], + "\u0427\u0435\u0431\u043e\u043a\u0441\u0430\u0440\u044b": [ + 56.1307195, + 47.2449597 + ], + "\u0410\u0440\u0445\u0430\u043d\u0433\u0435\u043b\u044c\u0441\u043a": [ + 64.543022, + 40.537121 + ], + "\u0414\u043e\u043c\u043e\u0434\u0435\u0434\u043e\u0432\u043e": [ + 55.40912105, + 37.904166212415895 + ], + "\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440": [ + 45.7684014, + 39.0261044 + ], + "\u0429\u0435\u043b\u043a\u043e\u0432\u043e": [ + 55.9206499, + 37.9915576 + ], + "\u041a\u0430\u0437\u0430\u043d\u044c": [ + 55.7823547, + 49.1242266 + ], + "\u0411\u0430\u0442\u0443\u043c\u0438": [ + 41.6509502, + 41.6360085 + ], + "Roseau": [ + 48.7710371, + -95.7697882 + ], + "San Diego": [ + 32.7174202, + -117.1627728 + ], + "\u0421\u044b\u0437\u0440\u0430\u043d\u044c": [ + 53.15538, + 48.474121 + ], + "\u0412\u043b\u0430\u0434\u0438\u043c\u0438\u0440": [ + 56.1288899, + 40.4075203 + ], + "\u0426\u0438\u043b\u044c\u043d\u0430": [ + 54.5922444, + 48.1399358 + ], + "\u041d\u0430\u0437\u0440\u0430\u043d\u044c": [ + 43.2320774, + 44.7540128 + ], + "\u0418\u0448\u0435\u0435\u0432\u043a\u0430": [ + 54.4269176, + 48.2749899 + ], + "\u041d\u0438\u0436\u043d\u0438\u0439 \u041d\u043e\u0432\u0433\u043e\u0440\u043e\u0434": [ + 56.3264816, + 44.0051395 + ], + "\u0412\u0435\u043b\u0438\u043a\u0438\u0439 \u041d\u043e\u0432\u0433\u043e\u0440\u043e\u0434": [ + 58.5209862, + 31.2757862 + ], + "\u041f\u0435\u0442\u0440\u043e\u0437\u0430\u0432\u043e\u0434\u0441\u043a": [ + 61.7900426, + 34.390007 + ], + "\u041d\u043e\u0432\u043e\u0443\u043b\u044c\u044f\u043d\u043e\u0432\u0441\u043a": [ + 54.1464093, + 48.3916541 + ], + "\u0411\u0430\u0440\u044b\u0448": [ + 48.8534951, + 2.3483915 + ], + "\u041d\u0438\u0436\u043d\u0435\u0432\u0430\u0440\u0442\u043e\u0432\u0441\u043a": [ + 60.9391866, + 76.55117870683605 + ], + "\u0423\u043b\u0430\u043d-\u0423\u0434\u044d": [ + 51.8357841, + 107.5839105 + ], + "\u0423\u043b\u044c\u044f\u043d\u043e\u0432\u0441\u043a\u0430\u044f": [ + 60.890062, + 43.110871 + ], + "\u0421\u0435\u043d\u0433\u0438\u043b\u0435\u0439": [ + 53.9588733, + 48.7872182 + ], + "\u041d\u0438\u0436\u043d\u0435\u043a\u0430\u043c\u0441\u043a": [ + 55.6412879, + 51.8160376 + ], + "\u0423\u0440\u044e\u043f\u0438\u043d\u0441\u043a": [ + 50.7970972, + 42.0051866 + ], + "\u041c\u0430\u0433\u0430\u0434\u0430\u043d": [ + 63.5515028, + 154.014726 + ], + "Manzhouli": [ + 49.47671775, + 117.79463368396365 + ], + "\u041e\u0441\u0442\u0440\u043e\u0432\u043d\u043e\u0439": [ + 68.0544447, + 39.5129384 + ], + "\u0412\u0435\u0448\u043a\u0430\u0439\u043c\u0430": [ + 54.0500142, + 47.1246489 + ], + "New York City": [ + 40.7127281, + -74.0060152 + ], + "\u0411\u0430\u0437\u0430\u0440\u043d\u044b\u0439 \u0421\u044b\u0437\u0433\u0430\u043d": [ + 53.7482676, + 46.7584818 + ], + "\u041a\u0438\u0440\u043e\u0432": [ + 58.6035661, + 49.6666241 + ], + "\u041f\u0435\u043d\u0437\u0430": [ + 53.1937836, + 45.006741250609664 + ], + "\u0415\u043a\u0430\u0442\u0435\u0440\u0438\u043d\u0431\u0443\u0440\u0433": [ + 56.839104, + 60.60825 + ], + "\u0411\u0430\u0442\u044b\u0440\u0435\u0432\u043e": [ + 55.0681559, + 47.6042007 + ], + "\u0418\u043d\u0437\u0430": [ + 53.8579402, + 46.3573236 + ], + "\u0423\u043b\u044c\u044f\u043d\u043e\u0432\u043e": [ + 54.8270163, + 22.0923247 + ], + "\u0421\u043e\u043b\u0438\u043a\u0430\u043c\u0441\u043a": [ + 59.649437, + 56.779594 + ], + "\u0421\u0443\u0440\u0441\u043a\u043e\u0435": [ + 54.4800412, + 46.7234429 + ], + "\u0422\u043e\u043b\u044c\u044f\u0442\u0442\u0438": [ + 53.5149884, + 49.4073316 + ], + "\u0414\u0435\u0440\u0431\u0435\u043d\u0442": [ + 42.057858, + 48.2887648 + ], + "\u0413\u043e\u0440\u043b\u043e\u0432\u043a\u0430": [ + 48.3058686, + 38.0027664 + ], + "\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u0441\u0442\u0430\u043b\u044c": [ + 55.7903785, + 38.4405711 + ], + "\u0421\u0442\u0430\u0440\u0430\u044f \u041c\u0430\u0439\u043d\u0430": [ + 54.6070643, + 48.9258988 + ], + "\u0422\u0430\u0448\u043a\u0435\u043d\u0442": [ + 41.3123363, + 69.2787079 + ], + "\u0411\u0443\u0438\u043d\u0441\u043a": [ + 54.9722866, + 48.2928964 + ], + "\u041a\u0430\u0440\u0441\u0443\u043d": [ + 54.1970553, + 46.9793449 + ], + "\u0412\u043e\u043b\u0433\u043e\u0433\u0440\u0430\u0434": [ + 48.7081906, + 44.5153353 + ], + "\u042f\u0437\u044b\u043a\u043e\u0432\u043e": [ + 54.691818, + 55.01387 + ], + "\u041d\u0430\u0431\u0435\u0440\u0435\u0436\u043d\u044b\u0435 \u0427\u0435\u043b\u043d\u044b": [ + 55.7419774, + 52.399207 + ], + "\u0417\u0435\u043b\u0435\u043d\u0430\u044f \u0420\u043e\u0449\u0430": [ + 54.4412277, + 52.7427155 + ], + "\u0421\u0438\u043b\u0438\u043a\u0430\u0442\u043d\u044b\u0439": [ + 64.4835427, + 40.77318 + ], + "\u0422\u044e\u043c\u0435\u043d\u044c": [ + 57.153534, + 65.542274 + ], + "\u0410\u043a\u0448\u0443\u0430\u0442": [ + 53.6786231, + 47.4405802 + ], + "\u0428\u0443\u043c\u043e\u0432\u043a\u0430": [ + 48.483688, + 29.49143 + ], + "\u041d\u043e\u0432\u044b\u0435 \u0417\u0438\u043c\u043d\u0438\u0446\u044b": [ + 52.6745561, + 47.5615819 + ], + "\u041e\u043c\u0441\u043a": [ + 54.991375, + 73.371529 + ], + "\u0416\u0435\u0434\u044f\u0435\u0432\u043a\u0430": [ + 54.7293093, + 49.1628578 + ], + "\u0421\u0435\u0440\u0434\u043e\u0431\u0441\u043a": [ + 52.461506, + 44.213924 + ], + "\u0421\u0442\u0430\u0432\u0440\u043e\u043f\u043e\u043b\u044c": [ + 44.8632577, + 43.4406913 + ], + "\u0421\u0442\u0430\u0440\u0430\u044f \u041a\u0443\u043b\u0430\u0442\u043a\u0430": [ + 52.7313796, + 47.6207042 + ], + "\u041c\u0443\u0440\u043c\u0430\u043d\u0441\u043a": [ + 68.970665, + 33.07497 + ], + "Mahajanga": [ + -15.7181492, + 46.3172577 + ], + "\u041a\u0435\u043c\u0435\u0440\u043e\u0432\u043e": [ + 55.3550907, + 86.0871213 + ], + "\u0421\u0442\u043e\u0433\u043e\u0432\u043a\u0430": [ + 54.4116983, + 21.2629323 + ], + "\u0421\u0430\u0440\u0430": [ + 47.024882399999996, + 2.5753333606655704 + ], + "\u041d\u043e\u0432\u043e\u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a": [ + 44.7239578, + 37.7690711 + ], + "\u0410\u0440\u0437\u0430\u043c\u0430\u0441": [ + 55.3989463, + 43.8408129 + ], + "\u041d\u043e\u0432\u044b\u0439 \u0411\u0435\u043b\u044b\u0439 \u042f\u0440": [ + 53.9721922, + 48.9700112 + ], + "\u0420\u0430\u0434\u0438\u0449\u0435\u0432\u043e": [ + 52.8520485, + 47.8706585 + ], + "\u0428\u0438\u043b\u043e\u0432\u043a\u0430": [ + 56.9114231, + 60.8524617 + ], + "\u0427\u0435\u0440\u0434\u0430\u043a\u043b\u044b": [ + 54.3600605, + 48.8489979 + ], + "\u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u041d\u0430\u0433\u0430\u0442\u043a\u0438\u043d\u043e": [ + 54.5195634, + 47.9678555 + ], + "\u0420\u043e\u043c\u043e\u0434\u0430\u043d\u043e\u0432\u043e": [ + 54.4986763, + 36.2457348 + ], + "\u0425\u0438\u043c\u043a\u0438": [ + 55.8917293, + 37.4396994 + ], + "\u0411\u0435\u043b\u0433\u043e\u0440\u043e\u0434": [ + 50.5955595, + 36.5873394 + ], + "\u0411\u0443\u0437\u0443\u043b\u0443\u043a": [ + 52.788502, + 52.253899 + ], + "\u041f\u0435\u0442\u0440\u043e\u043f\u0430\u0432\u043b\u043e\u0432\u0441\u043a-\u041a\u0430\u043c\u0447\u0430\u0442\u0441\u043a\u0438\u0439": [ + 53.0199838, + 158.6471356 + ], + "\u041c\u0443\u043b\u043b\u043e\u0432\u043a\u0430": [ + 54.2173224, + 49.3933664 + ], + "\u0424\u0435\u043e\u0434\u043e\u0441\u0438\u044f": [ + 45.033669, + 35.3753628 + ], + "\u041c\u0430\u0439\u043d\u0430": [ + 49.9354788, + 9.8058264 + ], + "\u0423\u043d\u0434\u043e\u0440\u044b": [ + 54.6064413, + 48.3894427 + ], + "\u0423\u0433\u043b\u0438\u0447": [ + 57.526783, + 38.316689 + ], + "\u041d\u043e\u0432\u043e\u0441\u043f\u0430\u0441\u0441\u043a\u043e\u0435": [ + 53.1492062, + 47.7526084 + ], + "\u0415\u0439\u0441\u043a": [ + 46.7112094, + 38.2747987 + ], + "\u0420\u0430\u043c\u0435\u043d\u0441\u043a\u043e\u0435": [ + 55.5709361, + 38.2282099 + ], + "\u041f\u0430\u0432\u043b\u043e\u0432\u043a\u0430": [ + 53.10598, + 69.014565 + ], + "\u0423\u0441\u0442\u044c-\u0418\u043b\u0438\u043c\u0441\u043a": [ + 57.959473, + 102.734192 + ], + "\u041d\u0443\u0440\u043b\u0430\u0442": [ + 54.4297351, + 50.8019579 + ], + "\u0416\u0438\u0432\u0430\u0439\u043a\u0438\u043d\u043e": [ + 53.4819121, + 47.1260245 + ], + "\u0412\u043e\u043b\u0433\u0430": [ + 56.1670244, + 44.2150569 + ], + "\u041a\u043e\u0447\u0435\u043d\u044f\u0435\u0432\u043a\u0430": [ + 53.873913, + 46.9952162 + ], + "\u0422\u0430\u0432\u043e\u043b\u0436\u0430\u043d\u043a\u0430": [ + 49.448611, + 84.197222 + ], + "\u0421\u043e\u0447\u0438": [ + 43.5854823, + 39.723109 + ], + "\u0422\u0435\u0442\u044e\u0448\u0438": [ + 54.9342754, + 48.8319574 + ], + "\u0422\u0435\u0440\u043d\u043e\u0432\u043a\u0430": [ + 46.8152636, + 29.5525679 + ], + "\u0421\u0430\u0440\u0430\u0442\u043e\u0432": [ + 51.530018, + 46.034683 + ], + "\u041a\u0440\u0438\u0443\u0448\u0438": [ + 54.1034263, + 48.533648 + ], + "\u041d\u043e\u0432\u0430\u044f \u041c\u0430\u0439\u043d\u0430": [ + 54.1483754, + 49.7633615 + ], + "\u041a\u0430\u0440\u0430\u0433\u0430\u043d\u0434\u0430": [ + 49.1767322, + 74.1811272 + ], + "Tirana": [ + 41.330488599999995, + 19.82556898393491 + ], + "\u0411\u0440\u043e\u043d\u043d\u0438\u0446\u044b": [ + 55.422, + 38.2591 + ], + "\u0421\u0442\u0430\u0440\u0430\u044f \u042f\u043d\u0434\u043e\u0432\u043a\u0430": [ + 52.8081261, + 47.4951265 + ], + "\u041d\u043e\u0432\u043e\u0435 \u0414\u0440\u043e\u0436\u0436\u0430\u043d\u043e\u0435": [ + 54.7367892, + 47.5569172 + ], + "\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0426\u0438\u043b\u044c\u043d\u0430": [ + 54.688077, + 47.8538993 + ], + "\u0418\u0433\u043d\u0430\u0442\u043e\u0432\u043a\u0430": [ + 54.5228749, + 55.3226834 + ], + "\u0413\u043b\u043e\u0442\u043e\u0432\u043a\u0430": [ + 53.9508044, + 46.697349 + ], + "K\u00f6ln": [ + 50.938361, + 6.959974 + ], + "\u0411\u0430\u043a\u043b\u0443\u0448\u0438": [ + 54.3788251, + 79.119644 + ], + "\u041a\u0443\u043b\u0430\u0442\u043a\u0430": [ + 52.6733128, + 47.6431866 + ], + "\u0420\u044b\u0431\u0438\u043d\u0441\u043a": [ + 58.050373, + 38.834637 + ], + "\u0421\u043e\u043b\u043d\u0435\u0447\u043d\u043e\u0435": [ + 48.0407661, + 28.6365118 + ], + "\u0421\u0430\u0440\u0430\u043d\u0441\u043a": [ + 54.18671, + 45.18383 + ], + "\u041a\u0440\u0430\u0441\u043d\u043e\u0434\u043e\u043d": [ + 48.2951425, + 39.7296737 + ], + "\u041d\u043e\u0432\u044b\u0439 \u0423\u0440\u0435\u043d\u0433\u043e\u0439": [ + 66.085196, + 76.6799167 + ], + "Valencia": [ + 39.4697065, + -0.3763353 + ], + "Barcelona": [ + 41.3828939, + 2.1774322 + ], + "\u041d\u043e\u0432\u043e\u0441\u0438\u0431\u0438\u0440\u0441\u043a": [ + 54.96781445, + 82.95159894278376 + ], + "\u041a\u0440\u0430\u0441\u043d\u0430\u044f \u0420\u0435\u043a\u0430": [ + 54.5729748, + 49.1204904 + ], + "\u0410\u043d\u0430\u043f\u0430": [ + 44.894272, + 37.316887 + ], + "Paris": [ + 48.8534951, + 2.3483915 + ], + "\u0410\u043b\u0430\u043f\u0430\u0435\u0432\u0441\u043a": [ + 57.850811, + 61.695 + ], + "\u041d\u043e\u0432\u044b\u0439 \u041c\u043e\u0441\u0442\u044f\u043a": [ + 52.7221098, + 47.4377847 + ], + "\u041a\u043e\u043b\u043e\u043c\u043d\u0430": [ + 55.0995509, + 38.7811165 + ], + "\u042f\u0440\u043e\u0441\u043b\u0430\u0432\u043b\u044c": [ + 57.6263877, + 39.8933705 + ], + "\u041a\u0440\u0430\u0441\u043d\u043e\u044f\u0440\u0441\u043a": [ + 56.0090968, + 92.8725147 + ], + "Washington, D.C.": [ + 48.125152, + -123.4525429 + ], + "\u0420\u0443\u043c\u044f\u043d\u0446\u0435\u0432\u043e": [ + 55.6329543, + 37.4416052 + ], + "\u0421\u0442\u0430\u0440\u043e\u0435 \u0414\u0440\u043e\u0436\u0436\u0430\u043d\u043e\u0435": [ + 54.7249827, + 47.5645397 + ], + "\u0422\u0435\u0440\u0435\u043d\u044c\u0433\u0430": [ + 53.7161121, + 48.367123 + ], + "\u0421\u0443\u043c\u044b": [ + 50.9119775, + 34.8027723 + ], + "\u0427\u0443\u0432\u0430\u0448\u0441\u043a\u0438\u0439 \u0421\u0430\u0439\u043c\u0430\u043d": [ + 53.2972965, + 47.104045 + ], + "\u042f\u043b\u0442\u0430": [ + 55.001251, + -115.002136 + ], + "\u0421\u0442\u0430\u0440\u043e\u0442\u0438\u043c\u043e\u0448\u043a\u0438\u043d\u043e": [ + 54.17979, + 55.588253 + ], + "\u0415\u0440\u0435\u0432\u0430\u043d": [ + 40.1777112, + 44.5126233 + ], + "\u041d\u043e\u0432\u044b\u0435 \u041c\u0430\u043a\u043b\u0430\u0443\u0448\u0438": [ + 54.5022897, + 47.4752831 + ], + "\u041f\u043e\u043b\u0438\u0432\u0430\u043d\u043e\u0432\u043e": [ + 55.4513136, + 37.3993616 + ], + "\u0418\u0440\u043a\u0443\u0442\u0441\u043a": [ + 56.6370122, + 104.719221 + ], + "Los Angeles": [ + 34.0536909, + -118.242766 + ], + "Destin": [ + 30.3935337, + -86.4957834 + ], + "\u041a\u043e\u0441\u0442\u0438\u043d\u043e-\u041e\u0442\u0434\u0435\u043b\u0435\u0446": [ + 51.5387837, + 41.4544425 + ], + "\u041c\u0435\u0434\u043d\u043e\u0433\u043e\u0440\u0441\u043a": [ + 51.4049435, + 57.5803138 + ], + "Wellington": [ + -41.2887953, + 174.7772114 + ], + "\u041d\u043e\u0432\u043e\u043a\u0443\u0439\u0431\u044b\u0448\u0435\u0432\u0441\u043a": [ + 53.099243, + 49.948364 + ], + "Philadelphia": [ + 39.9527237, + -75.1635262 + ], + "\u0427\u0443\u0444\u0430\u0440\u043e\u0432\u043e": [ + 54.4527081, + 47.5014085 + ], + "\u0427\u0443\u0432\u0430\u0448\u0441\u043a\u043e\u0435 \u0414\u0440\u043e\u0436\u0436\u0430\u043d\u043e\u0435": [ + 54.7067271, + 47.5232795 + ], + "San Francisco": [ + 37.7790262, + -122.419906 + ], + "\u0413\u043b\u0430\u0437\u043e\u0432": [ + 58.1401196, + 52.6464388 + ], + "\u041d\u043e\u0432\u0430\u044f \u041c\u0430\u043b\u044b\u043a\u043b\u0430": [ + 54.2050657, + 49.9308434 + ], + "\u0410\u043b\u0430\u0442\u044b\u0440\u044c": [ + 54.84582955, + 46.562748428457304 + ], + "\u041a\u043e\u0432\u0434\u043e\u0440": [ + 67.563049, + 30.474108 + ], + "\u041a\u0443\u0437\u043d\u0435\u0446\u043a": [ + 53.112514, + 46.600727 + ], + "Bremen": [ + 53.0758196, + 8.8071646 + ], + "\u0418\u0437\u043c\u0430\u0439\u043b\u043e\u0432\u043e": [ + 55.7897913, + 37.743213 + ], + "Kabul": [ + 34.5260109, + 69.1776838 + ], + "\u0422\u043e\u043c\u0441\u043a": [ + 58.6124279, + 82.0475315 + ], + "\u0417\u0430\u0431\u0430\u043b\u0443\u0439\u043a\u0430": [ + 53.8773517, + 46.2502457 + ], + "\u0416\u0430\u0434\u043e\u0432\u043a\u0430": [ + 51.424772, + 49.230305 + ], + "Legnica": [ + 51.204768900000005, + 16.174675034638256 + ], + "\u0427\u0430\u0448\u043d\u0438\u043a\u0438": [ + 54.8569819, + 29.1598825 + ], + "\u0423\u0444\u0430": [ + 54.7261409, + 55.947499 + ], + "Houston": [ + 29.7589382, + -95.3676974 + ], + "\u0417\u0430\u043f\u043e\u0440\u043e\u0436\u044c\u0435": [ + 47.8507859, + 35.1182867 + ], + "\u041b\u0435\u043d\u0441\u043a": [ + 60.7145488, + 114.9172123 + ], + "\u0421\u0442\u0430\u0440\u044b\u0439 \u0421\u0430\u043d\u0442\u0438\u043c\u0438\u0440": [ + 54.3269606, + 50.0656475 + ], + "\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u042f\u043a\u0443\u0448\u043a\u0430": [ + 54.1630436, + 49.8177875 + ], + "\u0413\u0440\u0435\u043c\u0443\u0447\u0438\u0439": [ + 48.7845, + 40.689976 + ], + "Le\u00f3n": [ + 42.63414505, + -5.971415104539984 + ], + "\u0415\u0434\u0435\u043b\u0435\u0432\u043e": [ + 53.4029105, + 47.7481432 + ], + "\u0412\u043b\u0430\u0434\u0438\u0432\u043e\u0441\u0442\u043e\u043a": [ + 43.1150678, + 131.8855768 + ], + "\u0427\u0430\u0439\u043a\u043e\u0432\u0441\u043a\u0438\u0439": [ + 56.7787468, + 54.1500704 + ], + "\u041c\u0430\u0439\u043a\u043e\u043f": [ + 44.6062079, + 40.104053 + ], + "\u041f\u0430\u043f\u0443\u0437\u044b": [ + 53.578505, + 46.6482735 + ], + "\u0412\u043e\u0440\u043a\u0443\u0442\u0430": [ + 67.5035662, + 64.0627028 + ], + "\u0421\u0438\u043c\u0444\u0435\u0440\u043e\u043f\u043e\u043b\u044c": [ + 44.9521459, + 34.1024858 + ], + "\u041c\u043e\u043d\u0447\u0435\u0433\u043e\u0440\u0441\u043a": [ + 67.939903, + 32.931679 + ], + "\u0412\u043e\u043b\u043e\u0433\u0434\u0430": [ + 59.218876, + 39.893276 + ], + "\u041d\u043e\u0432\u043e\u0441\u0435\u043b\u043a\u0438": [ + 54.7374371, + 48.1732099 + ], + "\u041d\u043e\u0432\u0438\u043a\u043e\u0432\u043a\u0430": [ + 53.4995829, + 45.927446 + ], + "\u0411\u0430\u043b\u0430\u0448\u0438\u0445\u0430": [ + 55.8036225, + 37.9646488 + ], + "\u041a\u0440\u0430\u0441\u043d\u044b\u0439 \u0413\u0443\u043b\u044f\u0439": [ + 54.0260848, + 48.3312855 + ], + "\u041d\u043e\u0432\u044b\u0435 \u0410\u043b\u0433\u0430\u0448\u0438": [ + 54.7183843, + 47.7415382 + ], + "Pago Pago": [ + -14.2754786, + -170.7048298 + ], + "\u0411\u043e\u0440\u043e\u0432\u0438\u0447\u0438": [ + 58.389009, + 33.9068275 + ], + "\u0421\u043e\u043b\u0434\u0430\u0442\u0441\u043a\u0430\u044f \u0422\u0430\u0448\u043b\u0430": [ + 54.0113007, + 48.2098909 + ], + "Rio de Janeiro": [ + -22.9110137, + -43.2093727 + ], + "\u0413\u043e\u0440\u043e\u0434\u0441\u043a\u043e\u0439 \u043e\u043a\u0440\u0443\u0433 \u0423\u043b\u044c\u044f\u043d\u043e\u0432\u0441\u043a": [ + 54.280404, + 48.307491529888935 + ], + "\u0428\u0430\u0433\u043e\u043d\u0430\u0440": [ + 51.538721, + 92.9194074 + ], + "\u0420\u044f\u0437\u0430\u043d\u044c": [ + 54.6295687, + 39.7425039 + ], + "\u0427\u0435\u043b\u044f\u0431\u0438\u043d\u0441\u043a": [ + 55.1598408, + 61.4025547 + ], + "\u041a\u0430\u043b\u0434\u0430": [ + 53.7825414, + 47.5044578 + ], + "\u0415\u0440\u043c\u043e\u043b\u043e\u0432\u043a\u0430": [ + 43.5177345, + 40.0629439 + ], + "\u041a\u0430\u043d\u0430\u0434\u0435\u0439": [ + 53.1573701, + 47.5244226 + ], + "\u0421\u0438\u043c\u0431\u0438\u0440\u0441\u043a\u0438\u0439": [ + 52.260334, + 56.5533498 + ], + "\u042f\u0441\u043d\u044b\u0439": [ + 51.036957, + 59.873268 + ], + "\u0421\u044b\u0440\u0435\u0441\u0438": [ + 54.591522, + 46.457436 + ], + "\u0411\u0440\u044f\u043d\u0434\u0438\u043d\u043e": [ + 54.3817902, + 49.3712085 + ], + "\u0422\u0443\u043b\u0430": [ + 54.1930321, + 37.61754 + ], + "\u041d\u0430\u0432\u043e\u0438": [ + 42.0, + 64.0 + ], + "\u0411\u0430\u0440\u043d\u0430\u0443\u043b": [ + 53.3475493, + 83.7788448 + ], + "Qu\u00e9bec": [ + 52.4760892, + -71.8258668 + ], + "\u0418\u043b\u044e\u0448\u043a\u0438\u043d\u043e": [ + 58.6992, + 40.982079 + ], + "\u0414\u0436\u0430\u043d\u043a\u043e\u0439": [ + 45.7093755, + 34.3899131 + ], + "\u0411\u0430\u0432\u043b\u044b": [ + 54.4031069, + 53.2356367 + ], + "\u041f\u0443\u0448\u043a\u0438\u043d\u043e": [ + 56.0104274, + 37.8461892 + ], + "\u0422\u0432\u0435\u0440\u044c": [ + 56.8596713, + 35.89524161906262 + ], + "\u041f\u0440\u043e\u0441\u0442\u043e\u043a\u0432\u0430\u0448\u0438\u043d\u043e": [ + 47.2158138, + 38.8553584 + ], + "\u0422\u0435\u043d\u044c\u0433\u0443\u0448\u0435\u0432\u043e": [ + 54.767166, + 42.714211 + ], + "\u041a\u0438\u0435\u0432": [ + 50.4500336, + 30.5241361 + ], + "\u0412\u0441\u0435\u0432\u043e\u043b\u043e\u0436\u0441\u043a": [ + 60.024006, + 30.646042 + ], + "\u041a\u0430\u043d\u0430\u0448": [ + 49.1813403, + -0.3635615 + ], + "\u0422\u0431\u0438\u043b\u0438\u0441\u0438": [ + 41.6934591, + 44.8014495 + ], + "\u0422\u0430\u0442\u0430\u0440\u0441\u043a\u0438\u0439 \u0421\u0430\u0439\u043c\u0430\u043d": [ + 53.2902886, + 47.1307227 + ], + "\u0422\u0443\u0448\u043d\u0430": [ + 54.0237411, + 48.5187474 + ], + "\u0423\u0441\u0442\u044c-\u041a\u0430\u043c\u0435\u043d\u043e\u0433\u043e\u0440\u0441\u043a": [ + 49.9484438, + 82.6274791 + ], + "\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0410\u043a\u0441\u0430": [ + 54.6290172, + 47.4988956 + ], + "Saarlouis": [ + 49.3164661, + 6.749846 + ], + "\u0411\u0443\u0433\u0443\u043b\u044c\u043c\u0430": [ + 54.5384152, + 52.7955953 + ], + "\u041e\u0440\u0451\u043b": [ + 52.968017149999994, + 36.09949941816104 + ], + "\u0410\u043d\u0430\u0434\u044b\u0440\u044c": [ + 64.7316875, + 177.5060925 + ], + "\u041d\u0438\u043a\u043e\u043f\u043e\u043b\u044c": [ + 43.7070803, + 24.8996563 + ], + "Dortmund": [ + 51.5142273, + 7.4652789 + ], + "Chicago": [ + 41.8755616, + -87.6244212 + ], + "\u0412\u0435\u0441\u0435\u043b\u0430\u044f \u0416\u0438\u0437\u043d\u044c": [ + 46.224373, + 39.830135 + ], + "\u0421\u043b\u0443\u0446\u043a": [ + 53.0277354, + 27.5519747 + ], + "\u0422\u0430\u0433\u0430\u043d\u0440\u043e\u0433": [ + 47.2392184, + 38.87550310009352 + ], + "Antananarivo": [ + -18.9100122, + 47.5255809 + ], + "\u0428\u0438\u0433\u0430\u043b\u0438": [ + 54.9343725, + 48.5195429 + ], + "\u042d\u043d\u0433\u0435\u043b\u044c\u0441": [ + 51.5013775, + 46.1233093 + ], + "Rionegro": [ + 6.1536166, + -75.3741691 + ], + "\u041a\u043e\u0442\u043b\u0430\u0441": [ + 61.252151, + 46.647629 + ], + "\u0412\u044f\u0437\u043e\u0432\u043a\u0430": [ + 53.845055, + 55.866009 + ], + "\u0421\u0442\u0430\u0440\u043e\u0435 \u0415\u0440\u0435\u043c\u043a\u0438\u043d\u043e": [ + 54.3158382, + 49.2772411 + ], + "\u041a\u0443\u0440\u043e\u0432\u0441\u043a\u043e\u0435": [ + 55.5771391, + 38.9225824 + ], + "\u0421\u043c\u044b\u0448\u043b\u044f\u0435\u0432\u043a\u0430": [ + 53.7542621, + 47.7277817 + ], + "\u0419\u043e\u0448\u043a\u0430\u0440-\u041e\u043b\u0430": [ + 56.6328248, + 47.8972462 + ], + "\u041a\u0443\u043d\u0434\u044e\u043a\u043e\u0432\u043a\u0430": [ + 54.7221137, + 48.128383 + ], + "\u0411\u043e\u0440\u0436\u043e\u043c\u0438": [ + 41.8386946, + 43.3791739 + ], + "Kansas City": [ + 39.100105, + -94.5781416 + ], + "Roma": [ + 41.8933203, + 12.4829321 + ], + "\u041c\u0430\u0445\u0430\u0447\u043a\u0430\u043b\u0430": [ + 42.9830241, + 47.5048717 + ], + "Bratislava": [ + 48.1516988, + 17.1093063 + ], + "\u041d\u0438\u0436\u043d\u0438\u0439 \u0422\u0430\u0433\u0438\u043b": [ + 57.905149, + 59.9508466 + ], + "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0423\u0444\u0430\u043b\u0435\u0439": [ + 56.052029, + 60.226448 + ], + "Alanya": [ + 36.5436517, + 32.0019211 + ], + "\u0410\u0441\u0442\u0430\u043d\u0430 / \u041d\u0443\u0440-\u0421\u0443\u043b\u0442\u0430\u043d": [ + 51.1282205, + 71.4306682 + ], + "\u041c\u043e\u0437\u044b\u0440\u044c": [ + 52.0475482, + 29.2667179 + ], + "\u0421\u043e\u0441\u043d\u043e\u0432\u043a\u0430": [ + 56.2573802, + 51.2842677 + ], + "\u0421\u0438\u0441\u0442\u0435\u043c\u0430": [ + 53.1053415, + 60.2367386 + ], + "\u041e\u0440\u0435\u043d\u0431\u0443\u0440\u0433": [ + 51.7671248, + 55.0978517 + ], + "Essen": [ + 51.4582235, + 7.0158171 + ], + "\u041a\u0430\u043b\u0438\u043d\u0438\u043d\u0433\u0440\u0430\u0434": [ + 54.710128, + 20.5105838 + ], + "\u0412\u043e\u043b\u0433\u043e\u0434\u043e\u043d\u0441\u043a": [ + 47.5412272, + 42.22788957160185 + ], + "\u041c\u0435\u0436\u0434\u0443\u0440\u0435\u0447\u0435\u043d\u0441\u043a (\u043f\u043e\u0441\u0435\u043b\u043e\u043a)": [ + 53.2584965, + 49.1590363 + ], + "\u0421\u0430\u0440\u0430\u043f\u0443\u043b": [ + 56.4811552, + 53.782692709252615 + ], + "\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0427\u0438\u0440\u043a\u043b\u0435\u0439": [ + 53.1454836, + 47.0144756 + ], + "\u042e\u043b\u043e\u0432\u043e": [ + 53.9676299, + 46.4868784 + ], + "\u041a\u0430\u0440\u043b\u0438\u043d\u0441\u043a\u043e\u0435": [ + 53.994359, + 47.767279 + ], + "\u041a\u044b\u0448\u0442\u044b\u043c": [ + 55.7099215, + 60.5511275 + ], + "\u0421\u044b\u043a\u0442\u044b\u0432\u043a\u0430\u0440": [ + 61.6685237, + 50.8352024 + ], + "\u0411\u043e\u0440\u0438\u0441\u043b\u0430\u0432": [ + 49.2824381, + 23.4138765 + ], + "\u0420\u044f\u0437\u0430\u043d\u043e\u0432\u043e": [ + 55.4911577, + 37.5106717 + ], + "\u0421\u0443\u0445\u0430\u044f \u0422\u0435\u0440\u0435\u0448\u043a\u0430": [ + 52.9759033, + 47.4864101 + ], + "\u0422\u0430\u043c\u0431\u043e\u0432": [ + 52.731118499999994, + 41.434199146086904 + ], + "\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0422\u0435\u0440\u0435\u0448\u043a\u0430": [ + 52.897615, + 47.3785024 + ], + "\u0411\u0430\u043a\u0443": [ + 40.3755885, + 49.8328009 + ], + "\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u041c\u0435\u043b\u0435\u043a\u0435\u0441\u0441": [ + 54.307228, + 49.5303104 + ], + "Milano": [ + 45.4641943, + 9.1896346 + ], + "\u0412\u043e\u0440\u043e\u043d\u0435\u0436": [ + 51.6605982, + 39.2005858 + ], + "\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0421\u0430\u043d\u0442\u0438\u043c\u0438\u0440": [ + 54.27449, + 50.0919926 + ], + "\u041a\u0438\u0440\u0436\u0430\u0447": [ + 56.1592229, + 38.8721255 + ], + "\u041a\u043e\u043c\u0441\u043e\u043c\u043e\u043b\u044c\u0441\u043a\u043e\u0435": [ + 50.432305299999996, + 60.499133387206996 + ], + "\u041a\u0440\u043e\u043f\u043e\u0442\u043a\u0438\u043d": [ + 45.4344413, + 40.5750274 + ], + "\u0422\u0430\u0442\u0430\u0440\u0441\u0442\u0430\u043d": [ + 55.448217, + 50.4763591 + ], + "\u0428\u044b\u043c\u043a\u0435\u043d\u0442": [ + 42.3146962, + 69.5883282 + ], + "\u0410\u0440\u043c\u0430\u0432\u0438\u0440": [ + 44.9993585, + 41.1294061 + ], + "\u0411\u043e\u043b\u0433\u0430\u0440": [ + 42.6073975, + 25.4856617 + ], + "\u0410\u043a\u0442\u0430\u0443": [ + 43.85891105, + 51.09314386990394 + ], + "\u0413\u0440\u043e\u0437\u043d\u044b\u0439": [ + 43.3197031, + 45.6934308 + ], + "\u0417\u0430\u0440\u0435\u0447\u043d\u043e\u0435": [ + 54.573611, + 20.428056 + ], + "\u0411\u0443\u0434\u0435\u043d\u043d\u043e\u0432\u0441\u043a": [ + 44.780533, + 44.163357 + ], + "\u0413\u0435\u043b\u0435\u043d\u0434\u0436\u0438\u043a": [ + 44.5609447, + 38.0766832 + ], + "\u041a\u0440\u0435\u0441\u0442\u043e\u0432\u043e-\u0413\u043e\u0440\u043e\u0434\u0438\u0449\u0435": [ + 54.1850567, + 48.6267172 + ], + "\u0418\u0440\u0431\u0438\u0442": [ + 57.674042, + 63.063778 + ], + "\u0410\u0448\u0434\u043e\u0434": [ + 31.7977314, + 34.6529922 + ], + "\u041a\u043d\u044f\u0436\u0443\u0445\u0430": [ + 54.5623982, + 46.5628442 + ], + "\u0412\u0430\u043b\u044c\u0434\u0438\u0432\u0430\u0442\u0441\u043a\u043e\u0435": [ + 54.3498598, + 46.9939139 + ], + "\u0411\u0438\u0442\u043e\u043b\u0430": [ + 41.0316005, + 21.3302511 + ], + "Oxford": [ + 51.7520131, + -1.2578499 + ], + "\u041d\u0430\u0433\u043e\u0440\u043d\u044b\u0439": [ + 55.670368, + 37.61636 + ], + "\u0422\u0435\u0442\u044e\u0448\u0441\u043a\u043e\u0435": [ + 54.3125932, + 48.0115079 + ], + "\u0412\u0430\u043b\u0433\u0443\u0441\u0441\u044b": [ + 54.0607493, + 46.1960842 + ], + "\u0421\u0442\u0430\u0440\u044b\u0435 \u0410\u043b\u0433\u0430\u0448\u0438": [ + 54.662332, + 47.73995 + ], + "\u0413\u044f\u043d\u0434\u0436\u0430": [ + 40.6782547, + 46.35732298444202 + ], + "\u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u041a\u043b\u044e\u0447\u0438\u0449\u0438 (\u0441\u0435\u043b\u043e)": [ + 54.1373946, + 48.2375198 + ], + "\u0421\u0435\u0432\u0430\u0441\u0442\u043e\u043f\u043e\u043b\u044c": [ + 44.5655503, + 33.45959860374677 + ], + "Gab\u00fa": [ + 12.11703505, + -14.176250577969586 + ], + "\u041a\u043b\u0430\u0434\u0431\u0438\u0449\u0435": [ + 57.2968749, + 47.7681791 + ], + "\u041d\u0438\u043a\u043e\u043b\u0430\u0435\u0432\u043a\u0430": [ + 44.9688031, + 33.6071029 + ], + "\u041a\u043e\u043a\u0430\u043d\u0434": [ + 40.5408463, + 70.9473889 + ], + "\u0422\u0443\u0440\u043a\u043c\u0435\u043d\u0430\u0431\u0430\u0434": [ + 39.0733839, + 63.5831564 + ], + "Sfax": [ + 34.723238699999996, + 10.335847425638779 + ], + "\u0411\u0435\u043a\u0435\u0442\u043e\u0432\u043a\u0430": [ + 52.8674308, + 44.5360849 + ], + "\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u041b\u0435\u0432\u0448\u0438\u043d\u043a\u0430": [ + 53.7761093, + 50.4996869 + ], + "Medell\u00edn": [ + 6.2443382, + -75.573553 + ], + "\u0411\u0430\u043b\u0430\u043a\u043e\u0432\u043e": [ + 52.01812, + 47.819141 + ], + "\u041a\u0430\u043d\u0438\u0431\u0430\u0434\u0430\u043c": [ + 40.2908394, + 70.4254538 + ], + "\u0411\u0435\u0437\u0435\u043d\u0447\u0443\u043a": [ + 52.985322, + 49.4322968 + ], + "\u0423\u043b\u044c\u044f\u043d\u043e\u0432\u0441\u043a\u0438\u0439": [ + 53.3689468, + 48.9257301 + ], + "\u041e\u043f\u0442\u0438\u043d\u0430 \u041f\u0443\u0441\u0442\u044b\u043d\u044c": [ + 54.050759, + 35.8323725 + ], + "\u0413\u0440\u043e\u0434\u043d\u043e": [ + 53.6834599, + 23.8342648 + ], + "Lublin": [ + 51.250559, + 22.5701022 + ], + "\u0418\u0436\u0435\u0432\u0441\u043a": [ + 56.86051745, + 53.197730742455306 + ], + "\u041d\u043e\u0433\u0438\u043d\u0441\u043a": [ + 55.8553511, + 38.4411898 + ], + "\u0411\u0435\u0440\u0434\u0441\u043a": [ + 54.75795, + 83.1068095 + ], + "Vaasa": [ + 63.081820949999994, + 21.479812522296804 + ], + "\u041f\u043e\u043a\u0440\u043e\u0432\u0441\u043a\u043e\u0435": [ + 58.2049201, + 48.1972844 + ], + "\u0410\u0434\u043b\u0435\u0440\u043e\u0432\u043a\u0430": [ + 55.0255097, + 36.3367726 + ], + "\u0411\u043e\u0433\u0434\u0430\u0448\u043a\u0438\u043d\u043e": [ + 54.6132144, + 47.675192 + ], + "\u0421\u0442\u0430\u0440\u043e\u044e\u0440\u044c\u0435\u0432\u043e": [ + 53.3227111, + 40.6992188 + ], + "\u0411\u0435\u043b\u043e\u0435 \u041e\u0437\u0435\u0440\u043e": [ + 60.18058895, + 37.62384824186701 + ], + "Saint Petersburg": [ + 27.7703796, + -82.6695085 + ] +} \ No newline at end of file diff --git a/main.py b/main.py index 90fd6a7..e06bc69 100644 --- a/main.py +++ b/main.py @@ -1,12 +1,171 @@ #!/usr/bin/env python3 +import json import os import sys +from datetime import date, datetime +import numpy as np import pandas as pd +from geopy.extra.rate_limiter import RateLimiter +from geopy.geocoders import Nominatim +EMPTY_AGE = 0 +UNIVERSITY_AGE = 21 +SCHOOL_BEGIN_AGE = 7 +SCHOOL_GRADUATED_AGE = 17 -def __main(json_file): +geolocator = Nominatim(user_agent="MyApp") +geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1) + +geo_cache = {} + + +def is_empty_str(value): + if value is None: + return True + return len(str(value).strip()) == 0 + + +def is_empty_number(value): + if is_empty_str(value): + return True + str_val = str(value) + if str_val.startswith('-'): + str_val = str_val.replace('-', '', 1) + return not str_val.isnumeric() + + +def is_empty_collection(collection): + if is_empty_str(collection): + return True + if not isinstance(collection, list): + return True + return len(collection) == 0 + + +def get_age(date_str): + if is_empty_str(date_str): + return EMPTY_AGE + today = date.today() + birthdate = datetime.strptime(date_str, '%d.%m.%Y') + age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day)) + return age + + +def get_years(year1, year2): + if year1 >= year2: + return year1 - year2 + if year2 >= year1: + return year2 - year1 + + +def get_age_from_education(education, value, additional_value): + if is_empty_collection(education): + return EMPTY_AGE + for item in education: + graduation = item[value] + if is_empty_number(graduation): + return EMPTY_AGE + return get_years(graduation, date.today().year) + additional_value + + +def prepare_dataset_age(df): + df['age'] = df.loc[:, 'bdate'].apply(get_age) + + university_mask = (df['age'] == EMPTY_AGE) & (df['universities'].str.len() > 0) + df.loc[university_mask, 'age'] = df.loc[university_mask, 'universities'] \ + .apply(lambda val: get_age_from_education(val, 'graduation', UNIVERSITY_AGE)) + + school_mask_1 = (df['age'] == EMPTY_AGE) & (df['schools'].str.len() > 0) + df.loc[school_mask_1, 'age'] = df.loc[school_mask_1, 'schools'] \ + .apply(lambda val: get_age_from_education(val, 'year_graduated', SCHOOL_GRADUATED_AGE)) + + school_mask_2 = (df['age'] == EMPTY_AGE) & (df['schools'].str.len() > 0) + df.loc[school_mask_2, 'age'] = df.loc[school_mask_2, 'schools'] \ + .apply(lambda val: get_age_from_education(val, 'year_from', SCHOOL_BEGIN_AGE)) + + return df + + +def prepare_dataset_status(df): + is_university_mask = ((df['age'] >= UNIVERSITY_AGE) | (df['age'] == EMPTY_AGE)) & \ + ((df['universities'].str.len() > 0) | (df['occupation_type'] == 'university')) + df['is_university'] = np.where(is_university_mask, True, False) + + is_work_mask = ((df['age'] > SCHOOL_GRADUATED_AGE) | (df['age'] == EMPTY_AGE)) & \ + ((df['is_university']) | (df['occupation_type'] == 'work')) | \ + (df['age'] > UNIVERSITY_AGE) + df['is_work'] = np.where(is_work_mask, True, False) + + is_student_mask = ((df['occupation_type'] == 'university') & + ((df['age'] >= SCHOOL_GRADUATED_AGE) & (df['age'] <= UNIVERSITY_AGE))) + df['is_student'] = np.where(is_student_mask, True, False) + + is_schoolboy_mask = ((df['age'] < SCHOOL_GRADUATED_AGE) & (df['age'] != EMPTY_AGE)) | \ + ((df['age'] == EMPTY_AGE) & (df['occupation_type'] == 'school')) + df['is_schoolboy'] = np.where(is_schoolboy_mask, True, False) + + return df + + +def load_geo_cache(json_file): + with open(json_file, 'r') as rf: + geo_cache.update(json.load(rf)) + + +def save_geo_cache(json_file): + with open(json_file, 'w') as wf: + json.dump(geo_cache, wf) + print('Geocache saved') + + +def update_geo_cache(cities, json_file): + is_changed = False + for city in cities: + if is_empty_str(city): + continue + result = geo_cache.get(city) + if result is not None: + continue + print(f'{len(geo_cache.keys())}/{len(cities)} - Try to load geocode for {city}') + location = geocode(city) + result = (location.latitude, location.longitude) + geo_cache[city] = result + is_changed = True + if len(geo_cache.keys()) % 50 == 0: + save_geo_cache(json_file) + + if is_changed: + save_geo_cache(json_file) + + +def prepare_dataset_location(df): + json_file = 'geocache.json' + + load_geo_cache(json_file) + + update_geo_cache(df['city'].unique().tolist(), json_file) + + df['location'] = df['city'] \ + .apply(lambda val: '' if is_empty_str(val) else geo_cache[val]) + + return df + + +def prepare_dataset(json_file): df = pd.read_json(json_file) + + df = prepare_dataset_age(df) + + df = prepare_dataset_status(df) + + df = prepare_dataset_location(df) + + return df + + +def __main(json_file): + df = prepare_dataset(json_file) print('done') diff --git a/requirements.txt b/requirements.txt index 27be6d6..63d178f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -pandas==2.0.1 \ No newline at end of file +pandas==2.0.1 +geopy==2.3.0 \ No newline at end of file