반응형
파이썬 판매량 정규분포, scipy sigma¶
01 예시데이터 생성¶
In [1]:
# 패키지 불러오기
import random
import numpy as np
import pandas as pd
import scipy.stats
import matplotlib.pyplot as plt
In [2]:
# 평균 25 남짓 판매하는 티셔츠에 대한 10일간 판매량의 데이터를 만든다고 가정합니다.
# 컬럼 이름을 sales, 인덱스를 판매 기간으로 가지는 데이터 프레임을 생성 합니다.
df = pd.DataFrame({"sales" : [24, 25, 23, 25, 26, 23, 24, 25, 28, 23]})
df.index = df.index+1
df
Out[2]:
sales | |
---|---|
1 | 24 |
2 | 25 |
3 | 23 |
4 | 25 |
5 | 26 |
6 | 23 |
7 | 24 |
8 | 25 |
9 | 28 |
10 | 23 |
In [3]:
# 데이터 프레임의 그래프를 생성하여 판대 동향을 그림으로 그립니다.
df.plot(xlabel='date', ylabel='sales')
Out[3]:
<AxesSubplot:xlabel='date', ylabel='sales'>
In [4]:
# y 축을 정해서 보고 싶다면 ylim 메서드를 추가 합니다.
df.plot(xlabel='date', ylabel='sales')
plt.ylim([0,30])
Out[4]:
(0.0, 30.0)
정규분포생성 및 pdf 값 산출¶
In [5]:
# 판매량 평균(mean) 및 표준편차(str)를 산출합니다.
mean = np.mean(np.array(df.sales.tolist()))
std = np.std(np.array(df.sales.tolist()))
In [6]:
# 평균, 표준편차를 scipy 패키지에 적용하여 정규분포 객체 생성 합니다.
rv = scipy.stats.norm(loc=mean, scale=std)
In [7]:
# 새로들오오는 판매량 24 에 대한 pdf(probability density function) 값 생성합니다.
rv.pdf(24)
Out[7]:
0.2459729744620234
분석결과 시각화¶
In [8]:
# 막상 0.24 가 얼마나 높은 확률인지 직관적으로 확인 하기 어렵습니다.
# 정규분포 그래프를 그리고 판매량이 24일 때 pdf 위치를 빨간 점으로 표시합니다
# 일단 x 축은 15 에서 30.0 사이 값으로 지정하고, 두 값상 간극을 100으로 지정합니다.
# y 값은 x 에 대한 pdf 값으로 설정합니다.
# matplotlib에 scatter 메서드를 사용하여 원하는 위치에 빨간 점을 찍습니다.
x = np.linspace(15, 35, 100)
y = rv.pdf(x) # 정규분포 객체에 pdf 함수를 사용하면 x 값에 대한 pdf 를 산출 할 수 있다.
point = 24
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("pdf(x)")
plt.scatter(24, rv.pdf(point), c='#ff0000', s=80)
plt.show()