
์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- requests
- pandas


์ง๋์ ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ์์ API๋ก ๋ฐ์์จ ์ฅ์ ์ธ ๊ตฌ์ธ ์ค์๊ฐ ํํฉ ๋ฐ์ดํฐ์ comAddr(ํ์ฌ์ฃผ์)๋ฅผ ์ง๋์ ๋ง์ปค๋ก ํ์ํ๊ธฐ ์ํด ์๋์ ๊ฒฝ๋๋ก ๋ณํํ์ฌ ํ ์ด๋ธ์ ์ ์ฅํด ๋ณด๋ ค๊ณ ํ๋ค. ๋ค์ด๋ฒ Geocoding API๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
01. ๋ค์ด๋ฒ Geocoding API ํค ๋ฐ๊ธ๋ฐ๊ธฐ
๋จผ์ , ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ Geocoding API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ผ ํ๋ค.
1. ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์ ์ ์ํ์ฌ ๋ก๊ทธ์ธํ๋ค.

2. ์ฝ์์์ Application ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์
๋ฑ๋ก ๋ฉ๋ด๋ก ์ด๋, ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฑ๋กํ๊ณ Geocoding API ์ฌ์ฉ์ ํ์ฑํํ๋ค.


3. ๋ฐ๊ธ๋ ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ ํ์ธํ๋ค.

