AI/실습

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

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

CCTV&& 범죄현장

반응형

목차 ▽열기

 

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

 

 

 

문제 4. '구별' 피봇팅

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

 

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

스크린샷 2025-01-25 오후 4

 

 

출력

:  df

스크린샷 2025-01-25 오후 4


 

 

 

 

문제 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

스크린샷 2025-01-25 오후 3

 

 

출력

:  df

스크린샷 2025-01-25 오후 4

 


 

 

 

문제 6 컬럼제거

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

 

 

 

풀이 6 

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

스크린샷 2025-01-25 오후 3

 

 

 

출력

:  df.describe()

스크린샷 2025-01-25 오후 4

 


 

 

 

 

 

문제 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()

스크린샷 2025-01-25 오후 3

 

 

  TIP💡 한 번에 할 수 있는 방법 

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

 

 

출력

:  df.describe()

스크린샷 2025-01-25 오후 4

 


 

 

 

 

문제 8. Rename 

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

 

 

 

풀이 8.  

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

스크린샷 2025-01-25 오후 3

 

 

출력

:  df

스크린샷 2025-01-25 오후 4


 

 

 

 

 

 

문제 9 데이터 노멀라이징

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

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

 

 

풀이 9 

from sklearn import preprocessing

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

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

# 1. 정규화
scaler = MinMaxScaler()

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

스크린샷 2025-01-25 오후 4

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

스크린샷 2025-01-25 오후 4

 

출력

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

스크린샷 2025-01-25 오후 4

 

 

 


 

 

 

문제 10. 컬럼추가 

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

아래 예처럼.

스크린샷 2025-01-25 오후 3

 

 

풀이 10. 

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

 

 

출력

:  df.head()

 

스크린샷 2025-01-25 오후 4

 

 


 

 

 

 

 

문제 11. 컬럼추가

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

 

 

 

풀이  11. 

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

스크린샷 2025-01-25 오후 3

 

 

출력

:  df.head()

 

스크린샷 2025-01-25 오후 4

 

 

  TIP💡 컬럼순서 바꾸는 방법 

 

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

 

 

 


 

Visualization using seaborn

스크린샷 2025-01-25 오후 6

 

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

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

 

스크린샷 2025-01-25 오후 6

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()

스크린샷 2025-01-25 오후 4

 

 

 

출력

강도살인폭력

 

 

 

 


 

 

 

 

문제 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()

스크린샷 2025-01-25 오후 4

 

 

출력

스크린샷 2025-01-25 오후 6

 

 

 

 


 

 

 

 

문제 14. pariplot 생성 (2)

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

 

 

풀이 14.  

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

 

 

출력

스크린샷 2025-01-25 오후 6

 

 

 


 

 

 

 

 

문제 15. pariplot 생성 (2)

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

 

 

풀이 15. 

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

스크린샷 2025-01-25 오후 6

 

 

 

 

 

 

 


 

 

 

 

 

 

문제 16. 검거 높은 구 

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

 

 

 

풀이 16. 

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

 

 

출력

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

스크린샷 2025-01-25 오후 6

 

 

 


 

 

문제 17. 수치 정형화 

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

 

 

풀이 17. 

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

 

출력

스크린샷 2025-01-25 오후 6

 

 

 


 

 

 

 

문제 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()

 

출력

heatmap2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
home
}