import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.family'] = 'Malgun Gothic'
mpl.rcParams['axes.unicode_minus'] = False
# 데이터를 뽑아 데이터 프레임을 만드는 코드가 잘 작동이 안되서 급하게 수기로 데이터 프레임 작동
df = pd.DataFrame({
'범죄중분류': ['살인기수', '강도', '강간', '강제추행', '절도범죄', '폭행', '손괴', '사기', '성풍속범죄', '도박범죄', '마약범죄'],
'아파트': [66, 40, 680, 847, 14565, 18074, 7403, 15989, 3302, 489, 935],
'일반도로': [4, 18, 20, 304, 6036, 9345, 4823, 4296, 288, 4, 262],
'백화점': [0, 3, 2, 34, 2486, 126, 39, 236, 35, 0, 4],
'편의점': [0, 35, 5, 301, 8029, 1297, 356, 1646, 132, 2, 183],
'무인상점': [0, 3, 0, 20, 10847, 40, 400, 300, 22, 1, 0],
'음식점': [2, 7, 24, 1063, 5418, 5204, 1241, 9794, 107, 145, 47],
'기차역': [0, 0, 0, 6, 144, 48, 12, 99, 6, 0, 12],
'학교': [0, 2, 22, 394, 1541, 952, 154, 484, 299, 0, 7],
'도서관': [0, 0, 1, 14, 255, 58, 19, 26, 41, 0, 0],
'의료기관': [8, 1, 15, 317, 1257, 1157, 154, 1237, 48, 6, 461],
'종교시설': [1, 1, 8, 30, 549, 185, 140, 195, 5, 1, 9]
})
melted_df = df.melt(id_vars=['범죄중분류'], var_name='장소', value_name='발생빈도')
melted_df['버블 크기'] = melted_df['발생빈도'] * 3 # 버블 크기 조정
# 버블차트
plt.figure(figsize=(12, 8))
scatter = plt.scatter(melted_df['장소'], melted_df['범죄중분류'], s=melted_df['버블 크기'],
alpha=0.6, c=melted_df['버블 크기'], cmap='viridis')
plt.title("범죄 유형별 장소와 발생 빈도 (버블 차트)")
plt.xlabel("장소")
plt.ylabel("범죄 유형")
plt.xticks(rotation=45)
plt.colorbar(scatter, label='발생 빈도')
# 행열이 많아 격자 추가
plt.grid(True, which='both', axis='both', color='gray', linestyle='--', linewidth=0.5)
plt.show()
이거도 오류 발생했는데 시간이 없어 데이터 수기 작성 후에 수정 해야됨.
마약범죄는 아파트와 의료기관에서 가장 많이 일어난다.
-> 아파트와 의료기관에서의 마약단절 포스터를 붙이거나 관련기관 소개
폭행은 일반도로, 음식점 편의점 순으로 가장 많이 일어난다.
-> 일반도로와 음식점 곳곳에 무인 카메라 강화, 구간별 경고문 게시
손괴는 아파트에서 가장 많이 일어난다.
->아파트 곳곳에 무인카메라 설치, 경비업체 경비강화 내용을 전단지로 게시
절도는 무인상점, 편의점, 일반도로에서 많이 일어난다.
-> 무인카메라 강화, 결제를 해야 물건을 꺼내거나 나갈수 있는
무인 결제, 무인 통제 시스템 유치, 도로별 교통경찰 배치 강화
전체적으로 아파트에서 범죄가 많이 일어난다.
-> 경비원의 순찰 강화, 무인카메라 강화 내용을 지속적으로 알림.
사기가 범죄중 비율이 다른 장소에서는 큰 반면
학교, 도서관, 종교시설에는 그 비율이 적다.
-> 학교, 도서관, 종교시설 보다는 다른 곳에 범죄예방예산을 편성
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import numpy as np
import konlpy
import re
import matplotlib
# 오류가 생겨 TkAgg사용go, 코드 실행 중에 GUI 창을 통해 그래프를 바로 보도록
matplotlib.use('TkAgg')
file_path = "C:/데사프로젝트 데이터셋/범죄 보고서 단어데이터.xlsx"
df = pd.read_excel(file_path)
reviews = df['document'].dropna()
cleaned_reviews = reviews.apply(lambda text: re.sub(r'[^\w\s]','',str(text)))
cleaned_reviews = cleaned_reviews.str.lower()
cleaned_reviews = cleaned_reviews.str.cat(sep='')
Kkma = konlpy.tag.Kkma()
nouns = cleaned_reviews.split()
# 이거 조사 제외
stopwords = ['가', '을', '를', '에', '의', '에서', '과',
'와', '으로', '로', '이', '가', '는', '은',
'도', '에게', '보다', '들', '라', '한', '한테',
'께', '로서', '와서']
nouns = [word for word in nouns if len(word) > 1 and word not in ['가장', '많이'] and word not in stopwords]
from collections import Counter
word_counts = Counter(nouns)
#워드 클라우드
wc = WordCloud(random_state=123,
font_path='c:/Windows/Fonts/malgun.ttf',
width=800,
height=800,
background_color='white',
contour_width=1,
contour_color='black',
max_font_size=150, # 최대 글자 크기 조정
min_font_size=10, # 최소 글자 크기 조정
max_words=200).generate_from_frequencies(word_counts)
plt.figure(figsize=(10, 10))
plt.axis('off')
plt.imshow(wc, interpolation='bilinear')
plt.show()
'대한민국 범죄 분석 보고서 [데이터 사이언스]' 카테고리의 다른 글
데이터 사이언스 분석 보고 #7 결론 요약, 특장점과 차별성 & 단점 (7) | 2024.12.19 |
---|---|
데이터 사이언스 분석 보고 #5 산점도, 꺾은 선 그래프 (2) | 2024.12.19 |
데이터 사이언스 분석 보고 #4 트리맵, 데이터프레임, 원도표 (4) | 2024.12.19 |
데이터 사이언스 분석 보고 #3 막대그래프, 히트맵 (6) | 2024.12.19 |
데이터 사이언스 분석 보고 #2 데이터 분석 도구 소개 (2) | 2024.12.19 |