[ZB] EDA-1 서울시 CCTV 현황 분석

SeriesWorld·2023년 11월 15일

ZB20-EDA

목록 보기
1/2
post-thumbnail

Pandas

  • 보통 파이썬에서 테이블 데이터(엑셀, csv 등)를 읽을 때 가장 마낳이 사용하는 모듈
  • python에서 R만큼 강력한 데이터 핸들링 성능을 제공하는 모듈
  • 단일 프로세스에서 최대 효율
  • 코딩 및 응용이 가능한 엑셀, '스테로이드 맞은 엑셀'로 표현되기도 함
  • import [a] as [b]
    얼라이어스, 'import하는 모듈을 b로 명명하겠다'는 뜻으로 이후 코드 작성을 간소화할 수 있음
  • csv(comma separated values): 쉼표(,)로 구분된 텍스트 데이터
  • 인코딩 문제가 있어 csv파일을 엑셀로 열면 깨질 수 있다.
    pandas를 통해 불러올 때 csv파일의 인코딩을 확인하여 입력해야 한다.

Pandas DataFrame 구조

  • Index: 각 행(row)의 고유 번호
    Column Name: 열(세로 방향)의 이름
    Column: 각 열의 고유 이름
    Values: 각 행, 열에 해당하는 값

데이터프레임 읽기

  • pd.read_***() 명령어로 읽어온다.
  • 인자에 header 옵션을 통해 column명을 명명할 수 있다.(어디부터 읽어올지 설정할 수 있다)
    usecols 옵션을 통해 불러들일 column을 제한할 수 있다.
  • df.inplace 옵션을 통해 수정한 내용을 저장한다.(사용하고 있는 변수에, 저장하지 않는 경우 일회성으로 변화된다)
  • df.rename(columns=[a])을 통해 컬럼명 변경 가능. dict형태로 입력할 수 있다.
  • df.head(), df.tail()을 통해 데이터의 일부를 불러올 수 있다.(인자로 숫자 입력시 해당 숫자만큼 불러온다. 숫자 미입력시 기본값 5)
  • df.columns : 해당 DF의 column명을 list형태로 불러온다.

Pandas 기초

  • Pandas의 데이터형을 구성하는 기본은 Series이다.

DataFrame

  • pd.Series(): DF 생성(index, value)

강의 중 series는 한 가지 데이터 타입만 가질 수 있다고 표현했는데, 실제로는 각 value별 데이터타입은 다를 수 있었다.

# 예시
data = pd.Series([1,2,3,4,'5'])   # dtype: object
data[:4] % 2
# 0 1 
# 1 0
# 2 1
# 3 0
  • pd.date_range("[날짜]", period=[a]): [날짜]부터 6일(기간)의 데이터 생성(Datetime Index)
  • 데이터프레임 생성 방법
    pd.DataFrame([value], index=[a], columns=[b]): 간단한 데이터프레임 생성
    pd.DataFrame({"column": ['values']}): 딕셔너리 안의 리스트 형태(열 기준)
    pd.DataFrame([{'column': 'value'}]): 리스트 안의 딕셔너리 형태(행 기준)

정보 탐색

  • df.index, df.columns, df.values: 각각의 값 추출
  • df.info(): DF의 기본 정보 확인, 각 컬럼의 크기와 데이터 형태를 확인할 수 있다.
  • df.describe(): DF의 통계적 기본 정보(count, 평균, 표준편차 등)

정렬

  • df.sort_values(by=[a], ascending=[B]): [a]컬럼을 기준으로 [b](오름차순 True/ 내림차순 False) 정렬

선택

  • df[]: 대괄호 안에 컬럼명으로 특정 컬럼만 추출할 수 있음
    • df. 뒤에 컬럼명을 써도 선택 가능(단, 컬럼명이 숫자인 경우 불가능. str형식인 숫자도 불가능!)
    • 두 개 이상의 컬럼을 불러올 땐 리스트에 담아서 df[["A", "B"]]

slice

  • df[a:b]: a행(row) ~ b-1행 슬라이싱, a,b에 특정 index나 컬럼명으로 slice하는 경우 a부터 b까지(b포함)

loc / iloc (location / integer location)

  • df.loc[a,b]: a행, b열의 데이터 선택, 각각 slice 및 이름으로 사용 가능(여러 개 이름을 입력할 땐 리스트형태)
    index/column 이름으로만 가능, slice시 n~m까지(마지막 행/열 포함) 행/열 선택
  • df.iloc[a,b]: loc 옵션과 같지만, 번호로만 접근 가능(row, column 모두 번호로)
    이 경우에는 각각 n:m으로 slice하는 경우 n~m-1까지(마지막 행/열 불포함) 행/열 선택

