Python描述性统计示例
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Python描述性統計示例
1 聲明
本文的數據來自網絡,部分代碼也有所參照,這里做了注釋和延伸,旨在技術交流,如有冒犯之處請聯系博主及時處理。
2 描述性統計分析簡介
描述性統計分析是指運用制表和分類,圖形以及計算概括性數據來描述數據特征的一種分析活動。因為本文采用的是Python語言,所以這里采用dataframe、pyplot里的方法來實現數據的描述性統計分析。
3 描述下二手房數據
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():##該數據集有區域、房間數、大廳數、面積數、樓層、有無地鐵、有無學區、價格等字段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
?
結論:通過分析得到地區、有無地鐵、是否學區房跟價格關聯性較大。
例子中的圖標:
城區房價箱線圖
室數房價箱線圖
廳數房價箱線圖:
樓層房價箱線圖:
地鐵房價箱線圖:?
學校房價箱線圖:?
?地區與學箱線圖:
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Python描述性统计示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小区电动车智能充电桩安全吗?那种露天的下
- 下一篇: 决策树划分