범죄 데이터 구별로 정리하기
문제 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()
출력
'AI > 실습' 카테고리의 다른 글
126. [Python] [Multiple Linear Regression] : 이커머스(온라인 쇼핑몰) 상품 일간 판매량 예측 (0) | 2025.01.27 |
---|---|
123. [Python] [Machine Learning] : 지도 학습 (Supervised Learning) (0) | 2025.01.25 |
120. [Python] [Pandas] 프로그래밍 실습 : 구글맵API 연동 (0) | 2025.01.24 |
119. [Python] [Pandas] 프로그래밍 실습 : (피어슨 상관 계수)CCTV (0) | 2025.01.24 |
118. [Python] [Pandas] 프로그래밍 실습 : CCTV (0) | 2025.01.24 |