관리 메뉴

애독자's 공부방

[혼공분석] 3주차 _ 혼자 공부하는 데이터 분석 with 파이썬 본문

데이터분석/혼공학습단 13기

[혼공분석] 3주차 _ 혼자 공부하는 데이터 분석 with 파이썬

애독자 2025. 1. 20. 23:26
728x90

혼공단 - 혼공분석, 혼자 공부하는 데이터 분석 with 파이썬

 

 

■ 공부한 내용

# 진도 기본 숙제(필수) 추가 숙제(선택)
3주차
(1/20 ~ 1/26)
Chapter 03 p. 182의 확인 문제 2번 풀고 인증하기 p. 219의 확인 문제 5번 풀고 인증하기

 

 

 

□ Chapter 03 | 데이터 정제하기
▷ 03-1 | 불필요한 데이터 삭제하기
 1. 핵심 포인트 요약

  - 데이터 정제(data cleaning): 수집된 데이터에서 잘못된 부분을 고치거나 제거하여 필요한 데이터를 준비하는 과정

   . 데이터가 올바르게 정제되지 못하면 분석된 결과를 왜곡시킬 수 있으며 잘못된 의사 결정을 초래하기도 함

  - 데이터 랭글링(data wrangling) 또는 데이터 먼징(data munging): 데이터를 정제하고 데이터 분석 및 머신러닝에 적합한 형태로 데이터를 변환하는 과정

   . 데이터의 품질을 높이고 필요한 형식으로 준비하는 데 중요한 역할을 수행

  - 원소별 비교(element-wise comparison): 판다스의 데이터프레임과 인덱스를 하나의 값과 비교하면 데이터프레임과 인덱스에 있는 모든 원소와 비교하는 과정

   . 비교한 결과는 True 또는 False로 이루어진 불리언 배열로 반환

  - 넘파이 배열(Numpy array): 파이썬의 대표적인 다차원 배열로, 판다스의 데이터프레임과 달리 한 종류의 데이터만 담을 수 있지만 매우 효율적이고 성능이 높음

   . 파이썬의 다른 과학 패키지와 호환성이 높으며 기본 데이터 구조로 널리 사용

 

 2. 책에 나온 함수와 메서드

함수/메서드 기능 사용
DataFrame.drop() 데이터프레임의 행이나 열을 삭제 DataFrame.drop(labels, axis, inplace)
  . 매개변수: 설명
  . labels: 삭제하려는 행 인덱스나 열 이름을 전달. 리스트로 전달하면 여러 개의 행을 삭제 가능
. axis: 삭제할 축을 지정 (기본값: 0으로 행을 삭제 / 1로 지정하면 열을 삭제)
. inplace: 기본값은 False로 삭제 결과를 반환. True로 설정하면 현재 데이터프레임 자체를 변경
DataFrame.dropna() 누락된 값이 포함된 행이나 열을 삭제 DataFrame.dropna(axis, how, thresh, subset, inplace)
  . axis: 삭제할 축을 지정 (기본값: 0으로 행을 삭제 / 1로 지정하면 열을 삭제)
. how: 삭제할 기준을 지정 (기본값: 'any'로 누락된 값이 하나 이상이면 삭제 / 'all'로 지정하면 모든 원소가 누락된 행이나 열을 삭제)
. thresh: 최소한의 누락되지 않은 값의 개수를 지정. 이를 지정하면 how 매개변수에 상관없이 누락되지 않은 값의 개수가 thresh 보다 작은 행과 열을 삭제
. subset: 삭제할 행과 열 리스트를 지정. 행을 삭제하는 경우에는 열 인덱스를 지정하고 열을 삭제할 때는 행 이름을 지정
. inplace: 기본값은 False이며 삭제한 결과를 반환. True는 현재 데이터프레임 자체를 변경
DataFrame.duplicated() 중복된 행을 찾아 불리언 값으로 표시한 배열을 반환 DataFrame.duplicated(subset, keep)
  . subset: 중복 검사를 위해 고려할 열 이름 또는 열 이름의 리스트를 지정. 지정하지 않으면 전체 열을 대상으로 중복을 검사
