파이썬 함수

pandas 라이브러리(15) 표준화와 정규화,차트와 데이터 관계분석

개발연습자1 2022. 11. 30. 17:59

데이터를 비교하려면 기본적으로 노멀라이징 시켜야 데이터끼리 비교할수 있다. 이과정으로 데이터 전처리라고 하는데 

이 과정을 거치지 않으면 데이터의 불균형으로 인해 비교가 매우 어려워 질수 있다. 

 

우선 표준화 정규화를 알아보자 표준화 정규화는 데이터 전처리기법중 하나로 

 

표준화는 실수로 데이터를 표현하고

 

정규화는 0~1사이로 데이터를 표현한다.

 

우선 데이터를 불러온다.

#13번에서 본 서울지역 범죄현황 데이터를 활용한다.

crime_anal = pd.read_csv('new_crime_in_Seoul.csv', index_col=0)
crime_anal

 

 

from sklearn import preprocessing
# 1. 표준화 방법
from sklearn.preprocessing import StandardScaler, MinMaxScaler
s_scaler = StandardScaler()
X_scaled1 = s_scaler.fit_transform(crime_anal.loc[ :  , '강간' : '폭력' ])

# 2. 정규화 방법
m_scaler = MinMaxScaler()
X_scaled2 = m_scaler.fit_transform(crime_anal.loc[ :  , '강간' : '폭력' ] )

#정규화된 데이터를 다시 컬럼에 저장한다.
crime_anal.loc[ : , '강간':'폭력'] = X_scaled2
crime_anal

 

데이터가 0~1사이 데이터로 표준화 되어 있는 사실을 볼 수 있다. 이제 데이터를 비교할 준비가 거의 끝났다.

 

이제 차트를 그리고 상관계수를 구해서 데이터 간의 관계를 비교해보자

 

 

표준화 데이터를 CCTV 데이터랑 합친다.

#합칠 데이터를 불러온다.(전에 한 CCTV 데이터)

CCTV_result = pd.read_csv('../day12/CCTV_result', index_col= 0)
CCTV_result.rename(columns={'소계':'CCTV'}, inplace=True)
crime_anal[ ['CCTV', '인구수'] ]  = CCTV_result[ ['CCTV','인구수'] ]

 

또한 컬럼을 종합 데이터로 2개 추가 한다.

crime_anal['범죄'] = crime_anal['강간'] + crime_anal['강도'] +crime_anal['살인']+ crime_anal['절도'] + crime_anal['폭력']

crime_anal['검거'] = crime_anal['강간검거율'] + crime_anal['강도검거율'] + crime_anal['살인검거율'] + crime_anal['절도검거율'] + crime_anal['폭력검거율']

crime_anal

 

이제 비교 할 모든 데이터가 모였으니 2가지 방법으로 비교해 본다.

 

1.sb의 pairplot 으로 데이터 관계를 나타내세요(x_vars는 "인구수", "CCTV" 를, y_vars는 "살인검거율", "폭력검거율"로 pariplot을 나타내고, 연관성을 확인하세요)

 

sb(seaborn)라이브러리에 pairpolt함수는 산점도 차트를 여러개 그려 데이터의 관계를 비교한다.

#산점도를 그리고 선을 나타낸다. x값엔 인구수,CCTV컬럼 y값엔 살인검거율,폭력검거율
sb.pairplot(data=crime_anal,kind='reg',x_vars=['인구수','CCTV'],y_vars=['살인검거율','폭력검거율'])
plt.show()

위그래프로 보아 인구수가 많을수록 폭력 검거율은 떨어지는걸 알수 있다.

 

2.sb.heatmap 을 이용해서 '강간검거율', '강도검거율', '살인검거율', '절도검거율', '폭력검거율' 을 보여주세요. 단, '검거' 로 정렬한 데이터로 보여주세요.

히트맵을 활용하면 시각적으로 어디가 가장 검거율이 좋은지 알수 있다.

 

우선 비교를 하려는 데이터에서 비교를 하려는 컬럼만 잘라 저장한다.

#비교를 하려는 컬럼만 잘라 저장한다.

df1=crime_anal.sort_values('검거',ascending=False)
df2=df1.loc[ : ,'강간검거율':'폭력검거율']
df2

 

히트맵을 그려보자

#fmt에서 정수는 .0f
plt.figure(figsize=(10,8))
sb.heatmap(data=df2,cmap='RdPu',annot=True,fmt='.1f',linewidths=0.8)
plt.show()

 

히트맵 결과 진한게 검거율이 좋은거고 도봉구가 가장 검거율이 좋은것을 시각적으로 알수있다.

반응형