Programing/Python

세무민의 코딩일기 : 화재와 소방공무원 및 장비의 관계 분석(오랜만에 데이터 분석하기)

세기루민 2021. 7. 17. 18:23
728x90

최근 직장인으로 살아가다보니 예전에 내가 뭘 했는지 

git에 올려져 있는 파일들을 보면서 추억에 빠졌습니다.

이에 따라서 한번 예전에 만들었던 데이터 분석에 대해서

포스팅을 해보는 것도 괜찮겠다고 생각이 되어서 포스팅을 진행하게 되었습니다.

이론과 실습을 구분지어 진행하고 싶지만 바로 확인해볼 수 있도록 진행해보겠습니다. 


예전에 진행했던 프로젝트 중 하나는 소방공무원과 관련된 장비들 등

화재와 연관되어있는지를 분석하는 프로젝트를 했었습니다.

당시에 말도 안되는 프로젝트라고 생각했지만 그 당시 의견을 제시했던 팀원과 함께 진행했는데 

생각보다 재미있는 좌표는 아니였지만 데이터 분석하는 과정을 알 수 있었습니다. 

오늘 포스팅에서 다룰 부분은 일부였던 소방대상물에 대해 다뤄볼 것입니다. 

소방대상물은 말 그대로 소방행정기관의 소방행정력이 미치는 곳을 말하는데

화재를 예방하거나 경계, 진압, 구조, 구급 활동의 대상이 되는 것을 말하는 것이다. 


제가 분석에 사용했던 자료입니다. 

https://gitlab.com/HeeJea/2001-portfoliomaterials-heejea_song/-/tree/master/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8.ver3(%ED%99%94%EC%9E%AC%EC%99%80%20%EC%86%8C%EB%B0%A9%EA%B3%B5%EB%AC%B4%EC%9B%90%EC%9D%98%20%EC%83%81%EA%B4%80%EA%B4%80%EA%B3%84)/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EA%B8%B0%EB%A7%90%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/%EB%B6%84%EC%84%9D%ED%8F%B4%EB%8D%94

 

빅데이터 프로젝트.ver3(화재와 소방공무원의 상관관계)/빅데이터 기말프로젝트/분석폴더 · master

GitLab.com

gitlab.com

분석에 사용했던 자료들은 GitLab에 올려놓은 상태라 자유롭게 사용하셔도 무관합니다. 

사용하신다면 댓글 한번만 남겨주시면 감사할께요~

(사용여부가 많아진다면 나중에 자료들은 하나의 Git에 묶어서 공유할 계획이기 때문입니다.)


  • 폰트 파일을 불러옵니다.
import pandas as pd
import numpy as np

import matplotlib.pyplot as plt 
import matplotlib 
from matplotlib import font_manager,rc

font_location="C:/Windows/Fonts/H2SA1M.ttf" 
font_name=font_manager.FontProperties(fname=font_location).get_name() 
matplotlib.rc('font',family=font_name)

우선 matplotlib는 그래프를 활용하기 위한 라이브러리입니다.

해당 matplotlib에는 폰트 매니저를 가지고 있는데

해당 폰트 메니저를 이용하여 제 로컬에서 사용하는 폰트를 이용 가능합니다.

 

  • 전국 소방대상물의 합계를 만들어줍니다.
# 대상이라는 변수에 소방대상물_합계 파일을 넣어준 뒤 컬럼명을 변경해줍니다.
대상 = pd.read_excel('소방대상물_합계.xlsx')
대상 = 대상.rename(columns={'합계':'소방대상물합계'})

plt.rcParams["figure.figsize"] = (20,10)
matplotlib.pyplot.xticks(fontsize=20)
plt.plot(대상.index, 대상['소방대상물합계'], marker='D')
plt.title('전국 소방대상물합계', fontsize=30)
plt.xlabel('지역', fontsize=30) 
plt.ylabel('소방 대상물 합계', fontsize=30) 
plt.legend(대상.columns, fontsize=20)

소방대상물 합계는 직접 전국의 소방대상물 자료를 수집한 뒤 

파이썬으로 통계를 낸 뒤 하나의 엑셀파일로 제작한 파일입니다. 

따라서 엑셀에는 지역과 합계만 존재합니다. 

해당 소방대상물 파일을 이용하여 우선 그래프를 하나 만들어봅니다. 

아래에서 보이는 것과 같이 X축은 지역, Y축은 대상물의 합계로 나열하면 위와 같습니다. 

그렇다면 현재 그래프를 통해서 얻을 수 있는 데이터는 무엇일까요?

경기도와 서울은 소방대상물이 많은 반면 세종시나 제주도 충청도는 적다.

곰곰히 생각해보면 맞다고 판단되는 건 경기도와 서울특별시에 인구수가 밀집되어 있고 

경기도의 경우에는 지역이 넓고 행정구역이 분리되어 있기 때문에 소방대상물이 많을 수 밖에 없습니다.

그리고 하나 생각해보면 소방대상물이 높은 지역은 화재발생율도 높을 수 있다는 결론이 

