Ch2 서울시 CCTV 현황 데이터 분석 01-11 (CCTV1-3)

김민지·2023년 3월 28일
0
  1. 서울시 구별 인구수 대비 CCTV 현황 그래프 그리기

#Python, Pandas
1) 서울시 구별 CCTV 현황 데이터 확보
2) 인구 현황 데이터 확보
3) CCTV 데이터와 인구 현황 데이터 합치기
4) 데이터를 정리하고 정렬하기

#Matplotlib
5) 그래프를 그릴 수 있는 능력

#Regression using Numpy
6) 전체적인 경향을 파악할 수 있는 능력

#Insight and Visualization
7) 그 경향에서 벗어난 데이터를 강조하는 능력

  1. 데이터 읽기
  • import MODULE: 모듈을 사용하겠다고 선언
    -> 사용: MODULE.function

  • import MODULE as md: 앞으로 모듈을 사용할거고 이를 md라는 이름으로 부르겠다 선언
    -> 사용: md.function

  • from MODULE import function: MODULE에 포함된 function이라는 함수만 사용하겠다 선언
    -> 사용: function

  • 표에서 세로묶음은 column, 가로묶음은 index

  • 주피터 노트북 실행

(base) C:\Users\minji>conda activate ds_study
(ds_study) C:\Users\minji>cd Documents
(ds_study) C:\Users\minji\Documents>cd ds_study
(ds_study) C:\Users\minji\Documents\ds_study>jupyter notebook
import pandas as pd
CCTV_Seoul = pd.read_csv("../data/01. Seoul_CCTV.csv", encoding="utf-8")
#pandas를 이용해서 데이터파일 가져오기
CCTV_Seoul.head() # 디폴트는 5줄
CCTV_Seoul.head(3) # 3줄만 갖고 오도록 명령
CCTV_Seoul.tail()  # 데이터 개수를 쉽게 판별 가능
CCTV_Seoul.columns # 전체 columns 목록 가져오기
CCTV_Seoul.columns[0] # 인덱스 0번 column만 가져오기
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0]: "구별"}, inplace=True)
# column명 변경하기. inplace=True로 변경사항을 저장함
pop_Seoul = pd.read_excel(
    "../data/01. Seoul_Population.xls", header=2, usecols="B, D, G, J, N"
)
# 엑셀 표 중 가져올 자료 선별하기
pop_Seoul.rename(
    columns={
        pop_Seoul.columns[0]:"구별",
        pop_Seoul.columns[1]:"인구수",
        pop_Seoul.columns[2]:"한국인",
        pop_Seoul.columns[3]:"외국인",
        pop_Seoul.columns[4]:"고령자",
    },
    inplace=True
)
  1. Pandas 기초
  • Pythn에서 R 만큼의 강력한 데이터 핸들링 성능을 제공하는 모듈
  • 단일 프로세스에서는 최대 효율
  • 코딩 가능하고 응용 가능한 엑셀로 받아들여도 됨
  • 누군가 스테로이드를 맞은 엑셀로 표현함
import pandas as pd
import numpy as np

-> pandas는 통상 pd로 import하고, 수치해석적 함수가 많은 numpy는 통상 np로 import함

s = pd.series([1, 3, 5, np.nan, 6, 8])
s

-> Pandas의 데이터형을 구성하는 기본은 Series (각 칼럼 한 줄 한 줄이 Series)

dates = pd.date_range("20130101", periods=6)  # 해당 날짜부터 6일간을 출력
dates

-> 날짜(시간) 이용가능

df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=["A","B","C","D"])
df

-> Pandas에서 가장 많이 사용되는 데이터형은 DataFrame
-> index와 columns를 지정하면 됨

df.info()

-> DataFrame의 기본 정보 확인
-> 보통 각 column의 크기와 데이터형태를 확인하는 용도

df.describe()

-> DataFrame의 통계적 기본 정보 확인

df.sort_values(by="B", ascending=False)

-> 데이터 정렬

df["A"]

-> 특정 column만 읽기

df[0:3]

-> [n:m] : index 기준 n부터 m-1까지 읽기
But, 인덱스나 컬럼의 '이름'으로 slice하는 경우는 m까지 포함함

df.loc[:, ["A", "B"]]

-> 모든 행의 A,B column만 가져오도록 함

df.loc["20130102":"20130104", ["A", "B"]]

-> '20130102','20130103','20130104'행의 A, B column만 가져옴

df.iloc[3:5, 0:2]

-> 3,4행의 0,1 column만 가져옴

df.iloc[[1,2,4],[0,2]]

-> 1,2,4행의 0,2 column만 가져옴

df[df["A"] > 0]

-> df의 A칼럼 중 value가 0 초과인 것만 출력

df[df>0]

-> 전체 value 중 0보다 큰 것만 출력

df.apply(np.cumsum)

-> 각 컬럼 누적합 구하는 함수 사용

  • 마크다운 하기 -> esc+m으로 파란창으로 만든 후, shit+enter. 제목은 # 뒤에
def plusminus(num):
    return "plus" if num > 0 else "minus"
df["A"].apply(plusminus)

-> 함수 직접 만들어서 사용

df["A"].apply(lambda num: "plus" if num > 0 else "minus")

-> lambda 사용

  1. CCTV 데이터 확인해보기
pop_Seoul["구별"].unique()

-> 한 번씩만 출력(중복데이터X)

  1. 데이터 병합하기
  • merge를 이용한 데이터 병합
pd.merge(left, right, on="key")

-> key 칼럼을 기준으로 병합 (key 칼럼 중 공통된것만 병합함-how="inner"디폴트)

pd.merge(left, right, how="left", on="key")

-> left 데이터의 key 기준으로 병합함(left의 모든 데이터는 가져오고, 그에 맞춰 right를 병합)

pd.merge(left, right, how="outer", on="key")

-> 두 데이터 모두 손상되지 않도록 key 기준 병합

pd.merge(left, right, how="inner", on="key")

-> 두 데이터의 key칼럼 공통분모만 병합

data_result.set_index("구별", inplace=True)

-> "구별"칼럼을 인덱스로 재지정(unique해야 함)

data_result.corr()

-> 상관계수를 구해줌(상관관계)

<제로베이스 데이터 취업 스쿨>

0개의 댓글