움직이는 평균 판다
교환 시계열에 이동 평균 계산을 추가하고 싶습니다.
Quandl의 원본 데이터
Exchange = Quandl.get("BUNDESBANK/BBEX3_D_SEK_USD_CA_AC_000",
authtoken="xxxxxxx")
# Value
# Date
# 1989-01-02 6.10500
# 1989-01-03 6.07500
# 1989-01-04 6.10750
# 1989-01-05 6.15250
# 1989-01-09 6.25500
# 1989-01-10 6.24250
# 1989-01-11 6.26250
# 1989-01-12 6.23250
# 1989-01-13 6.27750
# 1989-01-16 6.31250
# Calculating Moving Avarage
MovingAverage = pd.rolling_mean(Exchange,5)
# Value
# Date
# 1989-01-02 NaN
# 1989-01-03 NaN
# 1989-01-04 NaN
# 1989-01-05 NaN
# 1989-01-09 6.13900
# 1989-01-10 6.16650
# 1989-01-11 6.20400
# 1989-01-12 6.22900
# 1989-01-13 6.25400
# 1989-01-16 6.26550
계산된 이동 평균을 다음 오른쪽에 새 열로 추가하고 싶습니다.Value동일한 인덱스 사용(Date) 또한 가급적이면 계산된 이동 평균의 이름을 다음과 같이 변경하고 싶습니다.MA.
롤링 평균은 다음을 반환합니다.Series당신은 그것을 당신의 새로운 열로 추가하기만 하면 됩니다.DataFrame(MA) 아래에 설명된 바와 같이.
정보를 위해,rolling_mean이 기능은 판다의 최신 버전에서 더 이상 사용되지 않습니다.저는 제 예에서 새로운 방법을 사용했습니다. 아래 판다 설명서의 인용문을 참조하십시오.
경고 0.18.0 이전 버전,
pd.rolling_*,pd.expanding_*,그리고.pd.ewm*모듈 레벨 기능이 사용되지 않습니다.이러한 기능은 다음을 사용하여 대체됩니다.Rolling,Expanding그리고.EWM.개체 및 해당 메서드 호출.
df['MA'] = df.rolling(window=5).mean()
print(df)
# Value MA
# Date
# 1989-01-02 6.11 NaN
# 1989-01-03 6.08 NaN
# 1989-01-04 6.11 NaN
# 1989-01-05 6.15 NaN
# 1989-01-09 6.25 6.14
# 1989-01-10 6.24 6.17
# 1989-01-11 6.26 6.20
# 1989-01-12 6.23 6.23
# 1989-01-13 6.28 6.25
# 1989-01-16 6.31 6.27
이동 평균은 다음 코드를 사용하여 선형 차트에서 직접 계산하고 시각화할 수도 있습니다.
주가 데이터 사용 예제:
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import datetime
plt.style.use('ggplot')
# Input variables
start = datetime.datetime(2016, 1, 01)
end = datetime.datetime(2018, 3, 29)
stock = 'WFC'
# Extrating data
df = web.DataReader(stock,'morningstar', start, end)
df = df['Close']
print df
plt.plot(df['WFC'],label= 'Close')
plt.plot(df['WFC'].rolling(9).mean(),label= 'MA 9 days')
plt.plot(df['WFC'].rolling(21).mean(),label= 'MA 21 days')
plt.legend(loc='best')
plt.title('Wells Fargo\nClose and Moving Averages')
plt.show()
이 방법에 대한 튜토리얼: https://youtu.be/XWAPpyF62Vg
둘 이상의 이동 평균을 계산하는 경우:
for i in range(2,10):
df['MA{}'.format(i)] = df.rolling(window=i).mean()
그러면 모든 MA의 총 평균을 수행할 수 있습니다.
df[[f for f in list(df) if "MA" in f]].mean(axis=1)
판다의 이동 평균을 구하려면 cum_sum을 사용한 다음 카운트로 나눌 수 있습니다.
다음은 작업 예제입니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({'id': range(5),
'value': range(100,600,100)})
# some other similar statistics
df['cum_sum'] = df['value'].cumsum()
df['count'] = range(1,len(df['value'])+1)
df['mov_avg'] = df['cum_sum'] / df['count']
# other statistics
df['rolling_mean2'] = df['value'].rolling(window=2).mean()
print(df)
산출량
id value cum_sum count mov_avg rolling_mean2
0 0 100 100 1 100.0 NaN
1 1 200 300 2 150.0 150.0
2 2 300 600 3 200.0 250.0
3 3 400 1000 4 250.0 350.0
4 4 500 1500 5 300.0 450.0
언급URL : https://stackoverflow.com/questions/40060842/moving-average-pandas
'programing' 카테고리의 다른 글
| MVVM 매드니스: 명령 (0) | 2023.05.24 |
|---|---|
| NameError: 이름 'List'가 정의되지 않았습니다. (0) | 2023.05.24 |
| 제약 조건 변경을 애니메이션화하려면 어떻게 해야 합니까? (0) | 2023.05.24 |
| Angular 2 경로가 존재하지 않는 경우 404 또는 다른 경로로 리디렉션하는 방법 (0) | 2023.05.14 |
| 시스템에 사용자 필드가 없습니다.Mongos와 연결할 때 프로파일 수집 (0) | 2023.05.14 |