美文网首页
数值型变量的可视化

数值型变量的可视化

作者: apricoter | 来源:发表于2019-02-18 21:48 被阅读37次

    一、直方图与核密度曲线

    直方图一般用来观察数据的分布形态,横坐标代表数值的均匀分段,纵坐标代表每个段内的观测数量(频数)

    按性别分组,研究不同性别下年龄分布的差异

    通过seaborn模块中的distplot函数

    import seaborn as sns
    # 读入数据
    Titanic = pd.read_csv(r'F:\titanic_train.csv')
    Titanic.head()
    

    以Titanic数据集为例


    # 检查年龄是否有缺失
    any(Titanic.Age.isnull())
    
    # 不妨删除含有缺失年龄的观察
    Titanic.dropna(subset=['Age'], inplace=True)
    # 再检查年龄是否有缺失
    any(Titanic.Age.isnull())
    

    1.直方图和核密度图

    # 取出男性年龄
    Age_Male = Titanic.Age[Titanic.Sex == 'male']
    # 取出女性年龄
    Age_Female = Titanic.Age[Titanic.Sex == 'female']
    
    # 绘制男女乘客年龄的直方图
    sns.distplot(Age_Male, bins = 20, kde = True, hist_kws = {'color':'steelblue'}, label = '男性')
    # 绘制女性年龄的直方图
    sns.distplot(Age_Female, bins = 20, kde = True, hist_kws = {'color':'purple'}, label = '女性')
    plt.title('男女乘客的年龄直方图')
    # 显示图例
    plt.legend()
    # 显示图形
    plt.show()
    

    2.直方图

    # 取出男性年龄
    Age_Male = Titanic.Age[Titanic.Sex == 'male']
    # 取出女性年龄
    Age_Female = Titanic.Age[Titanic.Sex == 'female']
    
    # 绘制男女乘客年龄的直方图
    sns.distplot(Age_Male, bins = 20, kde = False, hist_kws = {'color':'steelblue'}, label = '男性')
    # 绘制女性年龄的直方图
    sns.distplot(Age_Female, bins = 20, kde = False, hist_kws = {'color':'purple'}, label = '女性')
    plt.title('男女乘客的年龄直方图')
    # 显示图例
    plt.legend()
    # 显示图形
    plt.show()
    

    从直方图来看,女性年龄的分布明显比男性矮,说明在各年龄段下,男性乘客要比女性乘客多

    3.核密度图

    # 绘制男女乘客年龄的核密度图
    sns.distplot(Age_Male, hist = False, kde_kws = {'color':'red', 'linestyle':'-'}, 
                 norm_hist = True, label = '男性')
    # 绘制女性年龄的核密度图
    sns.distplot(Age_Female, hist = False, kde_kws = {'color':'black', 'linestyle':'--'}, 
                 norm_hist = True, label = '女性')
    plt.title('男女乘客的年龄核密度图')
    # 显示图例
    plt.legend()
    # 显示图形
    plt.show()
    

    从核密度图可以看出,男女性别的年龄分布趋势比较接近,说明在各年龄段下的男女乘客人数同步增加或减少。

    二、箱线图

    箱线图也可以体现数据分布,还可以发现数据中的异常点

    一般绘制分组箱线图,即二手房单价按照分组变量(例如行政区域、楼层、朝向等)进行对比分析

    通过seaborn模块中的boxplot函数

    # 读取数据
    Sec_Buildings = pd.read_excel(r'F:\sec_buildings.xlsx')
    Sec_Buildings.head()
    

    以某平台二手房单价数据为例


    # 二手房在各行政区域的平均单价
    group_region = Sec_Buildings.groupby('region')
    avg_price = group_region.aggregate({'price_unit':np.mean}).sort_values('price_unit', ascending = False)
    
    # 绘制分组箱线图
    sns.boxplot(x = 'region', y = 'price_unit', data = Sec_Buildings, 
                order = avg_price.index, showmeans=True,color = 'steelblue',
                flierprops = {'marker':'o','markerfacecolor':'red', 'markersize':3}, 
                meanprops = {'marker':'D','markerfacecolor':'indianred', 'markersize':4},
                medianprops = {'linestyle':'--','color':'orange'}
               )
    # 更改x轴和y轴标签
    plt.xlabel('')
    plt.ylabel('单价(元)')
    # 添加标题
    plt.title('不同行政区域的二手房单价对比')
    # 显示图形
    plt.show()
    

    order表示按照平均价格降序排列,fileprops设置异常点的属性,meanprops设置均值的属性,medianprops设置中位数的属性


    图中上下两条横线代表上下须、箱体的上下两条横线代表上下四分位数、箱体中的虚线代表中位线、箱体中的点则为均值、上下须两端的点代表异常值

    三、小提琴图

    将数值型数据的核密度图和箱线图融合在一起,进而形成小提琴图

    通过seaborn模块中的violinplot函数

    import seaborn as sns
    import pandas as pd
    import matplotlib.pyplot as plt
    # 读入数据
    tips = pd.read_csv(r'F:\tips.csv')
    tips.head()
    

    以酒吧的消费数据为例


    # 设置绘图风格(不妨使用R语言中的ggplot2风格)
    plt.style.use('ggplot')
    # 绘制分组小提琴图
    sns.violinplot(x = "day", # 指定x轴的数据
                   y = "total_bill", # 指定y轴的数据
                   hue = "sex", # 指定分组变量
                   data = tips, # 指定绘图的数据集
                   order = ['Thur','Fri','Sat','Sun'], # 指定x轴刻度标签的顺序
                   scale = 'count', # 以男女客户数调节小提琴图左右的宽度
                   split = True, # 将小提琴图从中间割裂开,形成不同的密度曲线;
                   palette = 'RdBu' # 指定不同性别对应的颜色(因为hue参数为设置为性别变量)
                  )
    # 添加图形标题
    plt.title('每天不同性别客户的消费额情况')
    # 设置图例
    plt.legend(loc = 'upper center', ncol = 2)
    # 显示图形
    plt.show()
    

    scale:用于调整小提琴图左右的宽度,如果为area,则表示每个小提琴图左右部分拥有相同的面积;如果为count,则表示根据样本数量来调节宽度;如果为width,则表示每个小提琴图左右两部分拥有相同的宽度


    每个小提琴左右两边代表了不同性别客户的消费额分布。
    以周五周六为例,周五的男女客户数量差异不大,而周六男性客户比女性客户多,因为右半边的核密度图更宽一些。

    四、折线图

    一般用于拟合时间序列数据

    通过matplotlib模块中的plot函数

    import matplotlib.pyplot as plt
    # 读入数据
    wechat = pd.read_excel(r'F:\wechat.xlsx')
    wechat.head()
    

    以某微信公众号的阅读人数和阅读人次为例


    1. 绘制单条折线图

    # 绘制单条折线图
    plt.plot(wechat.Date, # x轴数据
             wechat.Counts, # y轴数据
             linestyle = '-', # 折线类型
             linewidth = 2, # 折线宽度
             color = 'steelblue', # 折线颜色
             marker = 'o', # 折线图中添加圆点
             markersize = 6, # 点的大小
             markeredgecolor='black', # 点的边框色
             markerfacecolor='brown') # 点的填充色
    # 添加y轴标签
    plt.ylabel('人数')
    # 添加图形标题
    plt.title('每天微信文章阅读人数趋势')
    # 显示图形
    plt.show()
    

    折线类型:
    -(一个减号) 实心线
    --(两个减号) 虚线
    -.(减句号) 虚线和点构成的线
    :(英文冒号) 点构成的线

    点的类型:
    .(英文句号) 实心点
    o(小写字母) 空心点

    2,绘制两条折线图

    如何将阅读人数和人次同时呈现在图中?
    对于x轴的刻度标签,是否可以只保留月份和日期,并且以7天作为间隔?

    # 绘制两条折线图
    # 导入模块,用于日期刻度的修改
    import matplotlib as mpl
    # 绘制阅读人数折线图
    plt.plot(wechat.Date, # x轴数据
             wechat.Counts, # y轴数据
             linestyle = '-', # 折线类型,实心线
             color = 'steelblue', # 折线颜色
             label = '阅读人数'
             )
    # 绘制阅读人次折线图
    plt.plot(wechat.Date, # x轴数据
             wechat.Times, # y轴数据
             linestyle = '--', # 折线类型,虚线
             color = 'indianred', # 折线颜色
             label = '阅读人次'
             )
    
    # 获取图的坐标信息
    ax = plt.gca()
    # 设置日期的显示格式  
    date_format = mpl.dates.DateFormatter("%m-%d")  
    ax.xaxis.set_major_formatter(date_format) 
    # 设置x轴显示多少个日期刻度
    # xlocator = mpl.ticker.LinearLocator(10)
    # 设置x轴每个刻度的间隔天数
    xlocator = mpl.ticker.MultipleLocator(7)
    ax.xaxis.set_major_locator(xlocator)
    # 为了避免x轴刻度标签的紧凑,将刻度标签旋转45度
    plt.xticks(rotation=45)
    
    # 添加y轴标签
    plt.ylabel('人数')
    # 添加图形标题
    plt.title('每天微信文章阅读人数与人次趋势')
    # 添加图例
    plt.legend()
    # 显示图形
    plt.show()
    

    plt.show自动将两条折线呈现在一张图中
    通过ax获取原始状态的轴属性后,基于ax对象修改刻度的显示方式


    相关文章

      网友评论

          本文标题:数值型变量的可视化

          本文链接:https://www.haomeiwen.com/subject/zdbzeqtx.html