## 상관 관계
#### 사용하는 이유
- 두 변수 간의 관계를 파악하기 위해서 사용
- 이변량 데이터를 활용해야 함
#### 해석해야 하는 값
- 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()
```
이걸 이렇게 정리한다고 해서 내가 다음에 또 할 수 있나 생각해보면.. 아니거든.. 저거 그대로 외워서 못해. 복붙해야 하는 거지..ㅎㅎ
그냥 그렇게 생각하자. 근데, 흐름은 알겠잖아? 저 상태로 돌리면 결과도 알 수 있고.. 그런데, 다른 곳에서는 이 데이터가 안 돌아갈 거야. 그게 문제인 거지. 그래서, 여기에 코드를 입력할 순 있어도 아나콘다에 계속 해야 한다.
데이터와 프로젝트 파일을 같이 묶어 두는 게 좋겠다. 그리고 지금 너무 졸려..ㅠㅠ