서울특별시를 대상으로 구별로 집계된 신규 설치 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 등도 대입 가능