1 분 소요

두 데이터 합치기

merge를 이용한 데이터 병합


  • key 컬럼을 기준으로 병합

  • left에 키를 기준으로 right 병합

  • key를 기준으로 합집합 병합

  • key 컬럼에서 교집합 병합

데이터 병합 및 정리

데이터 병합


필요 없는 컬럼 제거


인덱스 재지정

  • 재지정 명령어 : set_index

상관관계(Correlation)


corr()

  • 데이터의 관계를 찾을 때, 최소한의 근거가 있어야 해당 데이터를 비교하는 의미가 존재
  • 상관계수를 조사해서 0.2 이상의 데이터를 비교하는 것은 유의미

  • CCTV 전체 수(소계)와 가장 상관관계가 있는 데이터 → 인구수
  • ∴ 구별 인구대비 CCTV 현황을 분석해서 상대적으로 CCTV가 적거나 많은 구를 찾는 것이 의미를 가짐

CCTV 비율

  • 인구대비 CCTV 비율이 높은 구

  • 인구대비 CCTV 비율이 낮은 구

Matplotlib

  • 파이썬 대표 시각화 도구
  • Jupyter Notebook의 경우 matplotlib의 결과가 out session에 나타나는 것이 유리하므로 %matplotlib inline 옵션 사용

matplotlib 호출


삼각함수 그리기


scatter()


데이터 시각화

  • 한글 폰트 적용 및 마이너스 기호 적용 (window: “malgun gothic”)

  • Pandas DataFrame은 데이터 변수에서 plot() 사용 가능
  • 데이터(컬럼)가 많은 경우 정렬한 후 그리는 것이 효과적



경향 파악

  • 단순 CCTV 많은 구 : 강남, 양천, 서초, 관악, 은평, 용산
  • CCTV 비율 높은 구 : 종로, 용산, 중구
  • 전체 경향과 함께 보지 않으면 제대로 이해시키기 어려움

선형회귀(Linear Regression) Trend 파악

Numpy를 이용한 1차 직선 만들기

  • np.polyfit : 직선을 구성하기 위한 계수 계산
  • np.poly1d : polyfit으로 찾은 계수로 python에서 사용할 함수로 만들어 줌
  • plyfit에서 찾은 계수를 넣어 함수 완성

인구 400000인 구에서 서울시의 전체 경향에 맞는 적당한 CCTV 수?

  • 경향선을 그리기 위해 X 데이터 생성
  • np.linspace(a, b ,n) : a부터 b까지 n개의 등간격 데이터 생성

경향에서 벗어난 데이터 강조

그래프 다듬기

data_result[‘오차’] = data_result[‘소계’]-f1(data_result[‘인구수])

  • 경향(trend)과의 오차 만들기
  • 경향은 f1 함수에 해당 인구를 입력 : f1(data_result[‘인구수’])
  • 현재값 : data_result[‘소계’]

경향 대비 CCTV를 많이 가진 구


경향 대비 CCTV를 적게 가진 구


강조하고 싶은 데이터 시각화

  • s : 마커의 크기
  • c : color 세팅에 방금 계산한 경향과의 오차 적용
  • cmap : 사용자 정의한 맵 적용

  • 오차가 큰 데이터 아래 위로 5개만 마커 옆에 구 이름 명시
  • text : 그래프에 글자를 그리는 명령
  • plt.text(x, y, text, 설정)
  • x, y 데이터에 1.02, 0.98을 곱해 구 이름이 마커에 겹치지 않도록 설정

데이터 저장


출처

서울시 자치구 년도별 CCTV 설치 현황, https://data.seoul.go.kr/dataList/OA-2734/F/1/datasetView.do 서울시 주민등록인구 통계, https://data.seoul.go.kr/dataList/419/S/2/datasetView.do