资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,二级,三级,四级,五级,2020/8/13,#,第,5,章基本统计,第5章基本统计,1,5.1,相关性,计算两个数据系列之间的相关性是统计学中的常见操作。用,spark.ml,可灵活地计算多个系列两两之间的相关性。目前,Spark,支持的相关方法是,Pearson,方法和,Spearman,方法。,Correlation,使用指定的方法计算输入数据集的相关矩阵。输出将是一个,DataFrame,,它包含向量列的相关矩阵。,【,例,5-1】Correlation,的,Python API,代码。,from _future_ import print_function,#$example on$,from pyspark.ml.linalg import Vectors from pyspark.ml.stat import Correlation,#$example off$,5.1 相关性计算两个数据系列之间的相关性是统计学中的常见,2,5.1,相关性,from pyspark.sql import SparkSession if _name_=_main_:spark=SparkSession,.builder,.appName(CorrelationExample),.getOrCreate()#,$example on$,data=(Vectors.sparse(4,(0,1.0),(3,-2.0),),(Vectors.dense(4.0,5.0,0.0,3.0),),(Vectors.dense(6.0,7.0,0.0,8.0),),5.1 相关性from pyspark.sql impor,3,5.1,相关性,(Vectors.sparse(4,(0,9.0),(3,1.0),),df=spark.createDataFrame(data,features),r1=Correlation.corr(df,features).head(),print(Pearson correlation matrix:n+str(r10),r2=Correlation.corr(df,features,spearman).head()print(Spearman correlation matrix:n+str(r20),#$example off$spark.stop(),5.1 相关性(Vectors.sparse(4,(0,4,5.1,相关性,5.1 相关性,5,5.2,假设检验,假设检验是统计学中一种强有力的工具,用于确定结果是否具有统计显著性,无论该结果是否偶然发生。,spark.ml,目前支持,Pearson,的卡方(,2,)独立性测试。,ChiSquareTest,针对标签的每个特征进行,Pearson,独立测试。对于每个特征,(特征,标签)对被转换为列联矩阵,对其计算卡方统计量。所有标签和特征值必须是可分类的。,【,例,5-2】Pearson,卡方独立性测试的,Python API,代码。,5.2 假设检验 假设检验是统计学中一种强有力的工具,用于,6,5.2,假设检验,from _future_ import print_function,from pyspark.sql import SparkSession,#$example on$,from pyspark.ml.linalg import Vectors,from pyspark.ml.stat import ChiSquareTest,#$example off$if _name_=_main_:,spark=SparkSession,5.2 假设检验 from _future_ impo,7,5.2,假设检验,builder,.appName(ChiSquareTestExample),.getOrCreate(),#$example on$,data=(0.0,Vectors.dense(0.5,10.0),(0.0,Vectors.dense(1.5,20.0),(1.0,Vectors.dense(1.5,30.0),(0.0,Vectors.dense(3.5,30.0),(0.0,Vectors.dense(3.5,40.0),(1.0,Vectors.dense(3.5,40.0),5.2 假设检验 builder,8,5.2,假设检验,df=spark.createDataFrame(data,label,features),r=ChiSquareTest.test(df,features,label).head()print(pValues:+str(r.pValues),print(degreesOfFreedom:+str(r.degreesOfFreedom)print(statistics:+str(r.statistics),#$example off$spark.stop(),5.2 假设检验 df=spark.createDa,9,5.2,假设检验,将上述代码保存成,Pearsonx.py,,然后用命令,spark-submit Pearsonx.py,运行,结果如图,5-2,所示。,5.2 假设检验 将上述代码保存成 Pearsonx.py,10,5.3,累积器,通过,Summarizer,为,Dataframe,提供向量列摘要统计。可用指标是列的大值、小值、平均值、方差、非零数及总计数。,【,例,5-3】Summarizer,的,Python API,代码。,from _future_ import print_function,from pyspark.sql import SparkSession,#$example on$,from pyspark.ml.stat import Summarizer,from pyspark.sql import Row,from pyspark.ml.linalg import Vectors,5.3 累积器通过 Summarizer 为 Datafr,11,5.3,累积器,#$example off$,if _name_=_main_:,spark=SparkSession,.builder,.appName(SummarizerExample),.getOrCreate()sc=spark.sparkContext#$example on$,5.3 累积器#$example off$,12,5.3,累积器,df=sc.parallelize(Row(weight=1.0,features=Vectors.dense(1.0,1.0,1.0),Row(weight=0.0,features=Vectors.dense(1.0,2.0,3.0).,toDF(),#create summarizer for multiple metrics mean and count,summarizer=Summarizer.metrics(mean,count),#compute statistics for multiple metrics with weight,df.select(summarizer.summary(df.features,df.weight).show(truncate=False),5.3 累积器df=sc.parallelize(R,13,5.3,累积器,#compute statistics for multiple metrics without weight df.select(summarizer.summary(df.features).show(truncate=False),#compute statistics for single metric mean with weight,df.select(Summarizer.mean(df.features,df.weight).show(truncate=False),#compute statistics for single metric mean without weight df.select(Summarizer.mean(df.features).show(truncate=False),#$example off$spark.stop(),5.3 累积器#compute statistics f,14,5.3,累积器,将上述代码保存成,Summarizerx.py,,然后用命令,spark-submit Summarizerx.py,运行,结果如图,5-3,所示。,5.3 累积器将上述代码保存成 Summarizerx.p,15,5.4,摘要统计,【,例,5-4】,通过函数,colStats,为,RDD Vector,提供列摘要统计信息,,colStats,()返回一个,MultivariateStatisticalSummary,实例。,import numpy as np,from pyspark.mllib.stat import Statistics mat=sc.parallelize(,np.array(1.0,10.0,100.0),np.array(2.0,20.0,200.0),np.array(3.0,30.0,300.0)#an RDD of Vectors,#Compute column summary statistics.,summary=Statistics.colStats(mat),5.4 摘要统计【例 5-4】通过函数 colStats,16,5.4,摘要统计,print(summary.mean(),#a dense vector containing the mean value for each column print(summary.variance(),#column-wise variance,print(summary.numNonzeros(),#number of nonzeros in each column,将上述代码保存成,RDDVectorx.py,,然后用命令,spark-submit RDDVectorx.py,运行,结果如图,5-4,所示。,5.4 摘要统计 print(summary.mean(),17,5.4,摘要统计,5.4 摘要统计,18,5.4,摘要统计,与驻留在,spark.mllib,中的其他统计函数不同,可以对,RDD,的键值对执行分层抽样方法,sampleByKey,和,sampleByKeyExact,。对于分层抽样,可以将键视为标签,将值视为特定属性。例如,关键字可以是男人、女人或文档,ID,,并且相应的值可以是人的年龄列表或文档中的单词列表。,sampleByKey,方法将翻转硬币以决定是否对样本进行采样,因此需要对数据进行一次传递,并提供预期的样本大小。,sampleByKeyExact,比,sampleByKey,中使用的每层简单随机抽样需要更多的资源,但是会提供,99.99%,置信度的精确抽样大小。,5.4 摘要统计 与驻留在 spark.mllib 中的其,19,5.4,摘要统计,【,例,5-5】,分层抽样。,sampleByKey,()允许用户近似采样。,from pyspark import SparkContext,if _name_=_main_:,sc=SparkContext(appName=StratifiedSamplingExample),#SparkContext#$example on$,#an RDD of any key value pairs,data=sc.parallelize(1,a),(1,b),(2,c),(2,d),(2,e),(3,f),5.4 摘要统计【例 5-5】分
展开阅读全文