조건

  • df[~]대괄호 안에 특정 조건을 통해 값을 필터링할 수 있음.(조건이 True인 row만 추출)
  • df['a'].isin([values]): a컬럼에 value가 있는 경우 True, 없는 경우 False 반환
    ex) df[df['a'] > 0]: 'a'컬럼 value가 0보다 큰 데이터 추출
    ex) df[df > 0]: 모든 value 중 음수인 값은 NaN처리

삭제

  • del df['a']: 특정 column(컬럼명 입력) 제거
  • df.drop(): 1개의 인자만 넣으면 해당 행 삭제
    axis=0(행), axis=1(열)을 통해 행/열을 삭제할 수 있다.
    columns= 옵션을 통해 컬럼을 지정하면 axis 옵션을 주지 않아도 열(column)이 삭제된다.
    기본적으로 삭제 후 data에 반영되지 않으므로 inplace=True 옵션을 줘야 data에 반영된다.

apply

  • df[column].apply(): "sum", "mean", "max", "min" 등을 통해 해당 컬럼의 데이터를 연산할 수 있다.
  • 기본적으로 pandas는 numpy 패키지를 기반으로 만들어져있기 때문에 np.sum, np.std 등의 연산도 가능하다.
    직접 만든 함수도 입력 가능

unique()

  • 해당 컬럼의 값을 중복값 없이 나타낸다.(array 형태)

merge()

  • on 옵션을 통해 기준 설정, 해당 컬럼을 기준으로 데이터가 합쳐진다.
  • how 병합의 기준 데이터 설정
    left: 좌측 데이터 기준, 우측에 없으면 NaN처리
    right: 우측 데이터 기준, 좌측에 없으면 NaN처리
    outer: 좌우측 상호 간에 없는 데이터는 NaN처리하며 합쳐진다.

상관관계(corr)

  • 두 데이터 사이에서 한 데이터의 증가가 다른 데이터에 영향(증가 또는 감소)을 주는 지표
    0.2 이하: 상관관계가 없거나 무시해도 좋은 수준
    0.4 이하: 약한 상관관계
    0.6 이상: 강한 상관관계
    • 상관관계가 있어도 인과관계는 아닐 수 있다.

matplotlib

  • matplotlib.pyplot: matlab 프로그램 시각화 기능이 담겨있다.
  • 파이썬의 대표 시각화 도구로, 주로 plt로 naming하여 사용한다.
  • jupyter notebook을 사용하는 경우 matplotlib 결과를 한 화면에 나타내기 위해 %matplotlib inline 옵션을 사용한다.
  • 2D 그래프 전담
  • plt.figure()로 열어서 plt.show()로 닫는다.

plt.figure()

  • figsize: 그래프 크기 설정

plt.plot()

  • 선그래프, 기본 인자로 x축과 y축 값을 받는다.
  • 각종 옵션을 통해 디테일을 설정할 수 있다.
    color: 색상
    linestyle: 선 스타일, ls로 쓸 수 있음
    lw: 선 굵기
    marker: 마커 모양
    markerfacecolor: 마커 색상
    markersize: 마커 크기

기타 옵션

  • plt.grid(): 격자
  • plt.legend(): 범례
    label: 각 그래프별 라벨을 한꺼번에 입력 가능하고, 해당 그래프를 나타내는 식(plt.plot() 등) 안에 label 옵션을 통해 입력할 수도 있다.
    loc: 범례 위치, upper right, upper left 등이 있고, 숫자로도 입력할 수 있다.
  • plt.xlabel(): x축 이름
  • plt.ylabel(): y축 이름
  • plt.title(): 그래프 제목
  • plt.xlim(): x축 범위 설정
  • plt.ylim(): y축 범위 설정
  • plt.text(x, y, t): (x,y) 좌표에 t 텍스트 출력

plt.scatter()

  • 점 그래프
    c: 색상
    marker: 점 모양
    s: 마커 크기

Pandas를 활용해서 그래프 그리기

  • Pandas DF는 변수에서 바로 plot 명령을 사용할 수 있다.
  • 데이터(컬럼)가 많은 경우 정렬 후 그리는 것이 효과적일 때가 많다.

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

  • np.polyfit: 직선을 구성하기 위한 계수 계산
  • np.poly1d: polyfit으로 찾은 계수로 python에서 사용할 함수로 만들어 줌
  • np.linspace(a,b,n): a부터 b까지 n개의 등간격 데이터 생성

오차 데이터

  • np.poly1d 함수값과 실 데이터 차이를 통해 경향 대비 오차 값을 구할 수 있다.

csv로 저장하기

  • pd.DataFrame.to_csv('경로', sep=',', encoding='utf-8')

0개의 댓글