赞
踩
pandas数据探索函数大致可以分为统计特征函数和统计作图函数,作图依赖matplotlib
,所以说创建pandas的dataframe
要求matplotlib
必须没问题,否则可能有点懵。
基本统计特征函数
可用于dataframe
或者series
普通统计特征函数
#计算相关系数矩阵
df.corr(method='pearson')#可使用spearman系数
s1.corr(s2,method='pearson')#计算两个series的相关系数矩阵
#计算协方差矩阵
df.cov()
s1.cov(s2)#计算两个serie之间的协方差
#计算样本偏度(三阶矩)
df.skew()
#计算样本峰度(四阶矩)
df.kurt()
累计统计特征函数
#前i个数累加
df.cumsum()
#前i个数累乘
df.cumprod()
#前i个数最大值
df.cummax()
#前i个数最小值
df.cummin()
滚动统计特征
#滚动统计特征
rolling_funcname()
#滚动求均值,每k列求一次均值
pd.rolling_mean(df,k)
统计作图函数
绘制箱盒图
import matplotlib.pyplot as plt
import numpy as np
#pandas默认index为x轴,kind指定作图类型,支持line,bar,hist,box,kde,pie,area
x = np.random.randn(1000)
d = pd.DataFrame()
d[0]=x
d[1]=x+1
d.plot(kind='box')
plt.show()
绘制对数图形
# df.plot(logx=True)或者df.plot(logy=True)
#绘制x轴或者y轴的对数图形
x = pd.Series(np.exp(np.arange(100)))
x.plot(label='original data',legend=True)
plt.show()
x.plot(label='log data',legend=True,logy=True)
plt.show()
绘制散点图矩阵
from pandas.plotting import scatter_matrix
#查看散点图矩阵
scatter_matrix(df,figsize=(20,16))
plt.show()
绘制相关系数矩阵可视化图,比较容易看出两个变量之间的相关性
correlations = df.corr()
# 查看相关系数矩阵可视化
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(1,1,1)
cax = ax.matshow(correlations,vmin=-1,vmax=1)
fig.colorbar(cax)
ticks = np.arange(0,df.shape[1],1)
ax.set_xticks(ticks)
ax.set_yticks(ticks)
ax.set_xticklabels(df.columns,rotation=90)
ax.set_yticklabels(df.columns)
plt.show()
划分训练集和测试集
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
插值
#s为原始序列,原始序列的第n个值为null
#Lagrange(x,y)函数将(y.index,list(y))分别当做(x,y)传入返回一个ploy1d(x),然后传入x获取拟合值
def ployinterp_column(s,n,k=5):
#利用第n个值的前k个数和后k个数进行插值
y = s[list(range(n-k,n))+list(range(n+1,n+1+k))]
y = y[y.notnull()]
return lagrange(y.index,list(y))(n)
去重
#d可以是list,array,series
np.unique(d)
d.unique()#d是pandas的series或者dataframe
isnull()
或者notnull()
#返回一个bool的series
df.isnull()
df.notnull()
#通过df[df.isnull()]或者df[df.notnull]获取d中的空值或者非空值
df[df.notnull()]
使用keras
搭建神经网络
from keras import Sequential
from keras.layers.core import Dense,Activation
model = Sequential()
#Dense(input_dim,units) input_dim输入维度,units输出维度
model.add(Dense(input_dim=3,units=10))
model.add(Activation('relu'))
model.add(Dense(input_dim=10,units=1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam')
model.fit(x,y,epochs=1000,batch_size=10)
yp = model.predict_classes(x).reshape(len(y))
yp
kMeans聚类
画出每类的每个特征密度图进行分析并做降维,将高维数据展示在二维图像上。
#完成聚类 from sklearn.cluster import KMeans k = 3 iteration = 500 data_zs = 1.0*(df-df.mean())/df.std() model = KMeans(n_clusters=k,n_jobs=4,max_iter=iteration) model.fit(data_zs) r1 = pd.Series(model.labels_).value_counts() r2 = pd.DataFrame(model.cluster_centers_) r = pd.concat([r2,r1],axis=1) r.columns=list(df.columns)+[u'类别数目'] df['聚类类别']=model.labels_ #进行kmeans完成聚类之后对每一类画出密度图然后进行分析,加上特定标签 k = 3 def density_plot(data,title): import matplotlib.pyplot as plt p=data.iloc[:,:3].plot(kind='kde',linewidth=2,subplots=True,sharex=False) for i in range(k): p[i].set_ylabel("密度") plt.xlabel("聚类类别为%s各属性密度曲线"%title) plt.legend() return plt for i in range(k): density_plot(df[df['聚类类别']==i],i).savefig('%s%s.png'%("D:\\data\\",i)) #特征数通常是大于3维,难以直接对原特征结果进行展示,TSNE提供一种有效的结果展示 from sklearn.manifold import TSNE tsne = TSNE() tsne.fit_transform(data_zs)#进行数据降维 tsne = pd.DataFrame(tsne.embedding_,index = data_zs.index)#转换数据格式 #tsne为降维之后的数据,之后分别使用不同类别的颜色描绘出 d = tsne[df['聚类类别']==0] plt.plot(d[0],d[1],'r.') d = tsne[df['聚类类别']==1] plt.plot(d[0],d[1],'go') d = tsne[df['聚类类别']==2] plt.plot(d[0],d[1],'b*') plt.show()
时序模式算法
因为statsmodels
和scipy
两个包的版本经常冲突,我使用的scipy==1.1.0
和statsmodels==0.9.0
,冲突比较少,可以这样配置。。。
#输入data为观测值序列,返回参数为autocorr为观测值序列自相关函数 acf(data) #画出自相关系数图 plot_acf(data).show() #返回偏自相关系数 pacf(data) #画图偏自相关系数图 plot_pacf(data).show() #对观测值序列进行单位根检验,返回adf,pvalue adfuller(Series) # 对观测值进行差分 df.diff() #arima 创建ARIMA时序模型 arima = ARIMA(data,(p,d,q)) #arima为d步差分,data为输入的时间序列,p、q为对应的阶 #生成已有模型的报告 summary()/summary2() # 用得到的时序模型进行预测 arima.forecast(number) # 检测是否为白噪声序列 acorr_ljungbox(data,lags=1)
使用5折交叉验证计算RSME
from sklearn.model_selection import cross_val_score
scores = cross_val_score(ridgereg,x,y,cv=5,scoring="neg_mean_squared_error")
rsme_cv = np.sqrt(-scores.mean())
rsme_cv
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。