반응형
서울시전월세_매물_위도,경도_구하기_GoogleMapAPI
자 구글 드라이브 임포트 해주고
절대 GCP써서 구글드라이브로 불러오는건 아닙니다.
In [3]:
from google.colab import drive
drive.mount('/content/drive')
결과 :
Mounted at /content/drive
구글맵스 깔아주고
In [24]:
!pip install googlemaps
OUT
Collecting googlemaps
Downloading googlemaps-4.6.0.tar.gz (31 kB)
Requirement already satisfied: requests<3.0,>=2.20.0 in /usr/local/lib/python3.7/dist-packages (from googlemaps) (2.23.0)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests<3.0,>=2.20.0->googlemaps) (2021.10.8)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests<3.0,>=2.20.0->googlemaps) (2.10)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests<3.0,>=2.20.0->googlemaps) (1.24.3)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests<3.0,>=2.20.0->googlemaps) (3.0.4)
Building wheels for collected packages: googlemaps
Building wheel for googlemaps (setup.py) ... done
Created wheel for googlemaps: filename=googlemaps-4.6.0-py3-none-any.whl size=38554 sha256=5bb88261679510d62d1f9fabd192f6da0b177ad7463bdf2587025250fa1adbbf
Stored in directory: /root/.cache/pip/wheels/80/db/c0/6d958585fa97b20e250bf437acf7e6e715b4809c2dd4e55367
Successfully built googlemaps
Installing collected packages: googlemaps
Successfully installed googlemaps-4.6.0
인증키넣어주고
import googlemaps
import pandas as pd
import numpy as np
import io
googlemaps_key = "인증키"
gmaps = googlemaps.Client(key=googlemaps_key)
서울시 읍면동 정보 넣어주고
그전에 구글 드라이브에 데이터 미리 넣어두었습니다.
파일 양식은 shp
import geopandas as gpd
seoul_file = "/content/drive/MyDrive/DATA/EMD_201905/TL_SCCO_EMD.shp"
seoul = gpd.read_file(seoul_file, encoding='euckr')
print(seoul.shape)
seoul.tail()
(5047, 4)
Out[7]:
컬럼명은 차례대로
EMD_CD EMD_ENG_NM EMD_KOR_NM geometry
50130250 | Daejeong-eup | 대정읍 | MULTIPOLYGON (((881168.350 1472982.219, 881161... |
50130253 | Namwon-eup | 남원읍 | MULTIPOLYGON (((910755.915 1486589.634, 910923... |
50130259 | Seongsan-eup | 성산읍 | MULTIPOLYGON (((943356.999 1498892.763, 943357... |
50130310 | Andeok-myeon | 안덕면 | MULTIPOLYGON (((888981.846 1471424.888, 888979... |
50130320 | Pyoseon-myeon | 표선면 | POLYGON ((932601.392 1479746.864, 932586.514 1... |
지번주소가 잘 적혀있는 전월세 데이터 작성
In [16]:
charter_place = "/content/drive/MyDrive/DATA/서울시 전월세.xlsx"
charter = pd.read_excel(charter_place)
address = charter["지번주소"]
address = list(address)
address[:3]
['서울특별시 강남구 일원동 741', '서울특별시 서초구 신원동 ', '서울특별시 서초구 내곡동 ']
서울시 강남구 일원동 741의 위치는
In [30]:
gmaps.geocode(charter['지번주소'][0])
Out[30]:
[{'address_components': [{'long_name': 'Irwon-dong',
'short_name': 'Irwon-dong',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Gangnam-gu',
'short_name': 'Gangnam-gu',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Seoul',
'short_name': 'Seoul',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'South Korea',
'short_name': 'KR',
'types': ['country', 'political']},
{'long_name': '135-230',
'short_name': '135-230',
'types': ['postal_code']}],
'formatted_address': 'Irwon-dong, Gangnam-gu, Seoul, South Korea',
'geometry': {'bounds': {'northeast': {'lat': 37.5012337, 'lng': 127.097854},
'southwest': {'lat': 37.4719065, 'lng': 127.071837}},
'location': {'lat': 37.4810133, 'lng': 127.0801089},
'location_type': 'APPROXIMATE',
'viewport': {'northeast': {'lat': 37.5012337, 'lng': 127.097854},
'southwest': {'lat': 37.4719065, 'lng': 127.071837}}},
'place_id': 'ChIJ_-QGG9OlfDURCahgltbY-qU',
'types': ['political', 'sublocality', 'sublocality_level_2']}]
geometry 안의 'location': {'lat': 37.4810133, 'lng': 127.0801089}, 확인
In [31]:
geo_location = gmaps.geocode(charter['지번주소'][0])[0].get('geometry')
lat = geo_location['location']['lat']
lng = geo_location['location']['lng']
print(lat, lng)
37.4810133 127.0801089
리스트에 넣어서 새로운 데이터 프레임으로 만들기
In [33]:
lat, lng = [], []
for i, location in enumerate(charter.지번주소):
try:
geo_location = gmaps.geocode(location)[0].get('geometry')
lat.append(geo_location['location']['lat'])
lng.append(geo_location['location']['lng'])
except:
print(f"{i}번째 {(charter.iloc[i, 3])}의 좌표를 찾을 수 없음")
lat.append(i)
lng.append(i)
35번째 2022의 좌표를 찾을 수 없음
215번째 2022의 좌표를 찾을 수 없음
272번째 2022의 좌표를 찾을 수 없음
362번째 2021의 좌표를 찾을 수 없음
368번째 2022의 좌표를 찾을 수 없음
382번째 2022의 좌표를 찾을 수 없음
394번째 2022의 좌표를 찾을 수 없음
403번째 2022의 좌표를 찾을 수 없음
422번째 2022의 좌표를 찾을 수 없음
425번째 2022의 좌표를 찾을 수 없음
441번째 2022의 좌표를 찾을 수 없음
444번째 2022의 좌표를 찾을 수 없음
484번째 2022의 좌표를 찾을 수 없음
535번째 2022의 좌표를 찾을 수 없음
542번째 2022의 좌표를 찾을 수 없음
553번째 2022의 좌표를 찾을 수 없음
697번째 2022의 좌표를 찾을 수 없음
731번째 2022의 좌표를 찾을 수 없음
760번째 2022의 좌표를 찾을 수 없음
773번째 2022의 좌표를 찾을 수 없음
802번째 2022의 좌표를 찾을 수 없음
808번째 2022의 좌표를 찾을 수 없음
905번째 2022의 좌표를 찾을 수 없음
910번째 2022의 좌표를 찾을 수 없음
944번째 2022의 좌표를 찾을 수 없음
976번째 2022의 좌표를 찾을 수 없음
1071번째 2022의 좌표를 찾을 수 없음
1076번째 2022의 좌표를 찾을 수 없음
1126번째 2022의 좌표를 찾을 수 없음
1234번째 2022의 좌표를 찾을 수 없음
1248번째 2022의 좌표를 찾을 수 없음
1472번째 2022의 좌표를 찾을 수 없음
1559번째 2022의 좌표를 찾을 수 없음
1567번째 2022의 좌표를 찾을 수 없음
1584번째 2022의 좌표를 찾을 수 없음
1730번째 2022의 좌표를 찾을 수 없음
1751번째 2022의 좌표를 찾을 수 없음
1758번째 2022의 좌표를 찾을 수 없음
1889번째 2022의 좌표를 찾을 수 없음
2201번째 2022의 좌표를 찾을 수 없음
제발 잘나오게 해주세요
기도 한번 필수
In [40]:
charter['lat'] = lat charter['lng'] = lng charter.head()
Out[40]:
지번코드기관코드일련번호접수년도자치구코드시자치구명법정동코드법정동명본번...임대면적전월세구분코드전월세구분보증금임대료계약년도계약일자건축년도latlng01234
1.168011e+18 | 3220064 | 175 | 2022 | 11680 | 서울특별시 | 강남구 | 11400 | 일원동 | 741 | ... | 121.71 | 4 | 준전세 | 130000 | 270 | 2022 | 20220115 | 2018.0 | 37.481013 | 127.080109 |
1.165011e+18 | 3210057 | 109 | 2022 | 11650 | 서울특별시 | 서초구 | 11100 | 신원동 | 0 | ... | 27.90 | 1 | 전세 | 20900 | 0 | 2022 | 20220226 | 2018.0 | 37.444674 | 127.061421 |
1.165011e+18 | 3210057 | 9000042 | 2022 | 11650 | 서울특별시 | 서초구 | 10900 | 내곡동 | 0 | ... | 49.33 | 3 | 준월세 | 1946 | 42 | 2022 | 20220216 | 2015.0 | 37.461771 | 127.051160 |
1.144011e+18 | 3130048 | 467 | 2022 | 11440 | 서울특별시 | 마포구 | 11000 | 노고산동 | 1 | ... | 32.34 | 2 | 월세 | 1000 | 95 | 2022 | 20220208 | 2004.0 | 37.556221 | 126.942077 |
1.144011e+18 | 3130048 | 445 | 2022 | 11440 | 서울특별시 | 마포구 | 11000 | 노고산동 | 1 | ... | 32.34 | 3 | 준월세 | 5000 | 70 | 2021 | 20211221 | 2004.0 | 37.556221 | 126.942077 |
5 rows × 26 columns
In [42]:
일단 파일 저장 먼저 !!
charter.to_csv('/content/drive/MyDrive/DATA/서울시전월세.csv')
In [46]:
charter['임대료'].value_counts().plot();
In [47]:
charter['보증금'].value_counts().plot();
반응형
'Data Analysis > Python' 카테고리의 다른 글
[Airflow] The important views of the Airflow UI (1) | 2023.01.07 |
---|---|
[Python] 대용량 데이터csv 읽어오기 (PyArrow) (0) | 2023.01.07 |
[Python] Pandas: 한 셀의 데이터를 여러 행으로 나누기 (0) | 2023.01.06 |
[Python] Python에서 youtube 불러오기 (0) | 2023.01.06 |
[Python] 왜 For 문 옆에는 : 을 붙여야 할까? (2) | 2023.01.05 |
댓글