import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
✳️ 위치추정
- 데이터의 중심을 확인하는 방법
- 평균
- 중앙값
data = [85, 90, 78, 92, 88, 76, 95, 89, 84, 91]
# 평균 구하기
mean = np.mean(data)
# 중앙값 구하기
median = np.median(data)
print(f'평균: {mean}, 중앙값: {median}')
✳️ 변이추정
- 데이터들이 서로 얼마나 다른지 확인하는 방법
- 분산
- 표준편차
- 범위
data = [85, 90, 78, 92, 88, 76, 95, 89, 84, 91]
# 분산 구하기
variance = np.var(data)
# 표준편차 구하기
std = np.std(data)
# 범위 구하기
data_range = np.max(data) - np.min(data)
print(f'분산:{variance}, 표준편차: {std}, 범위: {data_range}')
⭐ 범위 (Range)
- 데이터셋에서 가장 큰 값과 가장 작은 값의 차이를 나타내는 간단한 분포의 측도
- 범위를 통해 데이터가 어느정도의 변동성을 가지는지 쉽게 파악 가능
✳️ 데이터 분포 탐색
- 데이터 값들이 어떻게 이루어져 있는지 확인하는 방법
- histogram & box plot이 대표적
data = [85, 90, 78, 92, 88, 76, 95, 89, 84, 91]
# 히스토그램 그리기
plt.hist(data, bins=5, color='darkseagreen')
plt.title('histogram')
plt.show()
# 박스플랏 그리기
plt.boxplot(data)
plt.title('boxplot')
plt.show()
✳️ 이진 데이터와 범주 데이터 탐색
- 데이터들이 서로 얼마나 다른지 확인하는 방법
- 빈값을 주로 사용
- 파이 그림 & 막대 그래프 => 이진 데이터 및 범주 데이터 분포 표현에 대표적
satisfaction = ['satisfaction', 'satisfaction', 'dissatisfaction',
'satisfaction', 'dissatisfaction', 'satisfaction', 'satisfaction',
'dissatisfaction', 'satisfaction', 'dissatisfaction']
satisfaction_counts = pd.Series(satisfaction).value_counts()
satisfaction_counts.plot(kind='bar', color='darkseagreen')
plt.title('satisfaction distribution')
plt.show()
✳️ 상관관계
- 데이터들 끼리 서로 관련이 있는지 확인하는 방법
- 두 변수 간의 관계를 측정하는 방법
- 상관계수를 계산하여 -1이나 1에 가까워지면 강력한 상관관계
- 0.5, 0.5는 중간정도
- 0에 가까울 수록 관계 없음
study_hours = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
exam_scores = [95, 90, 85, 80, 75, 70, 65, 60, 55, 50]
correlation = np.corrcoef(study_hours, exam_scores)
correlation
# 공부 시간과 시험점수의 상관관계는 초록색 원에 해당, 인덱스로 지정해서 값을 뽑아낼 수 있다.
correlation = np.corrcoef(study_hours, exam_scores)[0, 1]
correlation
# 최종 코드
study_hours = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
exam_scores = [95, 90, 85, 80, 75, 70, 65, 60, 55, 50]
correlation = np.corrcoef(study_hours, exam_scores)[0, 1]
print(f"공부 시간과 시험 점수 간의 상관계수: {correlation}")
plt.scatter(study_hours, exam_scores, color='darkseagreen')
plt.show()
⭐ 인과관계와 상관관계
- 인과관계 != 상관관계
- 상관관계는 두 변수 간의 관계이고 인과관계는 한 변수가 다른 변수에 미치는 영향
- 인과관계는 원인과 결과가 분명해야 함!
✳️ 두 개 이상의 변수 탐색
- 여러 데이터들끼리 서로 관련이 있는지 확인
- 다변량 분석은 여러 변수 간의 관계를 분석하는 방법
data = {'TV': [230.1, 44.5, 17.2, 151.5, 180.8],
'Radio': [37.8, 39.3, 45.9, 41.3, 10.8],
'Newspaper': [69.2, 45.1, 69.3, 58.5, 58.4],
'Sales': [22.1, 10.4, 9.3, 18.5, 12.9]}
df = pd.DataFrame(data)
sns.pairplot(df, corner=True)
plt.show()
df.corr()
# 히트맵으로 표현하기
sns.heatmap(df.corr(), cmap='BuGn')
💟 연습문제
data = [78, 82, 85, 88, 90, 92, 94, 96, 98, 100]
# 평균 구하기
mean = np.mean(data)
print(f'평균: {mean}')
# 평균: 90.3
# 중앙값 구하기
median = np.median(data)
print(f'중앙값: {median}') # 데이터의 개수가 짝수인 경우, 중간에 위치한 두 값의 평균
# 중앙값: 91.0
# 범위 구하기
range = max(data) - min(data)
print(f'범위: {range}')
# 범위: 22
math = [78, 82, 85, 88, 90, 92, 94, 96, 98, 100]
english = [70, 75, 80, 85, 85, 90, 90, 95, 95, 100]
# 상관관계 구하기
correlation = np.corrcoef(math, english)[0, 1]
print(f"공부 시간과 시험 점수 간의 상관계수: {correlation}")
# 공부 시간과 시험 점수 간의 상관계수: 0.9925684238990637
plt.scatter(math, english, color='darkseagreen')
plt.show()
'📒 Today I Learn > 📈 Statistics' 카테고리의 다른 글
[통계학 기초] 유의성 검정 (0) | 2024.08.06 |
---|---|
[통계학 기초] 데이터의 분포 실습 (0) | 2024.08.05 |
[통계학 기초] 데이터의 분포 (0) | 2024.08.05 |
[통계학 기초] 기술 통계와 추론 통계 (0) | 2024.08.02 |
[통계] 산포도 (Dispersion) (0) | 2024.07.11 |