使用Python获取Excel数据并绘制箱线图和直方图

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

目录

 图形简介

1. 箱线图

2.直方图

引入模块

获取数据

处理数据

根据性别来分开查询数据

画图

箱型图

 直方图

男性直方图


 图形简介

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()

物联沃分享整理
物联沃-IOTWORD物联网 » 使用Python获取Excel数据并绘制箱线图和直方图

发表评论