edwith_python_(11)scatterplot, lmplot, distplot으로 데이터 시각화하기

Updated:

edwith 부스트코스 파이썬으로 시작하는 데이터 사이언스 를 공부하는 과정입니다.

지난 포스트 :point_right: edwith_python_(10)boxplot, violinplot, swarmplot으로 데이터 시각화하기


12.1 scatterplot - 산점도

  • 수치형 vs 수치형 데이터의 상관관계를 볼 때 주로 사용
  • 점의 크기를 데이터의 수치에 따라 다르게 볼 수 있음
“(혈청지오티)AST”, “(혈청지오티)ALT”을 “음주여부”로 구분하여 scatterplot으로 나타내기
plt.figure(figsize=(6,6))
sns.scatterplot(data=df_sample, x="(혈청지오티)AST", y="(혈청지오티)ALT", hue="음주여부", size="체중(5Kg단위)")

*결과*

이상치 확인에 용이함

12.2 lmplot - 상관 관계 확인하기

“신장(5Cm단위)”에 따른 “체중(5Kg단위)”를 “음주여부”로 구분하여 lmplot으로 나타내기
plt.figure(figsize=(6,3))
sns.lmplot(data=df_sample, x="신장(5Cm단위)", y="체중(5Kg단위)", hue="성별코드", col="음주여부")

*결과*

신장과 체중은 양의 상관관계를 가지며, 남성이 여성보다 더 강한 상관관계를 보임.
남성의 경우, 음주를 하는 사람이 더 강한 상관관계를 보임.

lmplot으로 “수축기혈압”, “이완기혈압”을 “음주여부”로 구분하여 나타내기
sns.lmplot(data=df_sample, x="수축기혈압", y="이완기혈압", hue="음주여부")

*결과*

수축기혈압과 이완기혈압은 양의 상관관계를 가지고, 음주를 하는 사람에게 더 강한 상관관계를 가짐

“(혈청지오티)AST”, “(혈청지오티)ALT”를 “음주여부”로 구분하여 lmplot으로 나타내기
sns.lmplot(data=df_sample, x="(혈청지오티)AST", y="(혈청지오티)ALT", hue="음주여부")

*결과*

12.3 이상치 다루기

  • 이상치가 있으면 데이터가 자세히 보이지 않거나, 이상치로 인해 회귀선이 달라지기도 함
  • 시각화를 통해 찾은 이상치를 제거하거나, 이상치만 따로 모아서 확인하기
“(혈청지오티)AST”와 “(혈청지오티)ALT”가 400 미만인 값만 데이터프레임 형태로 추출하여 df_ASLT 변수에 담기
df_ASLT = df_sample[(df_sample["(혈청지오티)AST"] < 400) & (df_sample["(혈청지오티)ALT"] < 400)]
이상치를 제거한 “(혈청지오티)AST”와 “(혈청지오티)ALT” 를 “음주여부”로 구분하여 lmplot으로 나타내기
sns.lmplot(data=df_ASLT, x="(혈청지오티)AST", y="(혈청지오티)ALT", hue="음주여부") 

*결과*

“(혈청지오티)AST” 또는 “(혈청지오티)ALT”가 400 이상인 값만 데이터프레임 형태로 추출하여 df_ASLT_high 변수에 담기
df_ASLT_high = df[(df["(혈청지오티)AST"] >= 400) | (df["(혈청지오티)ALT"] >= 400)]
’ : 또는
위에서 구한 df_ASLT_high 데이터 프레임에 담겨진 혈청지오티가 높은 데이터만 따로 확인하기
sns.lmplot(data=df_ASLT_high, x="(혈청지오티)AST", y="(혈청지오티)ALT", hue="음주여부") 

*결과*

12.4 distplot

distplot은 결측치가 있으면 그래프를 그릴 수 없음. 결측치를 제거한 데이터프레임을 변수로 지정
df_chol = df[df["총콜레스테롤"].notnull()]
“총콜레스테롤”에 따른 distplot 나타내기
sns.distplot(df_chol["총콜레스테롤"])

*결과*

distplot을 사용하면 첨도와 왜도를 확인할 수 있음
첨도: 분포의 꼬리부분의 길이와 중앙부분의 뾰족함에 대한 정보를 제공하는 통계량(정규분포는 첨도=0)
왜도: 분포의 비대칭도를 나타내는 통계량(정규분포는 왜도 = 0)
현재 총콜레스테롤에 이상치값이 있어서 왼쪽에 쏠려서 그래프가 나타남

“음주여부”가 1인 값에 대한 “총콜레스테롤”을 distplot으로 나타내기
sns.distplot(df_sample.loc[df["총콜레스테롤"].notnull() & (df_sample["음주여부"] == 1), "총콜레스테롤"])

*결과*

“음주여부”가 0인 값에 대한 “총콜레스테롤”을 distplot으로 나타내기
sns.distplot(df_sample.loc[df_sample["총콜레스테롤"].notnull() & (df_sample["음주여부"] == 0), "총콜레스테롤"])

*결과*

“음주여부” 값에 대한 “총콜레스테롤”을 하나의 kdeplot으로 나타내기
plt.axvline(df_sample["총콜레스테롤"].mean(), linestyle=":")
sns.kdeplot(df_sample.loc[df_sample["총콜레스테롤"].notnull() & (df_sample["음주여부"] == 1), "총콜레스테롤"], label="음주 중")
sns.kdeplot(df_sample.loc[df_sample["총콜레스테롤"].notnull() & (df_sample["음주여부"] == 0), "총콜레스테롤"], label="음주 안 함")

*결과*

“음주여부” 값에 대한 “감마지티피”을 하나의 kdeplot으로 나타내기
plt.axvline(df_sample["감마지티피"].mean(), linestyle=":")
sns.kdeplot(df_sample.loc[df_sample["감마지티피"].notnull() & (df_sample["음주여부"] == 1), "감마지티피"], label="음주 중")
sns.kdeplot(df_sample.loc[df_sample["감마지티피"].notnull() & (df_sample["음주여부"] == 0), "감마지티피"], label="음주 안 함")

*결과*

음주 하지 않는 사람들의 첨도가 더 크게 나타남

.
.
다음 포스트 :point_right: edwith_python_(12)K-beauty 판매 데이터 살펴보기

Categories:

Updated:

Leave a comment