Python数据分析之分布分析

Python数据分析之分布分析

概念:就是研究数据的分布特征和分布类型,分定量数据、定性数据区分基本统计量;
应用场景:分布分析主要用于观察数据分布特征,常见方法比如散点图、求极差、观察频率分布情况、分组组距及组数

*本次以某壳二手房数据为分析案例:

(1)导入模块:*

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

(2)导入数据:

data = pd.read_csv('C:\\Users\\benrendidiao\\Desktop\\py.test/样例数据.csv',engine = 'python')
data

————————————————————————————————
在这里插入图片描述
————————————————————————————————
(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]))

————————————————————————————————
单价极差为 31448.000000
总价极差为 450.000000
————————————————————————————————

(4)分率分布情况 (直方图hist)

# 频率分布情况  直方图hist   
#参数1:bins 直方图的柱数,可选项,默认为10    
#参数2:color 颜色    
#参数3:normed=True是频率图,默认是频数图
#参数4:edgecolor 直方图边框颜色  
#参数5:alpha 透明度 
#参数6:histtype 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’
#参数7:rwidth 柱子与柱子之间的距离,默认是0
#参数8:range 筛选数据范围,默认是最小到最大的取值范围
  
data[key1].hist(bins = 8,color="g", histtype="bar", rwidth=10, alpha=0.4)

————————————————————————————————
在这里插入图片描述
————————————————————————————————
(4)频率分布情况 (分区区间 频数统计)

# 频率分布情况  分组区间 频数统计
gcut = pd.cut(data[key2],10,right=False) 
gcut.value_counts()

————————————————————————————————
[70.0, 115.0) 141
[115.0, 160.0) 72
[25.0, 70.0) 40
[160.0, 205.0) 25
[205.0, 250.0) 10
[295.0, 340.0) 6
[250.0, 295.0) 3
[430.0, 475.45) 1
[385.0, 430.0) 1
[340.0, 385.0) 1
Name: 总价, dtype: int64
————————————————————————————————

(4)分率分布情况 (把分组区间匹配到表格中)

# 频率分布情况  把分组区间匹配到表格中
gcut = pd.cut(data[key2],10,right = False) 
gcut_count = gcut.value_counts(sort = True)    #sort 为排序,True 排序   False  不排序
data['%s分组区间' % key2] = gcut.values
data.head()

————————————————————————————————

在这里插入图片描述
————————————————————————————————
(5)区间频率统计

r_zj = pd.DataFrame(gcut_count)
r_zj.rename(columns = {gcut_count.name:'频数'},inplace = True)
r_zj

————————————————————————————————
在这里插入图片描述
————————————————————————————————

(6)区间出现频率 频数、频率统计

# 区间出现频率  
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 

————————————————————————————————
在这里插入图片描述
————————————————————————————————

(7)区间出现频率 频数+频率统计+图表可视化

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=['频率','累计频率'])

在这里插入图片描述
(8)直方图

# 直方图

r_zj['频率'].plot(kind = 'bar',
               figsize = (12,2),
               grid = True,
               color = 'k',
               alpha = 0.4)

# 添加标签
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')

————————————————————————————————
在这里插入图片描述
————————————————————————————————

(9)频率分布情况- 定性字段

# 频率分布情况 - 定性字段
cx_g = data['房屋户型'].value_counts(sort=False)
print(cx_g)

r_cx = pd.DataFrame(cx_g)
r_cx

r_cx = pd.DataFrame(cx_g)
r_cx.rename(columns ={cx_g.name:'频数'}, inplace = True)  # 修改频数字段名
r_cx['频率'] = r_cx / r_cx['频数'].sum()  # 计算频率
r_cx['累计频率'] = r_cx['频率'].cumsum()  # 计算累计频率
r_cx['频率%'] = r_cx['频率'].apply(lambda x: "%.2f%%" % (x*100))  # 以百分比显示频率
r_cx['累计频率%'] = r_cx['累计频率'].apply(lambda x: "%.2f%%" % (x*100))  # 以百分比显示累计频率
r_cx.style.bar(subset=['频率','累计频率'], color='#d65f5f',width=100)

————————————————————————————————
在这里插入图片描述
在这里插入图片描述
————————————————————————————————

非同池之鱼,但兴望焉,却无通达之处,上兴之笔,愿得与君分享,不喜勿喷!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值