04-1 통계로 요약하기
기술통계(요약 통계): 자료의 내용을 압축하여 설명하는 방법
탐색적 데이터 분석: 데이터 시각화를 아우르는 이러한 데이터 분석 방법
ns_book6.describe()
ns_book7.describe(percentiles=[0.3, 0.6, 0.9])
ns_book7.describe(include='object')
describe() 메서드: 데이터프레임에서 기본적인 몇 가지 기술통계를 자동으로 추출
percentiles 매개변수: 원하는 위치의 값을 지정하면 보여줌
include 매개변수: 수치가 아닌 다른 데이터 타입의 열의 기술통계를 보여줌
추가 숙제(선택): Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기
ns_book7['대출건수'].mean()
ns_book7['대출건수'].median()
ns_book7['대출건수'].min()
ns_book7['대출건수'].max()
ns_book7['대출건수'].quantile([0.25, 0.5, 0.75])
ns_book7['대출건수'].var()
ns_book7['대출건수'].std()
ns_book7['도서명'].mode()
평균: 숫자 값을 모두 더해 개수로 나눈 것, mean() 메서드
중앙값: 전체 데이터를 순서대로 늘어 놓았을 때 중앙에 위치한 값.
전체 데이터 개수가 짝수이면 가운데 두 개의 값을 평균하여 중앙값 결정, median() 메서드
최솟값: 최소인 값, min() 메서드
최댓값: 최대인 값, max() 메서드
분위수: 데이터를 순서대로 늘어 놓았을 때 이를 균등한 간격으로 나누는 기준점.
사분위수의 경우 25%, 50%, 75%이며, 25%에 해당하는 값을 제1사분위수, 중앙값을 제2사분위수, 75%에 해당하 는 값을 제3사분위수라고 부른다. quantile() 메서드
분산: 평균으로부터 데이터가 얼마나 퍼져있는지를 나타내는 통계량, var() 메서드
표준편차: 분산에 제곱근을 한 것
최빈값: 데이터에서 가장 많이 등장하는 값, mode() 메서드
ns_book7.mean(numeric_only=True)
데이터프레임에서 기술통계를 구할 때 수치형 열만 연산할 수 있으므로 numeric_only=True로 지정
넘파이의 기술통계 함수
import numpy as np np.mean(ns_book7['대출건수']) np.average(ns_book7['대출건수'], weights=1/ns_book7['도서권수']) np.median(ns_book7['대출건수']) np.min(ns_book7['대출건수']) np.max(ns_book7['대출건수']) np.quantile(ns_book7['대출건수'], [0.25, 0.5, 0.75]) np.std(ns_book7['대출건수']) values, counts = np.unique(ns_book7['도서명'], return_counts=True) max_idx = np.argmax(counts) values[max_idx]
average() 함수의 weights 매개변수: 가중치를 제공하면 가중 평균을 계산
가중 평균: 평균을 구할 때 각 값의 중요도에 다라 가중치를 부여하여 계산하는 평균값
최빈값 함수를 제공하지 않음 → unique() 함수를 사용
unique() 함수: 배열에서 고유한 값을 찾아줌
return_counts 매개변수: True로 지정하면 고유한 값의 등장 횟수도 반환
판다스와 넘파이의 분산
판다스: 분산을 계산할 때 n이 아니라 n-1을 분모로 사용
표본집단: 전체 데이터 중에서 수집한 일부 데이터
모집단: 전체 데이터
모집단을 구할 수 없거나 구하기 어려운 경우 표본집단을 사용해서 모집단의 특징을 추정
넘파이: n을 분모로 사용
ddof 매개변수: 자유도 차감값을 지정할 수 있다.
판다스 var() 메서드의 ddof 기본값:1
넘파이 var() 함수의 ddof 기본값: 0
04-2 분포 요약하기
import matplotlib.pyplot as plt
맷플롯립: 파이썬에서 그래프를 그리는 데 사용하는 대표적인 패키지
plt.scatter(ns_book7['도서권수'], ns_book7['대출건수'], alpha=0.1)
plt.show()
산점도: 두 변수 혹은 두 가지 특성값을 직교 좌표계에 점으로 나타내는 그래프, 한 번에 표현할 수 있는 특성 개수에 한계
alpha 매개변수: 투명도 지정, 중첩된 데이터 포인트를 가늠하기 좋음
양의 상관관계: x축이 증가함에 따라 y축이 증가
음의 상관관계: x축이 증가함에 따라 y축이 감소
plt.hist([0,3,5,6,7,7,9,13], bins=5)
plt.show()
히스토그램: 수치형 특성의 값을 일정한 구간(계급)으로 나누어 구간 안에 포함된 데이터 개수를 막대 그래프로 그린 것
도수: 구간 안에 속한 데이터 개수
도수분포표: 히스토그램에 나오는 구간과 도수를 표로 요약한 것
import numpy as np
np.histogram_bin_edges([0,3,5,6,7,7,9,13], bins=5)
histogram_bin_edges() 함수: 히스토그램의 구간을 정확하게 확인
np.random.seed(42)
random_samples = np.random.randn(100)
plt.hist(random_samples)
plt.show()
seed() 함수: 유사난수를 생성, 항상 같은 난수를 추출할 수 있다.
randn() 함수: 표준정규분포를 따르는 랜덤한 실수를 생성
plt.boxplot(ns_book7[['대출건수', '도서권수']]
plt.yscale('log')
plt.show()
상자 수염 그림: 최솟값, 세 개의 사분위수, 최댓값 다섯 개의 숫자를 사용해 데이터를 요약하는 그래프
로그 스케일: 큰 값일수록 도수 크기가 많이 줄어들어 작은 값과의 차이가 줄어든다.
IQR: 제 1사분위와 제 3사분위수 사이의 거리
plt.boxplot(ns_book7[['대출건수', '도서권수']], vert=False)
plt.xscale('log')
plt.show()
vert 매개변수: 상자 수염 그림을 수평으로, False로 지정
plt.boxplot(ns_book7[['대출건수', '도서권수']], whis=10)
plt.boxplot(ns_book7[['대출건수', '도서권수']], whis=(0,100))
whis 매개변수: 수염의 기본 길이는 IQR의 1.5배, 수염 길이 조정, 백분율로도 지정 가능
판다스의 그래프 함수
- 판다스 데이터프레임 객체의 plot 속성 사용
- 맷플롯립과 달리 데이터프레임으로 그래프를 그릴 때, x축과 y축에 해당하는 열 이름만 지정
산점도
ns_book7.plot.scatter('도서권수', '대출건수', alpha=0.1)
plt.show()
히스토그램
ns_book7['도서명'].apply(len).plot.hist(bins=100)
plt.show()
상자 수염
ns_book7[['대출건수', '도서권수']].boxplot()
plt.yscale('log')
plt.show()
기본 숙제(필수): p. 279의 확인 문제 5번 풀고 인증하기
selected_rows = (1980 <= ns_book7['발행년도']) & (ns_book7['발행년도'] <=2022)
plt.hist(ns_book7.loc[selected_rows, '발행년도'])
plt.show()
정답 코드는 Boolean indexing을 사용하여 조건을 만족하는 행의 발행년도 데이터로 히스토그램을 생성하고
내가 작성한 코드는 조건을 만족하는 DataFrame을 생성한 후, 그 DataFrame의 발행년도 열을 히스토그램으로 생성한다.
'데이터 분석 > 혼자 공부하는 데이터 분석 with 파이썬' 카테고리의 다른 글
[혼공분석] 6주차_복잡한 데이터 표현하기 (0) | 2025.02.23 |
---|---|
[혼공분석] 5주차_데이터 시각화하기 (0) | 2025.02.15 |
[혼공분석] 3주차_데이터 정제하기 (0) | 2025.01.20 |
[혼공분석] 2주차_데이터 수집하기 (0) | 2025.01.14 |
[혼공분석] 1주차_데이터 분석을 시작하며 (0) | 2025.01.07 |