나랑 now
[혼공분석] 3주차_데이터 정제하기 본문
반응형
# | 진도 | 기본 미션 | 선택 미션 |
1주차 (1/2 ~ 1/7) |
Chapter 01 | p. 81의 확인 문제 4번 풀고 인증하기 | p. 71 ~ 73 남산 도서관 데이터를 코랩에서 데이터프레임으로 출력하고 화면 캡처하기 |
2주차 (1/8 ~ 1/14) |
Chapter 02 | p. 150의 확인 문제 1번 풀고 인증하기 | p. 137 ~ 138 손코딩 실습으로 원하는 도서의 페이지 수를 추출하고 화면 캡처하기 |
3주차 (1/15 ~ 1/21) |
Chapter 03 | p. 182의 확인 문제 2번 풀고 인증하기 | p. 219의 확인 문제 5번 풀고 인증하기 |
4주차 (1/22 ~ 1/28) |
Chapter 04 | p. 279의 확인 문제 5번 풀고 인증하기 | Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기 |
5주차 (1/29 ~ 2/4) |
Chapter 05 | p. 314의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기 | p. 316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기 |
6주차 (2/5 ~ 2/12) |
Chapter 06 | p. 344의 손코딩(맷플롯립의 컬러맵으로 산점도 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기 | p. 356 ~ 359의 스택 영역 그래프를 그리는 과정을 정리하기 |
03-1. 불필요한 데이터 삭제하기
데이터 정제data cleaning: 데이터에서 손상되거나 부정확한 부분을 수정하고, 불필요한 데이터를 삭제하거나 불완전한 값을 교체하는 등의 작업
데이터 정제는 분석 목적에 맞게 변환하는 데이터 랭글링data wrangling 또는 데이터 먼징data munging의 일부로 수행될 수 있음
열 삭제하기
1. loc 메서드와 불리언 배열
new_df = df.loc[:, 시작 열:끝 열]
데이터프레임에서 슬라이싱을 사용하여 표시할 열 범위를 선택할 수 있음.
새로운 데이터프레임에서 특정 열을 제외하고 선택하고 싶을 경우, 불리언 배열boolean array 사용
# 판다스의 columns 속성은 index 클래스 객체
# 판다스의 배열 성격의 객체는 어떤 값과 비교할 때 자동으로 배열에 있는 모든 원소와 하나씩 비교함
# new_df.columns = ["혼공", "분석", "파이썬"]
# new_df.columns == "분석"
# "혼공" == "분석" => False
# "분석" == "분석" => True
# "파이썬" == "파이썬" => False
selected_columns = new_df.columns != 원하지 않는 열 인덱스 # 원하지 않는 열 제외된 넘파이 배열 selected_columns에 저장
new_df = df.loc[:, selected_columns]
new_df.head()
2. drop() 메서드
new_df = df.drop(배제 열 이름, axis=1) # axis 매개변수의 기본값 0: 행 삭제
new_df = df.drop([배제 열 이름1, 배제 열 이름2], axis=1) # 여러 개 열 삭제하려면 리스트 형식으로 전달
df.drop(배제 열 이름, axis=1, inplace=True) # iniplace 매개변수는 선택한 데이터프레임에 덮어씀
판다스를 이용하다보면 데이터에 대한 직접적인 수정을 할 때가 있는데, inplace 매개변수의 기본값은 False다.
배열의 연산을 다루는 넘파이도 배열 복사의 경우 .copy()를 통해 해야한다고 얼마전 다른 책에서 읽었는데 그 이유는 데이터 복사가 너무 빈번하게 사용된다면 성능과 메모리 문제가 발생할 수 있기 때문
비어있는 열 삭제
dropna() 메서드
new_df = df.dropna(axis=1) # NaN이 하나 이상 포함된 행이나 열 삭제, axis=1이므로 열 삭제
new_df = df.dropna(axis=1, how='all') # 행이나 열의 모든 값이 NaN인 경우 how='all' 지정
행 삭제하기
new_df = df.dop([0,1]) # 인덱스 0~1까지의 행 선택, axis=0, 0이 기본값
[ ] 연산자와 슬라이싱
new_df = df[시작 인덱스: 끝 인덱스] # 데이터프레임에 [] 연산자에 슬라이싱이나 불리언 배열을 전달하면 행을 선택
"""
loc 메서드에 슬라이싱을 사용하면 마지막 인덱스를 포함하지만
[]연산자의 슬라이싱은 파이썬의 슬라이싱처럼 마지막 인덱스를 포함하지 않음
"""
[ ] 연산자와 불리언 배열
selected_rows = df[열이름] == 원하는 조건값 # 특정 열에 원하는 조건과 일치하는 불리언 배열 생성. !=, >, <, >=, <= 활용 가능
new_df = df[selected_rows] # 조건값에 해당하는 행만으로 구성된 데이터프레임 생성
중복된 행 찾기
sum(new_df.duplicated()) # duplicated() 메서드는 중복된 행 중에서 처음 행을 제외한 나머지 행은 True로, 그 외 중복되지 않은 나머지 행은 False로 표시한 불리언 배열을 반환
# sum() 함수는 True를 1로 인식하기 때문에 duplicated() 메서드로 생성된 불리언 배열에서 중복 행의 개수를 셀 수 있음
group_df = df.groupby(by=[열1, 열2, 열3], dropna=False).sum()
""" by 매개변수에 그룹 기준으로 묶을 열 선택
groupby 메서드는 기본적으로 지정된 열에 NaN이 있는 행은 삭제처리됨
이를 막기 위해 dropna=Fasle로 지정
대출건수 기준 합산을 위해 sum() 활용"""
원본 데이터 업데이트하기
원본 데이터 프레임을 업데이트할 때,
- duplicated() 메서드로 중복된 행을 True로 표시한 불리언 배열 생성
- 1번에서 구한 불리언 배열을 반전시켜 중복되지 않은 고유한 행을 True로 표시
- 2번에서 구한 불리언 배열을 사용해 원본 배열에서 고유한 행만 선택
중복된 행을 True로 표시한 불리언 배열을 반전시킬 때는 판다스의 ~연산자 사용
기본 미션
p. 182의 확인 문제 2번 풀고 인증하기
2. 1번 문제의 df 데이터프레임에서 'col1' 열의 합을 계산하는 명령으로 올바르지 않은 것은 무엇인가요?
(1) df['col1'].sum()
col1 col2 col3 0 1 a NaN 1 2 NaN NaN 2 3 c 100.0
(2) df[['col1']].sum()
(3) df.loc[:, df.columns == 'col1'].sum()
(4) df.loc[:, [False,False,Ture]].sum()
정답: (4) loc에서 두번째 매개변수로 col3만 True로 전달하여 col3의 합계를 계산함.
[True, False, False]로 해야 col1의 합계 계산.
참고:
반응형
'혼공학습단 > 혼공분석' 카테고리의 다른 글
[혼공분석] 6주차_복잡한 데이터 표현하기 (1) | 2024.02.12 |
---|---|
[혼공분석] 5주차_데이터 시각화하기 (1) | 2024.02.03 |
[혼공분석] 4주차_데이터 요약하기 (1) | 2024.01.23 |
[혼공분석] 2주차_데이터 수집하기 (0) | 2024.01.11 |
[혼공분석] 1주차_데이터 분석을 시작하며 (1) | 2024.01.05 |