. keep: 중복된 행을 표시할 방법을 결정. (기본값: 'first'는 처음 등장하는 행을 제외하고 나머지 중복된 행을 True로 표시 / 'last'로 지정하면 마지막으로 등장하는 행을 제외하고 나머지 중복된 행을 True로 표시 / False로 지정하면 중복된 모든 행을 True로 표시
DataFrame.groupby() 데이터프레임의 행을 그룹으로 모음 DataFrame.groupby(by, dropna)
  . by: 그룹으로 묶을 기준이 되는 열 또는 열 이름의 리스트를 전달
. dropna: 기본값은 True이며 by 매개변수에 지정된 열에 누락된 값이 있는 행을 제외. False로 지정하면 누락된 값도 대상
DataFrame.sum() 행 또는 열을 기준으로 합계를 계산 DataFrame.sum(axis, skipna)
  . axis: 합계를 계산할 축을 지정 (기본값: 0은 열마다 합계를 계산 / 1은 행마다 합계를 계산)
. skipna: 기본값은 True이며 누락된 값은 제외하고 계산. False로 지정하면 누락된 값이 있는 경우 NaN를 반환
DataFrame.set_index() 지정한 열을 인덱스로 설정 DataFrame.set_index(keys, drop, append, inplace)
  . keys: 인덱스로 지정할 열 또는 열 리스트를 전달
. drop: 기본값은 True이며 인덱스로 지정한 열을 삭제하고 인덱스에 추가. False면 열을 미삭제
. append: 기본값은 False이며 기존에 인덱스에 미추가. True로 지정하면 기존의 인덱스에 새로운 인덱스 열을 추가
. inplace: 기본값은 False이며 변경된 결과를 반환. True이면 현재 데이터프레임 자체를 변경
DataFrame.reset_index() 데이터프레임의 인덱스를 재설정 DataFrame.reset_index(level, drop, inplace)
  . level: 인덱스에서 제거할 열 이름 또는 순서를 지정. 가장 왼쪽의 첫 번째 인덱스의 순서가 0. 이 매개변수를 지정하지 않으면 전체 인덱스를 재설정
. drop: 기본값은 False이며 인덱스에서 제외된 열을 데이터프레임 열로 이동. True이면 데이터프레임 열로 이동하지 않고 삭제
. inplace: 기본값은 False이며 변경된 결과를 반환. True이면 현재 데이터프레임 자체를 변경
DataFrame.update() 다른 데이터프레임을 사용해 원본 데이터프레임의 값을 업데이트. 다른 데이터프레임에 있는 NaN는 업데이트에서 제외 DataFrame.update(other, overwrite)
  . other: 업데이트에 사용할 데이터프레임을 지정
. overwrite: 원본 데이터프레임의 업데이트 방식을 지정. 기본값 True는 원본 데이터 프레임에 있는 모든 값을 업데이트. False는 원본 데이터프레임에 있는 NaN만 업데이트
DataFrame.equals() 다른 데이터프레임과 동일한 원소를 가졌는지 비교. 두 데이터프레임이 동일하면 True, 그렇지 않으면 False를 반환 DataFrame.equals(other)
  . other: 비교하려는 데이터프레임을 전달. 두 데이터프레임이 동일하면 True. 아니면 False 반환

 

 

03-2 | 잘못된 데이터 수정하기
 1. 핵심 포인트 요약

  - NaN(Not a Number): 판다스에서 누락된 값을 표시하는 기호

   . isna() 메서드를 사용하여 NaN의 여부를 확인하거나, notna() 메서드를 사용해 NaN이 아닌 값인지 체크 가능

  - 정규 표현식(regular expression): 문자열에서 패턴을 찾고 대체하기 위한 규칙의 모음

   . 정규 표현식을 사용하면 복잡한 패턴을 가진 문자열을 쉽게 검색 가능

 

 2. 책에 나온 함수와 메서드

함수/메서드 기능 사용
DataFrame.info() 데이터프레임의 요약 정보를 출력 DataFrame.info(memory_usage, show_counts)
  . 매개변수: 설명
  . memory_usage: 기본값은 True이며 열의 데이터 타입과 행 개수로 메모리 사용량을 추정. False면 메모리 사용량을 미출력. 'deep'으로 설정하면 실제 메모리 사용량을 계산.
. show_counts: 기본값은 True이며 누락되지 않은 원소 개수를 출력. False면 누락되지 않은 원소 개수를 미출력
DataFrame.isna() 누락된 값을 감지하는 메서드로 셀의 값이 None이나 NaN일 경우 True를 반환 DataFrame.isna()
   
DataFrame.astype() 데이터 타입을 지정 DataFrame.astype(dtype)
  . dtype: 데이터 타입을 지정하면 데이터프레임의 모든 열에 적용. 딕셔너리를 전달하면 특정 열의 데이터 타입을 변경 가능
DataFrame.fillna() 데이터프레임에서 누락된 원소의 값을 채움 DataFrame.fillna(value, method, axis, inplace)
  . value: 전달할 값이 스칼라인 경우 데이터프레임에서 누락된 값을 해당 값으로 채움. {열 이름: 채울 값} 형식의 딕셔너리인 경우 열마다 '채울 값'으로 누락된 값을 채움. 데이터프레임인 경우 누락된 원소의 열과 인덱스에 해당하는 데이터프레임 원소로 채움. 이 매개변수를 지정하지 않으면 method 매개변수로 누락된 값의 앞뒤에 있는 값으로 채움
. method: 'bfill' 또는 'backfill'로 지정하면 누락된 값 이후에 등장하는 유효한 값으로 현재 누락된 값을 채움. df.fillna(method='ffill')은 df.ffill()와 동일. 'ffill' 또는 'pad'는 누락된 값 이전에 등장하는 유효한 값으로 현재 누락된 값을 채움. df.fillna(method='bfill')은 df.bfill()와 동일
. axis: method 매개변수와 함께 지정. 기본값 0은 행 방향으로 누락된 값을 채움. 1은 열 방향으로 누락된 값을 채움. 이때 method가 'bfill'이면 오른쪽 열의 값으로 왼쪽을, 'ffill'은 왼쪽 열의 값으로 오른쪽 열을 채움
. inplace: 기본값은 False이며 삭제된 결과를 반환. True로 설정하면 현재 데이터프레임 자체를 변경
DataFrame.replace() 데이터프레임의 값을 다른 값으로 변경 DataFrame.replace(to_replace, value, inplace, regex)
  . to_replace: 찾을 값이 정수나 문자열, 정규 표현식인 경우 데이터프레임에서 값을 찾아 value 매개변수 값으로 변경. 정수나 문자열, 정규 표현식의 리스트인 경우 값을 찾아 value의 값으로 변경. 이 매개변수와 동일한 길이의 리스트라면 동일한 위치에 있는 값으로 변경. {열 이름: 찾을 값} 형식이면 지정한 열에서 '찾을 값'을 value 매개변수의 값으로 변경. {열 이름: {찾을 값: 새오룬 값}} 형식이면 지정한 열에서 '찾을 값'을 '새로운 값'으로 변경
. value: 찾을 값이 정수나 문자열, 정규 표현식 또는 정규 표현식의 리스트인 경우 대체할 값
. inplace: 기본값은 False며 삭제된 결과를 반환. True이면 현재 데이터프레임 자체를 변경
. regex: 기본값은 False며 정규 표현식의 사용 불가. True이면 정규 표현식 사용 가능
Series.str.contains() 시리즈나 인덱스에서 문자열 패턴을 포함하고 있는지 검사 Series.str.contains(pat, case, na, regex)
  . pat: 찾을 문자열 또는 정규 표현식
. case: 기본값은 True이며 대소문자를 구분. False로 지정하면 대소문자 미구분
. na: 누락된 값을 가진 원소에 채울 값을 지정. 기본 np.nan을 사용
. regex: 정규 표현식을 사용할지 결정 (기본값: True)
DataFrame.gt() 데이터프레임의 원소보다 큰 값을 검사 DataFrame.gt(other, axis)
  . other: 비교하려는 값
. axis: 비교하는 방향을 지정. 기본값 1은 열 방향으로 비교. 0은 행 방향으로 비교

 

 

 

■ 기본 숙제

  p. 182의 확인 문제 2번 풀고 인증하기

  - 정답: ④

   . 3번째 열이 True므로 'col1'이 아닌 'col3'이 선택되기에, 'col3'의 합을 계산하게 된다.

 

 

 

■ 추가 숙제(선택)

  p. 219의 확인 문제 5번 풀고 인증하기

  - 정답: ①

   . r'ba.*'의 경우 'ba'로 시작하면서 그 이후에 어떤 문자든지 0개 이상 올 수 있다는 의미로, ba로 시작하는 모든 문자열을 포함

   . 이후 위 정규 표현식으로 찾은 패턴에 해당하는 값을 'new'로 대체하기에, 'bat'와 'bait'가 모두 'new'로 변경됨

 

728x90