programing

움직이는 평균 판다

oldcodes 2023. 5. 24. 22:21
반응형

움직이는 평균 판다

교환 시계열에 이동 평균 계산을 추가하고 싶습니다.

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

반응형