statsmodels ols可以得到t检验的结果吗

R语言多元统计包简介:各种假设检验 统计方法 聚类分析 数据处理【田家三小石头吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:2贴子:
R语言多元统计包简介:各种假设检验 统计方法 聚类分析 数据处理
统计分析 生物信息 sas matlab R语言Multivariate Statistics (多元统计) 网址:转:基本的R包已经实现了传统多元统计的很多功能,然而CRNA的许多其它包提供了更深入的多元统计方法,下面做个简要的综述。多元统计的特殊应用在CRNA的其它任务列表(task view)里也会提及,如:排序(ordination)会在Environmetrics()里说到;有监督的分类方法能在MachineLearning()里找到;无监督的分类在Cluster()里。 这里要综述的包主要分为以下几个部分: 1) 多元数据可视化(Visualising multivariate data): 绘图方法: 基本画图函数(如:pairs()、coplot())和lattice包里的画图函数(xyplot()、splom())可以画成对列表的二维散点图,3维密度图。car包里的scatterplot.matrix()函数提供更强大的二维散点图的画法。cwhmisc包集合里的cwhplot包的pltSplomT()函数类似pair()画散点图矩阵,而且可以在对角位置画柱状图或密度估计图。除此之外,scatterplot3d包可画3维的散点图,aplpack包里bagplot()可画二变量的boxplot,spin3R()可画可旋转的三维点图。misc3d包有可视化密度的函数。YaleToolkit包提供许多多元数据可视化技术,agsemisc也是这样。更特殊的多元图包括:aplpack包里的faces()可画Chernoff’s face;MASS包里的parcoord()可画平行坐标图(矩阵的每一行画一条线,横轴表示矩阵的每列);graphics包里的stars()可画多元数据的星状图(矩阵的每一行用一个星状图表示)。ade4包里的mstree()和vegan包里的spantree()可画最小生成树。calibrate包支持双变量图和散点图,chplot包可画convex hull图。geometry包提供了和qhull库的接口,由convexhulln()可给出相应点的索引。ellipse包可画椭圆,也可以用plotcorr()可视化相关矩阵。denpro包为多元可视化提供水平集树形结构(level set trees)。graphics包里的mosaicplot()和vcd包里的mosaic()函数画马赛克图(mosaic plot)。gclus包提供了针对聚类的散点图和平行坐标图。rggobi包和DescribeDisplay包是GGobi的接口,DescribeDisplay的图可达到出版质量的要求;xgobi包是XGobi和XGvis的接口,可实现动态交互的图。最后,iplots包提供强大的动态交互图,尤其是平行坐标图和马赛克图。seriation包提供seriation方法,能重新排列矩阵和系统树。 数据预处理: AIS包提供多元数据的初步描述函数。Hmisc包里的summarize()和summary.formula()辅助描述数据,varclus()函数可做聚类,而dataRep()和find.matches()找给定数据集的典型数据和匹配数据。KnnFinder包里的nn()函数用kd-tree找相似变量的个数。dprep包为分类提供数据预处理和可视化函数,如:检查变量冗余性、标准化。base包里的dist()和cluster包里的daisy()函数提供距离计算函数;proxy包提供更多的距离测度,包括矩阵间的距离。simba包处理已有数据和缺失数据,包括相似性矩阵和重整形。 2) 假设检验(Hypothesis testing): ICSNP包提供霍特林(Hotellings)T2检验和许多非参检验方法,包括基于marginal ranks的位置检验(location test),计算空间中值和符号,形状估计。cramer包做两样本的非参检验,SpatialNP可做空间符号和秩检验。 3) 多元分布(Multivariate distributions): 描述统计(Descriptive measures): stats包里的cov()和and cor()分别估计协方差和相关系数。ICSNP包提供几种数据描述方法,如:spatial.median()估计空间中值,其它的函数估计scatter。MASS包里的cov.rob()提供更健壮的方差/协方差矩阵估计。covRobust包用最近邻方差估计法估计协方差。robustbase包的covMCD()估计协方差和covOGK()做Orthogonalized Gnanadesikan-Kettenring。rrcov包提供可扩展和稳健的估计函数covMcd()、covMest()。corpcor包可计算大规模的协方差和偏相关矩阵。 密度估计和模拟(Densities (estimation and simulation)) MASS包的mvrnorm()产生多元正态分布的随机数。Mvtnorm包有多元t分布和多元正态分布的概率和分位数函数,还可计算多元正态分布的密度函数。mvtnormpcs包提供基于Dunnett的函数。mnormt包提供元t分布和多元正态分布的密度和分布函数,并可产生随机数。sn包提供多元偏t分布和偏正态分布的密度、分布、随机数函数。delt包提供了许多估计多元密度的函数方法,如:CART和贪婪方法。CRAN的Cluster任务列表()有更全面的信息,ks包里的rmvnorm.mixt()和dmvnorm.mixt()函数产生随机数和估计密度,bayesm包里有多种拟合方法。很多地方都提供了模拟Wishart分布的函数,如:bayesm包里的rwishart(),MCMCpack包里的rwish(),而且MCMCpack包还有密度函数dwish()。KernSmooth 包里的bkde2D()和MASS包的kde2d()做分箱(binned)或不分箱二维核密度估计。ks包也像ash和GenKern包样可做核平滑(kernel smoothing)。prim包用法找高维多元数据的高密度区域,feature包可计算多元数据的显著特征。 正态检验(Assessing normality): mvnormtest包提供Shapiro-Wilks检验的多元数据延伸方法,mvoutlier包检测多元离群点(outlier),ICS包可检验多元正态分布。energy 包里的mvnorm.etest()基于E统计量做正态检验,k.sample()检验多个数据是否来自同一分布。dprep 包里的mardia()用Mardia检验正态性。stats包里的mauchly.test()可检验Wishart分布的协方差矩阵。 连接函数(Copulas): copula包提供常规的copula函数的程序,包括:normal, t, Clayton, Frank, Gumbel。fgac包提供generalised archimedian copula,mlCopulaSelection包可做二变量的copula。 4) 线形模型(Linear models): stats包里的lm()可做多元线形模型,anova.mlm()比较多个多元线形模型,manova()做多元方差分析(MANOVA)。sn包的msn.mle()和 and mst.mle()可拟合多元偏正态和偏t分布模型。pls包提供偏最小二乘回归(PLSR)和主成分回归;ppls包可做惩罚偏最小二乘回归;dr包提供降维回归方法,如.:片逆回归法(Sliced Inverse Regression)、片平均方差估计(sliced average variance estimation)。plsgenomics包做基于偏最小二乘回归的基因组分析。relaimpo包可评估回归参数的相对重要性。 5) 投影方法(Projection methods): 主成分(Principal components): stats包的prcomp()(基于svd())和princomp()(基于eigen())能计算主成分。sca包做单分量分析。nFactors可评价碎石图(Scree plot),paran包可评估主成分分析得到的主成分和因子分析得到的因子。pcurve包做主曲线(Principal Curve)分析和可视化。gmodels包提供适合大矩阵的fast.prcomp()和fast.svd()。kernlab包里的kpca()用核方法做非线性的主成分分析。pcaPP包用投影寻踪(projection pursuit)法计算稳健/鲁棒(robust)主成分。amap包的acpgen()和acprob()函数分别针对广义(generalized)和稳健(robust)主成分分析。主成分在很多方面也有相应的应用,如:涉及生态的ade4包,感官的SensoMinR包。psy包里有用于心理学的各种程序,与主成分相关的有:sphpca()用球形直观表示相关矩阵,类似于3D的PCA;fpca()图形展示主成分分析的结果,而且允许某些变量间有相关性;scree.plot()图形展示相关或协方差矩阵的特征值。PTAk包做主张量分析(Principal Tensor Analysis)。smatr包提供关于异速生长(allometry)的函数。 典型相关(Canonical Correlation): stats包里的cancor()是做典型相关的函数。kernlab包提供更稳健的核方法kcca()。concor包提供了许多concordance methods。 冗余度分析(Redundancy Analysis): calibrate包里的rda()函数可做冗余度分析和典型相关。fso包提供了模糊集排序(Ordination)方法。 独立成分(Independent Components): fastICA包用fastICA算法做独立成分分析(ICA)和投影寻踪分析(Projection Pursuit),mlica包提供独立成分分析的最大似然拟合,PearsonICA包用基于互信息的打分函数分离独立信号。ICS包能执行不变坐标系(invariant coordinate system)和独立成分分析(independent components)。JADE包提供就JADE算法的接口,而且可做一些 ICA。 普鲁克分析(Procrustes analysis): vegan包里的procrustes()可做普鲁克分析,也提供排序(ordination)函数。更一般的普鲁克分析可由FactoMineR包里的GPA()实现。 6) 主坐标/尺度方法(Principal coordinates / scaling methods): stats包的cmdscale()函数执行传统的多维尺度分析(multidimensional scaling,MDS)(主坐标分析Principal Coordinates Analysis),MASS包的sammon()和isoMDS()函数分别执行Sammon和Kruskal非度量多维尺度分析。vegan包提供非度量多维尺度分析的包装(wrappers)和后处理程序。 7) 无监督分类(Unsupervised classification): 聚类分析: CRAN的Cluster任务列表全面的综述了R实现的聚类方法。stats里提供等级聚类hclust()和k-均值聚类kmeans()。cluster包里有大量的聚类和可视化技术,clv包里则有一些聚类确认程序,e1071包的classAgreement()可计算Rand index比较两种分类结果。Trimmed k-means聚类分析可由trimcluster包实现,聚类融合方法(Cluster Ensembles)由clue包实现,clusterSim包能帮助选择最佳的聚类,hybridHclust包提供一些混合聚类方法。energy包里有基于E统计量的距离测度函数edist()和等级聚类方法hclust.energy()。LLAhclust包提供基于似然(likelihood linkage)方法的聚类,也有评定聚类结果的指标。fpc包里有基于Mahalanobis距离的聚类。clustvarsel包有多种基于模型的聚类。模糊聚类(fuzzy clustering)可在cluster包和hopach包里实现。Kohonen包提供用于高维谱(spectra)或模式(pattern)的有监督和无监督的SOM算法。clusterGeneration包帮助模拟聚类。CRAN的Environmetrics任务列表里也有相关的聚类算法的综述。mclust包实现了基于模型的聚类,MFDA包实现了功能数据的基于模型的聚类。 树方法: CRAN的MachineLearning任务列表有对树方法的细节描述。分类树也常常是重要的多元方法,rpart包正是这样的包,rpart.permutation包还可以做rpart()模型的置换(permutation)检验。TWIX包的树可以外部剪枝。hier.part包分割多元数据集的方差。mvpart包可做多元回归树,party包实现了递归分割(recursive partitioning),rrp包实现了随机递归分割。caret包可做分类和回归训练,进而caretLSF包实现了并行处理。kknn包的k-近邻法可用于回归,也可用于分类。 8) 有监督分类和判别分析(Supervised classification and discriminant analysis): MASS包里的lda()和qda()分别针对线性和二次判别分析。mda包的mda() and fda()允许混合和更灵活的判别分析,mars()做多元自适应样条回归(multivariate adaptive regression splines),bruto()做自适应样条后退拟合(adaptive spline backfitting)。earth包里也有多元自适应样条回归的函数。rda包可用质心收缩法(shrunken centroids regularized discriminant analysis)实现高维数据的分类。VR的class包的knn()函数执行k-最近邻算法,knncat包里有针对分类变量的k-最近邻算法。SensoMineR包的FDA()用于因子判别分析。许多包结合了降维(dimension reduction)和分类。klaR包可以做变量选择,可处理多重共线性,还有可视化函数。superpc包利用主成分做有监督的分类,classPP包则可为其做投影寻踪(projection pursuit),gpls包用广义偏最小二乘做分类。hddplot包用交叉验证的线性判别分析决定最优的特征个数。supclust包可以根据芯片数据做基因的监督聚类。ROCR提供许多评估分类执行效果的方法。predbayescor包可做朴素贝叶斯(na&ve Bayes)分类。关于监督分类的更多信息可以看MachineLearning任务列表。 9) 对应分析(Correspondence analysis): MASS包的corresp()和mca()可以做简单和多重对应分析。ca包提供单一、多重和联合(joint)对应分析。ade4包的ca()和mca()分别做一般的和多重对应分析。vegan包里也有类似的函数。cocorresp可实现两个矩阵间的co-correspondence分析。FactoMineR 包的CA()和MCA()函数也能做类似的简单和多重对应分析,还有画图函数。homals执行同质分析(homogeneity)。10) 前向查找(Forward search): Rfwdmv包执行多元数据的前向查找。 11) 缺失数据(Missing data): mitools包里有缺失数据的多重估算(multiple imputation)的函数, mice包用chained equations实现了多重估算,mvnmle包可以为多元正态数据的缺失值做最大似然估计(ML Estimation),norm包提供了适合多元正态数据的估计缺失值的期望最大化算法(EM algorithm),cat包允许分类数据的缺失值的多重估算,mix包适用于分类和连续数据的混合数据。pan包可为面版数据(panel data)的缺失值做多重估算。VIM包做缺失数据的可视化和估算。Hmisc包的aregImpute()和transcan()提供了其它的估算缺失值方法。EMV包提供了knn方法估计缺失数据。monomvn包估计单调多元正态数据的缺失值。 12) 隐变量方法(Latent variable approaches): stats包的factanal()执行最大似然因子分析,MCMCpack包可做贝叶斯因子分析。GPArotation包提供投影梯度(Gradient Projection)旋转因子法。FAiR包用遗传算法作因子分析。ifa包可用于非正态的变量。sem包拟合线形结构方程模型。ltm包可做隐含式语义分析 (Latent semantic analysis),eRm包则可拟合Rasch模型(Rasch models)。FactoMineR包里有很多因子分析的方法,包括:MFA()多元因子分析,HMFA()等级多元因子分析,ADFM()定量和定性数据的多元因子分析。tsfa包执行时间序列的因子分析。poLCA包针对多分类变量(polytomous variable)做潜类别分析(Latent Class Analysis)。 13) 非高斯数据建模(Modelling non-Gaussian data): bivpois包建模Poisson分布的二变量。mprobit包提供了适合二元和顺序响应变量的多元概率模型。MNP包实现了Bayesian多元概率模型。polycor包可计算多组相关(olychoric correlation)和四分相关(tetrachoric correlation)矩阵。bayesm包里有多种模型,如:表面非相关回归(Seemingly unrelated Regression),多元logit/probit模型, 工具变量法(Instrumental Variables)。VGAM包里有:广义线形和可加模型(Vector Generalised Linear and Additive Models),减秩回归(Reduced Rank regression)。 14) 矩阵处理(Matrix manipulations): R作为一种基于向量和矩阵的语言,有许多处理矩阵的强有力的工具,由包Matrix和,SparseM实现。matrixcalc包增加了矩阵微积分的功能。spam包提供了更深入的针对稀疏矩阵的方法。 15) 其它(Miscellaneous utitlies): DEA包执行数据包络分析(data envelopment analysis,DEA)。abind包组合多维array。Hmisc 包的mApply()扩充了apply()的功能。除了前面描述的功能,sn包还未偏正态和偏t分布提供边缘化(marginalisation)、仿射变换(affine transformations)等。SharedHT2包执行芯片数据的Hotelling*s T2检验。panel包里有面版数据(panel data)的建模方法。mAr包可做向量自回归模型(vector auto-regression),MSBVAR包里有贝叶斯向量自回归模型。Hmisc包的rm.boot()函数bootstrap重复测量试验(Repeated Measures Models)。compositions包提供复合数据分析(compositional data analysis)。 cramer包为两样本数据做多元非参Cramer检验。psy里有许多心理学的常用方法。cwhmisc包集合的cwhmath包里有许多有趣的功能,如各种旋转函数。desirability包提供了基于密度函数的多变量最优化方法。geozoo包可以画geozoo包里定义的几何对象
【原帖地址】
数据分析的统计方法选择小结
日,又是一个下雨天!第24天
贴吧热议榜
使用签名档&&
保存至快速回贴学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家。博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~
前言:各种和数据分析相关python库的介绍(前言1~4摘抄自《利用python进行数据分析》)
  Numpy是python科学计算的基础包,它提供以下功能(不限于此):
    (1)快速高效的多维数组对象naarray
    (2)用于对数组执行元素级计算以及直接对数组执行数学运算的函数
    (3)用于读写硬盘上基于数组的数据集的工具
    (4)线性代数运算、傅里叶变换,以及随机数生成
    (5)用于将C、C++、Fortran代码集成到python的工具
  pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。pandas兼具Numpy高性能的数组计算功能以及电子表格和关系型数据(如SQL)灵活的数据处理能力。它提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。
  对于金融行业的用户,pandas提供了大量适用于金融数据的高性能时间序列功能和工具。
  DataFrame是pandas的一个对象,它是一个面向列的二维表结构,且含有行标和列标。
  ps.引用一段网上的话说明DataFrame的强大之处:
  Excel 2007及其以后的版本的最大行数是1048576,最大列数是16384,超过这个规模的数据Excel就会弹出个框框&此文本包含多行文本,无法放置在一个工作表中&。Pandas处理上千万的数据是易如反掌的事情,同时随后我们也将看到它比SQL有更强的表达能力,可以做很多复杂的操作,要写的code也更少。 说了一大堆它的好处,要实际感触还得动手码代码。
