일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- MatrixFactorization
- Convert
- str.replace
- numpy.bool
- Cast
- 텐서플로자격증
- session-basedRecommendation
- vscode
- pandas
- Python
- jsonlines
- VScodeNotResponding
- Visualization
- decimal error
- implicitData
- ExplicitData
- LatentFactorModel
- 지도시각화
- iterrows
- BloombergMarketConcepts
- gluonnlp
- json
- MySQL
- jsonl
- TensorflowDeveloperCertificate
- sshtunnel
- wordembedding
- DIF_SR
- Colab
- github2FA
- Today
- Total
garret
[Python, folium] colab에서 동물병원 데이터 시각화 1 본문
이전에 colab으로 했던 지도시각화 작업을 포스팅으로 정리하고자 한다.
데이터 전처리 과정
데이터는 공공데이터 포털의 동물병원 데이터를 사용했다.
행정안전부_동물병원_20220531
동물을 진료하거나 동물의 질병을 예방하는 기관정보 데이터로 인허가일자, 영업상태, 사업장명, 소재지주소 등의 정보 확인이 가능합니다.<br/><br/>* 좌표계 : 중부원점TM(EPSG:2097)<br/>
www.data.go.kr
encoding 없이 불러오면 오류 뜨니 참고.
original = pd.read_csv('행정안전부_동물병원.csv', encoding='cp949')
original.info()
데이터 구성은 이렇다.
영업중인 데이터만 고르고 좌표정보가 null인 건 삭제했다
# 영업중인 데이터만 추출
original_open = original[original['영업상태명']=='영업/정상']
# 좌표정보가 null인 Row 삭제
hospital_loc = original_open.dropna(subset=['좌표정보(x)']).reset_index()
# 해당 컬럼에서 null인 row 삭제
hospital_loc= hospital_loc.dropna(subset=['소재지전화','도로명전체주소','도로명우편번호']).reset_index()
원 데이터는 좌표가 중부원점TM(EPSG:2097)로 설정되어 있어서 위도경도(WGS84)로 변환해줬다.
검색해보니 pyproj 라이브러리 사용해서 간단하게 하길래 설치해서 돌렸더니 바로 변환되었다.
# 중부원점TM 좌표를 위도경도로 변환
from pyproj import Proj, transform
proj_1 = Proj(init='epsg:2097')
proj_2 = Proj(init='epsg:4326')
converted = transform(proj_1, proj_2, hospital_loc['좌표정보(x)'].values, hospital_loc['좌표정보(y)'].values)
hospital_loc['lon'] = converted[0]
hospital_loc['lat'] = converted[1]
# 필요한 컬럼만 고르기
hospital = hospital_loc[['상세영업상태명', '소재지전화','도로명전체주소','도로명우편번호','사업장명','lon','lat']]
도로명 주소에서 시도를 추출했다.
# 도로명전체주소에서 시도만 추출
hospital['region'] = hospital['도로명전체주소'].str.split(' ').str[0]
# 전처리한 데이터프레임 csv로 저장
hospital.to_csv('/gdrive/MyDrive/Petom/csv_files/hospital.csv', encoding = 'utf-8')
folium MarkerCluster으로 지도 시각화
folium은 지리 공간 데이터를 시각화하는데 사용되는 python 라이브러리.
간단하게 쓸 수 있는 편이라 많이들 쓰는 것 같다.
MarkerCluster는 지도를 축소하면 marker들을 하나의 무리로 보이게 만드는 옵션이다.
import folium
from folium.plugins import MarkerCluster
sub_df = hospital[hospital['region']=='서울특별시'].reset_index()
# 지도 중심 위경도 지정
center = [37.541, 126.986]
m_s = folium.Map(
location=[center[0], center[1]],
zoom_start=12
)
coords = sub_df[['lat', 'lon','name']]
marker_cluster = MarkerCluster().add_to(m_s)
for lat, lon, name in zip(coords['lat'], coords['lon'], coords['name']):
folium.Marker([lat, lon], tooltip = name, icon = folium.Icon(color="red")).add_to(marker_cluster)
m_s
tooltip 옵션을 추가해서 마커에 마우스를 대면 병원 이름이 뜨게 만들었다.
여기서 생긴 문제!
전국 동물병원 시각화를 해서 html로 저장하고 싶었는데 전국으로 범위를 넓히면 시각화가 안 뜨는 오류가 발생했다.
찾아보니 folium은 데이터가 너무 많으면 안 될수도 있다고 한다.
다음포스팅에서는 이런 이유로 pydeck을 이용한 시각화 과정을 다뤄보겠다.
'Data > Data visualization' 카테고리의 다른 글
[Python] seaborn 그래프 위에 숫자 표시하기 (0) | 2023.03.13 |
---|---|
[Python] Colab에서 한글 폰트 설치 (0) | 2023.03.09 |
[Python, pydeck] colab에서 동물병원 데이터 시각화 2 (0) | 2023.01.07 |