Chapter04 "데이터 요약하기"
Chapter 04-1의 주제는 '통계로 요약하기' 이다.
기술통계 구하기
- 기술통계(요약통계): 자료의 내용을 압축하여 설명하는 방법
- 시각화까지 아우르는 데이터 분석이 탐색적 데이터 분석
import pandas as pd
import gdown
# 03-2에서 만든 데이터 다운로드
gdown.download('https://bit.ly/3736JW1','ns_book6.csv', quiet = False)
ns_book6 = pd.read_csv('ns_book6.csv', low_memory = False)
ns_book6.head()
- describe() 메서드 : 수치형 열에 대한 요약 통계
# describe() 메서드
ns_book6.describe()
도서권수의 최소가 0이 나와서 확인해본다.
# 도서권수 최소가 0, 0권인 도서는 몇 권인지 확인
sum(ns_book6['도서권수']==0)
결과는 3206이다. 최소가 0인 것은 의미가 없다고 생각해서 제외한다.
# ns_book7 생성 : 도서권수가 0권인 것은 의미가 없다고 생각하여 제외함.
ns_book7 = ns_book6[ns_book6['도서권수']>0]
- percentitles 매개변수 : 사분위 값을 바
# percentiles 매개변수로 기존 1사분위 2사분위 3사분위 값을 바꿈
ns_book7.describe(percentiles = [0.3, 0.6, 0.9])
- include 매개변수: describe() 메서드에서 다른 데이터 타입의 열의 기술통계 보기
# describe() 메서드에서 다른 데이터 타입의 열의 기술통계 보기: include 매개변수
ns_book7.describe(include = 'object')
- 결과보는 방법
- count : 누락된 값을 제외한 데이터 개수
- unique : 고유한 값의 개수
- top : 가장 많이 등장하는 값
- freq : top 행에 등장하는 항목의 빈도수
평균 구하기
일반적으로는 반복문을 사용한다.
# 일반적인 평균: 반복문 사용
x = [10, 20, 30]
sum = 0
for i in range(3):
sum += x[i]
print("평균: ",sum / len(x))
결과는 평균: 20.0으로 나온다.
mean() 메서드
- 판다스에는 평균을 계산하는 mean() 제공
ns_book7['대출건수'].mean()
중앙값 구하기
median() 메서드
ns_book7['대출건수'].median()
# 결과
# 6.0
# 데이터의 개수가 짝수개일 경우: 가운데 두 개의 값의 평균
temp_df = pd.DataFrame([1,2,3,4])
temp_df.median()
# 결과
# 0 2.5
# dtype: float64
중복값 제거하고 중앙값 구하기
# 172p의 drop_duplicates()
ns_book7['대출건수'].drop_duplicates().median()
# 결과
# 183.0
아마 중복하기 전에는 작은 대출건수가 많을 것이다.
최솟값, 최댓값 구하기
- min(), max() 사용
# 한 셀에 넣기 위해 print 사용
# 최솟값
print(ns_book7['대출건수'].min())
# 최댓값
print(ns_book7['대출건수'].max())
# 결과
# 0
# 1765
분위수 구하기
- 분위수는 데이터를 순서대로 느어놧을 때 균등한 간격으로 나눈 것. 보통 사분위수는 네 구간으로 나누어 25%, 50%, 75% 제1사분위 제2사분위 제3사분위로 읽음
- quantile() 메서드
# quantile() 메서드
ns_book6['대출건수'].quantile(0.25)
ns_book7['대출건수'].quantile(0.25)
# list 가능
ns_book6['대출건수'].quantile([0.25, 0.5, 0.75])
# 결과
# 0.25 2.0
# 0.50 6.0
# 0.75 14.0
# Name: 대출건수, dtype: float64
# 시리즈 객체를 정의한 후 분위수 구하기
pd.Series([1,2,3,4,5]).quantile(0.9)
# 결과
# 4.6
같은 코드가 2개나 있는 것은 아마 교재에 ns_book6로 적혀있는 것이 이해가 안돼 다시 쓴 코드일 듯하다.
quantile() 의 interpolation 매개변수에서 중간 값 계산 방법을 정함.
위에서는 딱히 지정하지 않아서 기본값을 계산한다.
비례식으로 계산4가 해당 시리즈의 제3분위수이기 때문에 0.9는 (0.9-0.75)(5-4)/(1-0.75)
두 지점 사이에 놓인 특정 위치의 값을 구하는 방법을 보간이라고 부름
- midpoint는 분위수에 상관없이 두 수 사이의 중앙값
- nearest는 두 수 중 가까운 값을 설정
백분위 구하기
# 불리언 배열
borrow_10_flag = ns_book7['대출건수'] < 10
# True 1 False 0
borrow_10_flag.mean()
# 결과
# 0.6402712530190833 (약 0.65)
# 10 은 백분위 0.65 정도된다고 보면 된다.
ns_book7['대출건수'].quantile(0.65)
# 결과
# 10.0
분산 구하기
- var() 메서드
# var() 메서드
ns_book7['대출건수'].var()
# 결과
# 371.69563042906674
표준편차 구하기
표준편차는 분산의 제곱근이다.
- std() 메서드
# std() 메서드
ns_book6['대출건수'].std()
# 결과
# 19.241925726324574
최빈값 구하기
- mode() 메서드
ns_book7['도서명'].mode()
# 결과
# 0 승정원일기
# dtype: object
# 텍스트 뿐만 아니라 수치형에도 적용 가능
ns_book7['발행년도'].mode()
# 결과
# 0 2012.0
# dtype: float64
데이터프레임에서 기술통계 구하기
# mean은 수치형만 연산해 numeric_only = True를 해야함
ns_book7.mean(numeric_only = True)
# 결과
# 번호 202977.476649
# 발행년도 2008.460076
# 도서권수 1.145540
# 대출건수 11.593439
# dtype: float64
# 도서명부터 마지막 열까지의 최빈값
ns_book7.loc[:, '도서명':].mode()
# 저장
ns_book7.to_csv('ns_book7.csv',index=False)
실습코드
https://colab.research.google.com/drive/1Sn2WMwbjAznhadK7pXmO804z5bPTl2it?usp=sharing
'Data Analysis > 혼공학습단9기' 카테고리의 다른 글
혼자 공부하는 데이터 분석 with 파이썬: 5주차(Chapter 05-1) (0) | 2023.02.19 |
---|---|
혼자 공부하는 데이터 분석 with 파이썬: 4주차(Chapter 04-2) (0) | 2023.02.19 |
혼자 공부하는 데이터 분석 with 파이썬: 3주차(Chapter 03-2) (0) | 2023.01.26 |
혼자 공부하는 데이터 분석 with 파이썬: 3주차(Chapter 03-1) (0) | 2023.01.25 |
혼자 공부하는 데이터 분석 with 파이썬: 2주차(Chapter 02-2) (0) | 2023.01.15 |