์ด์ API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ผ๋, ํ์ด์ฌ ์ฝ๋์์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ Geocoding API๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ๋ค.
02. ํ์ด์ฌ ์ฝ๋๋ก ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํํ๊ธฐ
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
๋จผ์ , HTTP ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ค.
pip install requests
๋ค์ด๋ฒ Geocoding API๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ๊ณ ์ ๋ ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํํ๋ ํ์ด์ฌ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์.
import requests
# ๋ค์ด๋ฒ API ํค ์ค์
client_id = 'YOUR_CLIENT_ID' # ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID
client_secret = 'YOUR_CLIENT_SECRET' # ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ
# ๊ณ ์ ๋ฌธ์์ด ์ฃผ์
address = '์ถฉ์ฒญ๋ถ๋ ์ฒญ์ฃผ์ ํฅ๋๊ตฌ ์ฐ๋จ๋ก 54 ํ๊ตญํด๋ฆฌํ
๋ํ ์ฒญ์ฃผ์บ ํผ์ค'
# ๋ค์ด๋ฒ Geocoding API ํธ์ถ ํจ์ ์ ์
def geocode_address(address):
url = f"https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query={address}"
headers = {
'X-NCP-APIGW-API-KEY-ID': client_id,
'X-NCP-APIGW-API-KEY': client_secret
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
if data['addresses']:
location = data['addresses'][0]
return location['y'], location['x']
else:
return None, None
else:
print(f"Error {response.status_code}: {response.text}")
return None, None
# ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํ
latitude, longitude = geocode_address(address)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
if latitude and longitude:
print(f"์ฃผ์: {address}")
print(f"์๋: {latitude}")
print(f"๊ฒฝ๋: {longitude}")
else:
print("์ขํ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.")
์ฝ๋ ์ค๋ช
- requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ด๋ฒ Geocoding API๋ฅผ ํธ์ถ
- ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ ์ค์
- ๋ณํํ ๊ณ ์ ๋ฌธ์์ด ์ฃผ์๋ฅผ address ๋ณ์์ ์ ์ฅ
- geocode_address ํจ์๋ฅผ ์ ์ํ์ฌ ์ฃผ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ๋ค์ด๋ฒ Geocoding API๋ฅผ ํธ์ถํ์ฌ JSON ์๋ต์ ์ฒ๋ฆฌ
- ์๋ต์์ ์๋(y)์ ๊ฒฝ๋(x) ๊ฐ์ ์ถ์ถํ์ฌ ๋ฐํ
- ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํํ ํ, ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
03. ์ง๋์์ ๊ฒฐ๊ณผ ํ์ธํ๊ธฐ
์คํ ๊ฒฐ๊ณผ

๋ณํ๋ ์๋์ ๊ฒฝ๋๋ฅผ ๋ค์ด๋ฒ์ง๋์ ๊ฒ์ํ์ฌ ์ ๋๋ก ๋ณํ๋ ๊ฒ์ธ์ง ํ์ธํด ๋ณด์.

๊ฒ์ ๊ฒฐ๊ณผ ํ๊ตญํด๋ฆฌํ ๋ํ ์ฒญ์ฃผ์บ ํผ์ค๋ก ์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
04. ๋ฐ์ดํฐํ๋ ์์ ์ฃผ์๋ฅผ ํ ๋ฒ์ ์ขํ๋ก ๋ณํํ๊ธฐ
์๋์ ๊ฒฝ๋๊ฐ ์ ๋ณํ๋๋ ๊ฒ์ ํ์ธํ์์ผ๋ ์ด๋ฒ์๋ ๋ฐ์ดํฐํ๋ ์์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ฃผ์๋ฅผ ํ ๋ฒ์ ์ขํ๋ก ๋ณํํ์ฌ ์๋, ๊ฒฝ๋ ์นผ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด ๋ณด์.
import pandas as pd
import requests
# ๋ค์ด๋ฒ API ํค ์ค์
client_id = 'YOUR_CLIENT_ID' # ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID
client_secret = 'YOUR_CLIENT_SECRET' # ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ
# ๋ค์ด๋ฒ Geocoding API ํธ์ถ ํจ์ ์ ์
def geocode_address(address):
url = f"https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query={address}"
headers = {
'X-NCP-APIGW-API-KEY-ID': client_id,
'X-NCP-APIGW-API-KEY': client_secret
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
if data['addresses']:
location = data['addresses'][0]
return location['y'], location['x']
else:
return None, None
else:
print(f"Error {response.status_code}: {response.text}")
return None, None
# ๋ฐ์ดํฐํ๋ ์์ ์๋์ ๊ฒฝ๋ ์ปฌ๋ผ ์ถ๊ฐ
df['latitude'], df['longitude'] = zip(*df['compAddr'].apply(geocode_address))
์ฝ๋ ์ค๋ช
- pandas์ requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํ๋ค.
- ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ ์ค์ ํ๋ค.
- geocode_address ํจ์๋ฅผ ์ ์ํ์ฌ ์ฃผ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ๋ค์ด๋ฒ Geocoding API๋ฅผ ํธ์ถํ์ฌ JSON ์๋ต์ ์ฒ๋ฆฌํ๋ค.
- ์๋ต์์ ์๋(y)์ ๊ฒฝ๋(x) ๊ฐ์ ์ถ์ถํ์ฌ ๋ฐํํ๋ค.
- ๋ฐ์ดํฐํ๋ ์์ comAddr ์นผ๋ผ์ apply ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ฃผ์์ ๋ํด geocode_address ํจ์๋ฅผ ์ ์ฉํ๋ค. ๊ฒฐ๊ณผ๋ก ์ป์ ์๋์ ๊ฒฝ๋๋ฅผ zip ํจ์๋ก ํ์ด์ ๊ฐ๊ฐ latitude์ longitude ์ปฌ๋ผ์ ์ถ๊ฐํ๋ค.
๊ฒฐ๊ณผ

latitude์ longitude ์ปฌ๋ผ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'๐ป Programming > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Python๊ณผ CSV ํ์ผ์ ํ์ฉํ MySQL INSERT ์ฟผ๋ฆฌ ์์ฑ ๋ฐฉ๋ฒ (0) | 2024.07.16 |
---|---|
[Python] googletrans๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ (1) (0) | 2024.07.03 |

์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- requests
- pandas


์ง๋์ ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ์์ API๋ก ๋ฐ์์จ ์ฅ์ ์ธ ๊ตฌ์ธ ์ค์๊ฐ ํํฉ ๋ฐ์ดํฐ์ comAddr(ํ์ฌ์ฃผ์)๋ฅผ ์ง๋์ ๋ง์ปค๋ก ํ์ํ๊ธฐ ์ํด ์๋์ ๊ฒฝ๋๋ก ๋ณํํ์ฌ ํ ์ด๋ธ์ ์ ์ฅํด ๋ณด๋ ค๊ณ ํ๋ค. ๋ค์ด๋ฒ Geocoding API๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
01. ๋ค์ด๋ฒ Geocoding API ํค ๋ฐ๊ธ๋ฐ๊ธฐ
๋จผ์ , ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ Geocoding API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ผ ํ๋ค.
1. ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์ ์ ์ํ์ฌ ๋ก๊ทธ์ธํ๋ค.

2. ์ฝ์์์ Application ์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์
๋ฑ๋ก ๋ฉ๋ด๋ก ์ด๋, ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฑ๋กํ๊ณ Geocoding API ์ฌ์ฉ์ ํ์ฑํํ๋ค.


3. ๋ฐ๊ธ๋ ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ ํ์ธํ๋ค.

์ด์ API ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ผ๋, ํ์ด์ฌ ์ฝ๋์์ ์ด๋ฅผ ์ฌ์ฉํ์ฌ Geocoding API๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ๋ค.
02. ํ์ด์ฌ ์ฝ๋๋ก ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํํ๊ธฐ
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
๋จผ์ , HTTP ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ค.
pip install requests
๋ค์ด๋ฒ Geocoding API๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ๊ณ ์ ๋ ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํํ๋ ํ์ด์ฌ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์.
import requests
# ๋ค์ด๋ฒ API ํค ์ค์
client_id = 'YOUR_CLIENT_ID' # ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID
client_secret = 'YOUR_CLIENT_SECRET' # ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ
# ๊ณ ์ ๋ฌธ์์ด ์ฃผ์
address = '์ถฉ์ฒญ๋ถ๋ ์ฒญ์ฃผ์ ํฅ๋๊ตฌ ์ฐ๋จ๋ก 54 ํ๊ตญํด๋ฆฌํ
๋ํ ์ฒญ์ฃผ์บ ํผ์ค'
# ๋ค์ด๋ฒ Geocoding API ํธ์ถ ํจ์ ์ ์
def geocode_address(address):
url = f"https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query={address}"
headers = {
'X-NCP-APIGW-API-KEY-ID': client_id,
'X-NCP-APIGW-API-KEY': client_secret
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
if data['addresses']:
location = data['addresses'][0]
return location['y'], location['x']
else:
return None, None
else:
print(f"Error {response.status_code}: {response.text}")
return None, None
# ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํ
latitude, longitude = geocode_address(address)
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
if latitude and longitude:
print(f"์ฃผ์: {address}")
print(f"์๋: {latitude}")
print(f"๊ฒฝ๋: {longitude}")
else:
print("์ขํ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.")
์ฝ๋ ์ค๋ช
- requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ด๋ฒ Geocoding API๋ฅผ ํธ์ถ
- ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ ์ค์
- ๋ณํํ ๊ณ ์ ๋ฌธ์์ด ์ฃผ์๋ฅผ address ๋ณ์์ ์ ์ฅ
- geocode_address ํจ์๋ฅผ ์ ์ํ์ฌ ์ฃผ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ๋ค์ด๋ฒ Geocoding API๋ฅผ ํธ์ถํ์ฌ JSON ์๋ต์ ์ฒ๋ฆฌ
- ์๋ต์์ ์๋(y)์ ๊ฒฝ๋(x) ๊ฐ์ ์ถ์ถํ์ฌ ๋ฐํ
- ์ฃผ์๋ฅผ ์ขํ๋ก ๋ณํํ ํ, ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
03. ์ง๋์์ ๊ฒฐ๊ณผ ํ์ธํ๊ธฐ
์คํ ๊ฒฐ๊ณผ

๋ณํ๋ ์๋์ ๊ฒฝ๋๋ฅผ ๋ค์ด๋ฒ์ง๋์ ๊ฒ์ํ์ฌ ์ ๋๋ก ๋ณํ๋ ๊ฒ์ธ์ง ํ์ธํด ๋ณด์.

๊ฒ์ ๊ฒฐ๊ณผ ํ๊ตญํด๋ฆฌํ ๋ํ ์ฒญ์ฃผ์บ ํผ์ค๋ก ์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
04. ๋ฐ์ดํฐํ๋ ์์ ์ฃผ์๋ฅผ ํ ๋ฒ์ ์ขํ๋ก ๋ณํํ๊ธฐ
์๋์ ๊ฒฝ๋๊ฐ ์ ๋ณํ๋๋ ๊ฒ์ ํ์ธํ์์ผ๋ ์ด๋ฒ์๋ ๋ฐ์ดํฐํ๋ ์์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ฃผ์๋ฅผ ํ ๋ฒ์ ์ขํ๋ก ๋ณํํ์ฌ ์๋, ๊ฒฝ๋ ์นผ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด ๋ณด์.
import pandas as pd
import requests
# ๋ค์ด๋ฒ API ํค ์ค์
client_id = 'YOUR_CLIENT_ID' # ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID
client_secret = 'YOUR_CLIENT_SECRET' # ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ
# ๋ค์ด๋ฒ Geocoding API ํธ์ถ ํจ์ ์ ์
def geocode_address(address):
url = f"https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query={address}"
headers = {
'X-NCP-APIGW-API-KEY-ID': client_id,
'X-NCP-APIGW-API-KEY': client_secret
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
if data['addresses']:
location = data['addresses'][0]
return location['y'], location['x']
else:
return None, None
else:
print(f"Error {response.status_code}: {response.text}")
return None, None
# ๋ฐ์ดํฐํ๋ ์์ ์๋์ ๊ฒฝ๋ ์ปฌ๋ผ ์ถ๊ฐ
df['latitude'], df['longitude'] = zip(*df['compAddr'].apply(geocode_address))
์ฝ๋ ์ค๋ช
- pandas์ requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํ๋ค.
- ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ ํ๋ซํผ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID์ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ์ ์ค์ ํ๋ค.
- geocode_address ํจ์๋ฅผ ์ ์ํ์ฌ ์ฃผ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ , ๋ค์ด๋ฒ Geocoding API๋ฅผ ํธ์ถํ์ฌ JSON ์๋ต์ ์ฒ๋ฆฌํ๋ค.
- ์๋ต์์ ์๋(y)์ ๊ฒฝ๋(x) ๊ฐ์ ์ถ์ถํ์ฌ ๋ฐํํ๋ค.
- ๋ฐ์ดํฐํ๋ ์์ comAddr ์นผ๋ผ์ apply ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ฃผ์์ ๋ํด geocode_address ํจ์๋ฅผ ์ ์ฉํ๋ค. ๊ฒฐ๊ณผ๋ก ์ป์ ์๋์ ๊ฒฝ๋๋ฅผ zip ํจ์๋ก ํ์ด์ ๊ฐ๊ฐ latitude์ longitude ์ปฌ๋ผ์ ์ถ๊ฐํ๋ค.
๊ฒฐ๊ณผ

latitude์ longitude ์ปฌ๋ผ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'๐ป Programming > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] Python๊ณผ CSV ํ์ผ์ ํ์ฉํ MySQL INSERT ์ฟผ๋ฆฌ ์์ฑ ๋ฐฉ๋ฒ (0) | 2024.07.16 |
---|---|
[Python] googletrans๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ (1) (0) | 2024.07.03 |