나랑 now

[혼공분석] 4주차_데이터 요약하기 본문

혼공학습단/혼공분석

[혼공분석] 4주차_데이터 요약하기

nowj8n 2024. 1. 23. 23:25
반응형
# 진도 기본 미션 선택 미션
1주차
(1/2 ~ 1/7)
Chapter 01 p. 81의 확인 문제 4번 풀고 인증하기 p. 71 ~ 73 남산 도서관 데이터를 코랩에서 데이터프레임으로 출력하고 화면 캡처하기
2주차
(1/8 ~ 1/14)
Chapter 02 p. 150의 확인 문제 1번 풀고 인증하기 p. 137 ~ 138 손코딩 실습으로 원하는 도서의 페이지 수를 추출하고 화면 캡처하기
3주차
(1/15 ~ 1/21)
Chapter 03 p. 182의 확인 문제 2번 풀고 인증하기 p. 219의 확인 문제 5번 풀고 인증하기
4주차
(1/22 ~ 1/28)
Chapter 04 p. 279의 확인 문제 5번 풀고 인증하기 Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기
5주차
(1/29 ~ 2/4)
Chapter 05 p. 314의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기  p. 316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기
6주차
(2/5 ~ 2/12)
Chapter 06 p. 344의 손코딩(맷플롯립의 컬러맵으로 산점도 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기 p. 356 ~ 359의 스택 영역 그래프를 그리는 과정을 정리하기

 

04-1 통계로 요약하기

기술 통계descriptive statistics, 요약 통계summary statistics

자료의 내용을 압축하여 설명하는 방법

정량적인 수치로 전체 데이터의 특징을 요약하거나 이해하기 쉬운 간단한 그래프 사용

대표적인 통계량에는 평균, 표준편차 등이 있음

탐색적 데이터 분석exploratory data analysis: 데이터 시각화를 아우르는 데이터 분석 방법

 

mean(): 평균값 구하기

df['기준이 되는 열의 키값'].mean()

 

median(): 중앙값 구하기

df['기준이 되는 열의 키값'].median()

"""
median() 메서드는 데이터 개수가 홀수일 경우 가운데 값을 반환하며,
데이터 개수가 짝수일 경우 가운데 두 개 값의 평균을 통해 중앙값을 결정함
"""

 

drop_duplicates(): 중복된 값을 가진 행 제거

df['기준이 되는 열의 키값'].drop_duplicates()

 

min(), max(): 데이터프레임에서 최솟값과 최댓값 구하기

df['기준이 되는 열의 키값'].min()
df['기준이 되는 열의 키값'].max()

 

quantile(): 분위수 구하기

분위수quantile은 데이터를 순서대로 늘어 놓았을 때 균등한 간격으로 나누는 기준점

이분위수의 경우 전체 데이터를 두 구간으로 나누기 때문에 중앙값에 해당하며

사분위수는 네 구간으로 나누어 각각 25%, 50%, 75%에 해당함

df['기준이 되는 열의 키값'].quantile(0.25)	# 하위 25% 출력
df['기준이 되는 열의 키값'].quantile()		# 하위 50% 출력, 기본값 = 0
df['기준이 되는 열의 키값'].quantile(0.75)	# 하위 75% 출력
df['기준이 되는 열의 키값'].quantile([0.25,0.5,0.75])	# 여러 개의 분위수로 구성된 리스트를 전달하면 각 분위수에 해당하는 값을 담은 시리즈 객체 반환
"""
quantile() 메서드는 매개변수 interpolation에서 중간값을 계산하는 보간 방법을 결정
기본값인 interpolation = 'linear'은 비례식을 세워 계산하게 됨
(1.0-0.75):(0.9-0.75) = (5-4):x
"""
df.Series([1,2,3,4,5]).quantile(0.9)	# 반환값: 4.6

'midpoint는 두 수 사이의 중앙값 반환'
df.Series([1,2,3,4,5]).quantile(0.9, interpolation='midpoint')	# 반환값: 4.5

'nearest는 두 수 중 더 가까운 값 반환'
df.Series([1,2,3,4,5]).quantile(0.9, interpolation='nearest')	# 반환값: 5

'lower는 더 작은 값 반환'
df.Series([1,2,3,4,5]).quantile(0.9, interpolation='lower')		# 반환값: 4

'higher는 더 큰 값 반환'
df.Series([1,2,3,4,5]).quantile(0.9, interpolation='higher')	# 반환값: 5

 

var(): 분산 구하기

"""
분산은 평균으로부터 데이터가 얼마나 퍼져있는지를 나타내며
데이터가 모여있다면 분산이 작고 넓게 퍼져있다면 분산이 큼
데이터가 평균에서 얼마나 퍼져 있는지를 나타내는 값이기 때문에
결과값만 보고 값이 큰지 작은지 판단하기 어려움
"""

df['기준이 되는 열의 키값'].var()

 

std(): 표준 편차 구하기

"""
표준편차는 '평균을 중심으로 데이터가 대략 얼마만큼 떨어져 분포하는지'를 표현하는 값
"""

df['기준이 되는 열의 키값'].std()

 

mode(): 최빈값 구하기

df['기준이 되는 열의 키값'].mode()

 

기술통계에 해당하는 평균, 중앙값, 최댓값, 최솟값, 분위수, 분산, 표준편차 등은 수치형 열만 연산할 수 있으므로

시간 복잡도 및 에러 방지를 위해 numeric_only 매개변수를 True로 지정해야 함

 

04-2 분포 요약하기

맷플롯립matplotlib 패키지를 이용하여 그래프 그리기

import matplotlib.pyplot as plt

 

scatter(): 산점도 그리기

plt.scatter('x축 좌표 배열', 'y축 좌표 배열')

plt.scatter('x축 좌표 배열', 'y축 좌표 배열', alpha=)	# alpha는 0~1 사이의 값으로, 1에 가까울수록 불투명하게 그려짐

산점도는 2차원 좌표에 점으로 뿌려서 표현하기 때문에 데이터 분포를 한 눈에 볼 수 있는 장점이 있으나,

2차원 또는 3차원 산점도만 가능하기 때문에 한 번에 표현할 수 있는 특성 개수에 한계가 있음

 

hist(): 히스토그램 그리기

plt.hist('1차원 배열')
plt.show()

plt.hist('1차원 배열', bins=n)	# bins 매개변수는 데이터를 몇 개의 구간으로 나눌 것인지를 설정
plt.show()

plt.hist('1차원 배열')
#특정 구간의 도수가 너무 커서 동일한 스케일로는 다른 구간의 도수가 표시되지 않는다면 구간을 조정해야 함.
plt.yscale('log')			# yscale() 함수는 축을 로그스케일로 변경
plt.show()

 

boxplot(): 상자 수염 그림 그리기

상자 수염 그림 그리는 방법

  1. 사분위 수 계산. 25%와 75% 지점을 밑면과 윗면으로 하는 직사각형을 그린다.
    제 1사분위수와 제3사분위수 사이의 거리를 IQR(interquartile range)라고 함
  2. 중간값, 50%에 해당하는 지점에 수평선을 긋는다
  3. 사각형의 밑면과 윗면에서 사각형의 높이의 1.5배만큼 떨어진 거리 안에서 가장 멀리 있는 샘플까지 수직선을 긋는다
  4. 수직선 밖에서 최댓값과 최솟값까지 데이터를 점으로 표시. 해당 영역의 데이터를 이상치outlier라고 함
plt.boxplot(한 개 이상의 데이터 프레임)
plt.show()

# 기본적으로 IQR의 1.5배가 수염의 길이
# whis 매개변수에서 조정 가능
plt.boxplot(한 개 이상의 데이터 프레임, whis=n)	# IQR의 n배가 수염의 길이가 되도록 설정
plt.show()

 


기본 미션

p. 279의 확인 문제 5번 풀고 인증하기
ns_book7 남산도서관 대출 데이터에서 1980년~2022년 사이에 발행된 도서를 선택하여 다음과 같은 '발행년도' 열의 히스토그램을 그려 보세요.

 

"""
정답
"""

# 조건에 맞는 발행년도에 해당하는 데이터 프레임 생성
selected_rows = ns_book7[ns_book7['발행년도'].ge(1980) & ns_book7['발행년도'].le(2022)]
# 만들어진 데이터프레임에서 '발행년도' 열만 선택
plt.hist(selected_rows['발행년도']
plt.show()

 

선택 미션

Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기

풀이

 

평균: 값들의 총합/값들의 개수

Series.mean() or np.mean()

 

중앙값: 크기 순으로 늘어 놓은 데이터들의 가운데에 위치한 값

홀수일 경우 가운데에 위치한 값이 되며, 짝수일 경우 중간 두 데이터의 평균으로 계산

Series.median() or np.median()

 

최솟값: 데이터의 집합에서 가장 작은 값

Series.min() or np.min()

최댓값: 데이터의 집합에서 가장 큰 값

Series.max() or np.max()

 

분위수: 데이터를 순서대로 늘어 놓았을 때 균등한 가격으로 나누는 기준점

Series.quantile() or np.quantile() or np.percentile()

 

분산: 데이터가 평균에서 얼마나 퍼져있는지를 나타내는 통계량

{(값-평균)^2}/샘플 개수

Series.var() or np.var()

 

표준편차: 분산에 제곱근을 취한 것

Series.std() or np.std()

 

최빈값: 데이터에서 가장 많이 등장하는 값

Series.mode()

반응형