Python数据分析与数据挖掘教学课件第9章 数据分析
第9章 数据分析Python数据分析与数据挖掘9.1 统计分析9.1.1描述性统计9.1.2汇总统计9.1.3参数估计与假设检验9.1.4相关性分析9.1.1 描述性统计频数分析集中趋势分析离散程度分析其他num_legsnum_wingsfalcon22dog40cat40ant60bee64频数分析pandas.DataFrame.value_counts(subset = None, normalize= False, sort= True, ascending= False)df#原始数据df.value_counts()#统计df各系列数据取值的组合情况的频次num_legsnum_wings40264101221dtype:int64num_legsnum_wingsfalcon22dog40cat40ant60bee64频数分析pandas.Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)df#原始数据dfnum_legs.unique()#统计num_legs的取值array(2,4,6,dtype=int64)dfnum_legs.value_counts(normalize=True)#统计取值频次比例60.440.420.2Name:num_legs,dtype:float64集中趋势分析函数函数说明说明.mean()计算数据中各系列的均值;.median()计算数据中各系列的中位数值;.mode()计算数据中各系列的众数值;.quantile()计算数据中各系列的四(n)分位数值。集中趋势分析dfA.mean()#计算pandas.Series的均值48.32df.median()#计算各数据系列的中位数值A47.5B47.5C55.0dtype:float64A48.32B47.28C48.54dtype:float64df=pd.DataFrame(np.random.randint(1,100,(50,3),columns=list(ABC)df.mean()#计算各数据系列的均值集中趋势分析df.quantile(q=0.0,0.25,0.5,0.75,1.0)#计算各数据系列的四分位数ABC0.001.004.001.000.2529.7527.5021.750.5047.5047.5055.000.7576.7567.2573.001.0096.0099.0095.0001136266dtype:int32dfA.mode()#计算pandas.Series的众数值dfA.quantile(q=0.35)#计算特定分位数值离散程度分析函数函数说明说明.max().min()计算数据中各系列的最大值和最小值.std()计算数据中各系列的标准差值.mad()计算数据中各系列的平均绝对偏差平均绝对偏差.cov()计算数据中各系列的协方差值numpy.ptp()计算数据中各系列的极差值离散程度分析df.std()#计算各数据系列的标准差值A29.143165B26.264774C28.829697dtype:float64df.max()#计算各数据系列的最大值A96B99C95dtype:int32df=pd.DataFrame(np.random.randint(1,100,(50,3),columns=list(ABC)产生数据df.cov()ABCA849.324082-126.86693963.599184B-126.866939689.8383679.743673C63.5991849.743673831.151429df.mad()#计算各数据系列的平均绝对偏差A24.6656B21.1200C25.3184dtype:float64其他df.describe()ABCcount50.0000050.00000050.000000mean56.9000050.90000045.680000std30.6256230.12575730.615749min1.000002.0000002.00000025%39.0000021.00000017.25000050%57.0000055.50000041.00000075%84.0000073.50000074.750000max99.0000099.00000099.000000df.aggregate(np.max,axis=0)A99B99C99dtype:int32df.apply(np.median,axis=0)A57.0B55.5C41.0dtype:float64汇总统计时序数据汇总resample交叉表crosstable分类汇总groupby数据透视表pivot_table时序数据汇总resamplepandas.DataFrame.resample(rule, axis=0, closed=None, label=None, convention=start, kind=None, loffset=None, base=None, on=None, level=None, origin=start_day, offset=None)df.resample(3T).sum()#按3个样本进行汇总AB2000-01-0100:00:00782000-01-0100:03:00882000-01-0100:06:0023df.resample(4min).mean()#按4分钟进行汇总AB2000-01-0100:00:002.03.0000002000-01-0100:04:003.02.333333时序数据汇总resamplepandas.DataFrame.resample(rule, axis=0, closed=None, label=None, convention=start, kind=None, loffset=None, base=None, on=None, level=None, origin=start_day, offset=None)df=pd.DataFrame(np.random.randint(1,5,(7,2),pd.date_range(1/1/2000,periods=7,freq=T),list(AB)dfAB2000-01-0100:00:00332000-01-0100:01:00132000-01-0100:02:00322000-01-0100:03:00142000-01-0100:04:00322000-01-0100:05:00422000-01-0100:06:0023交叉表crosstablepandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name =All, dropna =True, normalize=False)参数参数说明说明index交叉表中的行的属性(可以是多个属性)columns交叉表中的列的属性(可以是多个属性)values进行汇总的值或属性rownames交叉表行数据名称(如果设定为特定值,个数必须与所给的行变量个数匹配)colnames交叉表列数据名称(如果设定为特定值,个数必须与所给的列变量个数匹配)aggfunc汇总算法函数,使用时必须设置values参数margins是否给出各行或列的汇总数据,如小计和总计等。margins_name汇总行或列的名字(当参数margins=True时)。dropna是否剔除数据中全为NaN值的列normalize当结果以百分比表示时,数据的计算方法(all或True表示对所有数据之和计算百分比;index或0表示按各行计算百分比;columns或1表示按各列计算百分比)。这时,汇总行或列也以百分比表示。交叉表crosstable#读入数据df=pd.read_csv(crosstab_data.csv)#创建交叉表ct=pd.crosstab(df.outlook,df.windy,df.play,rownames=OUTLOOK,WINDY,colnames=PLAY,margins=True,margins_name=合计,normalize=index,dropna=True)print(ct)PLAYnoyesOUTLOOKWINDYovercastFalse0.1428570.857143True0.3333330.666667rainyFalse0.2857140.714286True0.6666670.333333sunnyFalse0.2857140.714286True0.5000000.500000合计0.3529410.647059分类汇总groupbypandas.DataFrame.groupby(by=None, axis=0, level=None, as_index =True, sort =True, group_keys =True, squeeze, observed =False, dropna:bool=True)参数参数说明说明by数据中进行分类的属性axis制定按行(axis=0)或按列(axis=1)进行分类level指定MultiIndex数据中进行分类的属性的等级as_index在分类结果中,是否将分类属性作为index,还是按如SQL查询结果的形式输出sort是否对分类属性进行排序group_keys是否将分类属性设置为数据的indexobserved对Categorical属性的分类汇总,是否显示有统计结果的项,还是所有分类汇总组合项(即结果中的统计值或为0)。dropna是否剔除分类属性结果为N/A的项分类汇总groupbydf=pd.read_csv(groupby_data.csv,engine=python)#获取数据gb=df.groupby(by=outlook,windy)#groupby处理avg=gb.mean()#分类汇总均值print(avg)temperaturehumidityoutlookwindyovercastFalse78.00081.00True68.00077.50rainyFalse68.75087.00True62.87571.25sunnyFalse76.00076.25True80.00079.20数据透视表pivot_tablepandas.pivot_table(data, values=None, index=None, columns=None, aggfunc=mean, fill_value=None, margins=False, dropna=True, margins_name=All, observed=False)参数参数说明说明data数据values进行数值统计的数据系列index进行分组统计的数据系列(grouper),数据透视表行标签。columns进行汇总统计的数据系列,数据透视表列标签。aggfunc汇总统计的计算方法,可以是函数(默认为numpy.mean)或函数列表,也可以是字典(key为进行汇总统计的系列,value为所使用的函数或函数列表)。fill_value数据透视表结果数据中,代替缺失值的内容或标识。dropna是否剔除具有缺失值的数据observed是否显示分类(Categorical)型的grouper的所有取值,还是仅显示有统计值的项;数据透视表pivot_table#读入数据df=pd.read_csv(pivot_data.csv,engine=python)#统计分析主客场胜负情况pivot1=pd.pivot_table(df,