이번 프로젝트를 준비하면서, 데이터를 여러방면으로 만져보고 시각화도 이리저리 해봤는데,
TIL로는 요긴했다고 생각드는 2가지에 대해 정리해보려한다.
우선 이번에 한 2가지 시각화를 본격적으로 시작하기 전에,
조건에 부합하는 매물들을 법정동명, 건물면적, 평균물건금액 별로 나누어 정리했다.
30~39
잠실동 - 앙시레이크타워 ( 5.1억 )
가락동 - 헬리오시티 (11.4억)
.
40~49
가락동 - 테라펠리체 (8.7억)
가락동 - 헬리오시티(14.6억)
.
50~59
잠실동 - 한영해시안아파트 (6.7억)
가락동 - 강남팰리스 ( 7.3억)
가락동 - 진넥스 베르디엠 (7.1억) #진넥스 베르디엠과 진넥스베르디엠의 평균
가락동 - 헬리오시티 (16.9억)
장지동 - 송파더센트레(위례22단지) (8.9억)
장지동 - 위례24단지(꿈에그린) (9.4억)
.
60~69
잠실동 - 한영해시안아파트 (8.2억)
.
70~86
가락동 - 헬리오시티(20.1억)
문정동 - 파크하비오(13.5억)
장지동 - 송파파인타운12단지 (11.6억)
장지동 - 송파파인타운13단지 (13.1억)
장지동 - 송파파인타운1단지 (9.9억)
장지동 - 위례24단지(꿈에그린) (12.5억)
장지동 - 위례중앙푸르지오1단지 (14.5억)
장지동 - 위례중앙푸르지오2단지 (14.3억)
혹시나 데이터가 손상되거나 관계없는 값이 포함될까봐,
이렇게 정리한 내용을 토대로 데이터 프레임을 새로 생성해줬다.
import pandas as pd
# 데이터 정리본
data = {
'법정동명': [
'잠실동', '가락동', # 30~39
'가락동', '가락동', # 40~49
'잠실동', '가락동', '가락동', '가락동', '장지동', '장지동', # 50~59
'잠실동', # 60~69
'가락동', '문정동', '장지동', '장지동', '장지동', '장지동', '장지동', '장지동' # 70~86
],
'건물명': [
'앙시레이크타워', '헬리오시티', # 30~39
'테라펠리체', '헬리오시티', # 40~49
'한영해시안아파트', '강남팰리스', '진넥스 베르디엠', '헬리오시티', '송파더센트레(위례22단지)', '위례24단지(꿈에그린)', # 50~59
'한영해시안아파트', # 60~69
'헬리오시티', '파크하비오', '송파파인타운12단지', '송파파인타운13단지', '송파파인타운1단지', '위례24단지(꿈에그린)', '위례중앙푸르지오1단지', '위례중앙푸르지오2단지' # 70~86
],
'면적구간': [
'30~39', '30~39',
'40~49', '40~49',
'50~59', '50~59', '50~59', '50~59', '50~59', '50~59',
'60~69',
'70~86', '70~86', '70~86', '70~86', '70~86', '70~86', '70~86', '70~86'
],
'물건금액(억원)': [
5.1, 11.4, # 30~39
8.7, 14.6, # 40~49
6.7, 7.3, 7.1, 16.9, 8.9, 9.4, # 50~59
8.2, # 60~69
20.1, 13.5, 11.6, 13.1, 9.9, 12.5, 14.5, 14.3 # 70~86
]
}
# 데이터프레임 생성
df_sp_final = pd.DataFrame(data)
# 진넥스 베르디엠 통일
df_sp_final['건물명'] = df_sp_final['건물명'].replace('진넥스베르디엠', '진넥스 베르디엠')
# 결과 확인
print("df_sp_final 데이터프레임:")
print(df_sp_final)
.
.
법정동명 및 건물명별 면적 구간별 물건금액(억원)
import seaborn as sns
import matplotlib.pyplot as plt
# 법정동명- 건물명
df_sp_final['법정동_건물명'] = df_sp_final['법정동명'] + ' - ' + df_sp_final['건물명']
# 정렬
df_sp_final_sorted = df_sp_final.sort_values(by=['법정동명', '법정동_건물명'])
# 피벗 테이블
heatmap_pivot = df_sp_final_sorted.pivot(index='법정동_건물명', columns='면적구간', values='물건금액(억원)')
# 히트맵
plt.figure(figsize=(8, 10))
ax = sns.heatmap(heatmap_pivot,
annot=True, # 값 표시
fmt='.1f', # 소수점 1자리
cmap='YlGnBu', # 색상 팔레트
cbar_kws={'label': '평균 물건금액 (억원)'})
plt.title('법정동명 및 건물명별 면적 구간별 물건금액 (억원) Heatmap')
plt.xlabel('면적 구간')
plt.ylabel('법정동명 - 건물명')
plt.show()
.
오늘 아침에 벨로그를 서칭하다가 발견한 함수이다 .
정말 지도를 불러와준다.
참고링크
아이콘
import folium
m = folium.Map(location=[
37.491650, 127.113857],
zoom_start=14,
)
# 잠실 앙시레이크
folium.Marker([37.505574, 127.078295]).add_to(m)
# 가락 헬리오시티
folium.Marker([37.496827, 127.105610]).add_to(m)
# 가락 테라펠리체
folium.Marker([37.498108, 127.133888]).add_to(m)
# 잠실 한영해시안아파트
folium.Marker([37.508539, 127.087324]).add_to(m)
# 가락 강남팰리스
folium.Marker([37.498281, 127.132090]).add_to(m)
# 가락 진넥스 베르디엠
folium.Marker([37.497596, 127.133243]).add_to(m)
# 장지 송파더센트레(위례22단지)
folium.Marker([37.479447, 127.140212]).add_to(m)
#장지동 - 위례24단지(꿈에그린)
folium.Marker([37.476096, 127.139431]).add_to(m)
# 문정동 - 파크하비오
folium.Marker([37.480164, 127.123404]).add_to(m)
# 장지동 - 송파파인타운12단지
folium.Marker([37.478630, 127.132088]).add_to(m)
# 장지동 - 송파파인타운13단지
folium.Marker([37.477234, 127.128870]).add_to(m)
# 장지동 - 송파파인타운1단지
folium.Marker([37.486803, 127.134704]).add_to(m)
# 장지동 - 위례중앙푸르지오2단지
folium.Marker([37.474644, 127.142947]).add_to(m)
# 장지동 - 위례중앙푸르지오1단지
folium.Marker([37.475019, 127.141684]).add_to(m)
#서울아산병원 37.527328, 127.108165
folium.Marker([37.527328, 127.108165],popup='<b>Hospital</b>',
tooltip='Icon custom',
icon=folium.Icon(
color='green',
icon_color='white',
icon='glyphicon glyphicon-plus-sign', # googledp glyphicon 검색해서 관련된 코드 제공해주는 사이트들 참고해서 원하는 것 가져오기
prefix='glyphicon'
)
).add_to(m)
#한솔병원
folium.Marker([37.506899, 127.105874],popup='<b>Hospital</b>',
tooltip='Icon custom',
icon=folium.Icon(
color='green',
icon_color='white',
icon='glyphicon glyphicon-plus-sign', # googledp glyphicon 검색해서 관련된 코드 제공해주는 사이트들 참고해서 원하는 것 가져오기
prefix='glyphicon'
)
).add_to(m)
#경찰병원
folium.Marker([37.496525, 127.123342],popup='<b>Hospital</b>',
tooltip='Icon custom',
icon=folium.Icon(
color='green',
icon_color='white',
icon='glyphicon glyphicon-plus-sign', # googledp glyphicon 검색해서 관련된 코드 제공해주는 사이트들 참고해서 원하는 것 가져오기
prefix='glyphicon'
)
).add_to(m)
#올림픽공원
folium.Marker([37.521435, 127.121666],popup='<b>park</b>',
tooltip='Icon custom',
icon=folium.Icon(
color='green',
icon_color='white',
icon='glyphicon glyphicon-grain', # googledp glyphicon 검색해서 관련된 코드 제공해주는 사이트들 참고해서 원하는 것 가져오기
prefix='glyphicon'
)
).add_to(m)
#석촌호수공원
folium.Marker([37.512375, 127.104763],popup='<b>park</b>',
tooltip='Icon custom',
icon=folium.Icon(
color='green',
icon_color='white',
icon='glyphicon glyphicon-grain', # googledp glyphicon 검색해서 관련된 코드 제공해주는 사이트들 참고해서 원하는 것 가져오기
prefix='glyphicon'
)
).add_to(m)
#송파노인복지센터
folium.Marker([37.501713, 127.094305],popup='<b>community</b>',
tooltip='Icon custom',
icon=folium.Icon(
color='green',
icon_color='white',
icon='glyphicon glyphicon-user', # googledp glyphicon 검색해서 관련된 코드 제공해주는 사이트들 참고해서 원하는 것 가져오기
prefix='glyphicon'
)
).add_to(m)
m
(인프라 추가 전)
위도,경도를 일일이 찾기는 좀 빡셌지만, 시각화 된 걸 보면 맘이 편안해진다. ㅎㅎ
오늘 튜터님께 가서 최종 내용 검토도 받고, ppt작업도 진입했다. 낼까지 꼭 열심히 작업해서 발표자분들께 잘 넘겨줘야겠다는 마음이 가득하다. 정말 .. 후회없이 해서 달콤한 주말을 보내고 싶다.