πŸπŸ—Ί Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Data Scientists: Π²Π²ΠΎΠ΄Π½ΠΎΠ΅ руководство с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… способа прСобразования адрСса Π² ΡˆΠΈΡ€ΠΎΡ‚Ρƒ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Geopy.

Когда Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π±Π°Π·Π°Ρ… содСрТится вся нСобходимая информация для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Data Science. Π§Π°Ρ‰Π΅ всСго Π²Ρ‹ располагаСтС частичной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±ΠΎΠ³Π°Ρ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ характСристиками.

ΠœΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ситуация, ΠΊΠΎΠ³Π΄Π° Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… содСрТит адрСс, Π½ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΡˆΠΈΡ€ΠΎΡ‚Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Π° ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. Π’ этом случаС ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом для дополнСния Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ этой ΠΏΠ°Ρ€Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚. ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ этот процСсс прСобразования адрСса Π² ΡˆΠΈΡ€ΠΎΡ‚Ρƒ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρƒ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ вострСбовано Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… областях, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π½Π΅Π΄Π²ΠΈΠΆΠΈΠΌΠΎΡΡ‚ΡŒ, финансы ΠΈ логистика. Π‘Π΅Π· этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π²Ρ‹ Π½Π΅ смоТСтС Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅. Π’ этом руководствС ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π° Python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Geopy.

🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»
πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»
ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»
🐍🧩 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python
Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅?

Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это процСсс прСобразования адрСсов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«ΠŸΠ°Ρ€ΠΊΠΎΠ²Π°Ρ Π΄ΠΎΡ€ΠΎΠ³Π° АмфитСатр, 1600, Π³ΠΎΡ€ΠΎΠ΄ ΠœΠ°ΡƒΠ½Ρ‚ΠΈΠ½-Π’ΡŒΡŽ, ΡˆΡ‚Π°Ρ‚ ΠšΠ°Π»ΠΈΡ„ΠΎΡ€Π½ΠΈΡΒ») Π² гСографичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡˆΠΈΡ€ΠΎΡ‚Π° 37.423021 ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Π° -122.083739), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для размСщСния ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ² Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ ΠΈΠ»ΠΈ позиционирования ΠΊΠ°Ρ€Ρ‚Ρ‹. ΠŸΡ€ΠΎΡ‰Π΅ говоря, это Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСсс прСобразования описания физичСского адрСса Π² мСстополоТСниС Π½Π° повСрхности Π—Π΅ΠΌΠ»ΠΈ.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ гСокодирования часто Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡŽ пространствСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡƒΠ»ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ Π·Π΅ΠΌΠ΅Π»ΡŒΠ½Ρ‹Π΅ участки, Π² гСографичСскиС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠ°Ρ€Ρ‚Ρ‹. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ выводятся Π² Π²ΠΈΠ΄Π΅ числовых ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹Ρ… для использования Π² пространствСнном Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΈΠ»ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Ρ€Ρ‚.

ΠŸΡ€ΠΈ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ источники Π΄Π°Π½Π½Ρ‹Ρ… для прСобразования адрСса Π² гСографичСскоС мСстополоТСниС. ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ источником являСтся справочная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠ»ΠΈΡ†, содСрТащая названия ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ адрСсов Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΡ€ΡƒΠ³Π° ΠΈΠ»ΠΈ Ρ€Π°ΠΉΠΎΠ½Π°. Π”Ρ€ΡƒΠ³ΠΈΠ΅ источники Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… индСксов, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°Π·Π²Π°Π½ΠΈΠΉ Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ² ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π°ΠΆΠ½Ρ‹Ρ… мСст (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°Ρ€ΠΊΠΎΠ² ΠΈΠ»ΠΈ Π΄ΠΎΡΡ‚ΠΎΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ).

Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ адрСсу. Оно Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² пространствСнном Π°Π½Π°Π»ΠΈΠ·Π΅, поискС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для Π°Π½Π°Π»ΠΈΠ·Π° дСмографичСской ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с Ρ†Π΅Π»ΡŒΡŽ провСдСния Ρ†Π΅Π»Π΅Π²Ρ‹Ρ… ΠΌΠ°Ρ€ΠΊΠ΅Ρ‚ΠΈΠ½Π³ΠΎΠ²Ρ‹Ρ… ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² доставки. Π’ сфСрС общСствСнной бСзопасности Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния мСстополоТСния Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΡΡˆΠ΅ΡΡ‚Π²ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ блиТайшиС слуТбы спасСния.

