Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

Python

파이썬을 사용하여 통계 분석을 수행하는 방법

권현욱(엑셀러) 2024. 5. 1. 19:19
반응형

들어가기 전에

사람들은 '통계 분석'을 정의하는 자신만의 방식을 가지고 있습니다. 파이썬을 사용하면 통계 분석을 효과적으로 수행할 수 있습니다. 데이터 과학 전문가들이 사용하는 5가지 입증된 방법을 소개합니다.

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

이미지: 아이엑셀러 닷컴

 

※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.


  • 원문: How To Perform Statistical Analysis Using Python: The Ultimate Guide
  • URL: https://medium.com/illumination/how-to-perform-statistical-analysis-using-python-the-ultimate-guide-9458ae0ace1c

1. 기술통계

모임에서 낯선 사람을 만났다고 가정해 보세요. 그 사람이 흥미로워 보이고 대화를 시작하고 싶습니다. 당연히 그(또는 그녀)의 이름과 관심사 등을 물어보는 것으로 대화를 시작합니다. 이 과정을 통해 상대에 대한 높은 수준의 이해를 얻은 것입니다.

마찬가지로, 데이터를 탐색, 분석하고 효과적으로 전달하는 등 데이터에 대한 높은 수준의 이해를 얻기 위해 설명적 통계를 사용합니다. 이것은 데이터의 분포, 변동성, 중심 경향을 이해하는 데 도움이 됩니다. 기술통계는 평균, 중앙값, 범위, 표준 편차, 사분위수 등과 같은 데이터의 기본 특징을 요약하고 표시하는 데 사용됩니다.

기술통계를 계산하기 위해 pandas, numpy, scipy 등과 같은 Python 라이브러리를 사용할 수 있습니다.

# Import the libraries
import pandas as pd
import numpy as np
import scipy.stats as stats

# Load the dataset from a csv file
df = pd.read_csv("data.csv")

# Get the summary statistics using pandas
df.describe()

# Get the mean of each column using numpy
np.mean(df, axis=0)

# Get the median of each column using numpy
np.median(df, axis=0)

# Get the standard deviation of each column using numpy
np.std(df, axis=0)

# Get the variance of each column using numpy
np.var(df, axis=0)

# Get the mean of each column using scipy
stats.mean(df, axis = 0)

# Get the median of each column using scipy
stats.median(df, axis = 0)

# Get the mode of each column using scipy
stats.mode(df, axis=0)

# Get the skewness of each column using scipy
stats.skew(df, axis=0)

# Get the kurtosis of each column using scipy
stats.kurtosis(df, axis=0)

 

2. 가설 검정

데이터 과학 프로젝트를 시작하기 전에 모집단에 대한 몇 가지 초기 가설을 세우는 것이 중요합니다. 기술통계 작업을 통해 데이터를 더 잘 이해했다면, 이 샘플 데이터를 기반으로 모집단에 대해 미리 설정한 가설이 맞는지 틀린지 확인하는 작업을 진행합니다. 이러한 확인 과정을 가설 검정(Hypothesis Testing)이라고 합니다.

가설이 맞으면 귀무 가설(H0)로 간주하고, 그렇지 않으면 대안 가설(H1)로 간주합니다. 가설 테스트를 수행하려면 다음을 수행해야 합니다.

 

  1. 귀무 가설(H0)과 대체 가설(H1)을 설정합니다.
  2. 그런 다음 유의 수준(알파)을 선택합니다.
  3. 테스트 통계와 p값을 계산합니다.
  4. 이제 p값을 기반으로 결정을 내립니다.


가설 검정을 위해 다음과 같은 Python 라이브러리인 scipy, statsmodels, pingouin을 사용할 수 있습니다. 예를 들어, 모집단의 평균이 주어진 값과 같은지 여부를 테스트하는 1표본 t-검정을 수행하려면 scipy.stats의 ttest_1samp 함수 또는pingouin의 ttest 함수를 사용할 수 있습니다.

# Import the libraries
from scipy import stats
import pingouin as pg

# Define the sample data and the population mean
data = [1, 2, 3, 4, 5]
popmean = 3.5

# Perform the one-sample t-test using scipy
t, p = stats.ttest_1samp(data, popmean)
print('t = {:.4f}, p = {:.4f}'.format(t, p))

# Perform the one-sample t-test using pingouin
df = pg.ttest(data, popmean)
print(df)

 

두 독립 그룹의 평균이 동일한지 여부를 테스트하는 2표본 t-검정을 수행하려면 scipy.stats의 ttest_ind 함수, statsmodels.stats의 ttest_ind 함수 또는 pingouin의 ttest 함수를 사용할 수 있습니다.

# Import the libraries
from scipy import stats
from statsmodels.stats import weightstats
import pingouin as pg

# Define the sample data for two groups
group1 = [1, 2, 3, 4, 5]
group2 = [6, 7, 8, 9, 10]

# Perform the two-sample t-test using scipy
t, p = stats.ttest_ind(group1, group2)
print('t = {:.4f}, p = {:.4f}'.format(t, p))

# Perform the two-sample t-test using statsmodels
t, p, df = weightstats.ttest_ind(group1, group2)
print('t = {:.4f}, p = {:.4f}, df = {:.4f}'.format(t, p, df))

