AI/실습

121. [Python] [Pandas] 프로그래밍 실습 : 범죄현장

천재단미 2025. 1. 25. 10:49
728x90
반응형

반응형
 

 

범죄 데이터 구별로 정리하기

 

 

 

문제 4. '구별' 피봇팅

인덱스를 '구별'로 피봇팅 한다.

 

df.drop('관서명',axis = 1, inplace = True)
df = pd.pivot_table(df,index = ['구별'],aggfunc = 'sum')
df.head()

 

 

출력

:  df


 

 

 

 

문제 5. 컬림추가

'강간검거율' , '강도검거율', '살인검거율', '절도검거율', '폭력검거율'을 계산하여, crime_anal에 각 칼럼을 추가한다. ( 검거율은 * 100까지 한 값)

 

 

 

풀이  5. 

df['강간검거율'] = df['강간 검거']/df['강간 발생']*100
df['강도검거율'] = df['강도 검거']/df['강도 발생']*100
df['살인검거율'] = df['살인 검거']/df['살인 발생']*100
df['절도검거율'] = df['절도 검거']/df['절도 발생']*100
df['폭력검거율'] = df['폭력 검거']/df['폭력 발생']*100
df

 

 

출력

:  df

 


 

 

 

문제 6 컬럼제거

이제 필요 없는, '강간 검거' , '강도 검거', '살인 검거', '절도 검거', '폭력 검거' 컬럼을 제거한다.

 

 

 

풀이 6 

df = df.drop(['강간 검거' , '강도 검거', '살인 검거', '절도 검거', '폭력 검거'], axis = 1)
df.describe()

 

 

 

출력

:  df.describe()

 


 

 

 

 

 

문제 7.  if  df > 100  경우 df =0  변경 

describe() 함수로 값을 확인해 보니, 검거율이 100 이상인 경우도 있다. 따라서 100보다 크면, 100으로 값을 세팅하세요.

 

 

 

풀이 7. 

df.loc[ df['강간검거율']> 100, '강간검거율'] = 100 
df.loc[ df['강도검거율']> 100, '강도검거율'] = 100 
df.loc[ df['살인검거율']> 100, '살인검거율'] = 100 

df.describe()

 

 

  TIP💡 한 번에 할 수 있는 방법 

df.loc[:, '강간검거율':'폭력검거율'] = df.loc[:, '강간검거율':'폭력검거율']. where(df.loc [:, '강간검거율':'폭력검거율'] <= 100, 100)

 

 

출력

:  df.describe()

 


 

 

 

 

문제 8. Rename 

강간 발생, 강도 발생, 살인 발생, 절도 발생, 폭력 발생의 컬럼 명을, 강간, 강도, 살인, 절도, 폭력으로 rename 하세요.

 

 

 

풀이 8.  

df = df.rename( columns = 
{'강간 발생' : '강간','강도 발생' : '강도', '살인 발생' : '살인', '절도 발생' : '절도', '폭력 발생' : '폭력' } )
df

 

 

출력

:  df


 

 

 

 

 

 

문제 9 데이터 노멀라이징

강간, 강도, 살인, 절도, 폭력을 노멀라이징 합니다.

데이터 노멀라이징 하는 이유는, 각각의 레인지를 통일하여, 해석하기 쉽게 하기 위함입니다.

 

 

풀이 9 

from sklearn import preprocessing

# 정규화(Nomalization), 표준화(Standardization) 

# AI 인공지능 정규화,표준화 라이브러리 
from sklearn.preprocessing import MinMaxScaler,StandardScaler

# 1. 정규화
scaler = MinMaxScaler()

scaler.fit_transform( df.loc[  : , '강간' : '폭력' ] )

scaler2 = StandardScaler()
scaler2.fit_transform( df.loc[  : , '강간' : '폭력' ] )

 

출력

:  df.loc[  : , '강간' : '폭력' ]

 

 

 


 

 

 

문제 10. 컬럼추가 

강간, 강도, 살인, 절도, 폭력의 값을 모두 더하고, 이 더한 값을 '범죄'라는 컬럼을 만들어서 넣습니다.

아래 예처럼.

 

 

풀이 10. 

df['범죄'] = df.loc[  :, '강간':'폭력' ].sum( axis=1 )
df.head()

 

 

출력

:  df.head()

 

 

 


 

 

 

 

 

