EDA
는 exploratory Data Analysis
의 약어로 탐색적 데이터 분석을 의미한다. 데이터를 다양한 각도에서 관찰하고 이해하는 모든 과정을 말한다. 데이터 분석에 있어 매우 중요한 초기 분석단계이며, 데이터를 분석하고 결과를 내는 과정에 있어 지속적으로 해당 데이터에 대한 “탐색과 이해”를 기본으로 가져아 한다.
데이터 수집 -> 데이터 전처리 -> 순수 데이터 -> EDA(탐색적 데이터 분석)
데이터에 대한 이해와 탐색이 바탕이 되어야 문제를 발견 및 해결은 물론, 데이터 분석 과정에서 필요한 통계도구, 자료수집 등을 결정하는데 도움을 준다.
-> 데이터를 설명하고 패턴을 찾는 것이 목적
-> 독립변수에 하나의 종속변수가 있는 것
-> 일변량 분석은 어떤 대상의 성격을 규명하기 위하여 한가지 측면에서 그 대상을 관찰하고 분석하는 것에 유용
-> 변수들간의 관계를 보는 것이 목적
-> 여러 개의 독립변수에 여러 개의 종속변수를 동시에 분석하는 것
-> 여러 각도와 측면에서 변수들의 관계를 분석하는 것에 유용하다.
-> 데이터를 한눈에 파악하여 대략적인 형태 파악 가능
-> 정확한 값을 파악하기 좋다.
-> 시각화 없이도 대략적인 데이터의 분포를 유추하고 정확한 값을 파악하기 좋다.
summary statistics: 요약 통계량으로 평균,중앙값, 최대/최소값, 사분위수 등이 있다.
EDA의 대상과 종류의 조합으로 총 4가지가 나온다.
- Uni-Non Graphic(일변량 비시각화)
- Uni-Graphic(일변량 시각화)
- Multi-Non Graphic(다변량 비시각화)
- Multi-Graphic(다변량 시각화)
전체적인 데이터 분석 -> 데이터의 개별 속성값 관찰 -> 속성 간의 관계분석
❗ 정리: EDA는 데이터의 전체적인 부분을 파악하고 개별 속성값을 관찰한 후, 마지막으로 속성 간의 관계를 분석해보며 데이터를 탐색적으로 분석해보는 과정을 말한다.
[참고 사이트] https://www.datadata.link/qa36/
미리 정의된 형식이 있는 데이터를 의미한다. 따라서 정형데이터는 스프레드시트(구글 시트,엑셀)에서 형식을 지정하여 사용할 수 있다.
미리 정의된 형식이 없는 데이터를 말한다. 비정형 데이터는 일반적으로 텍스트 중심으로 되어 있으나 "날짜에 따른 사건일지"와 같이 숫자 데이터도 포함될 수 있다.
등급, 순서와 같은 데이터이다. 하지만 남녀를 1과2로 표현하여 질적 데이터로 사용할 수도 있다. 질적 데이터는 다시 명목과 순서로 나뉘어진다.
남자=1
, 여자=2
처럼 수치화 시킨 것온도
와 시각
처럼 간격을 수치화한 것비만도
처럼 기준에 대한 비례를 수치로 표현한 것키, 몸무게, 시간, 혈압, 경제성장률과 같이 연속적인 수치로 표현된 데이터이다. 연속형데이터는 아날로그라고 할 수 있다. 유한개의 숫자로는 표현이 안되고 무한한 숫자로 표현해야 하는 데이터를 의미한다.
나이, 시험점수 등과 같이 명확한 자리수를 가지는 수치로 표현된 데이터이다. 범주형 데이터는 디지털이라고 할 수 있다. 즉 유한한 숫자로 표현할 수 있다. 여기서 범주형데이터는 다시 두 분류로 나눌 수 있다.
.groupby()
를 이용하면 데이터를 그룹으로 묶어, 그룹별 통계연산과 집계, 요약을 빠르게 할 수 있다.
example.groupby('age').mean()
위 Code를 실행하면 example dataframe의 age
column에 따른 평균을 알 수 있다.
example.groupby('age')['pclass'].mean()
위 Code의 경우는 age
에 따른 pclass
의 평균을 확인할 수 있다. 즉, 같은 나이로 묶은 후 그 나이에 따른 "pclass"의 평균을 구할 수 있는 것이다.
이때 주의할 점은 위 실행결과는 Series
형태로 반환된다는 것이다. 만일 dataframe형식으로 결과를 출력하고 싶으면 다음과 같은 두가지 방법을 통하여 dataframe형식으로 출력을 할 수 있다.
example.groupby('age')['pclass'].mean().reset_index()
example.groupby('age',as_index = False)['pclass'].mean()
as_index
를 False로 하게되면 기존의 index열을 버리게 된다.
Continuous data를 Category data로 변경할 때 사용하는 pandas의 function이다.
pandas.cut(x =example['특정 열 이름'], bins = "구간을 나눌 때 기준 값들", labels = "각 구간의 이름")
보통 위와 같은 형식으로 사용한다.bins
파라미터는 .describe()
를 통하여 확인한 4분위수와 최대/최소 값을 활용할 수도 있다. 아니면 다른 기준을 통하여 구현할 수도 있다.
"형식"
에 입력된 값에 따라 그래프를 출력한다.
- 미입력: 일반적인 꺾은선 그래프를 출력
- bar: 일반적인 막대그래프 출력
- barh: 수평방향으로 누운 막대그래프 출력
example_data = example.groupby(['quality','color'])['sugar'].mean()
example_data.plot(kind = "bar")
위 Code를 실행하면 exmaple이라는 dataframe안에서 qulity와 color에 따른 sugar의 평균값을 bar그래프 형태로 출력한다. 이때 quality와 color는 x축, sugar의 평균이 y축의 값이 된다.
그래프 관련 참고 사이트
https://benn.tistory.com/36
https://wikidocs.net/92112
보통 Continuous data
의 상관관계를 나타낼 때 사용되는 산점도를 출력해주는 명령어이다.
#import matplotlib.pyplot as plt
plt.scatter(example['weight'],example['speed']);
위 Code를 실행하면 x축은 weight
, y축은 speed
인 산점도가 출력된다.
dataframe에서 원하는 rows를 선택하기 위해 사용하는 방법에는 두가지가 있다.
- index를 사용.
.query()
함수를 사용.
두 방법은 같은 결과를 도출하지만, 아래와 같이 사용법이 다른다.
malignant_cancer = df[df['diagnosis'] == 'Maligant']
malignant_cancer = df.query('diagnosis' == 'Maligant')
즉, query()
는 괄화안에 들어오는 조건에 부합하는 row만 골라서 새로운 dataframe을 생성한다.
❗ example
light_body = df.query("alchol <= 12.5") medium_body = df.query("(alchol>12.5) and (alchol <13.5)") full_body = df.query("alchol >= 13.5")
이 경우 df라는 데이터에서
alchol
을 기준으로 만족하는 부분만 모아서 dataframe을 만든다.
무엇을 알고 무엇을 모르는지 아직 잘 구분이 안되는 것 같다. 어떻게 공부해야 잘 공부하는 건지도 모르겠다. 과제는 열심히 풀고 있는데 이거면 충분한건지 살짝 의구심이 든다.