Π’ контСкстС Data Science Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ этапом Π² процСссС создания гСопространствСнных Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… областях, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π΅Π½ Π½Π° Π½Π΅Π΄Π²ΠΈΠΆΠΈΠΌΠΎΡΡ‚ΡŒ, оптимизация ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² доставки ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ»Π°Π½ΠΎΠ² рСагирования Π½Π° стихийныС бСдствия.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Geopy?

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Geopy

Geopy – это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π°ΡΡΡ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ мСстополоТСния ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСрвисов гСокодирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Google Maps, Open StreeMap ΠΈ ArcGIS.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ массив Π΄Π°Π½Π½Ρ‹Ρ… канадских ΠΌΡƒΠ·Π΅Π΅Π² с сайта Kaggle. Π’ Π½Π΅ΠΌ содСрТится информация ΠΎ музСях, располоТСнных Π² КанадС. Π­Ρ‚Π° ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° ΠΌΡƒΠ·Π΅Π΅Π² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° для прогнозирования Ρ†Π΅Π½ Π½Π° ТильС Airbnb Π² Π’ΠΎΡ€ΠΎΠ½Ρ‚ΠΎ. НапримСр, Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π°Ρ€Π΅Π½Π΄Ρ‹ Тилья увСличиваСтся с ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ Ρ‚Π°ΠΊΠΈΠΌ интСрСсным мСстам, ΠΊΠ°ΠΊ ΠΌΡƒΠ·Π΅ΠΈ, рСстораны, ΠΊΠ°Ρ„Π΅ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ:

import pandas as pd
import geopy

l_cols= ['Name','Street Address','City','State','Zipcode']
df = pd.read_csv('/kaggle/input/canada-museums/museums list CAN.csv', encoding = "ISO-8859-1",usecols=l_cols)
df = df[df.City=='Toronto']
df.head()
Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…

На ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π²Ρ‹ΡˆΠ΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ столбцы содСрТат ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ музСя, адрСс ΡƒΠ»ΠΈΡ†Ρ‹, Π³ΠΎΡ€ΠΎΠ΄, ΡˆΡ‚Π°Ρ‚ ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ индСкс.

