十、探索性数据分析的图形化探索

1.图形化探索

图行化探索又称为可视化描述,通过图表的形式将数据的各个特征呈现出来,不同的图有着各自的优势和缺陷,在实际运用过程中可以综合使用进行数据的分析:

  • 直方图
  • 累积分布图
  • 箱型图
  • 条形图
  • 饼图
  • 散点图

图形化探索相比与数字化的探索结果看起来更直观,更能反应数据分布的特点。

1.3 直方图

  • 1.3.1 直方图的基本概念
    直方图是直接了解数据分布情况最常用的图形类型,它将连续数据分为几个等间距的组,并以矩形的高低来显示相应组中所含数据的频数或和频率大小,有时可同时显示出数据的密度曲线作为辅助。
    在这里插入图片描述
  • 1.3.2 频率分布直方图
    频率分布直方图能清楚显示各组频数分布情况又易于显示各组之间频数的差别,各组频率之和的值为1,在频率分布直方图中表现为所有矩形的面积之和等于1。
    在这里插入图片描述
  • 1.3.3 二维变量的直方图
    在这里插入图片描述

1.4 累积分布图

  • 1.4.1 累积分布图的概念
    累积分布函数,又叫分布函数,是概率密度函数的积分,能完整描述一个实随机变量X的概率分布。
    直观来说,可以认为累积分布图各点斜率为概率密度曲线相应点的值,即某一点在累积分布图中的斜率越大,其概率密度越大
  • 1.5.2 累积分布图——例子
    在这里插入图片描述

1.5 箱型图

  • 1.5.1 箱型图的基本概念
    箱型图,又称为盒子图。它能够深入展现数据分布情况的图形类型,它不仅能够给出重要分位点的位置,且会将异常点剥离出来,当进一步标注出如均值等重要指标的位置和数值后,数据的整体结构就能够被清晰地勾勒在的图形中。
    在这里插入图片描述
  • 1.4.2 箱型图——例子
    在这里插入图片描述

1.6 条形图

  • 1.6.1 条形图的概念
    条形图与柱状图类似,不同之处在于,柱状图适用于连续型数据,通过人为分组而形成若干矩形来构成图形;而条形图则是用于离散型变量,该变量的每一个水平自然成为一个条形来显示该水平的取值情况。
  • 1.6.2 箱型图——例子
    在这里插入图片描述
  • 1.6.3 箱型图-对比模式
    在这里插入图片描述

1.7 饼图

  • 1.7.1 饼图的概念
    饼图是考察单个变量分布情况的有效图形,饼图显示一个数据系列中各项的大小与各项总和的比例。
  • 1.7.2 饼图——例子
    在这里插入图片描述

1.8 散点图

  • 1.8.1 散点图的概念
    散点图是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势,据此可以选择合适的函数对数据点进行拟合。
  • 1.8.2 饼图——例子

2 完整代码

# *-* coding:utf-8 *-*

# 导入工具库
import numpy as np
import pandas as pd
import seaborn as sns
from scipy import stats
import statsmodels.api as sm
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import scipy as sp


# 直方图
def matplot_hist():
    # 绘制直方图
    plt.hist(np.random.randn(100), bins=10,
             color='b', alpha=0.3)
    plt.show()


# 频率分布直方图
def matplot_hist_frec():
    x = np.linspace(-5, 15, 50)
    print(x.shape)

    # 绘制高斯分布
    plt.plot(x, sp.stats.norm.pdf(x=x, loc=5, scale=2))

    # 叠加直方图
    plt.hist(sp.stats.norm.rvs(loc=5, scale=2, size=200), bins=50, normed=True, color='red', alpha=0.5)


# 二维变量的直方图
def sns_hist():
    # 双变量分布
    df_obj1 = pd.DataFrame({
        "x": np.random.randn(500),
        "y": np.random.randn(500)})

    sns.jointplot(x="x", y="y",
                  data=df_obj1,kind='hex')
    plt.show()


# 累积分布图
def matplot_cdf():
    sample = np.random.uniform(0, 1, 50)
    ecdf = sm.distributions.ECDF(sample)

    # 等差数列,用于绘制X轴数据
    x = np.linspace(min(sample), max(sample))
    # x轴数据上值对应的累计密度概率
    y = ecdf(x)
    # 绘制阶梯图
    plt.step(x, y)
    plt.show()

# 箱型图
def matplot_box():
    data = {
        'China': [1000, 1200, 1300, 1400, 1500,
                  1600, 1700, 1800, 1900, 2500],
        'America': [1200, 1300, 1400, 1500, 1600,
                    1700, 1800, 1900, 2000, 2100],
        'Britain': [1000, 1200, 1300, 1400, 1500,
                    1600, 1700, 1800, 1900, 2000],
        "Russia": [800, 1000, 1200, 1300, 1400,
                   1500, 1600, 1700, 1800, 1900]
    }
    df = pd.DataFrame(data)
    df.plot.box(title="Consumer spending "
                      "in each country")
    plt.grid(linestyle="--", alpha=0.3)
    plt.show()


# 条形图
def matplot_bar():

    men_means = (20, 35, 30, 35, 27)
    ind = np.arange(len(men_means))
    width = 0.7
    fig, ax = plt.subplots()
    ax.barh(ind - width / 2, men_means,
           width, color='SkyBlue', label='Men')

    ax.set_ylabel('Scores')
    ax.set_title('Scores by group and gender')
    plt.xticks(ind, ('碳酸饮料', '绿茶', '矿泉水', '果汁', '其他'))
    ax.legend()
    plt.show()


# 条形图
def matplot_bar1():
    # 这两行代码解决 plt 中文显示的问题

    men_means = (20, 35, 30, 35, 27)
    women_means = (25, 32, 34, 20, 25)
    ind = np.arange(len(men_means))
    width = 0.35
    fig, ax = plt.subplots()
    ax.bar(ind - width / 2, men_means,
           width, color='SkyBlue', label='Men')
    ax.bar(ind + width / 2, women_means,
           width, color='IndianRed', label='Women')
    ax.set_ylabel('Scores')
    ax.set_title('Scores by group and gender')
    plt.xticks(ind, ('碳酸饮料','绿茶','矿泉水','果汁','其他'))
    ax.legend()
    plt.show()

# 饼图
def matplot_pie():
    # 生成数据
    labels = ['A', 'B', 'C', 'D', 'other']
    share = [0.45, 0.25, 0.15, 0.05, 0.10]
    # 设置分裂属性
    explode = [0, 0.1, 0, 0, 0]

    # 分裂饼图
    plt.pie(share, explode=explode,
            labels=labels, autopct='%3.1f%%',
            startangle=180, shadow=True,
            colors=['c', 'r', 'gray', 'g', 'y'])
    # 标题
    plt.title('2017年笔记本电脑市场份额')
    plt.show()


def matplot_scatter():
    # 绘制散点图
    x_values = [1, 2, 3, 4, 5]

    y_values = [1, 4, 9, 16, 25]

    plt.scatter(x_values, y_values, s=100)
    plt.show()


def main():
    matplot_hist()
    sns_hist()
    matplot_cdf()
    matplot_box()
    matplot_bar()
    matplot_bar1()
    matplot_pie()
    matplot_scatter()


if __name__ == '__main__':



def main():
    matplot_hist()
    sns_hist()
    matplot_cdf()
    matplot_box()
    matplot_bar()
    matplot_bar1()
    matplot_pie()
    matplot_scatter()


if __name__ == '__main__':
    main()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值