# Perform the two-sample t-test using pingouin
df = pg.ttest(group1, group2)
print(df)

3. 상관관계

위에서 언급한 두 가지 방법을 통해 데이터에 대해 많은 것을 발견했을 것입니다. 이제 상관관계를 살펴볼 차례입니다. 모임에서 낯선 사람을 만났던 위의 예를 떠올려 보세요. 상대를 알게 된 후, 정말 관심이 있다면 상대에 대해 더 자세히 알아보고 싶어집니다. 데이트를 신청할 수도 있겠죠. 이것이 바로 상관관계입니다. 데이터 용어로는 데이터에서 두 변수 사이의 선형 관계의 강도와 방향을 측정하는 것이 상관관계입니다.

여기서 -1은 완벽한 음의 상관관계, 0은 상관관계가 없음을 의미하며, 마지막으로 1은 완벽한 양의 상관관계를 의미합니다. 상관관계는 변수가 서로 어떻게 연관되어 있는지, 그리고 예측이나 인과 관계에 사용할 수 있는지 여부를 이해하는 데 도움이 됩니다.

 

상관관계를 계산하고 시각화하기 위해 numpy, pandas, scipy, seaborn, matplotlib 등과 같은 Python 라이브러리를 사용할 수 있습니다. pandas와 seaborn이 각각 가장 많이 사용되고 가장 쉽게 계산하고 시각화할 수 있는 방법입니다.

# get the correlation matrix with pandas
df.corr()

# plot a heatmap of the correlation matrix with seaborn and matplotlib
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(df.corr(), annot=True, cmap="coolwarm")
plt.show() # show the plot

 

4. 회귀

지금까지 데이터에 있는 변수 간의 관계를 파악했나요? 어떤 변수가 다른 변수에 종속된 경우, "독립 변수가 변함에 따라 종속 변수가 얼마나 변화하는지, 독립 변수를 사용해 종속 변수를 예측할 수 있는지"를 아는 것이 중요합니다. 하나의 종속변수와 하나 이상의 독립변수 사이의 이러한 종속 관계를 모델링하고 이해하는 방법을 "회귀"(Regression)라고 합니다.

회귀에는 선형 회귀, 로지스틱 회귀, 다항식 회귀 등 다양한 유형이 있습니다. 회귀 분석의 경우 관계를 계산하고 평가하기 위해 sklearn, scipy, statsmodels, seaborn 등과 같은 Python 라이브러리를 사용하여 시각화할 수 있습니다. 일반적으로 sklearn과 seaborn이 많이 사용됩니다. 다음은 예시입니다.

# Import the libraries
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# Load the dataset from a csv file
df = pd.read_csv("data.csv")

# Define the dependent and independent variables
y = df["y"] # dependent variable
X = df["x"] # independent variable

# Reshape the variables to fit the model
y = y.values.reshape(-1, 1)
X = X.values.reshape(-1, 1)

# Create and fit the model
model = LinearRegression()
model.fit(X, y)

# Get the model parameters
slope = model.coef_[0][0]
intercept = model.intercept_[0]
r_squared = model.score(X, y)

# Print the model parameters
print(f"slope = {slope:.4f}")
print(f"intercept = {intercept:.4f}")
print(f"r_squared = {r_squared:.4f}")

# Plot the data points and the regression line
sns.regplot(x=X, y=y, ci=None)
plt.xlabel("x")
plt.ylabel("y")
plt.title("Linear regression of y on x")
plt.show()

 

5. 시각화

마지막으로 살펴볼 기술은 시각화입니다. 이 개념은 이미 익숙하리라 생각합니다. 통계 탐색을 통해 조사하고 분석한 데이터는 그래픽 표현을 통해 누구에게나 쉽고 효과적으로 전달할 수 있습니다. 차트를 사용하여 이러한 그래픽 표현을 만드는 과정을 시각화라고 합니다.

 

사용할 수 있는 파이썬 라이브러리는 seaborn, matplotlib, plotly 등과 같은 많은 라이브러리가 있습니다. 필자가 가장 많이 사용하는 것은 seaborn과 matplotlib입니다.

import matplotlib.pyplot as plt # import matplotlib.pyplot as plt
import seaborn as sns # import seaborn as sns

 

matplotlib를 사용하여 간단한 선형 플롯을 만들려면 plt.plot 함수를 사용하면 됩니다.

x = [1, 2, 3, 4, 5] # define the x values
y = [2, 4, 6, 8, 10] # define the y values
plt.plot(x, y) # plot a line plot of x and y
plt.xlabel("x") # label the x-axis
plt.ylabel("y") # label the y-axis
plt.title("Line plot of x and y") # add a title
plt.show() # show the plot

 

seaborn을 사용하여 간단한 라인 플롯을 만들려면 sns.lineplot 함수를 사용합니다.

x = [1, 2, 3, 4, 5] # define the x values
y = [2, 4, 6, 8, 10] # define the y values
sns.lineplot(x, y) # plot a line plot of x and y
plt.xlabel("x") # label the x-axis
plt.ylabel("y") # label the y-axis
plt.title("Line plot of x and y") # add a title
plt.show() # show the plot

Excel과 VBA의 모든 것 아이엑셀러 닷컴 · 강사들이 숨겨 놓고 보는 엑셀러TV