python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python绘制箱型图和直方图

Python获取excel的数据并绘制箱型图和直方图的方法实例

作者:db_gjq_2038

这篇文章主要给大家介绍了关于Python获取excel的数据并绘制箱型图和直方图的相关资料,好的图表能帮助我们深化数据的记忆点,文中通过图文以及代码示例将实现的方法介绍的非常详细,需要的朋友可以参考下

根据箱型图、直方图的代码和数据的条件查询方法,画出航空公司男性和女性用户的年龄分布箱型图直方图

图形简介

1. 箱线图

箱线图(Box-plot)又称为盒式图或箱型图,箱型图是用来表示一组数据的分布(统计不同取值可能出现的次数)。

25%分位数(下四分位数):序列中有25%的数据小于这个数

中位数(50%分位数):序列中有50%的数据小于这个数

75%分位数(上四分位数):序列中有75%的数据小于这个数

最大值:序列100%的数据小于这个数

最小值:序列没有数据小于这个数

2.直方图

直方图(Bar),形状类似柱状图却有着与柱状图完全不同的含义。直方图牵涉统计学概念,首先要对数据进行分组,然后统计每个分组内数据元的数量。在平面直角坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频数,这样的统计图称为频数分布直方图。

频数分布直方图需要经过频数乘以组距的计算过程才能得出每个分组的数量,同一个直方图的组距是一个固定不变的值,所以如果直接用纵轴表示数量,每个矩形的高代表对应的数据元数量,既能保持分布状态不变,又能直观地看出每个分组的数量,如下图所示

引入模块

首先我们的目的是获取excel文件并作图,那么就要引入相关的模块

import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Boxplot
from pyecharts.charts import Bar

若没有pandas和pyecharts这两个模块!

就需要在cmd命令窗口或Anaconda Prompt窗口输入以下命令:

pip install pandas
pip install pyecharts

---------------------------------------------------------------------------------------------------------------------------------

Pandas 是 Python 语言的一个扩展程序库,用于数据分析。

pyecharts是一款将python与echarts结合的强大的数据可视化工具。Echarts 是百度开源的一个数据可视化 JS 库, Echarts可以生成非常棒的可视化交互图,pyecharts的开发让在python平台上也可以直接使用数据生成图。

获取数据

利用pandas中的方法获取指定文件指定工作表中的全部数据,其数据是一个列表形式,注意这里’航空公司数据-剔除空年龄.xlsx‘文件与当前写的xx.ipynb文件需要在同一文件夹内才能获取到数据,因为我使用的是相对路径,也可以使用绝对路径来获取‘航空公司数据-剔除空年龄.xlsx’文件。

下面是用相对路径来获取。

data = pd.read_excel(r'航空公司数据-剔除空年龄.xlsx')
data

 或者用绝对路径来获取。

data = pd.read_excel(r'D:\新建文件夹 (2)\航空公司数据-剔除空年龄.xlsx')
data

处理数据

根据性别来分开查询数据

表格对象中实现条件查询的方法:

data1 = data['性别']=="男"
data2 = data['性别']=="女"
data11=data.loc[data1,:]
data11
data22=data.loc[data2,:]
data22

做完以上步骤再把年龄提取出来

y1 = [data11['年龄'].tolist()]
y2 = [data22['年龄'].tolist()]

画图

箱型图

画图前先把年龄的最小值,下四分位数,中位数,上四分位数,最大值提取出来

男性年龄

c = Boxplot()
c.prepare_data(y1)

女性年龄 

c = Boxplot()
c.prepare_data(y2)

完成以上步骤开始画图

c = Boxplot() # 先创建出图形对象
c.add_xaxis([""])  # 必须输入,但多数时候不需要
c.add_yaxis("男", 
            c.prepare_data(y1), # 数据经过prepare_data方法处理得到[最小值,下四分位数,中位数,上四分位数,最大值]
            itemstyle_opts = opts.ItemStyleOpts(color='skyblue',
                                                border_color='blue',
                                               )
           ) 
c.add_yaxis("女", 
            c.prepare_data(y2),
            itemstyle_opts = opts.ItemStyleOpts(color='#aa1010',
                                                border_color='black',
                                               )
           )
c.set_global_opts(title_opts=opts.TitleOpts(title="男女性年龄分布箱型图"),
                  yaxis_opts=opts.AxisOpts(
                        type_="value",
                        name="年龄",  # 单位
                        splitarea_opts=opts.SplitAreaOpts(
                            is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
                        ),
                    ),      
                 )
 
c.render_notebook()

直方图

画图前先把每个年龄段有多少人提取出来

男性直方图

dist = data11['年龄'].value_counts().sort_index()
dist

x = [i for i in dist.index]
y = dist.tolist()
c = (
    Bar()
    .add_xaxis(x)
    .add_yaxis("男", y, 
               category_gap=0, # 设置柱子之间的间距为0
               color='#ff8080')
    .set_global_opts(title_opts=opts.TitleOpts(title="男性直方图"),
        xaxis_opts=opts.AxisOpts(
                        name="年龄",  # 单位
                    ),
        yaxis_opts=opts.AxisOpts(
                        type_="value",
                        name="人数",  # 单位
                        splitarea_opts=opts.SplitAreaOpts(
                            is_show=True,areastyle_opts=opts.AreaStyleOpts(opacity=1)
                        ),
                    ),
    ) 
)
c.render_notebook()

女性直方图

dict = data22['年龄'].value_counts().sort_index()
dict

x = [i for i in dict.index]
y = dict.tolist()
c = (
    Bar()
    .add_xaxis(x)
    .add_yaxis("女", y, 
               category_gap=0, # 设置柱子之间的间距为0
               color='#ff8080')
    .set_global_opts(title_opts=opts.TitleOpts(title="女性直方图"),
        xaxis_opts=opts.AxisOpts(
                        name="年龄",  # 单位
                    ),
        yaxis_opts=opts.AxisOpts(
                        type_="value",
                        name="人数",  # 单位
                        splitarea_opts=opts.SplitAreaOpts(
                            is_show=True,areastyle_opts=opts.AreaStyleOpts(opacity=1)
                        ),
                    ),
    ) 
)
c.render_notebook()

总结

到此这篇关于Python获取excel的数据并绘制箱型图和直方图的文章就介绍到这了,更多相关Python绘制箱型图和直方图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文