健康診断データを使用した仮定の検証
29291 ワード
これらの内容は、Boost Cos🎄 仮定の作成
データの分析を始める前に、まずしなければならないこと.飲酒するかどうか健康診断の数値と違いがありますか 身長やウエストの大きさは体重と正に相関していますか 🎄 優先パラメータ title:タイトル出力 xlim:x軸の範囲設定 grid:グラフのgrid サブブロック:グラフを複数の部分に分割する [histogram]
健康診断データを用いて仮説検査を行う。ipynb
🎄 その他の参考資料
python-Seabornライブラリのヒストグラム、カウントアウトマップ、distplotの主な違いは何ですか?
データの分析を始める前に、まずしなければならないこと.
# 글꼴 설치
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
# 라이브러리 로드
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as pl
import os
# 폰트 설정
plt.rc("font", family="NanumGothic")
sns.set(font="NanumGothic",
rc={"axes.unicode_minus":False},
style='darkgrid')
🎄 データ検証### 데이터 불러오기
df = pd.read_csv("data/NHIS_OPEN_GJ_2017.CSV", encoding="cp949")
### 데이터 확인
df.info() # 기본정보
df.columns # 데이터 행 종류
df.dytpes # 데이터 타입
df.shape # 데이터 크기
### 데이터 미리보기
df.head() # 상위 5개
df.tail() # 하위 5개
### 결측치 확인
df.isnull() # 결측치 확인(isna() 동일) -> true/false
df.isna().sum() # 결측치 수 집계
df.isnull().sum().plot(rot=60) # 시각화
df.isnull().mean() # 결측치의 비율 확인
### 데이터 요약
# 단일데이터 -> series
df['(혈청지오티)ALT']
# 2개 이상 데이터 -> dataframe
df[["(혈청지오티)ALT", "(혈청지오티)AST"]]
# 수치데이터 요약 -> count, mean, std, min, max, Q1, Q2, Q3
df[["(혈청지오티)ALT","(혈청지오티)AST"]].describe()
🎄 データグループ### groupby() -> series
# '성별코드'에 따라 모든 열 평균
df.groupby(['성별코드']).mean()
# '성별코드'에 따른 '가입자일련번호' 빈도 수
df.groupby(["성별코드"])["가입자일련번호"].count()
# '성별코드', '음주여부'에 따른 '가입자일련번호' 빈도 수
df.groupby(["성별코드", "음주여부"])["가입자일련번호"].count()
# '성별코드', '음주여부'에 따른 '감마지티피' 평균
df.groupby(["성별코드", "음주여부"])["감마지티피"].mean()
# '성별코드', '음주여부'에 따른 '감마지티피' 수치데이터 요약
df.groupby(["성별코드", "음주여부"])["감마지티피"].describe()
### pivot_table() -> dataframe :: groupby보다 연산속도↑, 직관
# 연산 x, 데이터 구조 변경
df.pivot
# '음주여부'에 따른 '감마지티피' 평균(default)
pd.pivot_table(df, index="음주여부", values="감마지티피")
# '음주여부'에 따른 '감마지티피' 수치데이터 요약
pd.pivot_table(df, index="음주여부", values="감마지티피",
aggfunc="describe")
# '성별코드'에 따른 '가입자일련번호' 빈도 수
df.pivot_table(index="성별코드", values="가입자일련번호", aggfunc="count")
# '성별코드'에 따른 '가입자일련번호' 평균, 중앙값
df.pivot_table(index="성별코드", values="가입자일련번호",
aggfunc=['mean', 'median'])
🎄 データの表示# 연속된 데이터에 대해, 카테고리형으로 생성
# 모든 컬럼에 대해 히스토그램 생성
h = df.hist(figsize=(12, 12))
# 일부 행(12:24)에 대해 히스토그램 생성
h = df.iloc[:, 12:24].hist(figsize(12,12))
# bins 옵션으로 막대의 개수 설정
h = df.iloc[:, 12:24].hist(figsize=(12,12), bins=100)
[countplot, barplot]# 1,000,000개 중 랜덤으로 정해준 개수만큼 가져옵
df_sample = df.sample(1000, random_state=1)
# seaborn 옵션 변경
sns.set(font_scale=0.8, font="NanumGothic")
### countplot
# pandas: 연산 후 시각화
df["음주여부"].value_counts().plot.bar()
# seaborn: x, y, data 지정
sns.countplot(x="음주여부", data=df)
# hue: 카테고리형 데이터 함께 그리기
sns.countplot(x="음주여부", data=df, hue="성별코드")
### barplot(막대)
sns.barplot(data=df, x="연령대코드(5세단위)", y="총콜레스테롤")
# hue: 음주여부 추가
sns.barplot(data=df_sample, x="연령대코드(5세단위)", y="총콜레스테롤",
hue="음주여부")
# 신뢰구간: ci = n(%)
# 모수가 어느 범위 안에 있는지를 확률적으로 보여주는 방법
sns.barplot(data=df_sample, x="연령대코드(5세단위)", y="트리글리세라이드",
hue="음주여부", ci=95)
[lineplot(線)、pointplot(点)]# plot 크기 조절
plt.figure(figsize=(15,4))
# 기울기 표현 가능
# 가격데이터, 매출/재고 데이터 표현
### lineplot
# 편차, 신뢰구간: 그림자로 표현
sns.lineplot(data=df, x="연령대코드(5세단위)", y="체중(5Kg단위)",
hue="성별코드")
# ci="sd" (standard deviation(표준편차))
sns.lineplot(data=df, x="연령대코드(5세단위)", y="신장(5Cm단위)",
hue="성별코드", ci="sd")
### pointplot(점)
# 편차, 신뢰구간: 막대로 표현
sns.pointplot(data=df, x="연령대코드(5세단위)", y="신장(5Cm단위)",
hue="음주여부", ci="sd")
[boxplot, violinplot, swarmplot]### boxplot
# IQR = Q3 - Q1
# (Q3 + 1.5*IQR) 초과 OR (Q1 - 1.5*IQR) 미만 == 이상치
sns.boxplot(data=df, x="신장(5Cm단위)", y="체중(5Kg단위)",
hue="성별코드")
### violinplot
# ~~ hist + box
# boxplot 단점 보완 -> 결과분포의 정확한 값, 세부정보 확인
sns.violinplot(data=df, x="신장(5Cm단위)", y="체중(5Kg단위)")
# split 옵션 -> 2개의 데이터 함께
sns.violinplot(data=df_sample, x="신장(5Cm단위)", y="체중(5Kg단위)",
hue="음주여부", split=True)
### swarmplot(산점도)
sns.swarmplot(data=df_sample, x="신장(5Cm단위)", y="체중(5Kg단위)",
hue="음주여부")
[sportplot(散布図)、implot(回帰線)]### scatterplot
# 수치형 데이터, 이상치 파악에 유리
sns.scatterplot(data=df, x="(혈청지오티)AST", y="(혈청지오티)ALT")
### implot
# 상관관계 파악에 유리
# 여러 카테고리에 따라 subplot 그리기 가능
sns.lmplot(data=df_sample,x="연령대코드(5세단위)", y="혈색소", hue="음주여부")
# robust=True: 이상치를 제외하고 그리기
sns.lmplot(data=df_sample, x="(혈청지오티)AST", y="음주여부", robust=True)
# 이상치 다루기: 범위 지정
df_ASLT = df_sample[(df_sample["(혈청지오티)AST"] < 400)
& (df_sample["(혈청지오티)ALT"] < 400)]
[distplot, kdeplot]### distplot: 히스토그램 + 선
# 결측치 존재하지 않는 데이터 활용해야 함
df_chol = df.loc[df["총콜레스테롤"].notnull(), "총콜레스테롤"]
# bins: 데이터를 몇개로 나눠 담을지
sns.distplot(df_chol, bins=10)
# hist=False: 선만 표시
sns.distplot(df.loc[(df["총콜레스테롤"].notnull())
& (df["음주여부"] == 1), "총콜레스테롤"],hist=False)
### kdeplot: 확률밀도함수
sns.kdeplot(df.loc[(df["총콜레스테롤"].notnull())
& (df["음주여부"] == 1), "총콜레스테롤"])
# plt.axvline(): 평균값, 중앙값 표시
plt.axvline(df_sample["총콜레스테롤"].median(), linestyle="--")
sns.kdeplot(df.loc[(df["총콜레스테롤"].notnull())
& (df["음주여부"] == 1), "총콜레스테롤"])
[heatmap]# 상관관계가 있는 dataframe반환
df_corr = df_sample.corr()
# 상관관계↑ = 숫자↑
df_corr['신장(5cm단위)'].sort_values()
# 상관계수 조건 설정
df_corr.loc[df_corr["신장(5Cm단위)"] > 0.3, "신장(5Cm단위)"]
### heatmap
# correlation(상관관계) 표현
sns.heatmap(df_corr, annot=True, fmt=".2f", cmap="Blues")
# 대각선 아래만 표시
mask = np.triu(np.ones_like(df_corr, dtype=np.bool))
sns.heatmap(df_corr, annot=True, fmt=".2f", cmap="Blues", mask=mask)
🎄 コード結果の確認健康診断データを用いて仮説検査を行う。ipynb
🎄 その他の参考資料
python-Seabornライブラリのヒストグラム、カウントアウトマップ、distplotの主な違いは何ですか?
Reference
この問題について(健康診断データを使用した仮定の検証), 我々は、より多くの情報をここで見つけました https://velog.io/@ohhj1999/DS-건강검진-데이터로-가설-검정하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol