안녕하세요. 언제나 휴일에 언휴예요.
이번 강의는 pandas에서 제공하는 기초 통계 함수들을 사용하는 실습입니다.
== 다루는 내용 Series로 기초 통계 함수 사용하기 DataFrame으로 기초 통계 함수 사용하기 == 통계 함수 개수: count 합계: sum 평균: mean 분산: var 표준편차: std 중간값: median 최솟값: min 최댓값: max 4분위값: quantile 누적 합계: cumsum 누적 곱: cumprod 통합: describe
Series와 DataFrame을 사용하여 기초 통계 함수들을 사용해 봅시다.
Series로 기초 통계 함수 사용하기
이번 실습에서 사용할 데이터는 월 별 판매 개수를 예를 들게요.
import pandas as pd sales =[12,23,34,12,12,23,12,45,567,89,12,34] months =[] for m in range(1,13): months.append(m) ps = pd.Series(sales,index=months) print(ps)
현재 Series를 출력한 결과는 다음과 같습니다.
1 12 2 23 3 34 4 12 5 12 6 23 7 12 8 45 9 567 10 89 11 12 12 34 dtype: int6
여기에서 다룰 함수는 개수, 합계, 평균, 분산, 표준편차, 중간 값, 최솟값, 최댓값, 사분위 값입니다.
별다른 설명없이 Look & Feel로 이해할 수 있어요.
#판다스를 이용한 기초 통계 함수들 import pandas as pd sales =[12,23,34,12,12,23,12,45,567,89,12,34] months =[] for m in range(1,13): months.append(m) ps = pd.Series(sales,index=months) print("개수:",ps.count()) print("합계:",ps.sum()) print("평균:",ps.mean()) print("분산:",ps.var()) print("표준편차:",ps.std()) print("중간값:",ps.median()) print("최솟값:",ps.min()) print("최댓값:",ps.max()) print("10%:",ps.quantile(0.1)) print("50%:",ps.quantile(0.5)) print("70%:",ps.quantile(0.7))
실행 결과는 다음과 같습니다.
개수: 12 합계: 875 평균: 72.91666666666667 분산: 24702.08333333333 표준편차: 157.16896428154425 중간값: 23.0 최솟값: 12 최댓값: 567 10%: 12.0 50%: 23.0 70%: 34.0
평균과 표준편차 값을 확인해 보세요.
표준편차가 평균보다 더 크죠. 이러한 데이터는 평균보다 월등히 큰 값이 존재할 때 발생합니다.
평균은 데이터 중에 참 값이 있다는 가정에서 만들어진 대푯값입니다.
하지만 지금처럼 표준편차가 너무 크면 평균은 참 값이 아닌 몽니 값일 수 있어요.
월 판매 실적으로 가지고 갈 때마다 왜 평균보다 못하냐고 질책만 받게 하거든요.
소위 상위 1%로 나머지 99%를 능가하는 현상에서 나오는 것이죠.
이럴 때는 중간 값을 제시하고 이를 통해 데이터를 분석할 필요가 있어요.
이처럼 데이터 분석은 python이나 프로그래밍 언어를 활용하는 능력도 필요하지만 통계학적 사고가 더 중요할 수 있어요.
틈틈히 통계학에 관해 학습하는 것도 데이터 분석의 질을 높이는 데 큰 도움을 줄 거예요.
잠시 얘기가 python이 아닌 데이터 분석으로 넘어갔었네요.
다시 강의로 돌아갈게요.
전체 통계 정보를 확인할 때는 describe 메서드를 이용하세요.
print(ps.describe())
실행 결과는 다음과 같습니다.
count 12.000000 mean 72.916667 std 157.168964 min 12.000000 25% 12.000000 50% 23.000000 75% 36.750000 max 567.000000 dtype: float64
DataFrame으로 기초 통계 함수 사용하기
pandas의 DataFrame도 마찬가지로 같은 이름의 메서드를 제공하고 있습니다.
3년 동안 월 별 판매 데이터로 사용해 봅시다.
#판다스를 이용한 기초 통계 함수들 import pandas as pd sales1 =[12,23,34,12,12,23,12,45,567,89,12,34] sales2 =[12,23,34,15,12,23,12,25,17,19,12,34] sales3 =[12,23,34,18,12,43,12,45,37,29,22,34] years =[2017,2018,2019] months =[] for m in range(1,13): months.append(m) pd = pd.DataFrame([sales1,sales2,sales3],index=years,columns=months) print(pd)
현재 생성한 DataFrame은 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 2017 12 23 34 12 12 23 12 45 567 89 12 34 2018 12 23 34 15 12 23 12 25 17 19 12 34 2019 12 23 34 18 12 43 12 45 37 29 22 34
기초 통계 함수는 Series와 같습니다.
기본적으로 column 별로 통계를 제공합니다.
row별로 통계를 내고자 한다면 axis=1을 입력 인자로 전달하세요.
다음은 월 별 합계와 년도 별 합계를 계산한 예제 코드입니다.
#판다스를 이용한 기초 통계 함수들 import pandas as pd sales1 =[12,23,34,12,12,23,12,45,567,89,12,34] sales2 =[12,23,34,15,12,23,12,25,17,19,12,34] sales3 =[12,23,34,18,12,43,12,45,37,29,22,34] years =[2017,2018,2019] months =[] for m in range(1,13): months.append(m) pd = pd.DataFrame([sales1,sales2,sales3],index=years,columns=months) print(pd.sum()) print(pd.sum(axis=1))
실행 결과는 다음과 같습니다.
1 36 2 69 3 102 4 45 5 36 6 89 7 36 8 115 9 621 10 137 11 46 12 102 dtype: int64 2017 875 2018 238 2019 321 dtype: int64
3년 간 전체 합계를 구하는 것은 python의 sum 함수를 이용하면 쉽게 해결할 수 있어요.
print(sum(pd.sum()))
실행 결과는 다음처럼 3년 동안 판매한 전체 개수가 나옵니다.
1434
다른 통계 함수도 Series와 마찬가지입니다.
column별로 통계가 기본이고 입력 인자로 axis=1를 전달하여 row별 통계를 계산하는 것은 기억하세요.
#판다스를 이용한 기초 통계 함수들 import pandas as pd sales1 =[12,23,34,12,12,23,12,45,567,89,12,34] sales2 =[12,23,34,15,12,23,12,25,17,19,12,34] sales3 =[12,23,34,18,12,43,12,45,37,29,22,34] years =[2017,2018,2019] months =[] for m in range(1,13): months.append(m) pd = pd.DataFrame([sales1,sales2,sales3],index=years,columns=months) print(pd) print(pd.sum()) print(pd.sum(axis=1)) print(sum(pd.sum())) print(pd.mean()) print(pd.mean(axis=1)) print(pd.describe())
실행 결과
1 2 3 4 5 6 7 8 9 10 11 12 2017 12 23 34 12 12 23 12 45 567 89 12 34 2018 12 23 34 15 12 23 12 25 17 19 12 34 2019 12 23 34 18 12 43 12 45 37 29 22 34 1 36 2 69 3 102 4 45 5 36 6 89 7 36 8 115 9 621 10 137 11 46 12 102 dtype: int64 2017 875 2018 238 2019 321 dtype: int64 1434 1 12.000000 2 23.000000 3 34.000000 4 15.000000 5 12.000000 6 29.666667 7 12.000000 8 38.333333 9 207.000000 10 45.666667 11 15.333333 12 34.000000 dtype: float64 2017 72.916667 2018 19.833333 2019 26.750000 dtype: float64 1 2 3 4 ... 9 10 11 12 count 3.0 3.0 3.0 3.0 ... 3.000000 3.000000 3.000000 3.0 mean 12.0 23.0 34.0 15.0 ... 207.000000 45.666667 15.333333 34.0 std 0.0 0.0 0.0 3.0 ... 311.929479 37.859389 5.773503 0.0 min 12.0 23.0 34.0 12.0 ... 17.000000 19.000000 12.000000 34.0 25% 12.0 23.0 34.0 13.5 ... 27.000000 24.000000 12.000000 34.0 50% 12.0 23.0 34.0 15.0 ... 37.000000 29.000000 12.000000 34.0 75% 12.0 23.0 34.0 16.5 ... 302.000000 59.000000 17.000000 34.0 max 12.0 23.0 34.0 18.0 ... 567.000000 89.000000 22.000000 34.0 [8 rows x 12 columns] Process finished with exit code 0