본문 바로가기
스터디/데이터사이언스

[Python] 데이터 시각화 (Basic)

by 궁금한 준이 2023. 4. 11.
728x90
반응형

기본 시각화 라이브러리 2대장, matplotlib과 seaborn

Ready

다이아몬드 데이터셋을 이용할 것이다.

df = sns.load_dataset('diamonds')
df.head()

Histogram

x: array of sequence

bins: (default=10) 히스토그램의 binning 개수

plt.hist(df['price'], bins=8)

# plot as a probability density
plt.hist(df['price'], bins=8, density=True)

(left) basic histogram, (right) density plot

seaborn에도 히스토그램을 지원한다.

distplot - 히스토그램+density. 그러나 deprecated. seaborn의 이후 추가된 함수들과 distplot의 API가 너무 달라서 그렇다고 한다.

displot과 histplot을 이용하도록 하자. (kde=True)를 인자로 넘겨주면 density를 그릴 수 있다.

histplot의 경우, bins는 자동으로 계산되지만, 임의로 설정할 수 있다.

 

sns.distplot(df['price'])
sns.histplot(df['price'])
sns.histplot(df['price'], bins=20, kde=True)

좌측부터 distplot, histplot, histplot(kde=True)

barplot

barplot은 categorical attribute에 적합한 그래프이다. 각 class 별로 얼마나 많이 있는지 개수를 시각화한다.

 

기본적으로 pandas의 dataframe의 plot(kind='bar')를 이용하여 막대그래프를 그릴 수 있다. 이때 직접 groupby로 카테고리 데이터의 개수(count)로 값을 구한 후에 적용해야 한다.

두번째 방법은 seaborn의 estimator를 이용하는 것이다. data, x축, y축은 동일하게 지정하되, estimator=len을 인자로 넘겨주면 categorical data의 개수를 계산해준다.

estimator=np.mean, estimator=np.median 등 estimator에는 함수를 넘겨주면 된다. 

# method 1. use pandas dataframe plot()
df.groupby('cut')['price'].count().plot(kind='bar')

# method 2. use seaborn barplot with estimator=len
ax = sns.barplot(data=df, x='cut', y='price', estimator=len)

# method 3. use seaborn barplot with estimator=len and hue
ax = sns.barplot(data=df, x='cut', y='price', hue='clarity', estimator=len)

왼쪽부터 method 1 ~ 3의 결과이다.

Violinplot

주로 numeric attribute에 사용하는 그래프이다. seaborn 도큐먼트에 따르면, boxplot과 whisker plot과 비슷한 역할을 한다고 한다. violin plot은 categorical 별 quantitative 데이터의 분포를 보여주는데 목적이 있다.

물론, 하나의 attribute에 대하여 대칭적인 분포를 그리는 violin plot을 보여줄 수도 있다.

 

sns.violinplot(data=df, x='cut', y='table', hue='clarity')
sns.violinplot(data=df, x='table')

Scatterplot, Jointplot

scatterplot은 두 numeric 변수의 상관관계를 볼 때 적절한 그래프이다.

seaborn에는 jointplot으로 각 scatter로 상관관계 뿐만 아니라 각 데이터의 분포도 상단과 우측에 시각화한다.

 

regplot은 두 변수의 선형회귀식을 구하여 선형그래프와 오차까지 시각화하는 함수이다.

# joint plot
sns.jointplot(data=df, x='table', y='depth')

# regression plot
sns.regplot(data=df, x='y', y='z')

boxplot

boxplot은 5개의 수, 즉 min, Q1, Q2(=median), Q3, max와 IQR(Q3-Q1)을 시각화한 그래프이다.

min=Q1 - 1.5 * IQR, max=Q3 + 1.5 * IQR로 정의하고, [min, max]를 벗어나는 data point들을 outlier로 간주한다.

중앙값을 계산해야 하므로 당연히 numeric attribute에 적합하다.

sns.boxplot(data=df, x='cut', y='table')
sns.boxplot(data=df, x='cut', y='table', hue='clarity')

pairplot

모든 변수들의 scattor plot을 보여준다.

sns.pairplot(data=df)

pair plot

 

728x90
반응형