먼저, 이번 게시글에서 사용할 예시입니다.
seaborn 라이브러리를 활용해서 데이터 탐색을 해보도록 하겠습니다.
아래와 같이 코드를 쓰면 다음과 같은 그래프가 나오게 됩니다.
import seaborn as sns
sns.heatmap(gu_df[['강간', '강도', '살인', '절도', '폭력']])
우리는 여기서 두 가지 문제점을 발견할 수 있습니다.
1) 한글 깨짐 문제
2) Scaling 문제
3) 너무 작은 사이즈와 한눈에 알아보기 힘든(친절하지 않은) 그래프
순서대로 해결해보도록 하겠습니다.
1. 한글 데이터 시각화
# from matplotlib import font_manager, rc # rc == run configure(configuration file)
# jupyter notebook 내에 figure를 보여주기
%matplotlib inline # 필수는 아님
# 모든 폰트에 대해 적용되는 건 아님
# (폰트 파일 이름이 한글이거나 공백이 있으면 적용이 안됨, 그 경우 폰트 파일 복사해서 이름을 새로 고치기)
# FontProperties : 폰트 파일 꺼내는 역할
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
# rc == run configure(설정), 폰트를 설정하는 역할
# font_name
rc('font', family=font_name)
sns.heatmap(gu_df[['강간', '강도', '살인', '절도', '폭력']])
위의 코드를 실행시키고 다시 sns.heatmap 코드를 실행하면 한글이 깨지지 않고 잘 나오는 것을 확인할 수 있다.
2. Scaling 문제
(다음번에 코드로 더 자세히 다뤄보겠다.)
(아래는 기본적인 이론 설명을 해두었다.)
[2주차 총정리] Feature Scaling (Feature Normalization) 이론
Feature Scaling (Feature Normalization) - 주로 머신러닝에서 쓰이는 기법 (특히 거리 기반의 머신러닝 기법들) - Feature별로 단위, 규모가 너무 차이가 나다보면 Feature들을 서로 비교하거나, Feature끼리 곱..
lafgh.tistory.com
- 아래 heatmap은 단순히 max값으로 나누어 scaling한 결과이다.
- Feature의 scale이 달라서 새까맣게 나왔던 부분이 잘 나오는 것을 확인할 수 있다.
3. heatmap 꾸미기
- 몇 가지 옵션으로 더 내용을 확인하기 편하도록 수정할 수 있다.
# 전체 figure 의 사이즈를 조정
plt.figure(figsize = (10, 10))
# dpi를 써주면 더 깔끔하게 볼 수 있음
# plt.figure(figsize = (10, 10), dpi=100)
# annot : 셀 내에 수치 입력 여부 (annot == 주석을 달다)
# fmt : 셀 내 입력될 수치의 format (f == float)
# linewidths : 셀 간 이격거리 (하얀 부분, 내부 테두리)
# cmap : matplotlib colormap @ https://goo.gl/YWpBES (camp을 통해 색깔 기준이 바뀌었음)
sns.heatmap(crime_count_norm.sort_values(by='살인', ascending=False),
annot=True, fmt='f', linewidths=.5, cmap='Reds')
# 기타
# fontsize : 제목, label 이름 등 폰트 사이즈 조정
# annot_kws={"size": } : 셀 내에 입력되는 주석 글씨 크기 조정
plt.title('범죄 발생(살인발생으로 정렬) - 각 항목별 최대값으로 나눠 정규화')
plt.show()
이외에도 알아두면 좋은 함수들을 잠깐 소개하자면,
1. A.div( B['col_name'], axis=0 )
2. A.sort_values( by='col_name', ascending=True)
3. A.mean( ) # axis=1 설정 가능
4. A.quantile(0.75) # 바닥부터 0.75에 해당하는 값 출력
'멋쟁이 사자처럼 AI SCHOOL 5기 > Today I Learned' 카테고리의 다른 글
[2주차 총정리] Web Scrapping 원리 이해하기 (HTML 구조) (0) | 2022.03.25 |
---|---|
[2주차 총정리] folium.choropleth, CircleMarker을 활용한 지도 데이터 시각화 (기초) (0) | 2022.03.24 |
[2주차 총정리] Feature Scaling (Feature Normalization) 이론 (0) | 2022.03.23 |
[2주차 총정리] 데이터프레임 합치는 방법 (join, merge, concat) (0) | 2022.03.23 |
[2주차 총정리] 데이터프레임에서의 Masking과 Filtering (0) | 2022.03.23 |