대한민국 범죄 분석 보고서 [데이터 사이언스]

데이터 사이언스 분석 보고 #3 막대그래프, 히트맵

rudals0000 2024. 12. 19. 21:14
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager

font_path = "C:/Windows/Fonts/malgun.ttf"   # 한글 폰트
font_prop = font_manager.FontProperties(fname=font_path)
plt.rcParams['font.family'] = font_prop.get_name()

crime_time = pd.read_csv("C:/데사프로젝트 데이터셋/경찰청_범죄 발생 시간대 및 요일_2021.09.csv", encoding='euc-kr')
# encoding 이거는 엑셀파일이 안읽히는데 이거를 넣으면 읽힌다
time_slots = ['0시00분-02시59분', '03시00분-05시59분', '06시00분-08시59분',
              '09시00분-11시59분', '12시00분-14시59분', '15시00분-17시59분',
              '18시00분-20시59분', '21시00분-23시59분']

crime_time_count = crime_time[time_slots].sum().reindex(time_slots).fillna(0)
plt.figure(figsize=(10, 6)) # 그래프
crime_time_count.plot(kind='bar', color='skyblue', edgecolor='black')

plt.title('시간대별 범죄 발생 건수', fontsize=14)
plt.xlabel('시간대', fontsize=12)
plt.ylabel('범죄 발생 건수', fontsize=12)
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()

csv 파일에서 컬럼을 확인 후 컬럼 지정

 

 

 

00-09시 는 모두 10만건 이하, 09-24시 까지는 모두 15만건 이상

-> 새벽시간보다 활동시간에 더 많은 범죄가 일어났다.

 

 

 

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager

font_path = "C:/Windows/Fonts/malgun.ttf"  
font_prop = font_manager.FontProperties(fname=font_path)
plt.rcParams['font.family'] = font_prop.get_name()

crime_time = pd.read_csv("C:/데사프로젝트 데이터셋/경찰청_범죄 발생 시간대 및 요일_2021.09.csv", encoding='euc-kr')

days_of_week = ['일', '월', '화', '수', '목', '금', '토']

crime_day_count = crime_time[days_of_week].sum().reindex(days_of_week).fillna(0)

plt.figure(figsize=(10, 6)) # 그래프
crime_day_count.plot(kind='bar', color='firebrick', edgecolor='black')

plt.title('요일별 범죄 발생 건수', fontsize=14)
plt.xlabel('요일', fontsize=12)
plt.ylabel('범죄 발생 건수', fontsize=12)
plt.xticks(rotation=0)
plt.tight_layout()
plt.show()

csv 파일 뒤에 encoding='euc-kr' 오류 

한글 파일을 읽을 수 있게 폰트 매니저 설정.

 

 

 

그래프를 볼 시에 주중이 주말보다 범죄가 많이 일어나는 것을 알 수가 있다.

가장 범죄가 많이 일어난 금요일은 25만건 이상이고,

가장 범죄가 적게 일어난 일요일은 20만건 이하이다.

 

 

 

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv("C:/데사프로젝트 데이터셋/경찰청_범죄 발생 시간대 및 요일_2021.09.csv", encoding='cp949')  

print(df.head())
# 노가다로 지정
time_slots = [
    '0시00분-02시59분', '03시00분-05시59분', '06시00분-08시59분', '09시00분-11시59분',
    '12시00분-14시59분', '15시00분-17시59분', '18시00분-20시59분', '21시00분-23시59분'
]
crime_types = [
    '살인기수', '살인미수등', '강도', '강간', '유사강간', '강제추행', '기타 강간 강제추행등', '방화',
    '절도', '상해', '폭행', '체포 감금', '협박', '약취 유인', '폭력행위등', '공갈', '손괴', '직무유기',
    '직권남용', '증수뢰', '통화', '문서 인장', '유가증권인지', '사기', '횡령', '배임', '성풍속범죄',
    '도박범죄', '특별경제범죄', '마약범죄', '보건범죄', '환경범죄', '교통범죄', '노동범죄', '안보범죄',
    '선거범죄', '병역범죄', '기타범죄'
]

