500字范文,内容丰富有趣,生活中的好帮手!
500字范文 > Python描述性统计示例

Python描述性统计示例

时间:2022-04-16 14:30:28

相关推荐

Python描述性统计示例

Python描述性统计示例

1 声明

本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。

2 描述性统计分析简介

描述性统计分析是指运用制表和分类,图形以及计算概括性数据来描述数据特征的一种分析活动。因为本文采用的是Python语言,所以这里采用dataframe、pyplot里的方法来实现数据的描述性统计分析。

3 描述下二手房数据

import pandas as pdimport warnings # current version of seaborn generates a bunch of warnings that we'll ignorewarnings.filterwarnings("ignore")import seaborn as snsimport matplotlib.pyplot as pltsns.set(style="white", color_codes=True)def sndhsVisual():##该数据集有区域、房间数、大厅数、面积数、楼层、有无地铁、有无学区、价格等字段hsdata = pd.read_csv('input/sndHsPr.csv')#print(hsdata.head())##print(hsdata.price.quantile([0.25,0.5,0.75,0.4,0.5,0.6,0.7,0.8,0.9,1.0]))##打印各个段的中位数##print(hsdata.price.quantile([0.25,0.5,0.75,1.0]))#定义区映射字段,方便图标展示dictDist = {u'chaoyang':"朝阳",u'dongcheng':"东城",u'fengtai':"丰台",u'haidian':"海淀",u'shijingshan':"石景山",u'xicheng':"西城"}#对dist(地区)字段应用APPLY方法替换hsdata.dist = hsdata.dist.apply(lambda x: dictDist[x])from scipy import statsimport numpy as np###print(type(stats.mode(hsdata.price)[0][0]))##获取均值、中位数、标准差print(hsdata.price.agg(['mean','median','std']))#方法一通过stats.mode获取众数mode = np.array(stats.mode(hsdata.price)[0][0].tolist())mean_median=hsdata.price.agg(['mean', 'median', 'std']).as_matrix()merger = np.hstack((mode, mean_median))###print(type(merger)) ##类型为ndarray##获取众数、均值、中位数、标准差print(pd.Series(merger,index=['mode','mean', 'median', 'std']))print('###############')##方法二通过value_counts下的index.get_level_values获取众数mode_n = hsdata['price'].value_counts(ascending=False).index.get_level_values(0).values[0]print(pd.Series([mode_n],index=['mode']).append(hsdata.price.agg(['mean','median','std'])))print('###############')##大于0的,右偏数据print("偏度"+str(hsdata['price'].skew())) # 大于0的,右偏数据##小于0的,分散的print("峰度"+str(hsdata['price'].kurtosis())) #小于0的,分散的##print(hsdata.head(n=10)) # 这里可以指定n##print(hsdata.info()) # 打印数据的信息(列名、数据行、为空记录数、数据类型)##pd.set_option('display.width', 10) # 150,设置打印宽度##pd.set_option('display.max_colwidth', 2)hsdata.price = hsdata.price / 10000 # 以万为单位pd.set_option('display.float_format', lambda x: '%.2f' % x) #指定数据显示为保留小数点后2位#print(hsdata.describe(include =[np.number])) ## 这里对所有数字类型的查看数据描述,这里分不出连续变量、离散变量## 通过describe方法查看变量的统计信息,变量分析-连续性型print(hsdata[['area', 'price']].describe(include=[np.number])) ## 这里看连续型的更有意义## 1 变量分析-离散型#print(hsdata.columns.values)for i in range(hsdata.columns.size):if hsdata.columns.values[i] not in ('area','price'):print("变量"+hsdata.columns.values[i]+"频次统计:")''' df1 = pd.DataFrame(hsdata[hsdata.columns.values[i]].value_counts()).Tdf1.index=['value_cnt']print(df1)'''df = hsdata[hsdata.columns.values[i]].agg(['value_counts']) #注意这里的[],是Series到DataFrame的过程print(df.T)print('\n')else:continue## 2 变量分析-连续型plt.rcParams['font.sans-serif']=['SimHei']sns.distplot(hsdata.price,color='green',bins=20,kde=True,rug = False) #kde表示是否画出一条高斯核密度估计线,这里的密度对应频次,rug=True表示rug表示在x轴上每个观测上生成的小细条plt.xlabel('房子单价 单位万/平米')plt.ylabel('密度')#plt.show()'''plt.hist(hsdata.price,bins=20)plt.show()'''##按照地区的中位数排名并记录为新的DataFramedf_dist_price=pd.DataFrame(hsdata.groupby('dist').median().price.sort_values(ascending=True))## 打印按照地区中位数升序的排名的索引值print('按照地区中位数升序的排名:'+str(df_dist_price.index.values))'''# 方法1,借助dataframe的category类型对指定的list排序data_tmp = hsdata[['dist', 'price']]data_tmp.dist = data_tmp.dist.astype("category")data_tmp.dist.cat.set_categories(["石景山", "丰台", "朝阳", "海淀", "东城", "西城"], inplace=True)##dat1.dist.cat.set_categories(df_dist_price.index.values, inplace=True) 或者用这种方式替换sns.boxplot(x='dist', y='price', data=data_tmp)##data_tmp.boxplot(column='price',by='dist') 或者调用DataFrame的boxplot方法plt.ylabel("房价单价(万元/平方米)")plt.xlabel("城区")plt.title("城区对房价的分组箱线图")plt.show()'''## 方法2,借助sns.boxplot的order属性,这里的有两个分类变量加一个连续变量时X是其中一个,hue是另外个.data_dist = hsdata[['dist', 'price']]sns.boxplot(x='dist', y='price', data=data_dist, order=df_dist_price.index.values,hue=None)plt.ylabel("单位面积房价(万元/平方米)")plt.xlabel("城区")plt.title("城区对房价的分组箱线图")plt.show()#房间数量与价格的描述性统计data_rownum = hsdata[['roomnum','price']]df_rownum_price_sort = pd.DataFrame(data_rownum.groupby('roomnum').median().price.sort_values(ascending=True))sns.boxplot(x='roomnum',y='price',data=data_rownum,order=df_rownum_price_sort.index.values,hue=None)plt.ylabel("单位面积房价(万元/平方米)");plt.xlabel("房子室数")plt.title("房子室数对房价的分组箱线图")plt.show()# 厅数与价格的描述性统计##print(hsdata.groupby('halls').halls.agg(['count']))#print(hsdata['halls'].value_counts())#print("厅最大值:"+str(hsdata['halls'].max()))data_halls = hsdata[['halls', 'price']]data_halls = hsdata[['halls', 'price']]df_halls_price_sort = pd.DataFrame(data_halls.groupby('halls').median().price.sort_values(ascending=True))sns.boxplot(x='halls', y='price', data=data_halls, order=df_halls_price_sort.index.values, hue=None)plt.ylabel("单位面积房价(万元/平方米)");plt.xlabel("房子厅数")plt.title("房子厅数对房价的分组箱线图")plt.show()'''print(data_halls.groupby('halls').median().price.sort_index(ascending=False))data_halls.halls = data_halls.halls.astype('category')data_halls.halls.cat.set_categories([0, 1, 2, 3], inplace=True)data_halls.boxplot(column='price', by='halls')plt.show()''''''hsdata[['area', 'price']].plot.scatter(x='price',y='area')plt.show()'''data_floor = hsdata[['floor', 'price']]df_floor_price_sort = pd.DataFrame(data_floor.groupby('floor').median().price.sort_values(ascending=True))sns.boxplot(x='floor', y='price', data=data_floor, order=df_floor_price_sort.index.values, hue=None)plt.ylabel("单位面积房价(万元/平方米)");plt.xlabel("楼层")plt.title("楼层对房价的分组箱线图")plt.show()data_subway = hsdata[['subway', 'price']]df_subway_price_sort = pd.DataFrame(data_subway.groupby('subway').median().price.sort_values(ascending=True))sns.boxplot(x='subway', y='price', data=data_subway, order=df_subway_price_sort.index.values, hue=None)plt.ylabel("单位面积房价(万元/平方米)");plt.xlabel("地铁")plt.title("地铁对房价的分组箱线图")plt.show()data_school = hsdata[['school', 'price']]df_school_price_sort = pd.DataFrame(data_school.groupby('school').median().price.sort_values(ascending=True))sns.boxplot(x='school', y='price', data=data_school, order=df_school_price_sort.index.values, hue=None)plt.ylabel("单位面积房价(万元/平方米)");plt.xlabel("学校")plt.title("学校对房价的分组箱线图")plt.show()##地区与学区中位数统计print(hsdata.groupby(['dist', 'school']).median().price.sort_index(ascending=False).unstack())hsdata.boxplot(column='price', by=['dist', 'school'], figsize=(12, 6))plt.show()if __name__ == '__main__':sndhsVisual()

