pthon时间序列分析

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
from statsmodels.tsa.arima_model import ARIMA #ARIMA模型
import patsy
from tsfresh.examples.robot_execution_failures import download_robot_execution_failures,load_robot_execution_failures
from tsfresh import extract_features,extract_relevant_features,select_features
from tsfresh.utilities.dataframe_functions import impute
from tsfresh.feature_extraction import ComprehensiveFCParameters
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report


"""
#TIMES 2018 Oct 12 10/12/2018 2018-10-12 2018/10/12
rng = pd.date_range("2018-10-12",periods=10,freq="D") #D 天(3D 三天);M 月;H 小时
#print(rng)

#将时间作为索引
time_index = pd.Series(np.random.randn(20),index=pd.date_range("2018-10-12",periods=20,freq="D")) #默认为D增加
#print(time_index)
#print(time_index["2018-10-12"])

#过滤
time_index_tr = time_index.truncate(before="2018-10-20") #before2018-10-20之前的数据都不要;after是之后的数据都不要
#print(time_index_tr)

#时间戳
time_stamp = pd.Timestamp("2018-10-12 19")
#print(time_stamp) #2018-10-12 19:00:00

time_delta = pd.Timestamp("2018-10-12 19") + pd.Timedelta("1 day")
#print(time_delta) #2018-10-13 19:00:00

#时间周期
time_period = pd.period_range("2018-10-12","2018-12-12",freq="M")
#print(time_period) #这是包括2018-10-12
"""

"""
#数据重采样
rng = pd.date_range("1/1/2011",periods=30,freq="3D")
ts = pd.Series(np.random.randn(len(rng)),index=rng)
print(ts)
#降采样
ts_dec_re = ts.resample("M").sum()
print(ts_dec_re)

#升采样(ffill空值取前面的值,bfill空值取后面的值,interpolate线性取值)
ts_asc_re = ts.resample("D").interpolate("linear")
print(ts_asc_re)
"""

"""
#滑动窗口
df = pd.Series(np.random.randn(600),index=pd.date_range("2018-1-1",freq="D",periods=600)) #数据的生成
print(df.head()) #默认打印5行
r = df.rolling(window=10)
print(r.mean()) #mean median(中位数) std(标准差) skew(倾斜度) sum var
"""

"""
#平稳性(差分)
fr = pd.read_csv("filename")
fr["diff_1"] = fr["column_name"].diff(1) #column_name这列数据的一阶差分
fr["diff_2"] = fr["diff_1"].diff(1) #diff_1这列数据的一阶差分
"""

"""
#ARIMA(差分自回归移动平均模型)
#AR自回归,p为自回归项,MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数
#原理:将非平稳的时间序列转化为平稳时间序列,然后仅对因变量的滞后值以及随机误差项的现值和滞后值进行回归建立模型
#步骤:平稳化(可以确定d);p q的确定;调用ARIMA模型

#股票预测案列(做回归)
stockFile = "T10yr.csv"
stock = pd.read_csv(stockFile,index_col=0,parse_dates=[0]) #0列做索引
#print(stock.head())

#按Close列进行分析
stock_week = stock["Close"].resample("W-MON").mean() #Close列按照每一周的均值进行重采样
stock_train = stock_week["2000":"2015"] #训练数据

#plt.plot(stock_train)
#plt.show() #数据的波动比较大,需要差分来平稳化

stock_diff = stock_train.diff(1)
stock_diff = stock_diff.dropna() #去除空值

#plt.plot(stock_diff)
#plt.show() #一阶差分基本上可以平稳化

#画ACF(确定q)
#acf = plot_acf(stock_diff,lags=20)
#acf.show() #q=1
#pacf = plot_pacf(stock_diff,lags=20)
#pacf.show() #p=1

model = ARIMA(stock_train,order=(1,1,1),freq="W-MON")  #order=(1,1,1) p d q
result = model.fit()
#print(result.summary())
pred = result.predict("2015-05-04","2016-04-18",dynamic=True,typ="levels") #"2015-05-04"(开始值)必须是数据集中已有的值,否则报错
#print(pred)

plt.plot(pred)
plt.plot(stock_train)
#plt.show()
"""

"""
#时间序列的分类任务(tsfresh库做特征的提取和过滤)
download_robot_execution_failures()
df,y = load_robot_execution_failures() #导入tsfresh官网上例子数据
print(df.head())

#特征提取
extraction_settings = ComprehensiveFCParameters() #实例化
X = extract_features(df,column_id="id",column_sort="time",
                     default_fc_parameters=extraction_settings,impute_function=impute)
print(X.head()) #打印提取完的特征

#特征过滤
X_filtered = extract_relevant_features(df,y,column_id="id",column_sort="time",default_fc_parameters=extraction_settings)

#切分数据集
x_train,x_test,x_filtered_train,x_filtered_test,y_train,y_test = train_test_split(X,X_filtered,y,test_size=0.4)

#训练 预测
dtc = DecisionTreeClassifier()
dtc.fit(x_train,y_train)
print(classification_report(y_test,dtc.predict(x_test)))
"""

train = pd.read_csv("train_1.csv").fillna(0) #打开文件并用0填充空值
#print(train.head()) #数据是浮点数但是都是.0形式,小数部分无贡献,转化成int类型

#pandas转化数据类型
for col in train.columns[1:]:
    train[col] = pd.to_numeric(train[col],downcast="integer")
#print(train.head())

猜你喜欢

转载自blog.csdn.net/fenfenxhf/article/details/83053843