全局統(tǒng)計(global statistics)
例如我們平常接觸到的平均值释液,中位數(shù)绍撞,標準差等等
在獲得數(shù)據(jù)的基礎(chǔ)上搬男,我們才能進行數(shù)據(jù)的統(tǒng)計
import pandas as pd
def get_data(symbols,dates):
df = pd.DataFrame(index = dates)
if 'SPY' not in symbols: #為了防止失去參考
symbols.insert(0,'SPY')
for symbol in symbols:
#1讀取數(shù)據(jù)
df_temp = pd.read_csv("data/{}.csv".format(symbol),index_col = 'Date',
parse_dates=True,usecols=['Date','Adj Close'],
na_values = ['nan'])
#2改名字
df_temp = df_temp.rename(columns={'Adj Close':symbol})
#3吧數(shù)據(jù)合并到一個表上
df=df.join(df_temp,how = 'inner')
return df
def test_run():
# Define a date range
dates = pd.date_range('2010-01-01', '2012-12-31')
# Choose stock symbols to read
symbols = ['SPY','XOM','GOOG', 'IBM', 'GLD']
# Get stock data
df = get_data(symbols, dates)
#compute global statistics for each stock
print 'mean:\n',df.mean()
print '\nmeadian:\n',df.median()
print '\nstd:\n',df.std()
if __name__ == '__main__':
test_run()
運行結(jié)果
借助python钞它,我們可以輕易地進行全局統(tǒng)計了!
2.滾動平均值
import pandas as pd
import matplotlib.pyplot as plt
def get_data(symbols,dates):
df = pd.DataFrame(index = dates)
if 'SPY' not in symbols: #為了防止失去參考
symbols.insert(0,'SPY')
for symbol in symbols:
#1讀取數(shù)據(jù)
df_temp = pd.read_csv("data/{}.csv".format(symbol),index_col = 'Date',
parse_dates=True,usecols=['Date','Adj Close'],
na_values = ['nan'])
#2改名字
df_temp = df_temp.rename(columns={'Adj Close':symbol})
#3吧數(shù)據(jù)合并到一個表上
df=df.join(df_temp,how = 'inner')
return df
def test_run():
# Define a date range
dates = pd.date_range('2012-01-01', '2012-12-31')
# Choose stock symbols to read
symbols = ['SPY']
# Get stock data
df = get_data(symbols, dates)
ax = df['SPY'].plot(title = 'SPY rolling mean',label = 'SPY')
#先算出滾動平均值
rm_SPY=pd.rolling_mean(df['SPY'],window = 20)
#對滾動平均值畫圖扶关,隨后加到之前畫的圖像中
rm_SPY.plot(label = "Rolling mean",ax=ax)
#加上坐標軸的名字和圖例子
ax.set_xlabel("Date")
ax.set_ylabel("price")
ax.legend(loc = "upper left")
plt.show()
if __name__ == '__main__':
test_run()
運行結(jié)果
import pandas as pd
import matplotlib.pyplot as plt
def get_data(symbols,dates):
df = pd.DataFrame(index = dates)
if 'SPY' not in symbols: #為了防止失去參考
symbols.insert(0,'SPY')
for symbol in symbols:
#1讀取數(shù)據(jù)
df_temp = pd.read_csv("data/{}.csv".format(symbol),index_col = 'Date',
parse_dates=True,usecols=['Date','Adj Close'],
na_values = ['nan'])
#2改名字
df_temp = df_temp.rename(columns={'Adj Close':symbol})
#3吧數(shù)據(jù)合并到一個表上
df=df.join(df_temp,how = 'inner')
return df
def plot_data(df, title="Stock prices"):
"""Plot stock prices with a custom title and meaningful axis labels."""
ax = df.plot(title=title, fontsize=12)
ax.set_xlabel("Date")
ax.set_ylabel("Price")
plt.show()
def get_rolling_mean(values, window):
"""Return rolling mean of given values, using specified window size."""
return pd.rolling_mean(values, window=window)
def get_rolling_std(values, window):
"""Return rolling standard deviation of given values, using specified window size."""
# TODO: Compute and return rolling standard deviation
return pd.rolling_std(values,window=window)
def get_bollinger_bands(rm, rstd):
"""Return upper and lower Bollinger Bands."""
# TODO: Compute upper_band and lower_band
upper_band = rm+2*rstd
lower_band = rm-2*rstd
return upper_band, lower_band
def test_run():
# Read data
dates = pd.date_range('2012-01-01', '2012-12-31')
symbols = ['SPY']
df = get_data(symbols, dates)
# Compute Bollinger Bands
# 1. Compute rolling mean
rm_SPY = get_rolling_mean(df['SPY'], window=20)
# 2. Compute rolling standard deviation
rstd_SPY = get_rolling_std(df['SPY'], window=20)
# 3. Compute upper and lower bands
upper_band, lower_band = get_bollinger_bands(rm_SPY, rstd_SPY)
# Plot raw SPY values, rolling mean and Bollinger Bands
ax = df['SPY'].plot(title="Bollinger Bands", label='SPY')
rm_SPY.plot(label='Rolling mean', ax=ax)
upper_band.plot(label='upper band', ax=ax)
lower_band.plot(label='lower band', ax=ax)
# Add axis labels and legend
ax.set_xlabel("Date")
ax.set_ylabel("Price")
ax.legend(loc='upper left')
plt.show()
if __name__ == "__main__":
test_run()
運行結(jié)果
這個時候阴汇,看到比較好的買點和賣點了