3.matplotlib
  matplotlib是最流行的用于绘制数据图表的python库。
  Scipy是一组专门解决科学计算中各种标准问题域的包的集合。5.statsmodels: https://github.com/statsmodels/statsmodels6.scikit-learn: http://scikit-learn.org/stable/
一.数据导入和导出
(一)读取csv文件
1.本地读取
import pandas as pd
df = pd.read_csv('E:\\tips.csv')
#根据自己数据文件保存的路径填写(p.s.
python填写路径时,要么使用/,要么使用\\)#输出:
total_bill
sex smoker
[244 rows x 7 columns]
2.网络读取
import pandas as pd
data_url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv" #填写url读取
df = pd.read_csv(data_url)
#输出同上,为了节省篇幅这儿就不粘贴了
3.read_csv详解
功能: Read CSV (comma-separated) file into DataFrame
read_csv(filepath_or_buffer, sep=',', dialect=None, compression='infer', doublequote=True, escapechar=None, quotechar='"', quoting=0, skipinitialspace=False, lineterminator=None, header='infer', index_col=None, names=None, prefix=None, skiprows=None, skipfooter=None, skip_footer=0, na_values=None, true_values=None, false_values=None, delimiter=None, converters=None, dtype=None, usecols=None, engine=None, delim_whitespace=False, as_recarray=False, na_filter=True, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, warn_bad_lines=True, error_bad_lines=True, keep_default_na=True, thousands=None, comment=None, decimal='.', parse_dates=False, keep_date_col=False, dayfirst=False, date_parser=None, memory_map=False, float_precision=None, nrows=None, iterator=False, chunksize=None, verbose=False, encoding=None, squeeze=False, mangle_dupe_cols=True, tupleize_cols=False, infer_datetime_format=False, skip_blank_lines=True)
参数详解:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
(二)读取Mysql数据
  假设数据库安装在本地,用户名为myusername,密码为mypassword,要读取mydb数据库中的数据
