Data/Python

[데이터 분석] Seaborn, 통계 자료 분석 (4)

밍츠 2022. 3. 24. 01:33

12. 데이터 살펴보기

gu_df.head(3)

검거율 기준으로 오름차순 정렬하기

  • sort_values 활용
gu_df.sort_values(by='검거율', ascending=False, inplace=True) # ascending=False : 내림차순, inplace=True : 덮어쓰기

- ascending= False : 내림차순 정렬

- inplace=True : 덮어쓰기

 

13. 데이터 시각화

 

13-0. 라이브러리 불러오기

import seaborn as sns

import matplotlib.pyplot as plt
from matplotlib import font_manager, rc # rc == run configure(configuration file)

 

13-1. 히트맵(Heatmap) 그리기

sns.heatmap(gu_df[['강간', '강도', '살인', '절도', '폭력']])

히트맵 : X축과 Y축에 2개의 범주형 자료의 계급별로 연속형 자료를 집계한 자료를 사용하여, 집계한 값에 비례하여 색깔을 다르게 해서 2차원으로 자료를 시각화

출력 결과 :

문제점 : 한글이 깨진다, 색깔 구분이 잘 안 된다

 

13-2. 한글 깨짐 해결

# jupyter notebook 내에 figure를 보여주기
%matplotlib inline 

# matplotlib의 한글문제를 해결
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name() #폰트 이름에 한글이 있거나 공백이 존재하면 error 가능성 있음
# font_name
rc('font', family=font_name)

 

13-3. 색깔 구분 해결

이유 : 강도, 살인은 십의 자리인 반면 절도, 폭력은 백의 자리~천의 자리로 자릿수가 다르다 (=스케일)

해결 : Feature scaling = Feature Normalization 

 

방법 1) Min_Max algorithm

  • 값이 딱 떨어지고 해석을 직관적으로 할 수 있어 많이 사용한다.
  • 값을 min(열)=0, max(열)=1으로 설정하여 데이터를 이 사이 값으로 조절하다.
  •  

 

방법 2) Standardization (표준화)

  • 머신러닝 성능을 더 높일 때가 있다.
  • 값을 mean(열)=0, std(열)=1으로 설정하여 데이터를 이 사이 값으로 조절한다.
  •  

+ 두 방법 중 어느 것이 더 좋다고 말하기 어려워 실험 기반으로 접근한다

 

13-4. 정규화

- 값을 최댓값으로 나누어 정규화한다.

- 값은 1을 넘지 않는다.

# 5대 범죄별 수치를 해당 범죄별 최대값으로 나눠줌 
weight_col = gu_df[['강간', '강도', '살인', '절도', '폭력']].max() # Series

crime_count_norm = gu_df[['강간', '강도', '살인', '절도', '폭력']] / weight_col

 

+div함수

- DataFrame에 다른 DataFrame이나, Series, 스칼라 등 데이터를 나눈다.

- axis로 열/행 방향 설정 가능 (헷갈림 주의)

 

 

13-5. 살인 발생 순위

sns.heatmap(crime_count_norm.sort_values(by='살인', ascending=False))

- 살인을 기준으로 내림차순 하여 heatmap 시각화

 

결과 :

옵션 추가

1. 사이즈 조절

2. 셀 내에 수치 입력

3. 셀 간 이격 거리 설정

4. 색깔 설정

 

# 몇 가지 옵션으로 더 내용을 확인하기 편하도록 수정하기

# 전체 figure 의 사이즈를 조정
plt.figure(figsize = (10, 10))

# annot : 셀 내에 수치 입력 여부
# fmt : 셀 내 입력될 수치의 format (f == float)
# linewidths : 셀 간 이격거리 (하얀 부분, 내부 테두리)
# cmap : matplotlib colormap @ https://goo.gl/YWpBES
sns.heatmap(crime_count_norm.sort_values(by='살인', ascending=False), annot=True, fmt='f', linewidths=.5, cmap='Reds')

plt.title('범죄 발생(살인발생으로 정렬) - 각 항목별 최대값으로 나눠 정규화')
plt.show()

결과 :