EDA(Exploratory Data Analysis)는 본격적인 분석이나 모델학습 이전에 데이터를 톺아보는 과정이다. 활용하려는 데이터의 특성을 잘 알고 있어야 모델의 설계나 이후의 분석에서도 더 유의미한 결과를 낼 확률이 높다.
Kaggle 에서 데이터셋을 가져오는 경우Description
파트를 보면 데이터 제공자의 친절한 설명이 있을 수도, 없을 수도 있다. 대부분의 경우는 데이터셋에 대한 개략적인 설명이 들어있다.Data Explorer
파트에 들어가면 Detail
Compact
Column
등의 메뉴가 있다. 데이터셋을 자세하게, 간략하게, 컬럼만 모아서 등등으로 한 눈에 파악하기 쉽다.
original_data
와 data
분리
원본 데이터는 따로 저장해둬야 data
에서 아무리 지지고 볶고해도 원하면 얼마든지 원본 데이터를 다시 불러올 수 있다. 안 그러면 다시 데이터를 read
해와야하는 불편함이 있으므로 습관 들여놓기.
head()
나 tail()
을 이용해서 대충 이런 데이터셋이구나~ 파악하기.
결측치 파악하기
.isnull()
을 하면 데이터 프레임 형식으로 뜨기 때문에 너무 보기 어려움. 이럴 땐 .isnull().sum()
을 이용하여 컬럼별로 결측치가 몇 개나 있는지 파악 가능.
* isnull()
과 isna()
의 차이를 찾아봤는데 pandas API reference를 보면 isnull()
과 isna()
는 서로의 alias(별칭)라고 되어있다. 파이썬식 표기법은 isna()
인데 보통 결측치를 null이라고 표기하기 때문에 사용자의 편의를 위해 isnull()
이라는 별칭도 만들어 준듯.
전체 컬럼 이해하기
print(len(data.columns))
: 전체 컬럼의 갯수data.columns
: 컬럼 인덱스를 쭉 보여준다
컬럼 별로 중복값이 있는지?
len(data["index"])
와 len(set(data["index"]))
비교: 파이썬의 set
객체는 중복 데이터를 가질 수 없다. 따라서 만약 len(data["index"])
은 10인데 len(set(data["index"]))
가 8이라면 2개의 중복값이 있는 것.
특정 행/컬럼 값 조회하기
data.loc[]
혹은 data.iloc[]
사용
참고: https://bearwoong.tistory.com/65
차집합을 이용해서 컬럼 별 차이 값 찾기
set(data["index1"]) - set(data["index2"])
파이썬은 집합 연산이 굉장히 직관적으로 가능하다. 차집합을 구하는 위의 코드로 유사한 컬럼 간의 차이를 알 수있다. 위 코드의 결과값의 type은 집합(set).
피벗 테이블 이용하기
pd.pivot_table()
이용해서 원하는 값(각 항목별 총합, 비율, 평균값 등)을 구할 수도 있고 결측치를 채워 넣을 수도 있다.
pd.concat()
: 속성 형태가 동일한 데이터셋끼리 합쳐 줌
* seaborn
과 matplotlib
둘 다 데이터 시각화 라이브러리인데 matplotlib
은 단순한 그래프 등을 그릴 때, seaborn
은 조금 더 고급스러운 시각화를 원할 때 쓴다.seaborn
은 보통 sns
로, matplotlib
은 plt
로 줄여쓴다.
plt.subplot(211)
: 2행 1열 짜리 subplot 중 1번째에 위치plt.subplot(212)
: 2행 1열 짜리 subplot 중 2번째에 위치
sns.countplot()
: 데이터의 개수를 표시하는 막대 그래프
sns.scatterplot()
: 데이터를 점으로 표현하는 산포도, hue
는 색 지정 변수
`matplotlib` 문법 넘 헷갈린다 ax가 무슨 변수인지??? fig, ax = plt.subplots() 해주는 이유가 뭔지????
>>> plt.subplots()은 figure 및 axes 객체를 포함하는 튜플을 반화하는 함수.
https://towardsdatascience.com/what-are-the-plt-and-ax-in-matplotlib-exactly-d2cf4bf164a9
[What Are the “plt” and “ax” in Matplotlib Exactly?
Plotting on a paper, or in a cell on the paper
towardsdatascience.com](https://towardsdatascience.com/what-are-the-plt-and-ax-in-matplotlib-exactly-d2cf4bf164a9)
data = data.replace(to_replace="original_value", value="new_value")
: 맘에 안드는 데이터가 있다면(모델 학습에 적합하지 않은 데이터가 있다면 바꿔줄 수 있다.
문자열 데이터는 그대로 학습에 사용할 수 없기 때문에 적절하게 변형해줘야 함.(숫자나 bool 값으로)
토큰화
공백 기준으로 쪼개기: .split()
대문자로 시작해서 소문자로 끝나는 토큰들로 구분하기: tokens = re.findall('[A-Z][a-z]*', data)
collection
패키지
list
또는 set
에 속해있는 요소의 개수를 다룰 때 용이한 패키지OrderedDict
: 순서가 있는 딕셔너리Counter
: 요소 개수 세는 모듈 → 딕셔너리 반환
a = [1, 1, 0, 0, 0, 1, 1, 2, 3]
Counter(a)
>>> CounterCounter({1: 4, 0: 3, 2: 1, 3: 1})
Counter(a).most_common()
>>>[(1, 4), (0, 3), (2, 1), (3, 1)] #가장 많은 요소와 등장 횟수 알려줌
범주형 데이터(예를 들어 포켓몬이 어떤 속성인가 하는..)도 문자열로 되어있는 경우에는 학습에 사용할 수 없다. 따라서 One-hot Encoding으로 숫자 데이터화 해줘야 함!
참고: https://pandas.pydata.org/docs/user_guide/basics.html#comparing-if-objects-are-equivalent
[F-09] Numpy, Pandas 이해하기 (0) | 2022.02.25 |
---|---|
[EXPLORATION 4] 작사가 인공지능 만들기 (0) | 2022.01.13 |
[Exploration 3] 카메라 스티커앱 만들기 첫걸음 (0) | 2022.01.11 |