<12-2주차 수강 클립>
04. 데이터 분석을 위한 Python (Pandas)
14. DataFrame 타입이해 - 08. DataFrame에 새 column(컬럼) 추가_삭제하기
15. DataFrame 타입이해 - 09. DataFrame column(컬럼)간 상관관계 계산하기
16. DataFrame 타입이해 - 10. DataFrame NaN 데이터 처리
지난 시간에 이어 DataFrame 타입에 대한 이해 파트를
학습하고 있습니다.
이번 주차에는 DataFrame에 새 column을 추가 또는 삭제하는 법을 배우고
각 column 사이의 상관관계 계산, NaN 데이터를 처리하는 법까지
배웠습니다.
>>수강 인증샷<<
14. DataFrame 타입이해 - 08. DataFrame에 새 column(컬럼) 추가_삭제하기
- 새 column 추가하기
1. [] 사용하여 추가하기
2. insert 함수 사용하여 원하는 위치에 추가하기
import pandas as pd
# data 출처: https://www.kaggle.com/hesh97/titanicdataset-traincsv/data
train_data = pd.read_csv('csv데이터가 있는 경로')
train_data.head()
: head()함수로 데이터 로딩 확인은 습관화 하기!
train_data['Age_double'] = train_data['Age'] * 2
train_data['Age_triple'] = train_data['Age'] + train_data['Age_double']
: []안에 새로운 column명
train_data.insert(3, 'Fare10', train_data['Fare'] / 10)
: .insert(위치, 새로운 column명, column에 들어갈 데이터)
- column 삭제하기
drop 함수 사용하여 삭제
리스트를 사용해 복수 개의 column 삭제 가능
train_data.drop('Age_triple', axis=1) # 원본 데이터에 행해지는 게 아님!
: 원본 데이터를 수정하지 x, 새로운 복사본을 만들어 가공 후 반환
train_data.drop(['Age_double', 'Age_triple'], axis=1)
: drop함수에 리스트 전달
train_data.drop(['Age_double', 'Age_triple'], axis=1, inplace=True)
: inplace값 True → 복사본에 연산하지 않고 원본 데이터에 연산 (복사본 만들지 x 반환값 없음)
15. DataFrame 타입이해 - 09. DataFrame column(컬럼)간 상관관계 계산하기
- 변수(column) 사이의 상관계수(correlation)
*) correlation: 두 변수 사이의 covariance(공분산) 값을 단위화 시킨 것 / 절댓값이 클 수록 두 변수는 선형적인 관계에 놓여있음
corr 함수를 통해 상관계수 연산 (-1, 1 사이의 결과)
- 연속성(숫자형)데이터에 대해서만 연산
- 인과관계를 의미하진 않음
- 1에 가까울수록 증가/증가의 관계
- -1에 가까울수록 증가/감소의 관계
- 0에 가까울수록 상관관계 없음
train_data.corr()
: 대각선 값은 항상 1 (자기자신과의 correlation 값은 항상 1)
: 주대각선이 1인 대칭행렬
import matplotlib.pyplot as plt
%matplotlib inline
plt.matshow(train_data.corr())
: matrix의 색이 밝을 수록 관계가 깊음
16. DataFrame 타입이해 - 10. DataFrame NaN 데이터 처리
- NaN 값 확인
info 함수의 리턴값에서 NaN 개수를 확인할 수 있음
isna() 함수를 통해 boolean 타입으로 확인 (NaN인 경우 True)
train_data.info()
train_data.isna()
train_data['Age'].isna()
: 특정 column에 대해서도 NaN값을 가지는 데이터 확인 가능
: Series로 반환
- NaN 처리 방법 (크게 두 가지)
1. 데이터에서 삭제 → dropna 함수
2. 다른 값으로 치환 → fillna 함수
- NaN 데이터 삭제
train_data.dropna()
: row level로 동작, NaN이 하나라도 있으면 해당 row를 지움(drop)
: 마찬가지로 복사본에 대해서 수행, inplace값 True로 줄 경우 원본 데이터에 대해서 수행
train_data.dropna(subset=['Age'])
: subset 파라미터에 전달한 column의 값이 NaN인 행(데이터)만 삭제
train_data.dropna(axis=1)
: default는 axis=0 (뜻: row level_가로 방향)
: axis=1이면 col level (하나라도 NaN이 있는 col은 삭제)
- NaN 값 대체
평균으로 대체하기
생존자/사망자 별 평균으로 대체하기
train_data['Age'].mean() # 나이 평균
train_data['Age'].fillna(train_data['Age'].mean())
: 'Age' column의 NaN값에 'Age' 평균 집어넣기
: 결과는 'Age' column의 NaN값이 수정된 Series 반환 (복사본)
#생존자 나이 평균
mean1 = train_data[train_data['Survived']==1]['Age'].mean()
#사망자 나이 평균
mean0 = train_data[train_data['Survived']==0]['Age'].mean()
train_data[train_data['Survived']==1]['Age'].fillna(mean1)
train_data[train_data['Survived']==0]['Age'].fillna(mean0)
: 생존자 / 사망자 구분을 위해 Boolean Selection 사용
: train_data['Survived'] == 1 의 결과: 해당 조건을 판단 후 Boolean으로 이루어진 Series
: train_data[train_data['Survived']==1]의 결과: [조건]이 True인 인덱스들만 추출한 DataFrame (부분집합)
: train_data[train_data['Survived']==1]['Age']의 결과: 해당 DataFrame에서의 'Age' column
: 결과는 'Age' column의 NaN값이 수정된 Series 반환 (복사본)
train_data.loc[train_data['Survived']==1, 'Age'] = train_data[train_data['Survived']==1]['Age'].fillna(mean1)
train_data.loc[train_data['Survived']==0, 'Age'] = train_data[train_data['Survived']==0]['Age'].fillna(mean0)
: loc함수는 ',' 사용해서 row, col 둘 다 선택 가능 (row 중에서도 해당되는 col에만 값 집어넣기)
: 기존 DataFrame에 NaN값 대체하기 (원본 데이터 수정)
train_data['Survived'][train_data['Age']==mean1]
: NaN값이 모두 대체됐는지 확인
강의 링크: https://bit.ly/3cB3C8y
'코딩 > 머신러닝&데이터 분석 강의' 카테고리의 다른 글
[머신러닝 인강] 13-2주차: Pandas DataFrame의 그룹핑 (group by, transform, pivot, pivot_table) (0) | 2021.05.14 |
---|---|
[머신러닝 인강] 13-1주차: Pandas DataFrame 숫자 데이터, 범주형 데이터, 데이터의 전처리 (0) | 2021.05.10 |
[머신러닝 인강] 12-1주차: Pandas DataFrame 의 컬럼,데이터 선택하기 (0) | 2021.05.08 |
[머신러닝 인강] 11-2주차: Pandas DataFrame 의 이해 (0) | 2021.05.01 |
[머신러닝 인강] 11-1주차: Series 연산, boolean selection, 슬라이싱 (0) | 2021.04.27 |