1.分布分析
研究数据的分布特征和分布类型,分定量数据、定性数据区分基本统计量
极差 / 频率分布情况 / 分组组距及组数
2.数据准备
# 数据读取
data = pd.read_csv(\'C:/Users/Hjx/Desktop/深圳罗湖二手房信息.csv\',engine = \'python\')
plt.scatter(data[\'经度\'],data[\'纬度\'], # 按照经纬度显示
s = data[\'房屋单价\']/500, # 按照单价显示大小
c = data[\'参考总价\'], # 按照总价显示颜色
alpha = 0.4, cmap = \'Reds\')
plt.grid()
print(data.dtypes)
print(\'-------\n数据长度为%i条\' % len(data))
data.head()
# 通过数据可见,一共8个字段
# 定量字段:房屋单价,参考首付,参考总价,*经度,*纬度,*房屋编码
# 定性字段:小区,朝向
3.求极差
# 极差:max-min
# 只针对定量字段
def d_range(df,*cols):
krange = []
for col in cols:
crange = df[col].max() - df[col].min()
krange.append(crange)
return(krange)
# 创建函数求极差
key1 = \'参考首付\'
key2 = \'参考总价\'
dr = d_range(data,key1,key2)
print(\'%s极差为 %f \n%s极差为 %f\' % (key1, dr[0], key2, dr[1]))
# 求出数据对应列的极差
4.频率分布情况
# 频率分布情况 - 定量字段 # ① 通过直方图直接判断分组组数 data[key2].hist(bins=10) # 简单查看数据分布,确定分布组数 → 一般8-16即可 # 这里以10组为参考 -------------------------------------------------------------- # 频率分布情况 - 定量字段 # ② 求出分组区间 gcut = pd.cut(data[key2],10,right=False) gcut_count = gcut.value_counts(sort=False) # 不排序 data[\'%s分组区间\' % key2] = gcut.values print(gcut.head(),\'\n------\') print(gcut_count) data.head() # pd.cut(x, bins, right):按照组数对x分组,且返回一个和x同样长度的分组dataframe,right → 是否右边包含,默认True # 通过groupby查看不同组的数据频率分布 # 给源数据data添加“分组区间”列 -------------------------------------------------------------------- # 频率分布情况 - 定量字段 # ③ 求出目标字段下频率分布的其他统计量 → 频数,频率,累计频率 r_zj = pd.DataFrame(gcut_count) r_zj.rename(columns ={gcut_count.name:\'频数\'}, inplace = True) # 修改频数字段名 r_zj[\'频率\'] = r_zj / r_zj[\'频数\'].sum() # 计算频率 r_zj[\'累计频率\'] = r_zj[\'频率\'].cumsum() # 计算累计频率 r_zj[\'频率%\'] = r_zj[\'频率\'].apply(lambda x: "%.2f%%" % (x*100)) # 以百分比显示频率 r_zj[\'累计频率%\'] = r_zj[\'累计频率\'].apply(lambda x: "%.2f%%" % (x*100)) # 以百分比显示累计频率 r_zj.style.bar(subset=[\'频率\',\'累计频率\'], color=\'green\',width=100) # 可视化显示 ------------------------------------------------------------------------ # 频率分布情况 - 定量字段 # ④ 绘制频率直方图 r_zj[\'频率\'].plot(kind = \'bar\', width = 0.8, figsize = (12,2), rot = 0, color = \'k\', grid = True, alpha = 0.5) plt.title(\'参考总价分布频率直方图\') # 绘制直方图 x = len(r_zj) y = r_zj[\'频率\'] m = r_zj[\'频数\'] for i,j,k in zip(range(x),y,m): plt.text(i-0.1,j+0.01,\'%i\' % k, color = \'k\') # 添加频数标签