df_time = df[['범죄중분류'] + time_slots]
df_time = df_time[df_time['범죄중분류'] != '기타범죄']
df_time.set_index('범죄중분류', inplace=True)
print(df_time.head())
#히트맵
plt.figure(figsize=(16, 10))
sns.heatmap(df_time, annot=True, cmap='YlGnBu', fmt='d', linewidths=0.5)
plt.xticks(rotation=45, ha='right')
plt.title('범죄 유형과 시간대별 발생 건수 히트맵')
plt.ylabel('범죄 유형')
plt.xlabel('시간대')
plt.show()

원래 crime_types 컬럼들만 추출해서 데이터 프레임으로 만들어야 하지만 오류 때문에

시간이 없어 노가다로 다 쓰고, 후에 수정 

 

 

범죄 유형과 시간대별 발생 건수 히트맵

 

 

교통범죄는 범죄유형중 가장 색깔이 진하고, 시간대별 차이가 명확하고,

00시에서 24시로 갈수록 점점 진해진다.

-> 교통범죄는 범죄 유형중 가장 빈번히 일어나는 범죄이고, 00-06시까지는

차량의 운용이 없어 빈도가 적은 반면, 18-24시까지는 차량의 운용이 많아 빈도가 많다.

 

사기는 09시부터 18시까지 가 눈에 띄게 진하며 그 외에는 색 차이가 없다.

-> 일반적인 직장 시간과 겹치며, 범인들은 이 범죄를 불시에 우발적인 행위보다는

계획적으로 직업처럼 이 범죄를 저지르는 경향이 있다고 추정이 가능하다.

 

폭행은 21시부터 03시 까지 눈에 띄게 색이 진하다.

-> 21시부터 03시까지는 회식이나 술자리를 마무리 하고 나가는 시간대 이기에

폭행사건이 많다고 추정해 볼 수가 있다.

 

절도는 09시부터 21시까지 색이 타 시간대보다 진하다.

-> 사람들이 집을 비우는 시간인 09시부터 21시를 범죄자들이 많이 노리는 것으로

볼 수 있다.

 

나머지 범죄들은 절대적인 수도 적고, 시간대별로 유의미한 차이도 없는 것으로 보인다.

 

 

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv("C:/데사프로젝트 데이터셋/경찰청_범죄 발생 시간대 및 요일_2021.09.csv", encoding='cp949')
print(df.head())
# 노가다로 범죄유형 쓰기
time_slots = ['일','월','화','수','목','금','토']
crime_types = [
    '살인기수', '살인미수등', '강도', '강간', '유사강간', '강제추행', '기타 강간 강제추행등', '방화',
    '절도', '상해', '폭행', '체포 감금', '협박', '약취 유인', '폭력행위등', '공갈', '손괴', '직무유기',
    '직권남용', '증수뢰', '통화', '문서 인장', '유가증권인지', '사기', '횡령', '배임', '성풍속범죄',
    '도박범죄', '특별경제범죄', '마약범죄', '보건범죄', '환경범죄', '교통범죄', '노동범죄', '안보범죄',
    '선거범죄', '병역범죄', '기타범죄'
]
df_time = df[['범죄중분류'] + time_slots]
df_time = df_time[df_time['범죄중분류'] != '기타범죄']
df_time.set_index('범죄중분류', inplace=True)
print(df_time.head())
#히트맵
plt.figure(figsize=(16, 10))
sns.heatmap(df_time, annot=True, cmap='ocean_r', fmt='d', linewidths=0.5)
plt.xticks(rotation=0, ha='right')
plt.title('범죄 유형과 요일별 발생 건수 히트맵')
plt.ylabel('범죄 유형')
plt.xlabel('요일')
plt.show()

encoding = 'cp949' or 'euc-kr'

 

 

범죄 유형과 요일별 발생 건수 히트맵

폭행은 주중보다 주말에 더 색깔이 진하다

-> 사람들이 일을 하지 않고, 많이 서로 만나는 주말에 가장 폭행이 일어날 확률이 높다

 

 

사기는 주말보다 주중에 눈에 띄게 색깔이 진하다

-> 사람들이 경제 행위를 하는 주중에 사기가 많이 일어날 것이다를 추정 할수 있다.

 

 

특별경제범죄는 주말보다 주중에 색깔이 진하다.

-> 사람들이 경제 행위를 하는 주중에 특별 경제 범죄도 많이 일어나는 것을 추정할 수 있다

 

 

교통범죄는 일요일에 다른요일보다 색깔이 옅다

-> 일요일에는 다른 날보다 차량을 운용하지 않는 다는 것을 추정할 수 있다.