(EDA강의)Pandas 기초

지며리·2022년 11월 24일
0
post-custom-banner

서울특별시를 대상으로 구별로 집계된 신규 설치 CCTV 개수 데이터와 구별로 집계된 인구 수 데이터를 가공해서 합친 뒤 상관관계를 분석해보자.

import pandas as pd # 판다스 모듈 불러오기
CCTV_Seoul = pd.read_csv("../data/01. Seoul_CCTV.csv", encoding="utf-8") 
#해당 경로에 있는 해당 파일명(csv형식)의 파일 불러오기

CCTV_Seoul.head()
#상단 5개 행을 출력

CCTV_Seoul.head(3)
#상단 3개 행을 출력

CCTV_Seoul.tail()
#하단 5개 행을 출력

CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0]:"구별"},inplace=True)
# 첫번째 콜룸명을 "구별"로 수정
# inplace=True 해당 설정으로 바뀐 데이터를 원본데이터로 다시 저장

pop_Seoul = pd.read_excel(
    "../data/01. Seoul_Population.xls", header=2, usecols = "B, D, G, J, N"
)
#해당 경로에 있는 해당 파일명(excel형식)의 파일을 불러옴.
#header=2: 콜룸명이 3번째줄까지 있는 경우
#usecols = "B,D,G,J,N" : 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
)
# 여러개의 콜룸명을 한꺼번에 변경해서 원본데이터로 다시 저장

CCTV_Seoul.sort_values(by="소계", ascending = True)
#"소계"콜룸 기준으로 오름차순 정렬

CCTV_Seoul["최근증가율"] = (
    (CCTV_Seoul["2016년"]+CCTV_Seoul["2015년"]\
    +CCTV_Seoul["2014년"])/CCTV_Seoul["2013년도 이전"] * 100
)
# 기존 콜룸이 없는 경우 해당 콜룸 추가, 기존 콜룸이 있는 경우 해당 콜룸 수정

pop_Seoul.drop([0], axis = 0, inplace = True)
# axis=0이므로 행을 삭제, [0]이므로 첫번째 행 삭제
# axis=1인 경우 열을 삭제

pop_Seoul["구별"].unique()
#"구별" 열에서 중복 데이터를 제거한 각각의 데이터 출력

data_result = pd.merge(CCTV_Seoul, pop_Seoul, on = "구별")
# CCTV_Seoul 데이터셋과 pop_Seoul 데이터 셋을 "구별"기준으로 합치기
# how="inner"가 디폴트. 교집합만 합침
# how="outer" 설정시 왼쪽, 오른쪽 데이터 셋 모두 합치고 없는 값은 NaN
# how="left" 설정시 왼쪽 데이터 셋 모두 반영하고 없는 값은 NaN

del data_result["2013년도 이전"]
#"2013년도 이전" 콜룸삭제

data_result.drop(["2014년","2015년","2016년"], axis = 1, inplace = True)
# 2014년, 2015년, 2016년 콜룸 삭제

data_result.set_index("구별", inplace = True)
# "구별" 콜룸을 인덱스로 저장

data_result.corr()
#데이터간 상관관계 측정

data_result.info()
#데이터 정보 추출

기타 판다스 기본 개념들

dates = pd.date_range("20210101", periods = 6)
# 2021년 1월 1일부터 6일간 날짜 데이터 형성

data = np.random.randn(6,4)
# 표준정규분포에서 샘플링한 4개의 데이터를 하나의 List로 6개 List생성

df=pd.DataFrame(data, index= dates, columns=["A","B","C","D"])
# dates를 인덱스로 하고 콜룸을 A, B, C, D로 하는 데이터 셋 형성
# values는 data(앞에서 표준정규분포 난수생성한)값을 씀

df.describe()
# df의 기술통계량 출력
# 콜룸별로 count, mean, std, min, max, 분위수 출력

type(df["A"])
# 데이터셋 콜룸의 데이터 타입은 Series임
# Series는 인덱스와 values로 구성됨
# Series의 values는 하나의 데이터 타입만 담을 수 있음

df[0:3]
# 숫자로 slice하는 경우
# 행기준, 0부터 2까지 출력(3은 포함 X)

df["20210101":"20210104"]
# 인덱스 명으로 slice하는 경우
# 2021년 1월 4일 포함해서 출력!

df.loc["20210102":"20210104",["A","D"]]
# 2021년 1월 2일부터 2021년 1월 4일까지 A콜룸과 D 콜룸 교차 데이터 출력

df.loc["20210102":"20210104","A":"D"]
# 2021년 1월 2일부터 2021년 1월 4일까지 A콜룸부터 D콜룸까지 교차 데이터 출력

df.iloc[3,2]
# 0부터 시작하는 기준의 인덱스로 읽음
# 실제로 출력되는 데이터는 4번째 행, 3번째 열 값

df.iloc[3:5, 0:2] 
# 4,5번째 행과 1,2번째열 교차 데이터 출력

df[df["A"] > 0] 
# 마스킹
# A콜룸 값이 0보다 큰 경우만 출력

df["A"].apply("sum")
# A콜룸 합계 출력
# "mean", "min", "max", np.std 등도 대입 가능
profile
쉽고 유익하게 널리널리
post-custom-banner

0개의 댓글