统计分析进阶

一 数据特征分析

1.1 分布分析

研究数据的分布特征和分布类型,分定量数据、定性数据
做分布分析一般需要做三个统计量:极差/频率分布/分组组距及组数

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 读取数据
data = pd.read_csv("C:/Users/lizheying/Desktop/ziliao/深圳罗湖二手房信息.csv",engine = "python")
plt.scatter(data["经度"],data["纬度"],
           s = data["房屋单价"]/500,
           c = data["参考总价"],cmap = "Reds",
           alpha = 0.8)
plt.grid(linestyle = "dashed")
data.head()

在这里插入图片描述

# 极差

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极差为:%.2f\n%s极差为:%.2f" % (key1,dr[0],key2,dr[1]))
参考总价极差为:175.00
参考首付极差为:52.50
# 频率分布情况
data[key1].hist(bins = 8)

在这里插入图片描述

# 频率分布情况,分组区间
gcut = pd.cut(data[key1],10,right = False)
gcut_count = gcut.value_counts(sort = False)
gcut_count
[25.0, 42.5)        14
[42.5, 60.0)        17
[60.0, 77.5)         1
[77.5, 95.0)         2
[95.0, 112.5)        4
[112.5, 130.0)       2
[130.0, 147.5)       3
[147.5, 165.0)       4
[165.0, 182.5)       8
[182.5, 200.175)    20
Name: 参考总价, dtype: int64
data["%s分组区间" % key1] = gcut
data.head()

在这里插入图片描述

# 区间出现频率

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

在这里插入图片描述

# 直方图

r_zj["频率"].plot(kind = "bar",
               figsize = (10,6),
               grid = True,
               color = "b",
               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.001,"%d" % k)

在这里插入图片描述

# 频率分布,定性字段
cx_g = data["朝向"].value_counts(sort = True)
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=["频率","累计频率"])

在这里插入图片描述

# 绘制频率直方图
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.style.use('ggplot')
plt.figure(num=1,figsize=(12,5))
r_cx["频率"].plot(kind = "bar",
                width = 0.6,
                rot = 0)
plt.title("朝向分布频率直方图")

# 绘制饼图
plt.figure(num=2,figsize=(6,6))
plt.pie(r_cx["频率"],
       labels=r_cx.index,
       autopct="%.2f%%",
       shadow=True)
plt.axis("equal")

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

1.2 对比分析

对比分析→两个互相联系的指标互相比较
绝对数比较(相减)/相对数比较(相除)
结构分析/比例分析/空间比较分析/动态对比分析

# 1 绝对数比较→相减
# 相互对比的指标在量级上不能差别过大
# (1)折线图比较
# (2)多系列柱状图比较

# 创建数据→A/B产品的日销售额
data = pd.DataFrame(np.random.rand(30,2)*1000,
                    columns=["A_sale","B_sale"],
                    index=pd.period_range("20190601","20190630"))
data.head()

data.plot(kind="line",
         style ="--.",
         alpha = 0.8,
         figsize = (10,3),
         title = "AB产品销量对比-折线图")

data.plot(kind="bar",
         width = 0.8,
         alpha = 0.8,
         figsize = (10,3),
         title = "AB产品销量对比-柱状图")

在这里插入图片描述

plt.style.use("ggplot")
# 绝对数比较 相减

x = range(len(data))
y1 = data["A_sale"]
y2 = -data["B_sale"]

fig3 = plt.figure(figsize=(10,6))
ax1 = fig3.add_subplot(2,1,1)
plt.bar(x,y1)
plt.bar(x,y2)

ax2 = fig3.add_subplot(2,1,2)
y3 = data["A_sale"] - data["B_sale"]
plt.plot(x,y3)
plt.axhline(0,color = "b",linestyle = "--")
ax2.set_xticklabels(data.index[::5])

在这里插入图片描述

# 相对数比较→相除
# 有联系的指标综合计算后的对比,数值为相对数
# (1))结构分析
# 在分组基础上,各组总量指标与总体的总量指标对比,计算出各组数量在总量中所占比重
# 反映总体的内部结构

data = pd.DataFrame({"A_sale":np.random.rand(30)*1000,
                    "B_sale":np.random.rand(30)*200},
                    index=pd.period_range("20190601","20190630"))
print(data.head())
print("-------")

data["A_per"] = data["A_sale"] / data["A_sale"].sum()
data["B_per"] = data["B_sale"] / data["B_sale"].sum()
data["A_per%"] = data["A_per"].apply(lambda x:"%.3f%%" % (x*100))
data["B_per%"] = data["B_per"].apply(lambda x:"%.3f%%" % (x*100))
data.head()

在这里插入图片描述

fig,axes = plt.subplots(2,1,figsize =(10,6),sharex=True)
data[["A_sale","B_sale"]].plot(kind="line",style = "--",ax = axes[0])
data[["A_per","B_per"]].plot(kind="line",style = "--",ax = axes[1])
axes[1].legend(loc = "upper right")
# 绝对值比较难看出结构性变化,通过销售额占比来看售卖情况的对比

# 同时可以反应"强度",两个性质不同但有一定联系的总量指标对比,用来说明"强度","密度","普遍程度"
# 例如,国内生产总值"元/人",人口密度"人/平方公里"

在这里插入图片描述

# (2)比例分析
# 在分组的基础上,将总体不同部分的指标数值进行对比,其相对指标一般称为"比例相对数"
# 比例相对数 = 总体中某一部分数值 / 总体中另一部分数值→"基本建设投资额中工业、农业、教育投资的比例"、"男女比例"...

# 创建数据→某人一年内的消费、工资薪水情况。
data = pd.DataFrame({"consumption":np.random.rand(12)*1000 + 2000,
                    "salary":np.random.rand(12)*500 + 5000},
                   index = pd.period_range("2017/01","2017/12",freq = "M"))
data.head()

在这里插入图片描述

data["c_s"] = data["consumption"]/data["salary"]
data.head()
data["c_s"].plot.area(color = "green",alpha = 0.5, ylim = [0.3,0.6],figsize=(8,3))

在这里插入图片描述

# 相对数比较→相除
# (3)空间比较分析(横向对比分析)
# 同类现象在同一时间不同空间的指标数值进行对比,反映同类现象在不同空间上的差异程度和现象发展不平衡的状况
# 空间比较相对数 = 甲空间某一现象的数值 / 乙空间同类现象的数值
# 一个例子→我国多经济总量世界第一,但人均水平又是另一回事

# 创建数据→30天内A/B/C/D四个产品的销售情况
# 不同产品的销售量级不同

data = pd.DataFrame({"A":np.random.rand(30)*5000,
                   "B":np.random.rand(30)*2000,
                   "C":np.random.rand(30)*10000,
                   "D":np.random.rand(30)*800},
                    index = pd.period_range("20190601","20190630"))
print(data.head())
print("-"*50)

在这里插入图片描述

data.sum().plot(kind="bar",figsize=(10,4),rot = 0)
for i,j in zip(range(4),data.sum()):
    plt.text(i-0.15,j+2000,"%.2f" % j)

在这里插入图片描述

# 横向对比前十天4个产品的销售额
data[:10].plot(kind="bar",figsize=(12,4),rot = 0)

在这里插入图片描述

# 关于同比与环比
# 同比→产品在2018.3和2019.3的比较(相邻时间段的同一时间点)
# 环比→产品在2019.3和2019.4的比较(相邻时间段的比较)
# 如何界定"相邻时间段"与"时间点",决定了是同比还是环比
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值