Python描述性统计示例
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Python描述性統(tǒng)計(jì)示例
1 聲明
本文的數(shù)據(jù)來(lái)自網(wǎng)絡(luò),部分代碼也有所參照,這里做了注釋和延伸,旨在技術(shù)交流,如有冒犯之處請(qǐng)聯(lián)系博主及時(shí)處理。
2 描述性統(tǒng)計(jì)分析簡(jiǎn)介
描述性統(tǒng)計(jì)分析是指運(yùn)用制表和分類(lèi),圖形以及計(jì)算概括性數(shù)據(jù)來(lái)描述數(shù)據(jù)特征的一種分析活動(dòng)。因?yàn)楸疚牟捎玫氖荘ython語(yǔ)言,所以這里采用dataframe、pyplot里的方法來(lái)實(shí)現(xiàn)數(shù)據(jù)的描述性統(tǒng)計(jì)分析。
3 描述下二手房數(shù)據(jù)
import pandas as pd import warnings # current version of seaborn generates a bunch of warnings that we'll ignore warnings.filterwarnings("ignore") import seaborn as sns import matplotlib.pyplot as plt sns.set(style="white", color_codes=True)def sndhsVisual():##該數(shù)據(jù)集有區(qū)域、房間數(shù)、大廳數(shù)、面積數(shù)、樓層、有無(wú)地鐵、有無(wú)學(xué)區(qū)、價(jià)格等字段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]))##打印各個(gè)段的中位數(shù)##print(hsdata.price.quantile([0.25,0.5,0.75,1.0]))#定義區(qū)映射字段,方便圖標(biāo)展示dictDist = {u'chaoyang':"朝陽(yáng)",u'dongcheng':"東城",u'fengtai':"豐臺(tái)",u'haidian':"海淀",u'shijingshan':"石景山",u'xicheng':"西城"}#對(duì)dist(地區(qū))字段應(yīng)用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]))##獲取均值、中位數(shù)、標(biāo)準(zhǔn)差print(hsdata.price.agg(['mean','median','std']))#方法一通過(guò)stats.mode獲取眾數(shù)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)) ##類(lèi)型為ndarray##獲取眾數(shù)、均值、中位數(shù)、標(biāo)準(zhǔn)差print(pd.Series(merger,index=['mode','mean', 'median', 'std']))print('###############')##方法二通過(guò)value_counts下的index.get_level_values獲取眾數(shù)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的,右偏數(shù)據(jù)print("偏度"+str(hsdata['price'].skew())) # 大于0的,右偏數(shù)據(jù)##小于0的,分散的print("峰度"+str(hsdata['price'].kurtosis())) #小于0的,分散的##print(hsdata.head(n=10)) # 這里可以指定n##print(hsdata.info()) # 打印數(shù)據(jù)的信息(列名、數(shù)據(jù)行、為空記錄數(shù)、數(shù)據(jù)類(lèi)型)##pd.set_option('display.width', 10) # 150,設(shè)置打印寬度##pd.set_option('display.max_colwidth', 2)hsdata.price = hsdata.price / 10000 # 以萬(wàn)為單位pd.set_option('display.float_format', lambda x: '%.2f' % x) #指定數(shù)據(jù)顯示為保留小數(shù)點(diǎn)后2位#print(hsdata.describe(include =[np.number])) ## 這里對(duì)所有數(shù)字類(lèi)型的查看數(shù)據(jù)描述,這里分不出連續(xù)變量、離散變量## 通過(guò)describe方法查看變量的統(tǒng)計(jì)信息,變量分析-連續(xù)性型print(hsdata[['area', 'price']].describe(include=[np.number])) ## 這里看連續(xù)型的更有意義## 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]+"頻次統(tǒng)計(jì):")''' 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的過(guò)程print(df.T)print('\n')else:continue## 2 變量分析-連續(xù)型plt.rcParams['font.sans-serif']=['SimHei']sns.distplot(hsdata.price,color='green',bins=20,kde=True,rug = False) #kde表示是否畫(huà)出一條高斯核密度估計(jì)線,這里的密度對(duì)應(yīng)頻次,rug=True表示rug表示在x軸上每個(gè)觀測(cè)上生成的小細(xì)條plt.xlabel('房子單價(jià) 單位萬(wàn)/平米')plt.ylabel('密度')#plt.show()'''plt.hist(hsdata.price,bins=20)plt.show()'''##按照地區(qū)的中位數(shù)排名并記錄為新的DataFramedf_dist_price=pd.DataFrame(hsdata.groupby('dist').median().price.sort_values(ascending=True))## 打印按照地區(qū)中位數(shù)升序的排名的索引值print('按照地區(qū)中位數(shù)升序的排名:'+str(df_dist_price.index.values))'''# 方法1,借助dataframe的category類(lèi)型對(duì)指定的list排序data_tmp = hsdata[['dist', 'price']]data_tmp.dist = data_tmp.dist.astype("category")data_tmp.dist.cat.set_categories(["石景山", "豐臺(tái)", "朝陽(yáng)", "海淀", "東城", "西城"], 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') 或者調(diào)用DataFrame的boxplot方法plt.ylabel("房?jī)r(jià)單價(jià)(萬(wàn)元/平方米)")plt.xlabel("城區(qū)")plt.title("城區(qū)對(duì)房?jī)r(jià)的分組箱線圖")plt.show()'''## 方法2,借助sns.boxplot的order屬性,這里的有兩個(gè)分類(lèi)變量加一個(gè)連續(xù)變量時(shí)X是其中一個(gè),hue是另外個(gè).data_dist = hsdata[['dist', 'price']]sns.boxplot(x='dist', y='price', data=data_dist, order=df_dist_price.index.values,hue=None)plt.ylabel("單位面積房?jī)r(jià)(萬(wàn)元/平方米)")plt.xlabel("城區(qū)")plt.title("城區(qū)對(duì)房?jī)r(jià)的分組箱線圖")plt.show()#房間數(shù)量與價(jià)格的描述性統(tǒng)計(jì)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("單位面積房?jī)r(jià)(萬(wàn)元/平方米)");plt.xlabel("房子室數(shù)")plt.title("房子室數(shù)對(duì)房?jī)r(jià)的分組箱線圖")plt.show()# 廳數(shù)與價(jià)格的描述性統(tǒng)計(jì)##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("單位面積房?jī)r(jià)(萬(wàn)元/平方米)");plt.xlabel("房子廳數(shù)")plt.title("房子廳數(shù)對(duì)房?jī)r(jià)的分組箱線圖")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("單位面積房?jī)r(jià)(萬(wàn)元/平方米)");plt.xlabel("樓層")plt.title("樓層對(duì)房?jī)r(jià)的分組箱線圖")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("單位面積房?jī)r(jià)(萬(wàn)元/平方米)");plt.xlabel("地鐵")plt.title("地鐵對(duì)房?jī)r(jià)的分組箱線圖")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("單位面積房?jī)r(jià)(萬(wàn)元/平方米)");plt.xlabel("學(xué)校")plt.title("學(xué)校對(duì)房?jī)r(jià)的分組箱線圖")plt.show()##地區(qū)與學(xué)區(qū)中位數(shù)統(tǒng)計(jì)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 執(zhí)行結(jié)果
"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頻次統(tǒng)計(jì):
? ? ? ? ? ? ? ? 豐臺(tái) ? ?海淀 ? ?朝陽(yáng) ? ?東城 ? ?西城 ? 石景山
value_counts ?2947 ?2919 ?2864 ?2783 ?2750 ?1947
變量roomnum頻次統(tǒng)計(jì):
? ? ? ? ? ? ? ? ?2 ? ? 3 ? ? 1 ? ?4 ? ?5
value_counts ?7971 ?4250 ?3212 ?675 ?102
變量halls頻次統(tǒng)計(jì):
? ? ? ? ? ? ? ? ? 1 ? ? 2 ? ?0 ? 3
value_counts ?11082 ?4231 ?812 ?85
變量floor頻次統(tǒng)計(jì):
? ? ? ? ? ? ? middle ?high ? low
value_counts ? ?5580 ?5552 ?5078
變量subway頻次統(tǒng)計(jì):
? ? ? ? ? ? ? ? ? 1 ? ? 0
value_counts ?13419 ?2791
變量school頻次統(tǒng)計(jì):
? ? ? ? ? ? ? ? ? 0 ? ? 1
value_counts ?11297 ?4913
按照地區(qū)中位數(shù)升序的排名:['石景山' '豐臺(tái)' '朝陽(yáng)' '海淀' '東城' '西城']
school ? ?0 ? ?1
dist ? ? ? ? ? ?
東城 ? ? 6.71 7.75
豐臺(tái) ? ? 4.16 4.90
朝陽(yáng) ? ? 4.96 5.67
海淀 ? ? 6.02 7.56
石景山 ? ?3.77 3.28
西城 ? ? 7.26 9.32
Process finished with exit code 0
?
結(jié)論:通過(guò)分析得到地區(qū)、有無(wú)地鐵、是否學(xué)區(qū)房跟價(jià)格關(guān)聯(lián)性較大。
例子中的圖標(biāo):
城區(qū)房?jī)r(jià)箱線圖
室數(shù)房?jī)r(jià)箱線圖
廳數(shù)房?jī)r(jià)箱線圖:
樓層房?jī)r(jià)箱線圖:
地鐵房?jī)r(jià)箱線圖:?
學(xué)校房?jī)r(jià)箱線圖:?
?地區(qū)與學(xué)箱線圖:
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Python描述性统计示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小区电动车智能充电桩安全吗?那种露天的下
- 下一篇: 决策树划分