Для Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… дСйствий Π½Π°ΠΌ понадобится ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ столбСц, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ всю ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Как ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Π‘Π°ΠΌΡ‹ΠΉ эффСктивный способ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… столбцов – это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pandas.series.str.cat(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΈΠΌ столбцом ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ:

df['Country'] = 'Canada'
l_cols_concat = ['Street Address','City','State','Zipcode','Country']
df['unique_address'] = df['Name'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
df.head()

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ 'address1', которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки:

address1 = df['unique_address'].iloc[0]
print(address1)
# Bizune Event Gallery,452 Richmond St W,Toronto,ON,M5V 1Y1,Canada

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡˆΠ°Π³Π°Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ сСрвисами гСокодирования ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсу. Когда станСт понятно, ΠΊΠ°ΠΊ Geopy опрСдСляСт мСстополоТСниС, это ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Ρ†Π΅Π»ΠΎΠΌΡƒ столбцу DataFrame Pandas. ΠœΡ‹ протСстируСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΡ… Π³Π΅ΠΎΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²:

  1. Google Maps
  2. OpenStreetMap
  3. ArcGIS

Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Google Maps API

Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Google Maps API

Π‘Π°ΠΌΡ‹ΠΉ популярный ΠΌΠ΅Ρ‚ΠΎΠ΄ прСобразования адрСсов Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ – это использованиС Google Maps API.

Π₯отя Google Maps прСдоставляСт ΠΏΠ»Π°Ρ‚Π½Ρ‹Π΅ услуги, ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ создании Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ 200 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² Π² качСствС бонусных ΠΊΡ€Π΅Π΄ΠΈΡ‚ΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ сСрвису, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Google Maps. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ руководство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π² процСссС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π° API.

GM_API_KEY = 'your_api_key'
from geopy.geocoders import GoogleV3
geolocator = GoogleV3(api_key=GM_API_KEY)

GoogleV3 – это класс, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для использования API Google Maps v3. Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ мСстополоТСниС ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ адрСса:

location = geolocator.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

ПослС этого ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ для значСния unique_address, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ создали Ρ€Π°Π½Π΅Π΅.

def service_geocode(g_locator, address):
    location = g_locator.geocode(address)
    if location!=None:
      return (location.latitude, location.longitude)
    else:
      return np.NaN

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ apply(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΊΠΎ всСм строкам unique_address:

df['LAT_LON'] = df['unique_address'].apply(lambda x:service_geocode(geolocator,x))
df[['unique_address','LAT_LON']].head()

Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ API OpenStreetMap

Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ API OpenStreetMap

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ OpenStreetMap – самая большая ΠΈ свободно рСдактируСмая гСографичСская Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, API являСтся бСсплатным. Π§Ρ‚ΠΎΠ±Ρ‹ Π³Π΅ΠΎΠ»ΠΎΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ адрСс, достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² качСствС исходных Π΄Π°Π½Π½Ρ‹Ρ… для класса Nominatim ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ вашСго Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° OSM, Π° Π½Π΅ ΠΊΠ»ΡŽΡ‡ API:

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="your_email")
location = geolocator.geocode(address1)
print(location)
# None

К соТалСнию, мСстополоТСниС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ API OpenStreetMap, Ρ€Π°Π²Π½ΠΎ None, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ распознаСт адрСс.

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, этот API Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСстополоТСниС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° адрСсов ΡƒΠ»ΠΈΡ† Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ достаточного ΠΎΡ…Π²Π°Ρ‚Π° адрСсов Π²ΠΎ всСх Ρ€Π°ΠΉΠΎΠ½Π°Ρ….

По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ unique_address_osm с мСньшим количСством ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ:

l_cols_concat = ['City','State','Country']
df['unique_address_osm'] = df['Street Address'].str.cat(others=df[l_cols_concat], sep=',',na_rep='')
address1_osm = df['unique_address_osm'].iloc[0]

ПослС этого ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ адрСс ΠΈ снова пытаСмся ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΡˆΠΈΡ€ΠΎΡ‚Ρƒ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρƒ ΠΈΠ· адрСса ΡƒΠ»ΠΈΡ†Ρ‹:

address1_osm = df['unique_address_osm'].iloc[0]
location = geolocator.geocode(address1_osm)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

Как ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ случаС, ΠΌΡ‹ примСняСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ service_geocode() ΠΊΠΎ всСм столбцам unique_address_osm:

df['LAT_LON_osm'] = df['unique_address_osm'].apply(lambda x: service_geocode(geolocator,x))
df[['unique_address_osm','LAT_LON','LAT_LON_osm']].head()

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ музСя, OpenStreetMap Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ GoogleMapsAPI.

Π“Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ArcGIS API

ArcGIS – это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ гСопространствСнныС Π΄Π°Π½Π½Ρ‹Π΅. Оно Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт сСрвисы опрСдСлСния мСстополоТСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Google Maps ΠΈ OpenStreetMap.

from geopy.geocoders import ArcGIS
geolocator_arcgis = ArcGIS()
location = geolocator_arcgis.geocode(address1)
print('Latitude: '+str(location.latitude)+', Longitude: '+str(location.longitude))

На этот Ρ€Π°Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для всСх адрСсов:

df['LAT_LON_arcgis'] = df['unique_address'].apply(lambda x: service_geocode(geolocator_arcgis,x))
df[['unique_address','LAT_LON','LAT_LON_osm','LAT_LON_arcgis']].head()

Взглянув Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ строки массива Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ArcGIS, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Ρ€Π°Π½Π΅Π΅, присутствуСт лишь нСбольшая Ρ€Π°Π·Π½ΠΈΡ†Π°.

Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Geopy – Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ гСодСзичСскоС расстояниС, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠ°Ρ€Π°ΠΌΠΈ (ΡˆΠΈΡ€ΠΎΡ‚Π° ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Π°).

from geopy.distance import geodesic
point1 = df.LAT_LON_arcgis.iloc[0]
point2 = df.LAT_LON_arcgis.iloc[1]
distance = geodesic(point1, point2)
print('The distance between {} and {} is {} meters'.format(df.Name.iloc[0],df.Name.iloc[1],distance.meters))

РасстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя музСями составляСт ΠΎΠΊΠΎΠ»ΠΎ 2-Ρ… ΠΊΠΈΠ»ΠΎΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

***

Π’ΠΎΡ‚ ΠΈ всС! Π’Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… способа прСобразования адрСса Π² ΡˆΠΈΡ€ΠΎΡ‚Ρƒ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Geopy. Π­Ρ‚ΠΎ лишь отправная Ρ‚ΠΎΡ‡ΠΊΠ° для Π±ΠΎΠ»Π΅Π΅ слоТного ΠΈ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° гСопространствСнных Π΄Π°Π½Π½Ρ‹Ρ….

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
11 дСкабря 2018

ООП Π½Π° Python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python допускаСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ Π² Π΅Π³ΠΎ основС...
admin
28 июня 2018

3 самых Π²Π°ΠΆΠ½Ρ‹Ρ… сфСры примСнСния Python: возмоТности языка

БущСствуСт мноТСство областСй примСнСния Python, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ особСнно...
admin
13 фСвраля 2017

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Пошаговая инструкция для всСх, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒΒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python...