EDA 2 - 범죄현황

Jasmine·2023년 4월 5일

EDA

목록 보기
2/9

GoogleMaps, Folium, Seaborn, Pandas의 Pivot_table

범죄현황 데이터 개요 및 읽어오기

  • 옵션 thousands="," : 데이터의 숫자값들이 콤마를 사용하고 있어서 문자로 인식될 수 있다. 천단위 구분을 알려주면 콤마를 제거하고 숫자형으로 읽는다
  • encoding = "euc-kr"

  • 데이터 읽어온 후 head(), info() 찍어보기
  • index가 0 to 65533이라고 써있는데, 데이터값은 310개 → "이상하구나" 생각, 원인찾기

데이터 정리하기

  • 특정 컬럼의 unique 조사 → '죄종' 컬럼에 NaN 값이 있구나
  • isnull() : NaN만 검색해서 추출해보기 → 이게 원인이 맞구나!
  • notnull() : NaN이 아닌 데이터만 가져오기 → 용량도 확 줄어들었다

데이터 확인

  • 세로축에 서울시 구이름, 가로축에 5대 범죄 수치가 있으면 좋겠다
  • 즉, raw data를 원하는 데이터 열로 재배치할 필요가 있다
    → pivot table 하기!

- Pandas의 pivot_table

- 예제 : sales-funnel.xlsx

  • raw data
  • pivot_table
    : 특정 인덱스(컬럼)을 중심축(기준)으로 하여 데이터를 그룹화하고 정리
  • index를 여러개 지정할 수 있음

  • value를 지정할 수 있음
    (중복된 데이터는 디폴트로 평균 연산하여 표시)
  • values에 함수를 적용할 수 있다
    (aggfunc 옵션 지정, 디폴트는 평균)
  • 갯수 적용 : len
  • 분류를 지정 : Columns 옵션
    (Product 컬럼 안의 내용으로 분류해서 각각의 가격을 보기)
  • NaN 값에 대한 처리 : fill_value 옵션

활용 sample

서울시 범죄현황 데이터 정리

  • raw data
  • 경찰서 이름을 index로 하고, 죄종과 발생/검거를 나누어 표시하도록 정리
    : crime_station

  • 사건의 합을 기록하기 위해 aggfunc 옵션에 sum 사용

  • 피봇테이블을 적용하면 column이나 index가 다중으로 잡힌다는 함정!
    : MultiIndex에 무려 4개가 잡힌다

  • multi index에 접근하는 방법
    ex: 구별 강도 검거 건수의 합계

  • 다중 컬럼에서 특정 컬럼 제거 : droplevel()

  • index 찍어보기 : 경찰서 이름으로 되어있다 → 목적에 맞게, 경찰서 이름으로 구이름을 알아내야 한다

- 파이썬 모듈 설치

Python 자체가 항상 사용할 모듈은 직접 설치해야 한다
anaconda에 많은 모듈이 포함되어 있는 덕분에 하지 않지만, 직접 설치도 할 수 있어야 한다

pip명령과 conda명령

  • pip 명령 : 파이썬의 공식 모듈 관리자
    • pip list : 현재 설치된 모듈 리스트 반환
    • pip install (module_name) : 모듈 설치
    • pip uninstall (module_name) : 모듈 제거
  • 두 가지 방법
    !pip list
    get_ipython().system("pip list")
  • conda 명령 : 아나콘다에서 배포한 모듈 관리자. 채널이 존재
    • conda list
    • conda install (module_name)
    • conda uninstall (module_name)
    • conda install -c (channel_name) (module_name) : 지정된 배포 채널에서 모듈 설치

- google maps api 사용 준비

  • index 찍어보기 : 경찰서 이름으로 되어있다 → 목적에 맞게, 경찰서 이름으로 구이름을 알아내야 한다

- python의 for문

  • for문 : 들여쓰기(indent)

- list comprehension

- iterrows()

Pandas에 잘 맞춰진 반복문용 명령 iterrows()
- Pandas 데이터 프레임은 대부분 2차원
- 이럴 때 for문을 사용하면, n번째라는 지정을 반복해서 가독률이 떨어짐
- Pandas 데이터 프레임으로 반복문을 만들때 itterows() 옵션을 사용하면 편함
- 받을 때, 인덱스와 내용으로 나누어 받는 것만 주의

google maps에서 구별 정보를 얻어서 데이터를 정리

  • 구글맵 import
  • 구글맵 API 테스트
    • 전체 결과 크기가 1인 리스트 → 인덱스로 접근 (tmp[0])
    • 큰 리스트 안에 dict형 구조 → dict 데이터를 얻는 get명령을 사용
  • 원하는 데이터 뽑아내기
  • 전체 주소에서 구이름만 가져오기
    • split() : 띄어쓰기 기준으로 나눔
  • 추출한 정보를 담을 컬럼 생성 (구이름, 위도, 경도)
    • 우선 nan값으로 채워넣기
  • 반복문을 이용해서 위 표의 NaN을 모두 채우자
    • crime_station에서 인덱스(idx)와 나머지(rows)를 받아서 반복문을 수행
    • google maps에 던져줄 검색어 (station_name) 만들기
    • loc 옵션을 사용 : 구글 검색에서 얻은 정보로 칸채우기
      (슬라이싱, df.loc[행인덱스값, 열인덱스값] 으로 접근)
  • 보기 좋게, 컬럼 합쳐서 재지정하기
    • tmp라는 리스트에 합치기
    • get_level_values 이용
    • list comprehension 이용
    • 컬럼명 지정 : df.columns = [리스트]
  • 저장

구별데이터로 변경하기

서울시 범죄현황 데이터 최종 정리

seaborn

범죄현황데이터 시각화

Folium 지도 시각화

서울시범죄현황 지도시각화

서울시범죄현황 장소별 분석

특정 컬럼 제거

df.columns.droplevel()

del crime_anal_gu["강도검거"]
crime_anal_gu.drop(["살인검거", "절도검거", "폭력검거"], axis=1, inplace=True)

crime_station.columns.droplevel([0, 1]) 

pandas의 date_range

반복문에서 사용하는 iterrows()함수

  • idx, rows 인자
  • 컬럼 이름을 바로 사용할 수 있어서 가독성에 도움을 준다
  • DataFrame을 행 단위로 한줄씩 반복문에서 사용하도록 반환한다
profile
데이터직무를 위한 공부 기록

0개의 댓글