[프로젝트로 배우는 데이터사이언스] EDA를 통해 데이터 탐색하기
21184 단어 부스트코스프로젝트로 배우는 데이터사이언스부스트코스
💎 EDA를 통해 데이터 탐색하기
🔼 데이터 구성
- Pregnancies : 임신 횟수
- Glucose : 2시간 동안의 경구 포도당 내성 검사에서 혈장 포도당 농도
- BloodPressure : 이완기 혈압 (mm Hg)
- SkinThickness : 삼두근 피부 주름 두께 (mm), 체지방을 추정하는데 사용되는 값
- Insulin : 2시간 혈청 인슐린 (mu U / ml)
- BMI : 체질량 지수 (체중kg / 키(m)^2)
- DiabetesPedigreeFunction : 당뇨병 혈통 기능
- Age : 나이
- Outcome : 768개 중에 268개의 결과 클래스 변수(0 또는 1)는 1이고 나머지는 0입니다.
🔼 데이터 탐색
# info로 데이터타입, 결측치, 메모리 사용량 등의 정보 확인
df.info()
# 결측치 확인
df_null = df.isnull()
df_null.sum()
# 수치 데이터에 대한 요약
df.describe()
# Outcome을 제외한 컬럼을 feature_columns 변수에 담기
feature_columns = df.columns[0:-1].tolist()
# 인슐린이나 혈압등의 값이 0 이라면 결측치라고 의심해 볼 수 있음
# Pregnancies 컬럼을 제외하고 값이 0인 경우를 결측치로 처리
cols = feature_columns[1:]
df_null = df[cols].replace(0, np.nan)
df_null = df_null.isnull()
df_null.sum()
# 결측치 시각화
df_null.sum().plot.barh()
# Outcome 개수 확인 >> output 0:500, 1:268
df["Outcome"].value_counts()
# Outcome 확률 >> output 0:0.651042, 1:0.348958
df["Outcome"].value_counts(normalize=True)
# Pregnancies에 따른 Outcome
df.groupby(["Pregnancies"])["Outcome"].agg(["mean", "count"])
# Pregnancies를 컬럼으로 이용하여 재구성
df_po = df.groupby(["Pregnancies"])["Outcome"].agg(["mean", "count"]).reset_index()
# 재구성한 데이터 시각화
df_po.plot()
# Pregnancies 6을 기준으로 나눔 (6번 이상이면 True, 6번 이하면 False)
df["Pregnancies_high"] = df["Pregnancies"] > 6
# 나눈 그룹에 따른 발병 횟수 시각화
sns.countplot(data=df, x="Pregnancies_high", hue="Outcome")
# bar chart
# bar chart의 검은 선은 95%의 부트스트랩 신뢰구간을 나타냄
# 당뇨병 발병에 따른 BMI수치
sns.barplot(data=df, x="Outcome", y="BMI")
# 당뇨병 발병에 따른 글루코스 수치
sns.barplot(data=df, x="Outcome", y="Glucose")
# 당뇨병 발병에 따른 인슐린 수치
sns.barplot(data=df, x="Outcome", y="Insulin")
# 임신 횟수에 따른 당뇨병 발병 평균 값
sns.barplot(data=df, x="Pregnancies", y="Outcome")
# box plot
# 박스 끝은 사분위의 상한과 하한을 나타내고 검은 선의 끝은 이상치를 제외한 최댓값과 최솟값을 나타냄
# 임신 횟수에 따른 인슐린 수치(subplot = 당뇨병 발병)
sns.boxplot(data=df, x="Pregnancies", y="Insulin", hue="Outcome")
# 임신 횟수에 따른 인슐린 수치(인슐린 수치가 0 이상일 때, subplot = 당뇨병 발병)
sns.boxplot(data=df[df["Insulin"] > 0], x="Pregnancies", y="Insulin", hue="Outcome")
# violin plot
plt.figure(figsize=(15, 4))
sns.violinplot(data=df[df["Insulin"] > 0], x="Pregnancies", y="Insulin", hue="Outcome", split=True)
# swarm plot
plt.figure(figsize=(15, 4))
sns.swarmplot(data=df[df["Insulin"] > 0], x="Pregnancies", y="Insulin", hue="Outcome")
# dist plot
# 한 개의 수치형 변수를 표현 / 임신 횟수 데이터에 발병하는 케이스와 발병하지 않는 케이스 넣어줌
df_0 = df[df["Outcome"] == 0]
df_1 = df[df["Outcome"] == 1]
sns.distplot(df_0["Pregnancies"])
sns.distplot(df_1["Pregnancies"])
# 임신 횟수가 5 이상일 때 발병률이 높아짐
# 나이 데이터에 발병하는 케이스와 발병하지 않는 케이스 넣어줌
sns.distplot(df_0["Age"])
sns.distplot(df_1["Age"])
# 30세 이후에 발병하는 케이스가 더 많음
# hist plot
# boolean data 는 int를 바꿔준 뒤 표현
df["Pregnancies_high"] = df["Pregnancies_high"].astype(int)
h = df.hist(figsize=(15, 15), bins=20)
# 상관계수 : 수치가 1에 가까우면 양의 상관관계 수치가 -1에 가까우면 음의 상관관계
# 0은 결측치 처리
df.iloc[:, :-2].replace(0, np.nan)
df_matrix = df.iloc[:, :-2].replace(0, np.nan)
df_matrix["Outcome"] = df["Outcome"]
df_corr = df_matrix.corr()
plt.figure(figsize=(15, 8))
sns.heatmap(df_corr, annot=True, vmax=1, vmin=-1, cmap="coolwarm")
df_corr["Outcome"]
Author And Source
이 문제에 관하여([프로젝트로 배우는 데이터사이언스] EDA를 통해 데이터 탐색하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yuzuzzang/프로젝트로-배우는-데이터사이언스-EDA를-통해-데이터-탐색하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)