Spaces:
Sleeping
Sleeping
Upload 12 files
Browse files- .gitattributes +2 -0
- app.py +243 -0
- bokeh_plot.html +52 -0
- folium_map.html +0 -0
- graph.jpeg +0 -0
- month_graph.png +0 -0
- photo1.jpeg +3 -0
- photo2.jpeg +3 -0
- photo3.jpeg +0 -0
- photo4.jpeg +0 -0
- photo5.jpeg +0 -0
- requirements.txt +9 -0
- wordcloud.png +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
photo1.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
photo2.jpeg filter=lfs diff=lfs merge=lfs -text
|
app.py
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import pandas as pd
|
| 3 |
+
import matplotlib.pyplot as plt
|
| 4 |
+
import pandas_bokeh
|
| 5 |
+
import folium
|
| 6 |
+
from streamlit_folium import st_folium
|
| 7 |
+
import requests
|
| 8 |
+
import streamlit as st
|
| 9 |
+
from PIL import Image, ExifTags
|
| 10 |
+
|
| 11 |
+
# 이미지 회전
|
| 12 |
+
def correct_image_orientation(image):
|
| 13 |
+
try:
|
| 14 |
+
for orientation in ExifTags.TAGS.keys():
|
| 15 |
+
if ExifTags.TAGS[orientation] == 'Orientation':
|
| 16 |
+
break
|
| 17 |
+
exif = image._getexif()
|
| 18 |
+
if exif is not None:
|
| 19 |
+
if exif[orientation] == 3:
|
| 20 |
+
image = image.rotate(180, expand=True)
|
| 21 |
+
elif exif[orientation] == 6:
|
| 22 |
+
image = image.rotate(270, expand=True)
|
| 23 |
+
elif exif[orientation] == 8:
|
| 24 |
+
image = image.rotate(90, expand=True)
|
| 25 |
+
except (AttributeError, KeyError, IndexError):
|
| 26 |
+
# cases: image don't have getexif
|
| 27 |
+
pass
|
| 28 |
+
return image
|
| 29 |
+
|
| 30 |
+
import streamlit as st
|
| 31 |
+
from PIL import Image, ImageOps
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
# 이미지 가운데 정렬
|
| 35 |
+
def center_image(image, new_width, new_height):
|
| 36 |
+
"""
|
| 37 |
+
Center the image in a new blank canvas of specified size.
|
| 38 |
+
|
| 39 |
+
Args:
|
| 40 |
+
image (PIL.Image): The original image.
|
| 41 |
+
new_width (int): The width of the new canvas.
|
| 42 |
+
new_height (int): The height of the new canvas.
|
| 43 |
+
|
| 44 |
+
Returns:
|
| 45 |
+
PIL.Image: The centered image.
|
| 46 |
+
"""
|
| 47 |
+
# Create a new blank image with a white background
|
| 48 |
+
new_image = Image.new("RGB", (new_width, new_height), (255, 255, 255))
|
| 49 |
+
|
| 50 |
+
# Calculate the position to paste the original image onto the center of the new image
|
| 51 |
+
x_offset = (new_width - image.width) // 2
|
| 52 |
+
y_offset = (new_height - image.height) // 2
|
| 53 |
+
|
| 54 |
+
# Paste the original image onto the center of the new image
|
| 55 |
+
new_image.paste(image, (x_offset, y_offset))
|
| 56 |
+
|
| 57 |
+
return new_image
|
| 58 |
+
|
| 59 |
+
# 기사 시작
|
| 60 |
+
st.markdown('# 늘어나는 무인 점포 절도, 업주들 "피해 막막해"')
|
| 61 |
+
|
| 62 |
+
st.write("<br><br><br>", unsafe_allow_html=True) # 3줄 띄어쓰기
|
| 63 |
+
# Replace 'uploaded_image.jpg' with the path to your image file
|
| 64 |
+
image_path = 'photo1.jpeg'
|
| 65 |
+
image = Image.open(image_path)
|
| 66 |
+
corrected_image = correct_image_orientation(image)
|
| 67 |
+
|
| 68 |
+
st.image(corrected_image, caption='동대문구 소재 무인점포', use_column_width=True)
|
| 69 |
+
|
| 70 |
+
# 도입
|
| 71 |
+
st.write('''"절도 사례가 한참 많을 때는 제가 3일 동안 몰래 숨어서 지켜보기도 했어요. CCTV도 지속적으로 확인하고요."
|
| 72 |
+
한 아이스크림 무인점포를 운영하고 있는 A 씨(40)가 말했다.
|
| 73 |
+
A 씨는 운영의 편리함 덕에 부업으로 무인점포를 운영하고 있지만, 계속되는 절도 범죄에 골치 아프다고 털어놓았다.
|
| 74 |
+
절도범을 경찰에 넘겨도 가벼운 훈방조치에 그치는 탓에 나아지는 것이 없다고도 말했다.
|
| 75 |
+
인터뷰 끝에는 "제 가게에 있는 물품들이 얼마 하진 않지만, 결국 훔치면 절도되잖아요? 이러한 죄의 무게감을 느끼게 해줬으면 좋겠어요"라고 덧붙였다.''' )
|
| 76 |
+
|
| 77 |
+
st.write("<br><br><br>", unsafe_allow_html=True)
|
| 78 |
+
|
| 79 |
+
st.markdown("#### 무인점포, 범죄의 표적이 되다: 증가하는 절도 사건")
|
| 80 |
+
st.write('''무인점포란 사람 없이 오직 매대와 [키오스크](https://namu.wiki/w/%ED%82%A4%EC%98%A4%EC%8A%A4%ED%81%AC)로 판매 영업을 하는 가게를 말한다.
|
| 81 |
+
과거에는 인형 뽑기나 코인노래방과 같이 일부 업종에 한정됐으나, 최근 몇 년간 아이스크림, 카페, 세탁소, 편의점, 사진관, 밀키트 등 다양한 업종으로 확대됐다.
|
| 82 |
+
종류가 다양해지면서 무인점포는 2023년 기준 5년 만에 5배 가까이 늘었다.
|
| 83 |
+
소방청에 따르면 2023년 3월 기준 국내 무인점포의 수는 6323개에 달했다.
|
| 84 |
+
이 중 전체의 31.8%를 차지하는 아이스크림 무인점포는 2011개로 파악된다.''')
|
| 85 |
+
with open('bokeh_plot.html', 'r', encoding='utf-8') as f:
|
| 86 |
+
html_content1 = f.read()
|
| 87 |
+
st.components.v1.html(html_content1, height=500)
|
| 88 |
+
|
| 89 |
+
st.write('''무인점포의 가장 큰 장점은 키오스크 도입으로 인한 인건비 절감이다.
|
| 90 |
+
고객의 입장에서도 24시간 상품을 편하게 볼 수 있다.
|
| 91 |
+
실제로 한 20대 이용자는 "아무래도 주인이 없다 보니까 눈치를 보지 않아도 되어서 좋다. 또한 물건을 자세히 볼 수 있는 자유로운 쇼핑 환경 때문에 무인점포를 자주 이용하는 것 같다"고 말하기도 했다.
|
| 92 |
+
이러한 이점들로 인해 무인점포의 수는 앞으로도 늘어날 것으로 보인다.''')
|
| 93 |
+
|
| 94 |
+
st.write("<br><br>", unsafe_allow_html=True)
|
| 95 |
+
|
| 96 |
+
# CCTV 사진
|
| 97 |
+
image_path = 'photo2.jpeg'
|
| 98 |
+
image = Image.open(image_path)
|
| 99 |
+
corrected_image = correct_image_orientation(image)
|
| 100 |
+
|
| 101 |
+
st.image(corrected_image, caption='매장내 CCTV', use_column_width=True)
|
| 102 |
+
|
| 103 |
+
st.write('''하지만 CCTV 외 다른 보안 시스템이 충분히 구축되어 있지 않고, 매장 상황을 감시할 수 있는 직원이 상주하지 않아 범죄에 취약하다.
|
| 104 |
+
판매 직원 없이 24시간 운영되는 무인점포는 비용적, 시간적으로 편리함을 극대화하는 동시에 범죄가 쉽게 일어나는 공간이다.''')
|
| 105 |
+
|
| 106 |
+
st.write("<br><br><br>", unsafe_allow_html=True)
|
| 107 |
+
|
| 108 |
+
# 워드클라우드
|
| 109 |
+
st.markdown("#### 무인점포 증가량에 비례하는 절도 범죄")
|
| 110 |
+
st.write('주요 단어들을 워드클라우드로 보여주면 다음과 같다.')
|
| 111 |
+
st.image('wordcloud.png', caption="'무인점포'를 키워드로 2023년 뉴스 기사 웹스크래핑하여 제작한 워드클라우드")
|
| 112 |
+
st.write('''키워드인 무인점포를 제외하면 디지털, 경찰, 절도 순으로 단어가 가장 많이 사용됐다.
|
| 113 |
+
범죄와 관련된 단어로는 출입, 재물, 훼손, 청소년, 구속 등을 확인할 수 있다.
|
| 114 |
+
그중에서도 '절도'가 관련 뉴스 기사에서 가장 많이 언급됐다.''')
|
| 115 |
+
|
| 116 |
+
st.write("<br><br>", unsafe_allow_html=True)
|
| 117 |
+
|
| 118 |
+
# 월별 절도건수 그래프
|
| 119 |
+
st.image('month_graph.png', caption='무인점포 월별 절도 발생건수')
|
| 120 |
+
st.write('''경찰청에서 발표한 자료에 따르면 무인점포 월별 절도 발생건수는 2021년 3월 223건, 2022년 12월 525건으로 두 배 이상 증가했다.
|
| 121 |
+
무인점포가 늘어남에 따라 절도 사건도 급증한 것이다.''')
|
| 122 |
+
|
| 123 |
+
st.write("<br><br>", unsafe_allow_html=True)
|
| 124 |
+
|
| 125 |
+
# 지도 html
|
| 126 |
+
st.write('''취재팀은 지역별 무인점포 절도 발생 건수를 지도로 나타내 보았다.
|
| 127 |
+
지도 내 각 지역 위에 마우스를 놓으면 관련 정보가 나타난다.''')
|
| 128 |
+
with open('folium_map.html', 'r', encoding='utf-8') as f:
|
| 129 |
+
html_content2 = f.read()
|
| 130 |
+
st.components.v1.html(html_content2, height=500)
|
| 131 |
+
st.write('''2022년에 집계된 전체 6,018건의 절도 중 경기도가 1,740건으로 가장 많이 발생했다.
|
| 132 |
+
다음으로는 서울특별시 1,428건, 인천광역시 452건, 부산광역시 447건으로 수도권과 대도시 주위에 절도 범죄가 두드러졌다.''')
|
| 133 |
+
|
| 134 |
+
st.write("<br><br>", unsafe_allow_html=True)
|
| 135 |
+
|
| 136 |
+
# 검거율
|
| 137 |
+
st.image('graph.jpeg', caption='무인점포 절도 발생건수, 검거 건수, 검거 인원 증가율')
|
| 138 |
+
st.write('''무인점포의 절도 범죄 발생률은 급증하는 추세지만, 검거율은 그에 따라가지 못하는 것이 문제이다.
|
| 139 |
+
2021년 기준 절도 범죄 발생 건수는 3,514건, 검거 건수는 2,379건으로 검거율은 약 68%이다.
|
| 140 |
+
2022년도 마찬가지로 검거율이 약 69%에 머무른 것으로 보면, 무인점포 내에 CCTV가 설치되어 있으나 각종 범죄를 예방 및 검거하기에는 역부족한 실정이다.
|
| 141 |
+
직원을 고용하지 않고 소자본으로 운영하고자 한 점주 입장에서는 오히려 범죄로 인해 금전적인 피해가 발생하는 상황이다.''')
|
| 142 |
+
|
| 143 |
+
st.write("<br><br><br>", unsafe_allow_html=True)
|
| 144 |
+
|
| 145 |
+
st.markdown("#### 무인점포 절도를 막기 위한 정책 다양화... 실효성은 없어")
|
| 146 |
+
|
| 147 |
+
# 양심거울
|
| 148 |
+
image_path = 'photo4.jpeg'
|
| 149 |
+
image = Image.open(image_path)
|
| 150 |
+
new_width = 400
|
| 151 |
+
new_height = 600
|
| 152 |
+
centered_image = center_image(image, new_width, new_height)
|
| 153 |
+
|
| 154 |
+
st.image(centered_image, caption='출처 안성경찰서', use_column_width=True)
|
| 155 |
+
|
| 156 |
+
st.write('''무인점포 절도의 무서운 증가세에 다양한 해결방법이 등장하고 있다.
|
| 157 |
+
그 중 가장 많이 알려진 것은 양심거울 설치다.
|
| 158 |
+
매장 내 손님이 본인의 모습을 볼 수 있는 거울을 설치해 양심의 가책을 느끼고 충동적 범죄욕구를 차단하도록 한다.
|
| 159 |
+
보통 절도 범죄의 형량이나 그릇됨을 알려주는 다양한 문구를 양심거울과 함께 적시하여 효과를 극대화한다.
|
| 160 |
+
양심거울 설치는 2021년 3월 12일 동두천경찰서를 시작으로 대전서부경찰서, 부산동부경찰서, 영등포경찰서 등 다양한 지역에서 시행되고 있다.
|
| 161 |
+
제주서부경찰서의 보고에 따르면 2022년 8월 양심거울을 무인점포 5곳에 설치한 결과, 관내 무인점포 절도 신고가 57.5% 감소한 것으로 밝혀졌다.
|
| 162 |
+
개인 사업자도 쉽게 설치가 가능하고 다른 방안에 비해 저렴하여 무인점포 절도 예방의 기초적인 방법으로 자리 잡았다.''')
|
| 163 |
+
|
| 164 |
+
st.write("<br><br>", unsafe_allow_html=True)
|
| 165 |
+
|
| 166 |
+
# 출입인증시스템
|
| 167 |
+
st.image('photo3.jpeg', caption='출입인증장치')
|
| 168 |
+
st.write('''최근에는 기술의 발달로 본인 인증 출입시스템이 주목받고 있다.
|
| 169 |
+
[QR코드](https://namu.wiki/w/QR%EC%BD%94%EB%93%9C?from=QR%20%EC%BD%94%EB%93%9C)나 신용카드 등을 통해 본인 인증을 하고 난 뒤 점포에 들어갈 수 있는 방식으로 절도 범죄 발생률 자체를 낮춘다.
|
| 170 |
+
뿐만 아니라 범죄 발생시 범인을 특정할 수 있다.''')
|
| 171 |
+
|
| 172 |
+
st.write("<br>", unsafe_allow_html=True)
|
| 173 |
+
|
| 174 |
+
# 교육활동
|
| 175 |
+
st.write('''앞선 두가지 방법이 무인점포 내적으로 진행되는 방범활동이라면 외적으로 진행되는 예방활동으로는 경찰의 집중 순찰과 10대들을 대상으로 한 교육활동이 있다.
|
| 176 |
+
경찰청 자료에 따르면 2022년 7월부터 12월까지 발생한 무인점포 절도 전체 1,962건 중 474건이 10대로 약 25%를 차지하고 있다.
|
| 177 |
+
10대의 무인점포 절도를 막기 위해 지난해 추석 연휴 대전경찰서에서는 업주와 협의해 특별순찰구역을 지정하고 순찰활동을 실시했다.
|
| 178 |
+
그 밖에도 다양한 지역의 경찰서에서 무인점포 절도 범죄의 심각성을 인지하고 특별순찰활동을 진행하고 있다.
|
| 179 |
+
동시에 10대 청소년을 대상으로 한 교육활동도 전국적으로 활발히 진행 중이다.
|
| 180 |
+
부산동부경찰서 범죄예방대응과는 학교에 방문해 학생들이 죄의식 없이 범하기 쉬운 무인점포 소년 범죄에 대해 예방할 수 있는 교육활동을 제공하고 있다.
|
| 181 |
+
경기도교육청은 각 학교에 공문을 내려 자체적인 절도 예방교육을 권장하고 있다고 밝혔다.''')
|
| 182 |
+
|
| 183 |
+
st.write("<br><br>", unsafe_allow_html=True)
|
| 184 |
+
|
| 185 |
+
# 보안 프로그램
|
| 186 |
+
st.image('photo5.jpeg', caption="SK쉴더스 '캡스 뷰가드', 에스원 '안심24'" )
|
| 187 |
+
st.write('''마지막으로 보안 회사에서도 다양한 보안 프로그램 제공을 통해 무인점포 절도 예방에 힘쓰고 있다.
|
| 188 |
+
가장 대표적인 프로그램으로는 SK쉴더스의 관제 애플리케이션 '캡스 뷰가드'와 에스원의 '안심24' 서비스가 있다.
|
| 189 |
+
SK쉴더스의 '캡스 뷰가드'는 '사람・차량', '영역지정', '침입・방문', '색상' 등을 기준으로 녹화본을 검색하는 'AI 스마트 검색' 기능을 지원한다.
|
| 190 |
+
에스원의 '안심24'는 영상 보안부터 긴급출동, 키오스크 감시가 가능한 무인매장 전용 솔루션으로 현금 도난시에도 최대 1,000만 원까지 보상이 가능하다.''')
|
| 191 |
+
|
| 192 |
+
st.write("<br>", unsafe_allow_html=True)
|
| 193 |
+
|
| 194 |
+
# 한계
|
| 195 |
+
st.write('''하지만 무인점포 절도 예방을 위한 다양한 활동에도 불구하고 범죄는 꾸준히 증가하고 있다.
|
| 196 |
+
여러 정책이 도입된 이후에도 해마다 증가하는 범죄율을 통계적으로 학인할 수 있다.
|
| 197 |
+
앞서 소개한 활동들의 한계점은 다음과 같다.
|
| 198 |
+
양심거울은 충동적 범죄를 억제할 수 있지만 계획적인 절도에는 무력하고, 본인인증시스템은 설치와 유지 비용이 높아 모든 무인점포에 적용하기 어렵다.
|
| 199 |
+
경찰 순찰과 교육활동은 인력과 자원의 한계로 일관되게 시행하기 어렵고, 보안 프로그램은 여전히 비용 부담이 있어 소규모 자영업자들이 쉽게 접근하기 어렵다.
|
| 200 |
+
|
| 201 |
+
st.write("<br><br><br>", unsafe_allow_html=True)
|
| 202 |
+
|
| 203 |
+
st.markdown("#### 솜방방이 처벌, 무인점포 절도 범죄를 부추기다")
|
| 204 |
+
st.write("여러 노력에도 불구하고 무인점포 절도 범죄율이 계속 늘어나는 이유에는 이른바 '솜방방이 처벌'이 있다. 2021년 대법원이 무인점포 절도 사건에 대해 [주거침입죄](https://namu.wiki/w/%EC%A3%BC%EA%B1%B0%EC%B9%A8%EC%9E%85%EC%A3%84)를 적용하지 않겠다는 판결을 내리면서 이 문제가 더욱 부각됐다.")
|
| 205 |
+
|
| 206 |
+
st.write("<br>", unsafe_allow_html=True)
|
| 207 |
+
|
| 208 |
+
st.markdown('''새벽에 무인점포에 침입해 재물을 절도한 B씨가 [야간주거침입절도](https://namu.wiki/w/%EC%95%BC%EA%B0%84%EC%A3%BC%EA%B1%B0%EC%B9%A8%EC%9E%85%EC%A0%88%EB%8F%84%EC%A3%BC) 및 공동주거침입 등의 혐의로 재판에 넘겨졌다.
|
| 209 |
+
절도죄의 경우 6년 이하의 징역이나 1000만 원 이하의 벌금형에 처해지지만, 만약 야간에 주거 침입하여 절취한 경우 야간주거침입절도죄가 적용되어 10년 이하의 징역형에 처해진다.
|
| 210 |
+
B씨는 야간주거침입절도죄 항목으로 가중처벌되어야 했지만, 대법원은 "단순히 주거에 들어가는 행위 자체가 거주자의 의사에 반한다는 거주자의 주관적 사정만으로 바로 침입에 해당한다고 볼 수 없다"며 "B씨가 일반인의 출입이 상시 허용된 무인 매장에 통상적인 출입 방법으로 들어갔으며, B씨의 출입으로 인해서 건조물 관리자의 평온 상태가 침해되었다고 볼 만한 사정이 없다"고 밝혔다.
|
| 211 |
+
천안 법무법인 법승 서상원 변호사는 "주거에 들어간 행위가 침입에 해당하는지 판단할 때 '거주자의 의사에 반하는지'는 사실상의 평온 상태를 해치는 행위 태양인가를 평가할 때 고려할 요소 중 하나이지만 주된 평가 요소가 될 수 없다"고 설명했다.''', unsafe_allow_html=True)
|
| 212 |
+
|
| 213 |
+
st.write("<br>", unsafe_allow_html=True)
|
| 214 |
+
|
| 215 |
+
st.write('''이에 대해 대중들은 "돈을 훔치러 들어갔는데 무죄?", "범죄자들이 절도하기 좋게 만드는 것 아니냐", "개혁이 시급하다" 등의 부정적인 반응을 보였다.''')
|
| 216 |
+
|
| 217 |
+
# 결론
|
| 218 |
+
st.write("<br><br><br>", unsafe_allow_html=True)
|
| 219 |
+
st.markdown("#### 처벌 규정 명확화, 기술적・교육적 지원도 병행해야")
|
| 220 |
+
|
| 221 |
+
st.write('''무인점포는 인건비를 대폭 줄일 수 있는 효율적인 대안으로써, 앞으로 그 수가 더욱 늘어날 전망이다.
|
| 222 |
+
이런 경향을 반영하여 관련 범죄율을 낮추기 위해서는 사회 전반의 노력이 필요하다.
|
| 223 |
+
단순히 보안 프로그램이나 방범 시스템 도입을 통한 경비 강화는 점주에게 비용적 부담이 되어 제대로 시행되기는 어려울 것으로 보인다.
|
| 224 |
+
실제로 최근 다양한 경비 대책이 나왔지만, 대부분의 무인점포는 CCTV 외에는 도입하고 있지 않는 상황이다.
|
| 225 |
+
경찰은 개인의 수익 활동을 전적으로 보호해줄 수 없기 때문에 경찰력으로 근본적인 해결은 기대하기 어렵다.''')
|
| 226 |
+
|
| 227 |
+
st.write("<br>", unsafe_allow_html=True)
|
| 228 |
+
|
| 229 |
+
st.write('''따라서 무인점포 절도 범죄에 대한 개념 정의나 처벌 기준을 명확하게 하는 것이 우선되어야 한다.
|
| 230 |
+
이와 관련하여 전문가들은 아무리 작은 금액이라도 물건을 훔치는 것은 중대한 범죄가 될 수 있다는 것을 인식시켜야 한다고 강조했다.
|
| 231 |
+
서원대 경찰행정학부 김영식 교수는 "적발이 돼서 또 재범이 이뤄지지 않게끔 경고를 주는 게 굉장히 중요하다"며, 훈방 조치나 선도심사위원회와 같은 공적인 제재가 필요하다고 언급했다.
|
| 232 |
+
동시에 기술적인 측면에서 무인점포 보안 시스템을 표준화하고, 이를 설치하는 데 필요한 재정적 지원이 제공되어야 한다.
|
| 233 |
+
결론적으로 무인점포 절도 문제를 해결하기 위해서는 법적, 기술적, 교육적 측면에서 다각도의 노력이 필요하다.
|
| 234 |
+
사회 전반이 협력하여 무인점포가 안전하게 운영될 수 있는 환경을 조성함으로써 범죄율을 줄이고 무인점포의 지속 가능한 성장을 도모할 수 있을 것이다.''')
|
| 235 |
+
|
| 236 |
+
st.write("<br><br><br>", unsafe_allow_html=True)
|
| 237 |
+
st.markdown("###### 경희대학교 데이터저널리즘 4조")
|
| 238 |
+
st.write('''강성훈 기자, kang-sh8783@khu.ac.kr''')
|
| 239 |
+
st.write('''박민주 기자, minju0730@khu.ac.kr''')
|
| 240 |
+
st.write('''백다은 기자, qor1120@khu.ac.kr''')
|
| 241 |
+
st.write('''이은서 기자, 321les@khu.ac.kr''')
|
| 242 |
+
st.write('''황주찬 기자, 2021103139@khu.ac.kr''')
|
| 243 |
+
st.write('''PHAM HUU BAO 기자, Bpham627@khu.ac.kr''')
|
bokeh_plot.html
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<title>Bokeh Plot</title>
|
| 6 |
+
<script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js"></script>
|
| 7 |
+
<script type="text/javascript">
|
| 8 |
+
Bokeh.set_log_level("info");
|
| 9 |
+
</script>
|
| 10 |
+
</head>
|
| 11 |
+
<body>
|
| 12 |
+
<div class="bk-root" id="2c1af981-2a88-45f8-a60b-a8b160d1ad3d" data-root-id="1037"></div>
|
| 13 |
+
|
| 14 |
+
<script type="application/json" id="1257">
|
| 15 |
+
{"8a2d0b69-712c-4973-a99c-4eea50c76a69":{"defs":[],"roots":{"references":[{"attributes":{},"id":"1086","type":"UnionRenderers"},{"attributes":{"source":{"id":"1072"}},"id":"1078","type":"CDSView"},{"attributes":{},"id":"1087","type":"Selection"},{"attributes":{"field":"\uacc4_angle","include_zero":true},"id":"1070","type":"CumSum"},{"attributes":{"data":{"__x__values":["\ubc00\ud0a4\ud2b8","\uc0ac\uc9c4\uad00","\uc138\ud0c1\uc18c","\uc2a4\ud130\ub514\uce74\ud398","\uc544\uc774\uc2a4\ud06c\ub9bc"],"__x__values_original":["\ubc00\ud0a4\ud2b8","\uc0ac\uc9c4\uad00","\uc138\ud0c1\uc18c","\uc2a4\ud130\ub514\uce74\ud398","\uc544\uc774\uc2a4\ud06c\ub9bc"],"color":["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0"],"inner_radius":[0.0,0.0,0.0,0.0,0.0],"outer_radius":[0.9,0.9,0.9,0.9,0.9],"\uacc4":[662,708,1975,967,2011],"\uacc4_angle":{"__ndarray__":"+p29rfQM5T+3NW05aoPmP+hMvE+pZv8/KL6+Z8i/7j+Lnt9ZMPn/Pw==","dtype":"float64","order":"little","shape":[5]}},"selected":{"id":"1087"},"selection_policy":{"id":"1086"}},"id":"1072","type":"ColumnDataSource"},{"attributes":{},"id":"1081","type":"BasicTickFormatter"},{"attributes":{"coordinates":null,"group":null,"text":"\uc804\uad6d \uc8fc\uc694 \ubb34\uc778\uc810\ud3ec \ud604\ud669"},"id":"1038","type":"Title"},{"attributes":{"coordinates":null,"formatter":{"id":"1081"},"group":null,"major_label_policy":{"id":"1082"},"ticker":{"id":"1053"},"visible":false},"id":"1052","type":"LinearAxis"},{"attributes":{"axis":{"id":"1052"},"coordinates":null,"dimension":1,"grid_line_color":null,"group":null,"ticker":null},"id":"1055","type":"Grid"},{"attributes":{"coordinates":null,"formatter":{"id":"1084"},"group":null,"major_label_policy":{"id":"1085"},"ticker":{"id":"1093"},"visible":false},"id":"1048","type":"LinearAxis"},{"attributes":{},"id":"1060","type":"ResetTool"},{"attributes":{},"id":"1059","type":"SaveTool"},{"attributes":{"overlay":{"id":"1062"}},"id":"1058","type":"BoxZoomTool"},{"attributes":{},"id":"1056","type":"PanTool"},{"attributes":{"end":2,"start":-1.45},"id":"1040","type":"Range1d"},{"attributes":{},"id":"1057","type":"WheelZoomTool"},{"attributes":{"end_angle":{"expr":{"id":"1071"}},"fill_alpha":{"value":0.2},"fill_color":{"field":"color"},"hatch_alpha":{"value":0.2},"inner_radius":{"field":"inner_radius"},"line_alpha":{"value":0.2},"line_color":{"value":"white"},"line_width":{"value":2},"outer_radius":{"field":"outer_radius"},"start_angle":{"expr":{"id":"1070"}},"x":{"value":0},"y":{"value":0}},"id":"1076","type":"AnnularWedge"},{"attributes":{"end_angle":{"expr":{"id":"1071"}},"fill_color":{"field":"color"},"inner_radius":{"field":"inner_radius"},"line_color":{"value":"white"},"line_width":{"value":2},"outer_radius":{"field":"outer_radius"},"start_angle":{"expr":{"id":"1070"}},"x":{"value":0},"y":{"value":0}},"id":"1074","type":"AnnularWedge"},{"attributes":{},"id":"1053","type":"BasicTicker"},{"attributes":{"coordinates":null,"data_source":{"id":"1072"},"glyph":{"id":"1074"},"group":null,"hover_glyph":null,"muted_glyph":{"id":"1076"},"nonselection_glyph":{"id":"1075"},"view":{"id":"1078"}},"id":"1077","type":"GlyphRenderer"},{"attributes":{},"id":"1061","type":"HelpTool"},{"attributes":{},"id":"1084","type":"BasicTickFormatter"},{"attributes":{},"id":"1044","type":"LinearScale"},{"attributes":{},"id":"1085","type":"AllLabels"},{"attributes":{"axis":{"id":"1048"},"coordinates":null,"grid_line_color":null,"group":null,"ticker":null},"id":"1051","type":"Grid"},{"attributes":{},"id":"1046","type":"LinearScale"},{"attributes":{"end_angle":{"expr":{"id":"1071"}},"fill_alpha":{"value":0.1},"fill_color":{"field":"color"},"hatch_alpha":{"value":0.1},"inner_radius":{"field":"inner_radius"},"line_alpha":{"value":0.1},"line_color":{"value":"white"},"line_width":{"value":2},"outer_radius":{"field":"outer_radius"},"start_angle":{"expr":{"id":"1070"}},"x":{"value":0},"y":{"value":0}},"id":"1075","type":"AnnularWedge"},{"attributes":{"label":{"field":"__x__values_original"},"renderers":[{"id":"1077"}]},"id":"1090","type":"LegendItem"},{"attributes":{"below":[{"id":"1048"}],"center":[{"id":"1051"},{"id":"1055"},{"id":"1089"}],"height":400,"left":[{"id":"1052"}],"renderers":[{"id":"1077"}],"title":{"id":"1038"},"toolbar":{"id":"1063"},"toolbar_location":null,"x_range":{"id":"1040"},"x_scale":{"id":"1044"},"y_range":{"id":"1042"},"y_scale":{"id":"1046"}},"id":"1037","subtype":"Figure","type":"Plot"},{"attributes":{"coordinates":null,"group":null,"items":[{"id":"1090"}]},"id":"1089","type":"Legend"},{"attributes":{"callback":null,"renderers":[{"id":"1077"}],"tooltips":[["\uc601\uc5c5\uc7a5 \uc885\ub958","@__x__values_original"],["\uacc4","@{\uacc4}"]]},"id":"1091","type":"HoverTool"},{"attributes":{"end":1.2,"start":-1.2},"id":"1042","type":"Range1d"},{"attributes":{"tools":[{"id":"1056"},{"id":"1057"},{"id":"1058"},{"id":"1059"},{"id":"1060"},{"id":"1061"},{"id":"1091"}]},"id":"1063","type":"Toolbar"},{"attributes":{"bottom_units":"screen","coordinates":null,"fill_alpha":0.5,"fill_color":"lightgrey","group":null,"left_units":"screen","level":"overlay","line_alpha":1.0,"line_color":"black","line_dash":[4,4],"line_width":2,"right_units":"screen","syncable":false,"top_units":"screen"},"id":"1062","type":"BoxAnnotation"},{"attributes":{"field":"\uacc4_angle"},"id":"1071","type":"CumSum"},{"attributes":{},"id":"1082","type":"AllLabels"},{"attributes":{"ticks":[0,1,2,3,4]},"id":"1093","type":"FixedTicker"}],"root_ids":["1037"]},"title":"Bokeh Application","version":"2.4.3"}}
|
| 16 |
+
</script>
|
| 17 |
+
<script type="text/javascript">
|
| 18 |
+
(function() {
|
| 19 |
+
const fn = function() {
|
| 20 |
+
Bokeh.safely(function() {
|
| 21 |
+
(function(root) {
|
| 22 |
+
function embed_document(root) {
|
| 23 |
+
const docs_json = document.getElementById('1257').textContent;
|
| 24 |
+
const render_items = [{"docid":"8a2d0b69-712c-4973-a99c-4eea50c76a69","root_ids":["1037"],"roots":{"1037":"2c1af981-2a88-45f8-a60b-a8b160d1ad3d"}}];
|
| 25 |
+
root.Bokeh.embed.embed_items(docs_json, render_items);
|
| 26 |
+
}
|
| 27 |
+
if (root.Bokeh !== undefined) {
|
| 28 |
+
embed_document(root);
|
| 29 |
+
} else {
|
| 30 |
+
let attempts = 0;
|
| 31 |
+
const timer = setInterval(function(root) {
|
| 32 |
+
if (root.Bokeh !== undefined) {
|
| 33 |
+
clearInterval(timer);
|
| 34 |
+
embed_document(root);
|
| 35 |
+
} else {
|
| 36 |
+
attempts++;
|
| 37 |
+
if (attempts > 100) {
|
| 38 |
+
clearInterval(timer);
|
| 39 |
+
console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing");
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
}, 10, root)
|
| 43 |
+
}
|
| 44 |
+
})(window);
|
| 45 |
+
});
|
| 46 |
+
};
|
| 47 |
+
if (document.readyState != "loading") fn();
|
| 48 |
+
else document.addEventListener("DOMContentLoaded", fn);
|
| 49 |
+
})();
|
| 50 |
+
</script>
|
| 51 |
+
</body>
|
| 52 |
+
</html>
|
folium_map.html
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
graph.jpeg
ADDED
|
month_graph.png
ADDED
|
photo1.jpeg
ADDED
|
Git LFS Details
|
photo2.jpeg
ADDED
|
Git LFS Details
|
photo3.jpeg
ADDED
|
photo4.jpeg
ADDED
|
photo5.jpeg
ADDED
|
requirements.txt
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
streamlit
|
| 2 |
+
pandas
|
| 3 |
+
openpyxl
|
| 4 |
+
matplotlib
|
| 5 |
+
pandas-bokeh
|
| 6 |
+
bokeh==2.4.3
|
| 7 |
+
folium
|
| 8 |
+
streamlit-folium
|
| 9 |
+
requests
|
wordcloud.png
ADDED
|