Multivariate Exploratory Data Analyses(EDA)#
Exploratory Data Analyses (EDA) 叫做数据探索性分析,是用来在对时间序列处理前先进行数据
单变量时间序列是有多个变量的(除时间外)的序列,下面我们考虑单变量时间序列的EDA问题
导入时间序列#
import pandas as pd
df=pd.read_csv('TexasTurbine.csv')
# 打印前二十行
df.head(20)
导入必要的包#
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
plt.style.use("Solarize_Light2") #using style ggplot
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
import datetime as dt
import plotly.graph_objects as go
import plotly.express as px
import datetime as dt
获取数据点的数量(数据描述的时候使用)#
df.shape
获取数据的类型#
df.info()
把Timestamp转化为strftime类型#
df['Time stamp'] = pd.to_datetime(df['Time stamp'], format='%b %d, %I:%M %p').dt.strftime('%b %d %H:%M:%S.%f')
检查数据集缺失的值#
df.isnull().sum()
检查数据集中重复出现的值(实际上我们并不想要)#
# 输出重复数据的数量
df.duplicated().sum()
# 用布尔值说明数据是否重复(最开始的那一个显示False)
df.duplicated()
# 筛选病展示重复数据
df[df.duplicated()]
# 去掉重复的数据
df.drop_duplicates()
获取数据集的每一列的统计信息#
# round(2) 保留小数点后两位
df.describe().round(2)
添加一列特征(特征工程的基础)#
# 添加一列特征,这个特征是月份
df["Month"]=df["Time stamp"].dt.month
显示特征工程后的序列的信息#
df.info()
使用两列画出散点图(使用散点图画出时间序列)#
plt.figure(figsize=(17,8))
# Time stamp是一列
# System power generated | (kW) 是一列
sns.scatterplot(data=df,x="Time stamp",y="System power generated | (kW)",)
plt.title("Effect the time by the system power")
plt.show()
设置索引并且在原来的数据上更改#
# 索引是列名为Time stamp的列
df.set_index("Time stamp",inplace=True)
划分预测的值和特征#
这是由于特征和目标在同一个数据列表里面,所以需要分开
# X 是特征
X = df.drop(columns="System power generated | (kW)")
# y 是要预测的量
y = df["System power generated | (kW)"] # y = system power generated
划分数据集#
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=42)
# 打印数据的数量,注意y应该是形如(2628,),而X应该是形如(6132,5),5是特征数
# 5当中 不包含timestamp这一列
print("X Train : ", X_train.shape)
print("X Test : ", X_test.shape)
print("Y Train : ", y_train.shape)
print("Y Test : ", y_test.shape)
定义模型: 这里使用tensorflow来实现#
LR = LinearRegression()
DTR = DecisionTreeRegressor()
RFR = RandomForestRegressor()
KNR = KNeighborsRegressor()
MLP = MLPRegressor()
XGB = XGBRegressor()
SVR = SVR()
对已经定义好的模型实行预测,并且输出MSE的误差值#
# 不同的训练好的模型
li = [LR,DTR,RFR,KNR,KNR,XGB,SVR]
# 误差列表
d = {}
for i in li:
# 进行预测
i.fit(X_train,y_train)
#计算误差
ypred = i.predict(X_test)
# 打印出来误差
print(i,":",r2_score(y_test,ypred)*100)
# 保存误差
d.update({str(i):i.score(X_test,y_test)*100})
打印每种预测模型的误差#
plt.figure(figsize=(30, 6))
plt.title("Algorithm vs Accuracy")
plt.xlabel("Algorithm")
plt.ylabel("Accuracy")
plt.plot(d.keys(),d.values(),marker='o',color='red')
plt.show()
使用自定义函数来计算误差#
# 得到预测序列
ypred_xgb=XGB.predict(X_test)
# 计算误差
import math
from sklearn.metrics import mean_squared_error
math.sqrt(mean_squared_error(y_test,ypred_xgb))
Tensorflow保存模型#
import pickle
pickle.dump(XGB,open('model.pkl','wb'))
挑选出一个#
# 导入对应的包
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Flatten
df.head()
df1=df.reset_index()['System power generated | (kW)']
df1.shape