- 단변량 분석 요약

1. 숫자형 변수
1) 수치화
a. 대푯값 나타내기
- 평균
df.mean()
→ 평균을 대푯값으로 사용할 때에는 평균의 함정을 조심해야 한다.

- 중위수(중앙값)
df.median()
- 최빈값
df.mode()
- 4분위수
→ 1사분위수
df['column'].describe()['25%']
→ 2사분위수df['column'].describe()['50%']
→ 3사분위수df['column'].describe()['75%']
b. 기초통계량 계산하기
df[’column’].describe()
→ 시리즈로 기초통계량 제공
df[[’column’]].describe()
→ 리스트 형태로 불러오게 되면 데이터 프레임으로 기초통계량 제공
.T
를 사용하게 되면 전치된 결과가 불러져온다
df.describe()
→ 데이터프레임에 포함된 숫자타입 변수들 기초통계량 조회
df.describe(include=’all’)
→ 데이터프레임 전체 변수들의 기초통계량 조회
2) 시각화
a. 히스토그램
- 히스토그램 기본(plt 함수)
plt.figure(figsize=(5,3))
plt.hist(titanic.Fare, bins = 5, edgecolor = 'gray')
plt.xlabel('Fare')
plt.ylabel('Frequency')
plt.show()
- 구간 갯수 조정은 bins의 숫자를 조정하면 된다.
- 구간의 갯수를 조정하면서 큰 흐름도 보고, 세세한 데이터의 흐름도 봐야한다.

- seaborn 함수 사용
plt.figure(figsize=(5,3))
sns.histplot(x= 'Fare', data = titanic, bins = 20)
plt.show()
- 만약
hist1 = plt.hist(titanic.Fare,
bins
= 5,
edgecolor
= 'gray')
이렇게 저장하게 된다면hist1[0]에는 빈도수 값이, hist1[1]에는 구간 값이
저장되게 된다!
b. 밀도함수 그래프 (kde plot)
- 히스토그램의 단점 → 구간의 너비를 어떻게 잡는지에 따라 전혀 다른 모양이 될 수가 있다.
- 밀도함수 그래프 → 막대의 너비를 가정하지 않고, 모든 점에서 데이터의 밀도를 추정하는 커널 밀도 추정 방식을 사용하여 히스토그램의 단점을 해결. → 밀도함수 그래프 아래의 면적은 1
- 밀도 추정 : 측정된 데이터로부터 전체 데이터 분포의 특성을 추정
# sns.kdeplot(x='Fare', data = titanic)
sns.kdeplot(titanic['Fare'])
plt.show()
sns.histplot(x='Age', data=titanic, kde=True)
plt.show()

c. boxplot
- boxplot의 주의 사항!! : 값에 NaN이 있으면 그래프가 그려지지 않습니다 → 즉, 그래프를 그리기 전에 결측치를 처리해줘야함 → 하지만, seaborn 패키지 함수들은 NaN을 알아서 빼준다.
- IQR = Q3 - Q1
- Lower fence = [min] vs [Q1 - 1.5 * IQR] 중 작은 값 Upper fence = [max] vs [Q3 + 1.5 * IQR] 중 큰 값 → Q. 왜 1.5 * IQR로 비교해서 펜스를 추정하는가? → A. 정규분포에서 [3 * 표준편차]에서 벗어난 값은 이상치로 추정하는데, [1.5 * IQR]의 값이 그 값과 비슷하기 때문이다.
- fence 바깥의 값들을 이상치로 추정
# titanic['Age']에는 NaN이 있습니다. 이를 제외한 데이터
temp = titanic.loc[titanic['Age'].notnull()]
plt.boxplot(temp['Age']) -> 세로로 길게 그려짐
plt.grid()
plt.show()
# seaborn 패키지 함수들은 NaN을 알아서 빼줘서 전처리가 필요없다!
sns.boxplot(x = titanic['Age'])
plt.grid()
plt.show()
d. 시계열 데이터 시각화
- 시계열 데이터는 보통 시간(x)축에 맞게 값들을 라인차트로 표현한다.
air['Date'] = pd.to_datetime(air['Date']) # 날짜 형식으로 변환
plt.plot('Date', 'Ozone', 'g-', data = air, label = 'Ozone')
plt.plot('Date', 'Temp', 'r-', data = air, label = 'Temp')
plt.xlabel('Date')
plt.legend()

2. 범주형 변수
1) 수치화
a. 범주별 빈도수
- 리스트.count(’값’) : 해당 값이 몇 개 있는지 count
df.value_counts()
: 범주의 개수와 상관없이 범주 별 개수를 count
df['column'].value_counts()
: 원하는 열의 범주 별 개수를 count
b. 범주별 비율
df.value_counts() / df.shape[0]
2) 시각화
a. bar chart
- seaborn의 countplot을 이용해서 그리면 간단하다! → plt.bar()는 집계한 결과를 가지고 그래프를 그려야 하기 때문에 seaborn 이용이 시간적 측면에서 유리.
sns.countplot(x='Pclass', data=titanic)
plt.grid()
plt.show()
b. pie chart
- 범주별 비율 비교를 할 때, 파이차트를 사용한다. → 단, 먼저 집계가 필요하다.
plt.pie(값, labels=범주이름, autopct=형식)
autopct = ‘%.2f%’ : 그래프에 표시할 값 비율 값에 대한 설정 → 소수점 두자리 퍼센트로 표기한다는 의미.
- 각도와 방향, 간격 조정, 그림자 넣기 → startangle = 90 : 90도부터 시작 → counterclock = False : 시계 방향으로 → explode = [0.05, 0.05, 0.05] : 중심으로부터 얼만큼 띄울지 → shadow = True : 그림자 추가
# 차트를 그리기 위한 집계
temp = titanic['Pclass'].value_counts()
# 차트 그리기
plt.pie(temp.values, labels = temp.index, autopct = '%.2f%%',
startangle=90, counterclock=False,
explode = [0.05, 0.05, 0.05], shadow=True)
plt.show()