2024. 4. 21. 18:36ㆍ공부
여태껏 데이터를 정제하고 시각화 했다면, 이제는 데이터를 분석하고 분석한 데이터를 기반으로 다시 시각화를 할 차례이다.
소득, 소비량, 키, 몸무게 같이 변하는양을 표현한것을 변수라 하며, 이들중 두개의 변수가 함께 변화하는관계를 상관관계라 칭하며, 이 상관관계에 대한 수치를 상관계수라고 한다.
상관관계인 두변수가 비례한다면(하나가 증가하면 다른하나도 증가) 양의 상관관계.
반비례한다면 음의 상관관계라고 한다.
이러한 상관관계를 계산하기위해 파이썬에서는 넘파이의 corrcoef(x, y) 함수를 사용한다. corrcoef()함수를 통해 수적으로 피어슨 상관계수를 계산하여, 변수간의 상관관계를 구한다.
피어슨(pearson) 상관계수 : 변수들간의 관련성을 구하는 이변량 상관분석에서 보편적으로 이용하는 방법.
아래는 상관계수를 구하고 시각화를 진행하는 간단한 예시다.
import numpy as np
np.random.seed(85) # 동일한 결과를 위해 시드를 고정
x = np.arange(10)
y1 = x * 2 # 2x
# 피어슨 상관관계를 구하기위한 corrcoef()함수
np.corrcoef(x,y1)
# return
# array([[1., 1.],
# [1., 1.]])
x는 0부터 9까지의 배열 이며, y1은 x값의 2배를 가지는 배열이므로, y = 2x식으로 두변수는 선형적 상관관계를 가진다.
따라서 위의 결과 배열성분은 모두 1이 나오게된다.
그렇다면 이번에는 y의 값이 x의 4제곱인경우의 상관관계를 구해보겠다. 두데이터는 x값이 증가하면 y값도 증가하므로, 상관도는 비교적 높다.
x = np.arange(10)
y2 = x ** 3
np.corrcoef(x, y2)
array([[1. , 0.90843373],
[0.90843373, 1. ]])
상관 관계를 확인해보면 0.9정도로 높은 상관관계를 보유하고있다.
그렇다면 이번에는 y값을 랜덤으로 지정하여, x와의 상관관계를 비교해 보겠다.
x = np.arange(10)
y3 = np.random.randint(0,100, size = 10) # 0부터 100사이에서 10개의 난수 생성
np.corrcoef(x,y3)
# return
#array([[ 1. , -0.06472465],
# [-0.06472465, 1. ]])
난수는 규칙이 존재하지 않으므로 상관관계가 0에 가깝다.
이제 여러가지 코드를 통해 구한 상관관계를 기반으로 시각화를 진행해보겠다. 상관관계에대한 시각화를 진행하기위해서는 새로운 라이브러리 seaborn을 사용해야한다. seaborn은 matplotlib를 기반으로 제작되었으며, 보다 높은수준의 인터페이스를 보유하고있어 쉽게 데이터를 분석할수잇다.
이를 통해 진행하면 결과는 아래와 같다.
import seaborn as sns
import pandas as pd
df = pd.DataFrame({'x': x,'y2': y2, 'y3': y3})
sns.pairplot(df)

이제 더큰 데이터를 기반으로 진행하기위해 시본에서 기본적으로 제공하는 데이터 셋 'tips'를 가져와서 진행한다..
tips = sns.load_dataset("tips")
sns.relplot(data = tips, x = "total_bill", y = "tip", col = "time", hue = "smoker",style = "smoker",size = "size")
데이터를 가져온후 relplot() (col을 기준으로 그래프를 분할하여,산점도 그래프와 선그래프를 그릴수있는 함수)를 통해 출력한 결과는 아래와 같다. 구분값은 흡연여부에따라 색상과, 형태를 달리하고있으며, size는 인원수에 따라 크기를 달리하고있다.

하지만 이것만으로는 흡연여부와 팁의 비율에 대한 상관관계를 찾기는 어려워 보인다. 그렇기에 다른정보와의 상관관계를 한번 찾아보도록하자. (ex) 전체금액 대비 팁)
이에대한 구간을 찾아보기 위해서는 히스토그램을 사용해야한다. 시본에서는 히스토그램을 출력하기위해서 distplot함수를 사용한다.
sns.distplot(tips['tips'], kde = False, bins = 10);

히스토그램을 살펴보았을때, 1 ~ 4달러를 팁으로 지출하는것을 확인할수있다.
하지만 이것역시 전체금액을 고려한것이 아니기에 그다지 의미있는 그래프는 아니다. 그래서 이번에는 이전에 사용했던 relplot()함수를 사용해 둘의 상관관계를 알아보고자한다.
sns.relplot(x = 'total_bill', y = 'tip', data = tips)

이와같이 다양한 그래프를 적용해가며, 해석하면 보다 의미있는 데이터를 분석해낼수있다.
'공부' 카테고리의 다른 글
| [파이썬] 내가보려고 정리하는 파이썬 : Folium (0) | 2024.04.21 |
|---|---|
| [파이썬] 내가보려고 정리하는 파이썬 : Matplotlib (0) | 2024.04.21 |
| [파이썬]내가보려고 정리하는 파이썬 : Pandas (0) | 2024.04.21 |
| [파이썬] 내가보려고 정리하는 파이썬 : Numpy (0) | 2024.04.20 |
| [그래픽스]Viewing (1) | 2024.04.19 |