4 执行结果

"D:\Program Files\Python37\python.exe" E:/dataVisual/Iris.py

mean 61151.810919

median 57473.000000

std 22293.358147

Name: price, dtype: float64

mode 50000.000000

mean 61151.810919

median 57473.000000

std 22293.358147

dtype: float64

###############

mode 50000.000000

mean 61151.810919

median 57473.000000

std 22293.358147

dtype: float64

###############

偏度0.6794935869486859

峰度-0.019305888544372873

area price

count 16210.00 16210.00

mean 91.75 6.12

std 44.00 2.23

min 30.06 1.83

25% 60.00 4.28

50% 78.83 5.75

75% 110.52 7.61

max 299.00 14.99

变量dist频次统计:

丰台 海淀 朝阳 东城 西城 石景山

value_counts 2947 2919 2864 2783 2750 1947

变量roomnum频次统计:

2 3 1 4 5

value_counts 7971 4250 3212 675 102

变量halls频次统计:

1 2 0 3

value_counts 11082 4231 812 85

变量floor频次统计:

middle high low

value_counts 5580 5552 5078

变量subway频次统计:

1 0

value_counts 13419 2791

变量school频次统计:

0 1

value_counts 11297 4913

按照地区中位数升序的排名:['石景山' '丰台' '朝阳' '海淀' '东城' '西城']

school 0 1

dist

东城 6.71 7.75

丰台 4.16 4.90

朝阳 4.96 5.67

海淀 6.02 7.56

石景山 3.77 3.28

西城 7.26 9.32

Process finished with exit code 0

结论:通过分析得到地区、有无地铁、是否学区房跟价格关联性较大。

例子中的图标:

城区房价箱线图

室数房价箱线图

厅数房价箱线图:

楼层房价箱线图:

地铁房价箱线图:

学校房价箱线图:

地区与学箱线图:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。