움직이는 평균 판다
교환 시계열에 이동 평균 계산을 추가하고 싶습니다.
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 |