Python Homework(2018-06-06,第十五周周三)

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()

运行结果



猜你喜欢

转载自blog.csdn.net/baidu_41300735/article/details/80661644