프로젝트 - 서울시 CCTV 현황 분석(1)

이상해씨·2021년 9월 16일
1

EDA, 웹크롤링

목록 보기
2/13

◾목표

  • 서울시 구별 CCTV 현황 시각화
    • 서울시 CCTV 경향 파악
    • 지역별 상대적인 CCTV 수 파악

◾활용

  1. Python, Pandas
    • 서울시 구별 CCTV 현황 데이터
    • 서울시 구별 인구 현황 데이터
    • CCTV와 인구 현황 합치기
    • 데이터 정리, 정렬
  2. Matplotlib
    • 그래프를 통한 시각화
  3. Regression(회귀) using Numpy
    • 전체적인 경향 파악
  4. Insight and Visualization
    • 경향에서 벗어난 데이터 강조

◾데이터 얻기

  • 서울 열린 데이터 광장의 데이터 활용
    • 서울시 자치구 년도변 CCTV 설치 현황
    • 서울시 구별 인구 통계
  • 강의와 결과를 맞추며 진행하기 위해 강의에서 제공하는 데이터 사용

◾데이터 읽기

  • import : 모듈을 사용하기 위한 명령
    • import Module : 모듈을 사용하겠다.
    • import Module as md : 모듈을 사용할 때 md라는 이름으로 사용하겠다.
    • from Module import function : 모듈에 포함된 function이라는 함수만 사용하겠다.
  • pandas 사용
    • 파이썬의 강력한 분석 툴킷
    • 단일 프로세스에서 최대 효율
    • 코딩가능하고 데이터 분석이 가능한 엑셀로 받아들이기도 한다.(스테로드이 맞은 엑셀)
    • pandas는 통상 pd로 import
    • pandas DataFrame 구조 - index : 행, column : 열, value : 값

1. CSV 읽기

  • read_csv : csv 파일을 읽는 명령
  • 한글이 포함되어 있을 경우 encoding='utf-8' 옵션을 사용
import pandas as pd
# .. : 부모 디렉터리
# . : 현재 디렉터리
CCTV_Seoul = pd.read_csv("../data/01. Seoul_CCTV.csv", encoding="utf-8")
# 데이터의 상위 5개 데이터
# 데이터의 개수를 입력하여 원하는 만큼 볼 수 있다.
CCTV_Seoul.head()
# 데이터의 하위 5개 데이터
# 데이터의 개수를 입력하여 원하는 만큼 볼 수 있다.
# CCTV_Seoul.tail()

  • 컬럼 이름 조회 : columns, columns[인덱스]
  • 컬럼 이름 변경 : rename(columns={컬럼 : 변경할 이름}
  • inplace 옵션 : 작업을 진행한 데이터를 새 데이터로 반환할 지 현재 데이터에 적용할지 설정
    • False : 작업한 데이터 반환
    • True : 작업한 데이터 현재 데이터에 적용
# 컬럼명 확인
CCTV_Seoul.columns
CCTV_Seoul.columns[0]
# 컬럼명 변경
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0] : "구별"}, inplace=True)

2. 엑셀 읽기

  • read_excel : 엑셀 파일을 읽는 명령
pop_Seoul = pd.read_excel("../data/01. Seoul_Population.xls")
pop_Seoul.head()

  • 원하지 않는 행이 출력되므로 옵션을 통해 설정한다.
    • header : 시작할 행 지정
    • usecols : 읽어올 컬럼 지정(엑셀의 컬럼은 A,B,C,D,.. 등 영어로 이루어져있다.)
# 헤더와 사용할 컬럼 지정('계' 컬럼들만 사용)
pop_Seoul = pd.read_excel(
    "../data/01. Seoul_Population.xls", header=2, usecols="B, D, G, J, N"
)
pop_Seoul.head()

  • 컬럼 이름을 알아보기 쉽게 변경
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,
)


◾Pandas 기초

  • pandas 통상 pd로, 수치해석적 함수가 많은 numpy는 np로 import
import pandas as pd
import numpy as np

1. Series()

  • Pandas 데이터형을 구성하는 기본 자료형
    • indexvalue로 구성
    • 계산을 위해 한 가지 데이터 타입이 좋다
    • 딕셔너리로 인덱스 값을 지정할 수 있다.
s = pd.Series([1, 3, 5, np.nan, 6, 8])

# 딕셔너리
pd.Series({"Key":"Value"})

2. date_range()

  • 날짜(시간)을 사용할 수 있다.
dates = pd.date_range('20130101', periods=6)

3. DataFrame()

  • Pandas에서 가장 많이 사용되는 데이터형
    • index, column, value로 구성
    • 각 컬럼은 Series로 구성
  • 난수를 생성해 DataFrame 생성
data = np.random.randn(6, 4)
df = pd.DataFrame(data, index=dates, columns=["A", "B", "C", "D"])

  • df의 index, columns, values 조회
df.index

df.columns

df. values

  • describe : DataFrame의 기술통계 정보
    • df.describe()
  • 데이터 정렬 : sort_values(by=컬럼, ascending=Bool)
    • ascending = True : 오름차순
    • ascending = False : 내림차순
df.sort_values(by="B", ascending=False)

  • 컬럼 읽기 : df["컬럼"]

◾Pandas Slice

  • 특정 행 읽기 :df[n:m]
    • [n:m] : n부터 m-1까지
    • 인덱스나 컬럼의 이름으로 slice하는 경우 끝을 포함
  • loc[행, 열] : location
    • index명, column명을 이용해 행과 열을 선택하는 함수
  • iloc[행, 열] : index명, column명 대신 인덱스를 활용하여 행과 열을 선택하는 함수

◾Pandas Condition

  • 조건을 통해 원하는 값을 출력하는 것이 일반적 : df[조건]
  • NaN : Not a Number
  • A 컬럼의 값이 0 초과인 경우
  • 전체 값중 0 초과인 경우
  • 컬럼값 추가 : df[컬럼명]=[값]
    • 기존 컬럼이 없으면 추가하고 있다면 변경
  • isin() : 특정 요소가 있는지 확인

◾Pandas Remove

  • del df["컬럼"] : 컬럼 삭제
  • drop("컬럼 또는 인덱스", axis = 값) : axis 값에 따라 행 또는 열 삭제
    • axis = 0 : 가로
    • axis = 1 : 세로
    • 기본 axis는 0

◾Pandas Apply Function

  • apply() : 원하는 계산 수행
    • sum : 합, mean : 평균, min : 최소값, max : 최대값
    • numpy의 기능도 사용 가능
  • apply(np.cumsum) : 각 컬럼 값 누적합
profile
후라이드 치킨

0개의 댓글