pandas statsmodels seaborn
题目 点击打开链接
用pandas中的DataFrame时选取行或列
import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.arange(3.)) data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #选择表格中的'w'列,使用类字典属性,返回的是Series类型 data.w #选择表格中的'w'列,使用点属性,返回的是Series类型 data[['w']] #选择表格中的'w'列,返回的是DataFrame类型 data[['w','z']] #选择表格中的'w'、'z'列 data[0:2] #返回第1行到第2行的所有行,前闭后开,包括前不包括后 data[1:2] #返回第2行,从0计,返回的是单行,通过有前后值的索引形式, #如果采用data[1]则报错 data.ix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同 data['a':'b'] #利用index值进行切片,返回的是**前闭后闭**的DataFrame, #即末端是包含的 #——————新版本pandas已舍弃该方法,用iloc代替——————— data.irow(0) #取data的第一行 data.icol(0) #取data的第一列 ser.iget_value(0) #选取ser序列中的第一个 ser.iget_value(-1) #选取ser序列中的最后一个,这种轴索引包含索引器的series不能采用ser[-1]去获取最后一个,这会引起歧义。 #————————————————————————————----------------- data.head() #返回data的前几行数据,默认为前五行,需要前十行则data.head(10) data.tail() #返回data的后几行数据,默认为后五行,需要后十行则data.tail(10) data.iloc[-1] #选取DataFrame最后一行,返回的是Series data.iloc[-1:] #选取DataFrame最后一行,返回的是DataFrame data.loc['a',['w','x']] #返回‘a’行'w'、'x'列,这种用于选取行索引列索引已知 data.iat[1,1] #选取第二行第二列,用于已知行、列位置的选取。
一个OLS模板
import statsmodels.api as sm # 最小二乘 from statsmodels.stats.outliers_influence import summary_table # 获得汇总信息 x = sm.add_constant(daily_data['temp']) # 线性回归增加常数项 y=kx+b y = daily_data['cnt'] regr = sm.OLS(y, x) # 普通最小二乘模型,ordinary least square model res = regr.fit() #res.model.endog # 从模型获得拟合数据 st, data, ss2 = summary_table(res, alpha=0.05) # 置信水平alpha=5%,st数据汇总,data数据详情,ss2数据列名 fitted_values = data[:,2] #等价于res.fittedvalues
Anscombe’s quartet
import seaborn as sns sns.set(style="ticks") # Load the example dataset for Anscombe's quartet df = sns.load_dataset("anscombe") # Show the results of a linear regression within each dataset sns.lmplot(x="x", y="y", col="dataset", hue="dataset", data=df, col_wrap=2, ci=None, palette="muted", size=4, scatter_kws={"s": 50, "alpha": 1})
源代码
import random import numpy as np import scipy as sp import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import statsmodels.api as sm import statsmodels.formula.api as smf sns.set_context("talk") #读取数据 anascombe = pd.read_csv('anscombe.csv') anascombe.head() #数据聚合与分组 anascombe.groupby('dataset')['x'].mean() anascombe.groupby('dataset')['y'].mean() anascombe.groupby('dataset')['x'].var() anascombe.groupby('dataset')['y'].var() #数据索引与切片 data1_x = anascombe['x'][0:11] data2_x = anascombe['x'][11:22] data3_x = anascombe['x'][22:33] data4_x = anascombe['x'][33:44] data1_y = anascombe['y'][0:11] data2_y = anascombe['y'][11:22] data3_y = anascombe['y'][22:33] data4_y = anascombe['y'][33:44] #求平均值,mean mean1_x = data1_x.mean() mean2_x = data2_x.mean() mean3_x = data3_x.mean() mean4_x = data4_x.mean() mean1_y = data1_y.mean() mean2_y = data2_y.mean() mean3_y = data3_y.mean() mean4_y = data4_y.mean() print('mean1_x = '+str(mean1_x)) print('mean2_x = '+str(mean2_x)) print('mean3_x = '+str(mean3_x)) print('mean4_x = '+str(mean4_x)) print('mean1_y = '+str(mean1_y)) print('mean2_y = '+str(mean2_y)) print('mean3_y = '+str(mean3_y)) print('mean4_y = '+str(mean4_y)) #求方差,var var1_x = data1_x.var() var2_x = data2_x.var() var3_x = data3_x.var() var4_x = data4_x.var() var1_y = data1_y.var() var2_y = data2_y.var() var3_y = data3_y.var() var4_y = data4_y.var() print('var1_x = '+str(var1_x)) print('var2_x = '+str(var2_x)) print('var3_x = '+str(var3_x)) print('var4_x = '+str(var4_x)) print('var1_y = '+str(var1_y)) print('var2_y = '+str(var2_y)) print('var3_y = '+str(var3_y)) print('var4_y = '+str(var4_y)) #求相关系数,corr corr1 = data1_x.corr(data1_y) corr2 = data2_x.corr(data2_y) corr3 = data3_x.corr(data3_y) corr4 = data4_x.corr(data4_y) print('corr1 = '+str(corr1)) print('corr2 = '+str(corr2)) print('corr3 = '+str(corr3)) print('corr4 = '+str(corr4)) #线性最小二乘法 x1 = sm.add_constant(data1_x) #线性回归增加常数项 y1 = data1_y regr = sm.OLS(y1,x1) #执行最小二乘回归 res = regr.fit() #使用fit()方法进行模型拟合 b1 = res.params[0] #拟合回归模型参数 k1 = res.params[1] print("y1="+str(k1)+"x2+"+str(b1)) x2 = sm.add_constant(data2_x) y2 = data2_y regr = sm.OLS(y2,x2) res = regr.fit() b2 = res.params[0] k2 = res.params[1] print("y2="+str(k2)+"x2+"+str(b2)) x3 = sm.add_constant(data3_x) y3 = data3_y regr = sm.OLS(y3,x3) res = regr.fit() b3 = res.params[0] k3 = res.params[1] print("y3="+str(k3)+"x3+"+str(b3)) x4 = sm.add_constant(data4_x) y4 = data4_y regr = sm.OLS(y4,x4) res = regr.fit() b4 = res.params[0] k4 = res.params[1] print("y4="+str(k4)+"x4+"+str(b4)) #画图 sns.set(style = 'ticks') #设置格式 df = sns.load_dataset("anscombe") #装载数据 #使用lmplot模拟线性相关变量 sns.lmplot(x='x',y='y',col='dataset',hue='dataset',data=df,col_wrap=2,ci=None,palette='muted',size=4,scatter_kws={'s':50,'alpha':1}) #画图 plt.show()
运行结果