15기 데이터 취업 스쿨 / 27일차 스터디노트 / 서울시 범죄 데이터 시각화

구명모·2023년 6월 1일

EDA

목록 보기
7/15
post-thumbnail

● 오늘의 공부

  • 서울시 범죄현황 데이터 시각화
  • folium
  • 범죄 현황 장소 분석

♟️서울시 범죄현황 데이터 시각화

데이터 시각화를 위해 seaborn, matplotlib, 한글파일을 import 해준다. 그리고 살인, 강도, 폭력 범죄간의 상관관계를 알고싶다고 할때 sns.pairplot() 안에 쓸려는 데이터와 분석할려는 시리즈들을 리스트 형태로 넣고 plot모양, 크기를 입력하면 상관관계를 알수 있는 pairplot이 나온다.

같은 데이터 시리즈끼리가 아니라 x,y축에 각각 다른 시리즈를 넣고 싶다고 하면 x_var = [], y_vars = [] 안에 상관관계를 파악할 시리즈를 넣으면 된다.

지난 공부에서 배웠던 heatmap을 사용해서 지역별 검거율을 본다. 먼저 사용할 검거율 데이터를 검거를 기준으로 내림차순으로 정렬을 해준다. 그러고나서 plt.figure(), sns.heatmap()을 사용한다. heatmap() 안에는 시각화할 데이터, 숫자로 데이터 표시 여부, 숫자형태, 라인간의 간격과 색갈을 입력하여 만든다.
마찬가지로 범죄 컬럼을 기준으로 범죄발생 건수를 정렬할려고 하면
범죄 컬럼은 이미 정규화를 해놓은 상태이다

♟️folium

!pip install folium 으로 설치
혹시나 윈도우에서 에러가 나면 !pip install charset 이나 !pip install charset-normalizer를 사용한다

♟️folium.Map()

folium.Map() 안에는 location이라는 변수가 들어갈수 있는데 location은 튜플, 리스트 형태로 위도와 경도를 입력하고 확대가 필요하면 zoom_start로 0 - 18 사이의 숫자를 입력하면 된다.

♟️folium.Marker()

지도에 마커를 생성한다. 지도 좌표를 부르고 folium.Marker()에 좌표 위치를 마찬가지로 튜플이나 리스트로 받아서 입력한 후, add_to() 지도 변수를 할당하면 마커가 추가된다.


popup에 메모뿐만 아니라 html 기능으로 주소도 추가할 수 있다.

♟️folium.Icon()


shift + tab 을 이용해서 안에 무슨 데이터가 어떻게 들어가는지 보고 folium.Icon()에 바꿔준 모습 prefix를 fa값으로 바꿔줘야 아이콘이 나타나는 것들이 있음
https://fontawesome.com/
https://www.glyphicons.com/sets/basic/ 에서 아이콘 추출 가능

♟️folium.ClickForMarker()


마우스를 클릭한곳에 마커를 생성한다. add_child() 안에 folium.ClickForMarker()를 입력하면 지도위에 클릭한 곳에 마커가 생성이 되는데 popup의 디폴트 값을 위도와 경도이다

♟️folium.LatLngPopup()

클릭한 곳에 위도와 경도를 나타내준다. 사용법은 folium.ClickForMarker랑 동일하다

♟️folium.Circle()

다른거는 동일하지만 radius라는 반지름과 원을 채울지 말지라는 fill 구문이 들어간다. fill의 디폴트는 False이기 때문에 채울려면 fill=True를 해주어야한다. 요소를 추가하면 다르게 추가를 시킬수도 있다

♟️folium.CircleMarker()

folium.Circle()이랑 다른것이 없다. 공식사이트에서 Circle이랑 CircleMarker에 차이점이 명확하게 나와있지 않다. 한가지 다른것은 같은 radius를 입력했는데 크기가 다르게 출력된다.

♟️folium.Choropleth


folium.Map으로 밑바탕 지도를 그려줌 -> json 파일을 읽어왔기 때문에 경계선이 그려진 데이터로 읽어옴 -> pandas dataframe이나 series를 읽어옴 -> 할당해줄 개체들을 선택 -> key_on 으로 묶어줌 -> 칠할 색상, 선명도 조절 -> legend tag를 이용해 오른쪽 위에 부가 설명

♟️folium 예제

공공데이터기관에서 불러온 데이터는 한글파일이 있기 때문에 euc-kr을 써서 한글이 사용될 수 있게 만든다. 그리고 info()를 보면 위도와 경도가 누락된 몇개의 데이터가 있기 때문에 NaN값은 dropna()를 이용해서 빼주고 다시 데이터 정리 가능
columns를 불러와 보니 연번과 분류가 뒤에 스페이스가 하나 더 들어가있다. 그래서 이름을 다시 바꿔주고 연번을 삭제해준다.

♟️서울시 범죄 현황 데이터 시각화

folium.Map()으로 밑그림 -> Choropleth()에 들어갈 get_data 설정 -> 데이터, columns 입력하고 key_on으로 묶기 -> 색, 선명도 정하기 -> legend 범례 설정

같은 방법으로 범죄 컬럼을 데이터에 넣어서 정규화된 총 범죄 발생 건수를 시각화한다.

♟️경찰서 위치 마커 표시

경찰서 위치를 불러오고 검거 컬럼을 정규화해준다

iterrows() 반복문을 통해 folium.Marker() 위치정보에 위도와 경도를 찍어 경찰서 위치를 마커로 표시해준다.

처음에 마커로 표시했던거를 응용해서 folium.CircleMarker()를 통해서 radius 에 검거 * 50을 해서 검거율이 높을 수록 큰 원을 그려내고 popup에는 지역과 검거율을 채워넣어 지역별 경찰서에 검거율을 보여주는 표를 만들어준다.

♟️서울시 범죄 현황 발생 장소 분석

추가 검증을 위한 장소분석. 장소와 범죄명을 각각 알아낸 다음 pivot_table()을 이용해 만들어준다. pivot_table에는 사용할 데이터, index, columns, aggfunc이 필요하다. columns를 합쳐줬기 때문에 multi columns가 발생해서 columns.droplevel()을 통해서 multi columns 를 날려준다.
정규화 작업을 한 뒤, 종합이라는 columns을 만들어 np.mean()에 crime_loc_norm과 axis = 1을 넣어준다.np에서 axis = 1 은 행 작업이다.

모듈들을 import 해주고 종합이라는 컬럼을 기준으로 내림차순을 해준다. 그 상태에서 heatmap()을 써준다. 쓸 데이터, annot, fmt, linewidths, cmap 을 넣어서 출력해주면이 나온다.

♟️ 오늘의 공부를 마치며

두번째 시각화 프로젝트를 마쳤다. 너무 아직 어설프고 계속 여러번 틀리면서 영상을 참고하면서 해야한다. 실전에 가면 쓸 수 있을지 의문이 들 정도로 너무 어설퍼서 다른 데이터들을 공공기관에서 구해서 혼자 연습을 더 해봐야겠다

profile
데린이

0개의 댓글