import pandas as pd
import MySQLdb
mysql_cn= MySQLdb.connect(host='localhost', port=3306,user='myusername', passwd='mypassword', db='mydb')
df = pd.read_sql('select *', con=mysql_cn)
mysql_cn.close()
上面的代码读取了test表中所有的数据到df中,而df的数据结构为Dataframe。
ps.MySQL教程:http://www.runoob.com/mysql/mysql-tutorial.html
(三)读取excel文件
要读取excel文件还需要安装xlrd模块,pip install xlrd即可。
df = pd.read_excel('E:\\tips.xls')
(四)数据导出到csv文件
df.to_csv('E:\\demo.csv', encoding='utf-8', index=False)
#index=False表示导出时去掉行名称,如果数据中含有中文,一般encoding指定为&utf-8&
&(五)读写SQL数据库
import pandas as pd
import sqlite3
con = sqlite3.connect('...')
sql = '...'
df=pd.read_sql(sql,con)
help(sqlite3.connect)
Help on built-in function connect in module _sqlite3:
connect(...)
connect(database[, timeout, isolation_level, detect_types, factory])
Opens a connection to the SQLite database file *database*. You can use
":memory:" to open a database connection to a database that resides in
RAM instead of on disk.
#############
help(pd.read_sql)
Help on function read_sql in module pandas.io.sql:
read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
Read SQL query or database table into a DataFrame.
ps.数据库的代码是我直接从网络上粘贴过来的,没有测试过是不是可行,先贴上来。
&&& 数据库我还在摸索中,学习心得学习笔记之类的大家可以一起分享23333~
二.提取和筛选需要的数据
(一)提取和查看相应数据 (用的是tips.csv的数据,数据来源:https://github.com/mwaskom/seaborn-data)
print df.head() #打印数据前五行#输出
total_bill
sex smoker
print df.tail()
#打印数据后5行
total_bill
sex smoker
print df.columns
Index([u'total_bill', u'tip', u'sex', u'smoker', u'day', u'time', u'size'], dtype='object')
print df.index
Int64Index([
234, 235, 236, 237, 238, 239, 240, 241, 242, 243],
dtype='int64', length=244)
print df.ix[10:20, 0:3]
#打印10~20行前三列数据
total_bill
#提取不连续行和列的数据,这个例子提取的是第1,3,5行,第2,4列的数据
df.iloc[[1,3,5],[2,4]]
#专门提取某一个数据,这个例子提取的是第三行,第二列数据(默认从0开始算哈)
df.iat[3,2]
print df.drop(df.columns[1, 2], axis = 1) #舍弃数据前两列
print df.drop(df.columns[[1, 2]], axis = 0) #舍弃数据前两行
#为了节省篇幅结果就不贴出来了哈~
print df.shape #打印维度
df.iloc[3] #选取第3行
total_bill
Name: 3, dtype: object
df.iloc[2:4] #选取第2到第3行
total_bill
sex smoker
df.iloc[0,1] #选取第0行1列的元素
(二)筛选出需要的数据(用的是tips.csv的数据,数据来源:https://github.com/mwaskom/seaborn-data)
#example:假设我们要筛选出小费大于$8的数据
df[df.tip&8]
total_bill
sex smoker
#数据筛选同样可以用&或&和&且&作为筛选条件,比如
df[(df.tip&7)|(df.total_bill&50)] #筛选出小费大于$7或总账单大于$50的数据
total_bill
sex smoker
df[(df.tip&7)&(df.total_bill&50)]#筛选出小费大于$7且总账单大于$50的数据
total_bill
sex smoker
#假如加入了筛选条件后,我们只关心day和time
df[['day','time']][(df.tip&7)|(df.total_bill&50)]
三.统计描述(用的是tips.csv的数据,数据来源:https://github.com/mwaskom/seaborn-data)
print df.describe() #描述性统计
各指标都比较简单就不解释了哈
total_bill
244.4.4.000000
四.数据处理(一)数据转置(用的是tips.csv的数据,数据来源:https://github.com/mwaskom/seaborn-data)
print df.T
total_bill
total_bill
total_bill
[7 rows x 244 columns]
&(二)数据排序(用的是tips.csv的数据,数据来源:https://github.com/mwaskom/seaborn-data)
df.sort_values(by='tip')
#按tip列升序排序
#输出(为了不占篇幅我简化了一部分)
total_bill
sex smoker
[244 rows x 7 columns]
(三)缺失值处理1.填充缺失值(数据来自《利用python进行数据分析》第二章 usagov_bitly_data-.txt,需要的同学可以找我要)
import json
#python有许多内置或第三方模块可以将JSON字符串转换成python字典对象
import pandas as pd
import numpy as np
from pandas import DataFrame
path = 'F:\PycharmProjects\pydata-book-master\ch02\usagov_bitly_data-.txt' #根据自己的路径填写
records = [json.loads(line) for line in open(path)]
frame = DataFrame(records)
frame['tz']
#输出(为了节省篇幅我删除了部分输出结果)
America/New_York
America/Denver
America/New_York
America/Sao_Paulo
America/New_York
America/New_York
Europe/Warsaw
America/Los_Angeles
America/New_York
America/New_York
Name: tz, dtype: object
从以上输出值可以看出数据存在未知或缺失值,接着咱们来处理缺失值。
print frame['tz'].fillna(1)
#以数字代替缺失值
#输出结果(为了节省篇幅我删除了部分输出结果)
America/New_York
America/Denver
America/New_York
America/Sao_Paulo
America/New_York
America/New_York
Europe/Warsaw
America/Los_Angeles
America/New_York
America/New_York
Name: tz, dtype: object
print frame['tz'].fillna('YuJie3') #用字符串代替缺失值
#输出(为了节省篇幅我删除了部分输出结果)
America/New_York
America/Denver
America/New_York
America/Sao_Paulo
America/New_York
America/New_York
Europe/Warsaw
America/Los_Angeles
America/New_York
America/New_York
Name: tz, dtype: object
print frame['tz'].fillna(method='pad') #用前一个数据代替缺失值
print frame['tz'].fillna(method='bfill') #用后一个数据代替缺失值
2.删除缺失值 (数据同上)
print frame['tz'].dropna(axis=0) #删除缺失行
print frame['tz'].dropna(axis=1) #删除缺失列
3.插值法填补缺失值
由于没有数据,这儿插播一个小知识点:创建一个随机的数据框
import pandas as pd
import numpy as np
#创建一个6*4的数据框,randn函数用于创建随机数
czf_data = pd.DataFrame(np.random.randn(6,4),columns=list('ABCD'))
0....818982
0....493502
2 -0....223771
0....199428
0....363640
5 -1....546152
好啦,数据就出来了。接着我们用空值替换数值,创造出一个含有空值的DataFrame。
#把第二列数据设置为缺失值
czf_data.ix[2,:]=np.nan
0....818982
0....493502
0....199428
0....363640
5 -1....546152
#接着就可以利用插值法填补空缺值了~
print czf_data.interpolate()
0....818982
0....493502
0....846465
0....199428
0....363640
5 -1....546152
&(四)数据分组(用的是tips.csv的数据,数据来源:https://github.com/mwaskom/seaborn-data)
group = df.groupby('day')
#按day这一列进行分组
print group.first()#打印每一组的第一行数据
total_bill
sex smoker
print group.last()#打印每一组的最后一行数据
total_bill
sex smoker
(五)值替换
import pandas as pd
import numpy as np
#首先创造一个Series(没有数据情况下的福音233)
Series = pd.Series([0,1,2,3,4,5])
dtype: int64
#数值替换,例如将0换成00
print Series.replace(0,00)
dtype: int64
#列和列的替换同理
print Series.replace([0,1,2,3,4,5],[,44,])
dtype: int64
五.统计分析
1.独立样本t检验
两独立样本t检验就是根据样本数据对两个样本来自的两独立总体的均值是否有显著差异进行推断;进行两独立样本t检验的条件是,两样本的总体相互独立且符合正态分布。
开始找不到合适的数据,我就在网上随便摘抄了个spss做独立样本t检验的实例数据作为例子大家暂时看着吧找到合适的例子再给大家举~
数据如下,我将数据保存为本地xlsx格式:
import pandas as pd
from scipy.stats import ttest_ind
IS_t_test = pd.read_excel('E:\\IS_t_test.xlsx')
Group1 = IS_t_test[IS_t_test['group']==1]['data']
Group2 = IS_t_test[IS_t_test['group']==2]['data']
print ttest_ind(Group1,Group2)
输出结果的第一个元素为t值,第二个元素为p-value
ttest_ind默认两组数据方差齐性的,如果想要设置默认方差不齐,可以设置equal_var=False
print ttest_ind(Group1,Group2,equal_var=True)
print ttest_ind(Group1,Group2,equal_var=False)
2.配对样本t检验
同样找不到数据,让我们暂且假设上边独立样本是配对样本吧,使用同样的数据。
import pandas as pd
from scipy.stats import ttest_rel
IS_t_test = pd.read_excel('E:\\IS_t_test.xlsx')
Group1 = IS_t_test[IS_t_test['group']==1]['data']
Group2 = IS_t_test[IS_t_test['group']==2]['data']
print ttest_rel(Group1,Group2)
同样的,输出结果的第一个元素为t值,第二个元素为p-value。
&(二)方差分析
1.单因素方差分析
这里依然沿用t检验的数据
import pandas as pd
from scipy import stats
IS_t_test = pd.read_excel('E:\\IS_t_test.xlsx')
Group1 = IS_t_test[IS_t_test['group']==1]['data']
Group2 = IS_t_test[IS_t_test['group']==2]['data']
w,p = stats.levene(*args)
#levene方差齐性检验。levene(*args, **kwds)
Perform Levene test for equal variances.如果p&0.05,则方差不齐
#进行方差分析
f,p = stats.f_oneway(*args)
(0..65535)
2.多因素方差分析
&&& 数据是我从网上找的多因素方差分析的一个例子,研究区组和营养素对体重的影响。我做成了excel文件,需要的同学可以问我要哈~做多因素方差分析需要加载statsmodels模块,如果电脑没有安装可以pip install一下。
import pandas as pd
MANOVA=pd.read_excel('E:\\MANOVA.xlsx')
#输出(为了节省篇幅删掉了中间部分的输出结果)
.......................
#多因素方差分析
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
formula = 'weight~C(id)+C(nutrient)+C(id):C(nutrient)'
anova_results = anova_lm(ols(formula,MANOVA).fit())
print anova_results
339.087619
C(nutrient)
C(id):C(nutrient)
也许数据选得不对,p-value全是空值23333,待我找个好点儿的数据再做一次多因素方差分析。
3.重复测量设计的方差分析(单因素)&& ********待完善
重复测量设计是对同一因变量进行重复测度,重复测量设计的方差分析可以是同一条件下进行的重复测度,也可以是不同条件下的重复测量。
代码和多因素方差分析一样,思路不一样而已~但我还找不到多因素方差分析合适的数据所以这儿就先不写了2333
&4.混合设计的方差分析&& ********待完善
#########统计学学得好的同学们,教教我吧。。
(三)卡方检验
  卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,卡方值越大,越不符合;卡方值越小,偏差越小,越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。(from 百度百科2333)
1.单因素卡方检验
数据源于网络,男女化妆与不化妆人数的理论值与实际值。
import numpy as np
from scipy import stats
from scipy.stats import chisquare
observed = np.array([15,95])
#观测值:110学生中化妆的女生95人,化妆的男生15人
expected = np.array([55,55])
#理论值:110学生中化妆的女生55人,化妆的男生55人
chisquare(observed,expected)
(58.18, 2.044e-14)
2.多因素卡方检验*****正在研究中,学会了完善这一块~
&(四)计数统计(用的数据为tips.csv)
#example:统计性别
count = df['sex'].value_counts()
print count
Name: sex, dtype: int64
(五)回归分析& *****待学习: 数据拟合,广义线性回归。。。。等等
  我觉得吧,其实看着excel就可以实现的功能为何那么复杂,excel确实够通用够便捷,但是处理很大数据量的话也许吃不消吧。学学python绘图也不赖,而且讲真,有的成效真的挺好看的。
(一)Seaborn
我学数据分析可视化是从学习Seaborn入门的,Seaborn是基于matplotlib的Python可视化库,刚开始便接触matplotlib难免有些吃力,参数多且难理解,但是慢慢来总会学会的。还有关键的一点是,seaborn画出来的图好好看。。
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
#小费数据真的挺好的,这儿用tips作为example
tips = sns.load_dataset('tips') #从网络环境导入数据tips
1.lmplot函数
lmplot(x, y, data, hue=None, col=None, row=None, palette=None, col_wrap=None, size=5, aspect=1, markers='o', sharex=True, sharey=True, hue_order=None, col_order=None, row_order=None, legend=True, legend_out=True, x_estimator=None, x_bins=None, x_ci='ci', scatter=True, fit_reg=True, ci=95, n_boot=1000, units=None, order=1, logistic=False, lowess=False, robust=False, logx=False, x_partial=None, y_partial=None, truncate=False, x_jitter=None, y_jitter=None, scatter_kws=None, line_kws=None)功能:Plot data and regression model fits across a FacetGrid.&
下面就不同的例子,对lmplot的参数进行解释
例子1.& 画出总账单和小费回归关系图
用到了lmplot(x, y, data,scatter_kws)
x,y,data一目了然这儿就不多解释了,scatter_kws和line_kws的官方解释如下:
{scatter,line}_kws : dictionarie
Additional keyword arguments to pass to plt.scatter and
scatter为点,line为线。其实就是用字典去限定点和线的各种属性,如例子所示,散点的颜色为灰石色,线条的颜色为印度红,成像效果就是这样点线颜色分离,展现效果很好。大家也可以换上自己想要的图片属性。
sns.lmplot("total_bill", "tip", tips,
scatter_kws={"marker": ".", "color": "slategray"},
line_kws={"linewidth": 1, "color": "indianred"}).savefig('picture2')
另外:颜色还可以使用RGB代码,具体对照表可以参考这个网站,可以自己搭配颜色:
http://www.114la.com/other/rgb.htm
marker也可以有多种样式,具体如下:
.& Point marker
,& Pixel marker
o& Circle marker
v& Triangle down marker
^& Triangle up marker
&& Triangle left marker
&& Triangle right marker
1& Tripod down marker
2& Tripod up marker
3& Tripod left marker
4& Tripod right marker
s& Square marker
p& Pentagon marker
*& Star marker
h& Hexagon marker
H& Rotated hexagon D Diamond marker
d& Thin diamond marker
| Vertical line (vlinesymbol) marker
_& Horizontal line (hline symbol) marker
+& Plus marker
x& Cross (x) marker
sns.lmplot("total_bill", "tip", tips,
scatter_kws={"marker": ".","color":"#FF7F00"},
line_kws={"linewidth": 1, "color": "#BF3EFF"}).savefig('s1')ps.我修改maker属性不成功不知为何,求解答
例子2.用餐人数(size)和小费(tip)的关系图
官方解释:
x_estimator : callable that maps vector -& scalar, optional
Apply this function to each unique value of x and plot the resulting estimate. This is useful when x is a discrete variable. If x_ci is not None, this estimate will be bootstrapped and a confidence interval will be drawn.
大概解释就是:对拥有相同x水平的y值进行映射
plt.figure()
sns.lmplot('size', 'tip', tips, x_estimator= np.mean).savefig('picture3')
{x,y}_jitter : floats, optional
Add uniform random noise of this size to either the x or y variables. The noise is added to a copy of the data after fitting the regression, and only influences the look of the scatterplot. This can be helpful when plotting variables that take discrete values.
jitter是个很有意思的参数, 特别是处理靶数据的overlapping过于严重的情况时, 通过增加一定程度的噪声(noise)实现数据的区隔化, 这样原始数据是若干 点簇 变成一系列密集邻近的点群. 另外, 有的人会经常将 rug 与 jitter 结合使用. 这依人吧.对于横轴取离散水平的时候, 用x_jitter可以让数据点发生水平的扰动.但扰动的幅度不宜过大。
sns.lmplot('size', 'tip', tips, x_jitter=.15).savefig('picture4')
seaborn还可以做出xkcd风格的图片,还挺有意思的
with plt.xkcd():
sns.color_palette('husl', 8)
sns.set_context('paper')
sns.lmplot(x='total_bill', y='tip', data=tips, ci=65).savefig('picture1')
with plt.xkcd():
sns.lmplot('total_bill', 'tip', data=tips, hue='day')
plt.xlabel('hue = day')
plt.savefig('picture5')
with plt.xkcd():
sns.lmplot('total_bill', 'tip', data=tips, hue='smoker')
plt.xlabel('hue = smoker')
plt.savefig('picture6')
sns.set_style('dark')
sns.set_context('talk')
sns.lmplot('size', 'total_bill', tips, order=2)
plt.title('# poly order = 2')
plt.savefig('picture7')
plt.figure()
sns.lmplot('size', 'total_bill', tips, order=3)
plt.title('# poly order = 3')
plt.savefig('picture8')
sns.jointplot("total_bill", "tip", tips).savefig('picture9')
(二)matplotlib ********待完善
让Python直接调用R的函数,下载安装rpy2模块即可~
具体步骤:http://www.geome.cn/posts/python-%E9%80%9A%E8%BF%87rpy2%E8%B0%83%E7%94%A8-r%E8%AF%AD%E8%A8%80/
亲测可用~ 大大大大大前提:电脑上安装了R
(二)ipython ********待完善
阅读(...) 评论()

我要回帖

更多关于 statsmodels 的文章

 

随机推荐