第七章 信号处理与时间序列
(需要统计学知识)
1 statsmodels 子库
示例代码如下
import pkgutil as pu import pydoc import statsmodels as sm # statmodels版本号 print("statmodels version", sm.__version__) def clean(astr): s = astr # remove multiple spaces s = ' '.join(s.split()) s = s.replace('=', '') return s def print_desc(prefix, pkg_path): print("pkg_path", pkg_path) ''' :param prefix: 模块名称 :param pkg_path:模块包路径 :return: ''' for pkg in pu.iter_modules(path=pkg_path): '''Yields (module_loader,模块 name,子库名 ispkg)是否''' print("pkg", pkg) name = prefix + "." + pkg[1] # 输出子库名,帮助文档信息 if pkg[2] == True: try: docstr = pydoc.plain(pydoc.render_doc(name)) docstr = clean(docstr) start = docstr.find("DESCRIPTION") docstr = docstr[start: start + 140] print(name, docstr) except: continue print_desc("statsmodels", sm.__path__)
运行结果如下:
statmodels version 0.8.0rc1
statsmodels.base
statsmodels.compat
statsmodels.datasets
statsmodels.discrete
statsmodels.distributions
statsmodels.duration
statsmodels.emplike
statsmodels.formula
statsmodels.genmod
statsmodels.graphics
statsmodels.imputation
statsmodels.interface
statsmodels.iolib
statsmodels.miscmodels
statsmodels.multivariate
statsmodels.nonparametric DESCRIPTION Foran overview of this module, see docs/source/nonparametric.rst PACKAGE CONTENTS_kernel_base _smoothers_lowess api bandwidths
statsmodels.regression
statsmodels.resampling
statsmodels.robust
statsmodels.sandbox
statsmodels.src
statsmodels.stats
statsmodels.tools
statsmodels.tsa
2 移动平均值
示例代码如下:
import matplotlib.pyplot as plt import statsmodels.api as sm from pandas.stats.moments import rolling_mean data_loader = sm.datasets.sunspots.load_pandas() df = data_loader.data year_range = df['YEAR'].values plt.plot(year_range, df["SUNACTIVITY"].values, label="Original") plt.plot(year_range, rolling_mean(df, 11)["SUNACTIVITY"].values, label="SMA 11") plt.plot(year_range, rolling_mean(df, 22)["SUNACTIVITY"].values, label="SMA 22") plt.legend() plt.show()
方法二:
import matplotlib.pyplot as plt import statsmodels.api as sm from pandas.stats.moments import rolling_mean import pandas.core.generic data_loader = sm.datasets.sunspots.load_pandas() df = data_loader.data df11 = data_loader.data.rolling(window=11, center=False).mean() df22 = data_loader.data.rolling(window=22, center=False).mean() year_range = df['YEAR'].values plt.plot(year_range, df["SUNACTIVITY"].values, label="Original") # plt.plot(year_range, rolling_mean(df, window=11, center=False)["SUNACTIVITY"].values, label="SMA 11") # plt.plot(year_range, rolling_mean(df, window=22, center=False)["SUNACTIVITY"].values, label="SMA 22") plt.plot(year_range, df11["SUNACTIVITY"].values, label="SMA 11") plt.plot(year_range, df22["SUNACTIVITY"].values, label="SMA 22") plt.legend() plt.show()
运行结果如下:
3 窗口函数
是定义在一个区间(窗口)上的函数,超出定义,函数值取零,可以用来分析频谱,设计滤波器
import matplotlib.pyplot as plt import statsmodels.api as sm from pandas.stats.moments import rolling_window <