애초에 해당 지역에는 인구가 많기 때문이겠죠?

더 나아가서 소방대상물은 소방시설을 가지고 있어야 하는데

생각보다 오작동이 나는 곳도 많기 때문이라고 생각됩니다.

 

  • 소방대상물의 비율을 파이 차트로 보기
tile = 대상.plot.pie(autopct='%.1f%%', fontsize=20, subplots=True)
plt.title("<전체 대상물 비율>", fontsize=50)
plt.axis([0,1,-1.5,1.2])
plt.show()

 

파이 차트로 보면 좀 더 한눈에 보기 쉽겠죠?

그렇다면 소방대상물은 사실상 화재 발생율과 당연한 관계입니다. 

소방대상물이 많을 수록 인구도 많고 그에 따른 화재 발생율도 높겠죠?

 

  • 전체 지역의 소방공무원을 분석해보자
# 전체지역_소방공무원 엑셀 파일을 로딩하고 이에 따른 인덱스 명칭을 '지역'으로 변경하기 
인원 = pd.read_excel("전체지역_소방공무원.xlsx")
인원 = 인원.reset_index()
인원 = 인원.rename(columns={'index':'지역'})

# 지역의 명칭을 다시 변경해주기 
인원.loc[0,['지역']] = '서울특별시'
인원.loc[1,['지역']] = '경기도'
인원.loc[2,['지역']] = '강원도'
인원.loc[3,['지역']] = '충청남도'
인원.loc[4,['지역']] = '충청북도'
인원.loc[5,['지역']] = '전라남도'
인원.loc[6,['지역']] = '전라북도'
인원.loc[7,['지역']] = '경상남도'
인원.loc[8,['지역']] = '경상북도'
인원.loc[9,['지역']] = '제주도'

# 2013년, 2014년, 2015년도에 소방공원 수를 비교하기 
인원 = 인원.drop(['2013년','2014년','2015년'], axis=1)
인원 = 인원.rename(columns={'2016년':'소방공무원수'})
인원 = 인원.set_index('지역')

#병합하여 소방대상물, 화재발생수, 소방공무원 수를 한눈에 비교해보기
merge = pd.merge(대상_total, 화재_total, on='지역', how='inner')
merge = pd.merge(merge, 인원, on='지역', how='inner')
merge

당시에는 프로젝트를 통해 추후 발생율을 분석하는 것이여서 2015년도까지의 데이터로 진행했었습니다. 

 

위에서 merge한 값을 보면 위와 같은데 

생각보다 무슨 의미인지 하나도 모르는게 정답입니다. 

그렇지만 추축을 해보면 

대상물이 많다 -> 인구가 많다 / 대상물이 적다 -> 인구가 적다

화재 발생율 == 소방공무원 : 지역 인구 대비 공무원수 적당

화재 발생율 >= 소방공무원 : 지역 인구 대비 공무원수가 적다.

화재 발생율 <= 소방공무원 : 지역 인구 대비 공무원의 수가 많다.

위의 문장으로 표현할 수 있습니다.


예시를 들어서 전라북도를 보면 소방대상물은 3881개인데 이에 비해 화재 발생율도 적으며 공무원수도 적당합니다. 

이는 해당 지역에 공무원수도 적당하면서 전라북도가 소방대상물에 소방시설이 잘 되어있다는 의미입니다.

반대의 상황인 경상남도를 보면 14892의 소방대상물인데 7685건의 화재 발생과 3024명의 공무원수를 볼 때

"지역에 소방대상물에 시설은 잘 되어있으나 화재 발생 시 출동할 수 있는 공무원 수가 부족하여 인원 충당이 필요하다"

위와 같은 결론이 날 수 있겠죠?


위의 방식으로 화재와 관련된 데이터를 merge를 진행해보면

위와 같이 모든 비율들을 한눈에 볼 수 있는 테이블을 생성할 수 있습니다. 

뒤에 비율들을 계산하는 방식은 전체 값을 백분율로 나타내면 됩니다. 

여기서 개인보호장비의 총합은 과연 어떤 상관관계일까?

라는 의구심이 들 수 있는데 개인보호장비가 적은데 소방공무원수가 많다면? 

그만큼 소방공무원에게 부여되는 장비들이 적다는 말이고

이는 화재의 규모가 커지면 소방공무원들에게 힘들어질 수 있다는 의미로 해석해볼 수 있습니다. 

더 나아가서 차트를 통해서 한눈에 볼 수 있으면 더 효율적으로 분석할 수 있습니다. 


이번 포스팅은 파이썬 데이터 분석을 이용하여 관계를 분석하는 포스팅입니다. 

분석이 100% 정확한 건 아닙니다. 

그렇지만 분석을 할 수 있다면 데이터를 보는 눈이 달라지면

추후에 의견을 제시할 때 효율적인 의견을 낼 수 있다는 걸 느낄 수 있었습니다. 

다음 포스팅은 더 유익한 포스팅으로 찾아오겠습니다.

728x90