#Python, Pandas
1) 서울시 구별 CCTV 현황 데이터 확보
2) 인구 현황 데이터 확보
3) CCTV 데이터와 인구 현황 데이터 합치기
4) 데이터를 정리하고 정렬하기
#Matplotlib
5) 그래프를 그릴 수 있는 능력
#Regression using Numpy
6) 전체적인 경향을 파악할 수 있는 능력
#Insight and Visualization
7) 그 경향에서 벗어난 데이터를 강조하는 능력
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
)
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)
-> 각 컬럼 누적합 구하는 함수 사용
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 사용
pop_Seoul["구별"].unique()
-> 한 번씩만 출력(중복데이터X)
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()
-> 상관계수를 구해줌(상관관계)
<제로베이스 데이터 취업 스쿨>