문제 11. 컬럼추가

'강간검거율', '강도검거율', '살인검거율', '절도검거율', '폭력검거율'의 값을 모두 더하고, 이 더한 값을 '검거'라는 컬럼을 만들어서 넣습니다.

 

 

 

풀이  11. 

df['검거'] = df.loc[  :, '강간검거율':'폭력검거율' ].sum( axis=1 )
df.head()

 

 

출력

:  df.head()

 

 

 

  TIP💡 컬럼순서 바꾸는 방법 

 

new_column = 
['관서명','강간', '강도', '살인', '절도', '폭력','강간검거율','강도검거율','살인검거율','절도검거율','폭력검거율','범죄','검거']
df = df[new_column]
df.head()

 

 

 


 

Visualization using seaborn

 

기존 CCTV 파일을 불어옵니다. 

df_cctv = pd.read_csv('../python04/CCTV_result.csv')
df_cctv

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb

 

 

 

 

 

 

 

문제 12.  pairplot 생성

sb의 pairplot으로 "강도", "살인", "폭력"을 나타내세요. (연관성 확인)

 

 

 

풀이 12.  

sb.pairplot(data=df[['강도', '살인', '폭력']])
plt.show()

 

 

 

출력

 

 

 

 


 

 

 

 

문제 13. pariplot 생성 (1)

x_vars는 "인구수", "CCTV"를, y_vars는 "살인", "강도"로 pariplot을 나타내고, 연관성을 확인하세요.

 

 

 

풀이 13.  

df1 = pd.merge(df, df_cctv, on='구별')

# Nan 이 있는지 확인 
df1.isna().sum()


sb.pairplot(data=df1, x_vars=['인구수', 'CCTV'], y_vars=['살인', '강도'])
plt.show()

 

 

출력

 

 

 

 


 

 

 

 

문제 14. pariplot 생성 (2)

x_vars는 "인구수", "CCTV" 를, y_vars는 "살인검거율", "폭력검거율"로 pariplot을 나타내고, 연관성을 확인하세요.

 

 

풀이 14.  

sb.pairplot(data=df1, x_vars=['인구수', 'CCTV'], y_vars=['살인검거율', '폭력검거율'])
plt.show()

 

 

출력

 

 

 


 

 

 

 

 

문제 15. pariplot 생성 (2)

 x_vars는 "인구수", "CCTV" 를, y_vars는 "절도검거율", "강도검거율"로 pariplot을 나타내고, 연관성을 확인하세요.

 

 

풀이 15. 

sb.pairplot(data=df1, x_vars=['인구수', 'CCTV'], y_vars=['절도검거율', '강도검거율'])
plt.show()

 

 

 

 

 

 

 


 

 

 

 

 

 

문제 16. 검거 높은 구 

검거가 가장 높은 구는 어디입니까? 이를 확인하기 위해, 검거가 가장 높은 구부터 정렬하여 5개의 구까지 나타내세요.

 

 

 

풀이 16. 

df1.sort_values('검거',ascending = False).head()

 

 

출력

:  도봉구 > 금천구 > 강서구 > 광진구 > 동대문구 

 

 

 


 

 

문제 17. 수치 정형화 

검거가 가장 큰 값이 432.593167입니다. 검거의 값이 최대가 100이 되도록 정규화를 하세요. 그리고 검거값으로 정렬하세요.

 

 

풀이 17. 

df1.loc[ df1['검거']> 100, '검거'] = 100 
df1

 

출력

 

 

 


 

 

 

 

문제 18. heatmap 생성(1)

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

 

 

풀이 18.  

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


plt.figure(figsize = (10,8))
sb.heatmap(data = df2,cmap = 'RdPu', annot = True, linewidths = 0.8, fmt = '.1f')
plt.savefig('heatmap1')
plt.show()

 

 

출력

 

 


 

 

 

 

문제 19. heatmap 생성(2) 

위에서 배운 히트맵을 이용해서, 살기 무서운 구가 어디인지 분석하세요.

 

 

풀이 19.  

df3 = df.sort_values('범죄', ascending = False).loc[ :,'강간':'폭력' ]
plt.figure(figsize = (10,8))
sb.heatmap(data = df3,cmap = 'RdPu', annot = True, linewidths = 0.8, fmt = '.1f')
plt.show()

 

출력

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
home top bottom
}