EDA - (1) Analysis Seoul CCTV

jun hyeon·2023년 8월 28일
post-thumbnail

예제 출처 : 제로베이스 데이터 스쿨

데이터 읽기

판다스 모듈 사용

판다스에 내장된 read_csv() 함수로 csv파일을 읽어 CCTV_Seoul에 할당. 인자는 파일 경로.

head()함수 - 맨 앞의 값 5개(디폴트) 가져오기

tail()함수 - 맨 뒤의 값 5개(디폴트) 가져오기

컬럼 확인하기 - 리스트 형태로 반환

인덱스가 0인 컬럼 확인하기

rename() 함수로 인덱스가 0인 컬럼명을 '구별'로 바꾸기. 'inplace=True' 인자는 출력만 하는 것이 아니라 바로 적용한다는 인자

서울인구 엑셀파일 읽어오기

위에서부터 인덱스가 2인(header=2) 컬럼명부터 읽기, 사용할 컬럼 설정하기.

컬럼명 설정


Pandas

  • python에서 R만큼의 강력한 데이터 핸들링 성능을 제공하는 모듈
  • 단일 프로세스에서는 최대 효율
  • 코딩 가능하고 응용 가능한 (스테로이드 맞은)엑셀로 받아들여도 됨

판다스의 기본 자료구조 'series'는 index와 value를 가진다.

2013 1월 1일 부터 6일의 시퀀스를 생성 - freq의 default는 'D(ay)'

가장 많이 쓰이는 'DataFrame'로 index, column 설정.

  • randn(6,4) : 6행 4열을 난수로 채움

데이터 조회, 선택, 정렬

  • info() : DataFrame을 개괄적으로 보여주는 함수

  • describe() : 통계 정보

sort_value() : 데이터 정렬 by, ascending 인자 등 사용 가능.
'B' 컬럼을 기준으로 내림차순 정렬

'A'컬럼만 추출

slice도 적용 가능

index명, column명을 직접 적용 가능

  • loc[]를 사용하여 특정 행,컬럼(순서유지) 추출가능

조건으로도 조회가 가능하다.
'A'컬럼 중 0보다 큰 값 조회
value 중 0보다 큰 값 조회

컬럼에 값 직접 삽입

  • isin() : 값을 비교하여 True, False로 반환
    'E'컬럼에 'two', 'four' 값을 확인

df[]로 묶어주면 True만을 추출

특정 컬럼 제거

  • apply() : 사용자 함수를 만들어 쓸 수 있다.

서울 CCTV 데이터 가져오기

'최근증가율' 컬럼 생성.

서울 인구 데이터 가져오기, 컬럼 rename() 해주기

  • drop() : axis를 인자로 행(0),컬럼(1)을 삭제가능
  • unique() : 구별 컬럼의 고유한 요소 출력. 요소는 중복되어 출력되지 않음.

외국인비율, 고령자비율 생성 후

내림차순 정렬

두 데이터 합치기

데이터 프레임 병합하는 법 3가지

  • concat()
  • merge()
  • join()

merge() 활용 데이터 합치기 on, how를 인자로 줄 수 있다.

서울 인구수, 서울 CCTV 데이터를 각각 조회, "구별"을 합칠 key로 잡고 column명을 일치시킴.

두 데이터 합치기

CCTV데이터에 있는 소계만 쓰임. 필요 없는 데이터 삭제

  • set_index() : 선택한 컬럼을 데이터 프레임의 인덱스로 지정

  • corr() : 모든 컬럼들 간 상관관계(correlation)를 출력해주는 함수

인구수 당 CCTV로 CCTV비율 컬럼 생성

matplotlib

  • 시각화 기능
  • 기본형태 :
    - plt.figure(figsize(a, b)) 로 열고
    - plt.plot(x, y)
    - plt.show() 로 출력한다.

그래프속 한글 인코딩 코드

import matplotlib.pyplot as plt # 모듈 matplotlib 의 pyplot(시각화기능)을 가져옴
from matplotlib import rc

rc("font", family="Malgun Gothic") # 그래프를 그릴 떄 나타내는 설정
get_ipython().run_line_magic("matplotlib", "inline") # == %matplotlib inline

  • 삼각함수 그리기


  • 그래프 커스텀하여 그리기

옵션으로 color, linestyle, marker등 줄 수 있음.

  • scatter plot 그리기

데이터 불러와서 그리기

'인구수'컬럼, '막대그래프', 사이즈는 '7,7'

데이터 시각화

그래프 속 마이너스 부호 인코딩 코드

import matplotlib.pyplot as plt 
from matplotlib import rc

plt.rcParams["axes.unicode_minus"] = False #마이너스 부호 때문에 한글이 깨지는 것을 방지
rc("font", family="Malgun Gothic")
get_ipython().run_line_magic("matplotlib", "inline") # == %matplotlib inline

'소계'컬럼, '가로막대그래프', '실선'추가, 사이즈'8,8'

정렬 후 다시 출력

"인구수"와 "(CCTV)소계"컬럼으로 그리기

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

  • np.polyfit() : 직선을 구하기 위한 계수를 계산
  • np.poly1d() : polyfit으로 찿은 계수로 파이썬에서 사용할 수 있는 함수로 만들어주는 기능
fp1 = np.polyfit(data_result["인구"], data_result["소계"], 1)

numpy.polyfit() : 첫 번째 인수 "인구수", 두 번째 인수 "CCTV소계", 세 번째 인수는 피팅하려는 다항식의 차수. 데이터에 가장 잘 맞는 다항식의 계수를 반환함.

f1 = np.poly1d(fp1)

numpy.poly1d() : 위에서 찾은 계수로 다항식 함수를 생성.

인구가 40만인 구에서 서울시의 경향에 맞는 적당한 CCTV수는? 1509대

선을 그리기 위한 변수 설정

인자 설정 후 선 그리기

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

오차 컬럼 만들기
구 CCTV소계 - 인구수 경향 CCTV수 = 오차
오름, 내림차순 정렬

ListedColormap 함수 사용 컬러맵 생성

c=data_result["오차"]는 색상을 먹일 기준을 정하는 코드
for문으로 상위, 하위 각 다섯 개씩만 뽑아 라벨을 붙여 출력.

정리된 데이터 저장

0개의 댓글