데이터 집계와 데이터 처리
- 데이터 집계를 통해 얻은 정보를 다양한 방법으로 데이터 처리에 사용
- 대표적으로 데이터 집계를 통해 조건을 도출하여 데이터를 선택하는 방법
df_ins로 데이터를 먼저 확인해봐요
# 지역별 비용의 평균 집계
df_agg = df_ins.groupby('region', as_index=False)['charges'].mean()
df_agg.loc[1, 'charges']
#df_agg만 출력인데 .loc[x, y]로 원하는 값을 출력
# 비용의 평균이 높은 2개의 지역을 target으로 지정
targets = df_agg.nlargest(2, 'charges')
targets['region']
# target 지역에 속하는 데이터 구별을 위한 bool series 생성
cond = df_ins['region'].isin(targets['region'])
cond
# 조건에 의한 데이터(행)의 선택
df_ins.loc[cond]
피벗 테이블과 열지도의 활용
pandas의 pivot_table()을 활용하면 Excel의 피벗테이블과 동일한 표 형태의 집계 가능
이것도 마찬가지로 df_ins.head()로 먼저 확인 후 들어갑니다.
df_agg = df_ins.pivot_table(
columns='region',
index='sex',
values='charges',
aggfunc='mean'
)
display(df_agg)
# 그룹한수 (groupby) 를 통해서도 동일한 결과를 도출할 수 있음
df_grp = df_ins.groupby(['sex', 'region'], as_index=False)['charges'].mean()
df_grp
# margins 옵션 활용
agg2_wide = df_ins.pivot_table(
values='charges',
index='sex',
columns='region',
aggfunc='mean'
)
agg2_wide
# 열지도 시각화
# sns.heatmap(agg2_wide)
sns.heatmap(agg2_wide, cmap='Blues', annot=True, fmt='.2f')
결과 데이터와 그래프의 저장
df_ins = pd.read_csv('./data/파일명.확장자')
df_ins # 확인하기
%mkdir result #폴더 생성
# 대상 결과 데이터 확인
df_pt1 = df_ins.pivot_table(index='region', columns='smoker', values='charges', aggfunc='mean')
df_pt1
# to_csv()로 결과 데이터를 csv 형식으로 저장하기
df_pt1.to_csv('./result/result.csv', index=True, encoding='CP949')
# 대상 그래프 확인
plot1 = sns.heatmap(df_pt1, cmap='Blues', annot=True, fmt='.2f')
plot1
# savefig()을 활용한 그래프 저장
plot1.figure.savefig('./result/plot1.jpg')
이렇게 함수를 활용해서 분석 결과 데이터와 그래프를 저장 가능합니다.
객체 메서드와 series 메서드의 비교
- 날짜 시간 변수의 경우 월, 일, 요일, 시간 등 다양한 요소를 추출하여 변수로 추가 가능.
- Python은 개발언어로 객체의 형식에 매우 엄격하므로 메서드의 구분 필요
- 개별 날짜에 적용할 수 있는 메서드가 아닌 Pandas의 Series 메서드 활용 추천
변수 제거
- drop() 은 관측치와 변수를 제거할 수 있는데 index와 columns를 활용
- axis=옵션에 따라 axis=0이면 관측치를 제거하고 axis=1이면 변수를 제거한다.
- columns=이라는 옵션을 명시해서 변수를 제거하는 것이 가장 명확하고 실수를 줄일 수 있음
df_own
# drop()을 활용한 관측치/변수 제거
# axis = 0 : 관측치
# axis = 1 : 변수
df_own = df_own.drop('FOURTH', axis=1, inplace=True)
# drop()을 활용한 관측치/변수 제거(columns 활용)
df_own.drop(columns=['FOURTH'])
# drop( ) 실행 후 원본 데이터는 변함이 없음
df_own
# 원본 데이터의 업데이트
df_own = df_own.drop(columns=['THIRD'])
df_own
# 행의 삭제
df_own.drop([0, 3], axis=0)
결측값 처리
결측값은 애초에 값이 없는 경우, 값이 있으나 사람 실수로 누락한 경우, 센서와 통신망 등의 오류로 값이 들어오지 않은 경우 등, 다양한 이유로 발생될 수 있습니다.
# isnull 함수를 활용한 결측값 필터
cond = df_na['info1'].isnull()
# df_na[cond]
df_na[~cond]
# 여러개의 변수의 결측값 확인 및 필터
cond = df_na['info1'].isnull() | df_na['info3'].isnull()
# df_na[cond]
df_na[~cond]
# any 함수를 활용한 모든열의 결측값 필터
df_na.isnull()
cond = df_na.isnull().any(axis=1)
df_na[~cond]
# any 함수를 활용한 부분열의 결측값 필터
cond = df_na[['info1', 'info3']].isnull().any(axis=1)
df_na[~cond]
이러한 명령어를 활용하면 전체 데이터에서 결측값이 있는 관측치나 변수를 확인할 수 있습니다.
변수 형식 변환 및 파생변수 생성
read_csv()로 데이터를 불러오면 적당한 형식으로 지정되는데, 가끔 형식을 직접 바꿔야 할 상황이 있다.
상황에 따라 기존 변수를 활용해서 새로운 변수를 추가해서 분석에 활용해야 하는 경우도 있다.
DataFrame에서는 다음과 같은 Series 형식을 활용
- float: 실수(소수점을 포함한 숫자)
- int: 정수(integer)
- datetime: 날짜시간
- bool: 불/불린(True 혹은 False)
- category: 범주형
- object: 문자형(string) 혹은 그 외.
. dtypes를 활용하면 변수 형식을 확인 가능
. astype()을 활용해서 변수 형식을 변환 가능
날짜 시간 변수 전까지
실제 강의보다는 교수님께서 문제를 풀어주시면서 하시는 수업이었어요. 그래서 그런지 진도가 너무 빠르다고 느꼈는데 다시 정리해 보니까 겹치는 내용도 많아서 다시 공부하기 좋은 시간이었던 거 같네요! 내일은 문제를 주신다고 하시는데 어떤 문제가 나올지 벌써부터 기대가 됩니다!
'ABC 부트캠프' 카테고리의 다른 글
[11일차] ABC 부트캠프 데이터 수집을 위한 크롤링 (0) | 2024.07.21 |
---|---|
[10일차] ABC 부트캠프 데이터 집계 (0) | 2024.07.17 |
[8일차] ABC 부트캠프 데이터 집계와 시각화(히스토그램) (2) | 2024.07.15 |
[7일차] ABC 부트캠프 pandas_데이터 전처리 (0) | 2024.07.14 |
[6일차] ABC 부트캠프 python 기초_4 (0) | 2024.07.12 |