## 상관 관계 #### 사용하는 이유 - 두 변수 간의 관계를 파악하기 위해서 사용 - 이변량 데이터를 활용해야 함 #### 해석해야 하는 값 - Pearson 상관계수 - **1**: 완벽한 양의 상관관계 - **0**: 상관관계 없음 - **-1**: 완벽한 음의 상관관계 - **0.1~~0.3 또는 -0.1~~-0.3**: 약한 상관관계 - **0.3~~0.5 또는 -0.3~~-0.5**: 중간 정도의 상관관계 - **0.5 이상 또는 -0.5 이하**: 강한 상관관계 - **p-value**: - **p < 0.05**: 상관계수가 통계적으로 유의미함을 나타냅니다. - **p ≥ 0.05**: 상관계수가 통계적으로 유의미하지 않음을 나타냅니다. - P value가 무슨 의미야? - 귀무가설이 나올 확률을 뜻한다. 상관관계가 있을 거라는 예측이 나오지 않을 것이라는 게 귀무가설인데, 이 귀무가설이 나타날 확률이 0.05 이하이면, 즉 5% 미만의 유의수준이라면 귀무가설이 틀렸다고 말한다. #### 상관분석 결과 해석 시 고려할 요소 1. **상관계수의 크기**: 상관계수의 절대값이 클수록 두 변수 간의 관계가 강합니다. 2. **상관계수의 방향**: 양의 값이면 두 변수는 같은 방향으로 변화하고, 음의 값이면 반대 방향으로 변화합니다. 3. **p-value의 유의성**: p-value가 낮을수록 상관관계가 우연히 발생할 가능성이 낮습니다. 4. **데이터의 분포**: 상관계수는 선형 관계를 측정하므로, 두 변수 간의 관계가 비선형일 경우 상관계수가 낮게 나올 수 있습니다. 이런 경우에는 Spearman 상관계수를 고려할 수 있습니다. #### 상관관계 분석 방법: 파이썬 ###### 데이터 준비 - 이변량 데이터로 준비 - 예시 샘플: 제작비와 영화 매출액 ```python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from scipy.stats import pearsonr # Load data file_path = "/Users/jake/Documents/Python/Statitic/data/movie_data.xlsx" df = pd.read_excel(file_path) # Calculate basic descriptive statistics descriptive_stats = df.describe() # Print descriptive statistics print("Descriptive Statistics:") print(descriptive_stats) # Plot histograms plt.figure(figsize=(14, 6)) plt.subplot(1, 1, 1) sns.histplot(df['영화 제작비 (억)'], kde=True, bins=30, color='blue') plt.title('Distribution of Production Costs') plt.xlabel('Production Costs (Billion)') plt.ylabel('Frequency') plt.subplot(2, 1, 2) sns.histplot(df['영화 매출액 (억)'], kde=True, bins=30, color='green') plt.title('Distribution of Revenue') plt.xlabel('Revenue (Billion)') plt.ylabel('Frequency') plt.tight_layout() plt.show() # Plot boxplots plt.figure(figsize=(14, 6)) plt.subplot(1, 1, 1) sns.boxplot(y=df['영화 제작비 (억)'], color='blue') plt.title('Boxplot of Production Costs') plt.ylabel('Production Costs (Billion)') plt.subplot(2, 1, 2) sns.boxplot(y=df['영화 매출액 (억)'], color='green') plt.title('Boxplot of Revenue') plt.ylabel('Revenue (Billion)') plt.tight_layout() plt.show() # Calculate correlation correlation, p_value = pearsonr(df['영화 제작비 (억)'], df['영화 매출액 (억)']) # Print results print(f'Pearson Correlation Coefficient: {correlation}') print(f'p-value: {p_value}') # Plot scatterplot plt.figure(figsize=(10, 6)) sns.scatterplot(x='영화 제작비 (억)', y='영화 매출액 (억)', data=df) plt.title('Scatterplot of Production Costs vs. Revenue') plt.xlabel('Production Costs (Billion)') plt.ylabel('Revenue (Billion)') plt.grid(True) plt.show() ``` ```python import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from scipy.stats import pearsonr # 데이터 불러오기 file_path = '/Users/jake/Documents/Python/Statitic/data/movie_data.xlsx' df = pd.read_excel(file_path) # 1. Descriptive Statistics descriptive_stats = df.describe() print("Descriptive Statistics:") print(descriptive_stats) # 2. Plot Histograms plt.figure(figsize=(14, 6)) plt.subplot(1, 2, 1) sns.histplot(df['영화 제작비 (억)'], kde=True, bins=30, color='blue') plt.title('Distribution of Production Costs') plt.xlabel('Production Costs (Billion)') plt.ylabel('Frequency') plt.subplot(1, 2, 2) sns.histplot(df['영화 매출액 (억)'], kde=True, bins=30, color='green') plt.title('Distribution of Revenue') plt.xlabel('Revenue (Billion)') plt.ylabel('Frequency') plt.tight_layout() plt.show() # 3. Plot Boxplots plt.figure(figsize=(14, 6)) plt.subplot(1, 2, 1) sns.boxplot(y=df['영화 제작비 (억)'], color='blue') plt.title('Boxplot of Production Costs') plt.ylabel('Production Costs (Billion)') plt.subplot(1, 2, 2) sns.boxplot(y=df['영화 매출액 (억)'], color='green') plt.title('Boxplot of Revenue') plt.ylabel('Revenue (Billion)') plt.tight_layout() plt.show() # 4. Calculate Correlation correlation, p_value = pearsonr(df['영화 제작비 (억)'], df['영화 매출액 (억)']) print(f'Pearson Correlation Coefficient: {correlation}') print(f'p-value: {p_value}') # 5. Plot Scatterplot plt.figure(figsize=(10, 6)) sns.regplot(x='영화 제작비 (억)', y='영화 매출액 (억)', data=df, scatter_kws={'s' : 10}) plt.title('Scatterplot of Production Costs vs. Revenue') plt.xlabel('Production Costs (Billion)') plt.ylabel('Revenue (Billion)') plt.grid(True) plt.show() ``` 이걸 이렇게 정리한다고 해서 내가 다음에 또 할 수 있나 생각해보면.. 아니거든.. 저거 그대로 외워서 못해. 복붙해야 하는 거지..ㅎㅎ 그냥 그렇게 생각하자. 근데, 흐름은 알겠잖아? 저 상태로 돌리면 결과도 알 수 있고.. 그런데, 다른 곳에서는 이 데이터가 안 돌아갈 거야. 그게 문제인 거지. 그래서, 여기에 코드를 입력할 순 있어도 아나콘다에 계속 해야 한다. 데이터와 프로젝트 파일을 같이 묶어 두는 게 좋겠다. 그리고 지금 너무 졸려..ㅠㅠ