Today I Learned (2024-07-22) 🤔
목차
오늘 공부한 내용 🧑🏻💻
1. KDT
데이터프레임(DataFrame)
- 중복 행 찾기
DataFrame.duplicated()
- 각 행이 중복인지 아닌지 나타내는 불리언
Series
를 반환한다. - 첫 번째 등장하는 행은 중복으로 간주되지 않으며, 그 이후에 동일한 행이 나타나면 중복으로 간주
- 각 행이 중복인지 아닌지 나타내는 불리언
- 중복 삭제
DataFrame.drop_duplicates()
- 데이터프레임에서 중복 행을 삭제하고, 중복이 제거된 새 데이터프레임을 반환한다.
- 모든 열을 대상으로 중복을 확인한다.
subset
인자- 특정 열을 기준으로 중복을 삭제한다.
ignore_index = True
- 인덱스를 0부터 초기화 시킨다.
결측치(Missing Value)
결측치란?
- 데이터의 값이
비어있는 경우
를 의미한다. - 데이터가 없거나 관측되지 않은 값을 모두 의미한다.
- 데이터의 값이
결측치 처리 프로세스
- 결측치 확인
- 결측치 처리 전략 결정
- 결측치 처리
- 검증
결측치 제거하기
결측치 확인하기
DataFrame.isnull().sum()
- 각 열의 결측치를 확인한다.
결측치 행 제거하기
DataFrame.dropna(axis="index")
- 결측치가 하나라도 있는 행을 모두 제거한다.
결측치 열 제거하기
DataFrame.dropna(axis="colmun")
- 결측치가 하나라도 있는 모든 열을 제거한다.
특정 열에 대한 결측치가 있는 행 제거
DataFrame.dropna(subset=["열이름"])
- 특정 열에 결측치가 있는 행만 제거하고 싶은 경우에 사용하는 옵션
결측치 대체하기
DataFrame.fillna()
데이터프레임 또는 시리즈에 있는 결측치를 특정 값으로 대체한다.
고정값으로 대체
결측치를 특정 고정값으로 대체할 수 있다.
예를 들어, 수치형 데이터에서 결측치를 0으로 대체하거나, 범주형 데이터에서는 'unknown'과 같은 특정값을 사용할 수 있다.
# 수치형 데이터에서 결측치를 -1으로 대체하기 df['column_name'].fillna(-1, inplace=True) # 범주형 데이터에서 결측치를 'unknown'으로 대체하기 df['category_column'].fillna('unknown', inplace=True)
평균, 중앙값으로 대체
결측치를 해당 열의 평균, 중앙값 대체하는 방법은 자주 사용된다.
이는 데이터의 분포를 고려한 대체 방법으로, 데이터의 전반적인 특성을 유지하는데 도움이 된다.
# 평균값으로 대체하기 df['column_name'].fillna(df['column_name'].mean(), inplace=True) # 중앙값으로 대체하기 df['column_name'].fillna(df['column_name'].median(), inplace=True)
최빈값으로 대체
- 최빈값 대체법은 문자열 또는 숫자로 표현된 카테고리 변수에 대해서도 적용할 수 있다.
- 각각의 열에서 가장 자주 등장하는 값을 찾아 채워준다.
# 최빈값으로 대체하기 df['category_column'].fillna(df['category_column'].mode()[0], inplace=True)
결측치 재확인
- 결측치를 처리한 데이터프레임의 결측치를 다시 확인한다.
df.isnull().sum()
- 결측치를 처리한 데이터프레임의 결측치를 다시 확인한다.
이상치(Outlier)
이상치란?
- 일반적인 데이터 분포를 따르지 않는 값
- 다른 데이터와
차이가 매우 큰 값
을 가진 데이터 - 그냥 평범한 값이 아닌 이상한 값인듯 🤪
이상치는 상대적 개념
- 어떤 데이터를 어떻게 분석하고, 어느 기준으로 이상치를 판단하는 것에 따라, 이상치 데이터들이 달라진다.
이상치 확인
사분위수 (quatiles)
데이터를 4개의 동등한 부분으로 나누는 사분위수를 기반으로 확인하는 통계적인 방법
1사분위수(Q1)와 3사분위수(Q3) 사이의 범위(IQR)을 사용하여 이상치를 파악한다.
이상치 확인하기
하한보다 작거나 상한보다 큰 값을 이상치로 간주
즉, 하위 25%보다 작거나 상위 25%
1사분위수 : column.quantile(0.25) (하위 25%)
3사분위수 : column.quantile(0.75) (상위 25%)
IQR
계산 = 3Q - 1Q (3사분위수와 1사분위수의 차)하한(Lower Bound)
계산 : Q1 - 1.5 * IQR상한(Upper Bound)
계산 : Q3 + 1.5 * IQR조건식
- 하한 조건식 : column < 하한(Lower_Bound)
- 상한 조건식 : column > 상한(Upper_Bound)
이상치(outlier) = column[하한 조건식 | 상한 조건식]
lower_bound_filter = column < lower_bound # 하한 조건식 upper_bound_filter = column > upper_bound # 상한 조건식 # 이상치 추출 outliers = column[lower_bound_filter | upper_bound_filter]
문자열 처리
str
접근자- 문자열 데이터를 쉽게 처리할 수 있는 다양한 기능 제공
- 데이터프레임의 문자열 데이터에 문자열 연산을 수행
소문자 / 대문자 변환
DataFrame.str.lower()
- 문자열을 소문자로 변환
DataFrame.str.upper()
- 문자열을 대문자로 변환
포함 여부
DataFrame.str.contains("확인할 문자")
- 특정 패턴이나 문자열이 포함되어 있는지 여부를 불리언 값으로 반환
- 데이터 필터링
특정 문자열로 시작 / 끝
DataFarme.str.startswith()
DataFrame.str.endswith()
- 문자열이 특장 문자열로 시작하거나 끝나는지 확인
- 데이터 필터링
문자열 대체
DataFrame.str.replace(old, new)
- 문자열 내의 특정 문자 또는 문자열을 다른 문자 또는 문자열로 대체한다.
문자열 분할
DataFrame.str.split("기준 문자")
- 문자열을 특정 구분자로 분할하여 리스트로 반환한다.
expand=True
인자 설정 시 데이터프레임을 반환한다.
공백 제거
DataFrame.str.strip(")
- 주어진 문자는 원래 문자열의 시작 또는 끝에서 제거
- 문자 매개변수가 제공되지 않으면 문자열의 시작과 끝에서 공백이 제거
DataFrame.str.rstrip()
- 오른쪽 공백 제거
DataFrame.str.lstrip()
- 왼쪼 공백 제거
- 문자열의 시작과 끝(도는 둘 중 하나)에서 공백이나 다른 문자를 제거
길이 계산
DataFrame.str.len()
- 문자열의 길이 계산
2. 인프런(핵심만 빠르게, 입문자를 위한 파이썬(Python)과 판다스(Pandas))
DataFrame의 개념과 생성
판다스는 엑셀의 파이썬이라고 비유한다.
표가 판다스에서는
DataFrame
이다.DataFrame
은Series
를 여러개 붙여서 만들어진다.Series
생성 방법import pandas as pd nums = [i for i in range(1, 11)] series_nums = pd.Series(nums) series_nums
0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 dtype: int64
DataFrame 생성 방법
nums = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], ]
dfNums = pd.DataFrame(nums)
dfNums```python 0 1 2 0 1 2 3 1 4 5 6 2 7 8 9
DataFrame 과 Series 의 관계
여러 개의 시리즈를 합친게 데이터프레임
type(dfNums)
pandas.core.frame.DataFrame
dfNums[0]
0 1 1 4 2 7 Name: 0, dtype: int64
type(dfNums[0])
pandas.core.series.Series
DataFrame을 생성하는 방법들
리스트 전달
users = [ ["철수", 180, 5], ["민수", 170, 5], ["철수", 130, 5], ]
dfUsers = pd.DataFrame(users)
dfUsers```python 0 1 2 0 철수 180 5 1 민수 170 5 2 철수 130 5
딕셔너리 전달
users = { "name": ["철수", "민수", "짱구"], "height": [180, 170, 103], "age": [25, 30, 5], }
dfUsers = pd.DataFrame(users)
dfUsers```python 0 1 2 0 철수 180 25 1 민수 170 30 2 짱구 103 5
리스트 in 딕셔너리 전달
- 제일 많이 사용users = [ {"name": "철수", "height": 180, "age": 25}, {"name": "민수", "height": 140, "age": 30}, {"name": "짱구", "height": 50, "age": 5}, ] dfUsers = pd.DataFrame(users) dfUsers
0 1 2 0 철수 180 25 1 민수 140 30 2 짱구 50 5
DataFrame 컬럼 이름 설정
dfUsers.columns = ["name", "height", "age"] dfUsers
name height age 0 철수 180 5 1 민수 170 5 2 철수 130 5
어려웠던 내용 📚
- 오늘 연습문제를 푸는데 데이터프레임에서 조건 검색하는 것이 어려웠다.
궁금한 내용과 부족한 내용 🙋🏻
- 판다스로 그래프 그리기 등등 활용도
느낀 점 💡
- 아무래도 판다스에 익숙해져야 되기 때문에 강의 시간에 연습문제를 많이 풀었는데 좋았다.
- 역시 코딩하면 시간이 빠르게 간다.
- 막혀도 좋다. 그러다 풀면 기분이 좋아진다.
- 장마라 비가 많이 온다... ⛈️
'TIL (2024) > 2024.07' 카테고리의 다른 글
[TIL] 2024-07-24 (데이터 시각화) (6) | 2024.07.25 |
---|---|
[TIL] 2024-07-23 # 데이터 시각화 (0) | 2024.07.24 |
[TIL] 2024-07-21 (0) | 2024.07.21 |
[TIL] 2024-07-20 (2) | 2024.07.21 |
[TIL] 2024-07-19 (0) | 2024.07.20 |
배움에 즐거움을 느끼는 마네의 연구소입니다. 이미지 출처 : https://www.instagram.com/hoseobiiiiiii._.0410/
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!