지난번에 이어서 시각화를 진행한다.

a = sns.countplot(data=df, y = "시도명")

seaborn으로도 그려보았다. seaborn의 장점은 value count를 비롯한 통계 처리를 그래프 생성 시에 알아서 진행한다. 또, 변수에 넣으면 그래프만 깔끔하게 도출한다.

c.plot.bar(rot = 0) 

rot로 글자를 돌려줄 수도 있다.


데이터 색인하기

특정 데이터만 추출해서 분석해야 할 때가 있다. 이럴 때 사용할 수 있는 방법을 다양하게 배울 수 있었다.

df_medical = df[df["상권업종중분류명"] == "약국/한약방"].copy()     # 컬럼에서 특정 값만 추출

df_seoul_hospital = df[(df["상권업종소분류명"] == "종합병원") & (df["시도명"] == "서울특별시")].copy()                                                      # 여러 조건 사용

‘상권업종중분류명’ 컬럼의 값이 ‘약국/한약방’인 경우만 골라서 데이터프레임으로 만든 것이다. copy()로 데이터프레임을 복사하는 게 중요한데, 잘못하면 df자체를 바꿔버릴 수 있기 때문이다.
여러 조건을 사용하고 싶을 때는 &로 연결하면 된다.

특정 문자열을 포함하는 데이터만을 추출하고 싶을 수도 있다. 이럴 때는 .str.contains()를 사용하면 된다.

df_seoul_hospital[df_seoul_hospital["상호명"].str.contains('종합병원')]     # 종합병원이 들어간 텍스트만 가져오기

df_seoul_hospital[~df_seoul_hospital["상호명"].str.contains('종합병원')]    # 종합병원이 '안' 들어간 텍스트만 가져오기

안 들어간 텍스트를 고를 때는 ~를 사용하고, 여러 텍스트(단어)를 포함하고 싶을 때는 |를 이용해 텍스트를 연결해주면 된다.
.str.endswith()로 끝나는 문자도 지정할 수 있다.

숫자형 데이터를 색인하고 이를 시각화해야 할 수도 있다. 이 때는 기초통계량을 사용하여 처리하되, 산점도 차트로 시각화하면 효과적인 그림을 만들 수 있다.

sns.scatterplot(data=df_seoul, x='경도', y="위도", hue="시군구명")

seabornscatterplot은 산점도 차트를 만든다. 여기서 x축을 경도, y축을 위도로 했으므로 서울의 지도와 비슷한 그래프가 만들어진다. 병원 데이터만으로도 서울을 표시할 수 있을 정도로 병원이 많다
hue 값에 따라서 색상을 설정할 수 있다. 예시 코드에서는 ‘시군구명’마다 색을 다르게 설정하도록 했다.

실제 지도 활용하기

산점도 차트만으로도 서울을 표현할 수 있지만, 실제 지도에 표현한다면 더욱 효과적일 것이다. folium 모듈은 이를 도와준다.

import folium

folium.Map()                        # 세계지도

map = folium.Map(location = [df_seoul_hospital["위도"].mean(), df_seoul_hospital["경도"].mean()], zoom_start = 12)     # 데이터의 위도, 경도 평균치로 서울 지도 나타내기, zoom_start로 zoom 정도 설정

folium을 활용하면 세계지도는 물론이고, 위도와 경도를 이용해 한 지역의 지도를 나타낼 수 있다. zoom_start를 설정해서 어느 정도로 지도를 확대할지 결정한다.

지금도 충분히 멋지지만, 각 병원의 정보를 마커를 사용해 나타낼 수 있으면 좋을 것이다.

# 지도에 마커 추가
for n in df_seoul_hospital.index:
    name = df_seoul_hospital.loc[n, "상호명"]
    address = df_seoul_hospital.loc[n, "도로명주소"]
    popup = f"{name} - {address}"
    location = [df_seoul_hospital.loc[n, "위도"], df_seoul_hospital.loc[n, "경도"]]
    folium.Marker(location=location, popup=popup).add_to(map)

.Marker를 활용해 location과 그에 따른 popup을 설정하였다.


관련 코드 보러가기

댓글남기기