箱线图(Box Plot)理论篇
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了箱线图(Box Plot)理论篇相关的知识,希望对你有一定的参考价值。
参考技术A记得之前应该整理过的,但是找不到了,就再来一次吧
箱形图又称为盒须图、箱线图
箱形图针对的是单一变量,可以用来识别异常值
要理解和使用箱形图,需要搞清楚几个概念:
有两个点注意下:
从小到大排列
分成四等份
对于这三个分割点:
Q3与Q1的差距又称为四分位距(InterQuartile Range, IQR)
这个图呢,大概是说,为什么上边界和下边界之外的数据,也就是离群值(异常值)可以忽略掉的原因,貌似就是传说中的3σ原则
我看这里还会标注离群值和极端值,上、下边界外的值
使用Excel、Python或者其他工具画箱线图很容易,但是,通过这个图到底可以得到些什么启示呢?
感觉使用箱线图,是为了看数据的分布情况,看数据集中在哪里,分布有什么特征,数据是集中在较小值一侧还是较大值一侧,有没有异常值
这些资料都没啥特别的,刚才找到篇文章,狗熊会的,不错,对这个箱线图的使用场景算是来个对比,分享下
先附上原文地址: 丑图百讲 | 箱线图应该怎么用
箱线图是针对连续性变量使用的
我们也来看个实际例子,我就使用seaborn中的数据集好了
因为这里,并没有显示具体的各项指标数据,我们可以结合 describe 函数
也就是说,小费的中位数是2.9美元(不知道单位是啥,就当美元吧)
Q1是2美元,Q3是3.5625美元,50%的数据都集中在这个区间内
异常值都集中在上限
中位数和平均值比较接近
其实用箱线图来展示这个小费的分布,并不是非常好,如果用直方图的话,更加的直观
看,数据的集中程度,更加的明显一些
不是所有的数据都适合话箱线图,如果你的箱线图画出来就是一条横线,或者很扁,那就赶紧换一种图吧
通常有2个原因导致这种情况:
原作者总结的很好,直接贴过来了,学习下
作者还说了,这里有一种解决办法,就是做 对数变换
但是,我目前还不是很理解,做了对数变换,数据不就变了吗,这个展示出来没有影响嘛?又为什么可以这样做呢?
等我研究明白了再说
箱线图到底怎么用
配合着定性变量画分组箱线图,作比较!
我理解的是,在不同维度下,对数据进行对比,可以使用箱线图
作者整理了几点箱线图的特点,这里分享下:
嗯,学习了,还是得专业的人来分享
这一篇理论篇先到这,我去整理下seaborn中绘制boxplot
尝试使用 df.plot(kind='box) 创建多个箱线图并收到“IndexError: index 0 is out of bounds for axis 0 with size 0”
【中文标题】尝试使用 df.plot(kind=\'box) 创建多个箱线图并收到“IndexError: index 0 is out of bounds for axis 0 with size 0”【英文标题】:Trying to create multiple boxplots using df.plot(kind='box) and receiving "IndexError: index 0 is out of bounds for axis 0 with size 0"尝试使用 df.plot(kind='box) 创建多个箱线图并收到“IndexError: index 0 is out of bounds for axis 0 with size 0” 【发布时间】:2021-10-26 21:02:39 【问题描述】:我正在完成 Jason Brownlee 的“Machine Learning Mastery with Python”中的练习,在第 21 章中,我们使用Sonar dataset found in the UCI repository。
我已阅读 sonar.all-data 文件:
file = 'datasets/sonar.all-data'
df = pd.read_csv(file, sep=',', header=None)
数据的形状为(208, 61)
。
我现在想创建一个箱线图网格,将 df 中的每一列作为它自己的图。
df.plot(kind='box', subplots=True, layout=(8,8),
sharex=False, sharey=False, figsize=(12, 12))
在笔记本中执行此代码时,出现以下错误:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/core/series.py in __setitem__(self, key, value)
1061 try:
-> 1062 self._set_with_engine(key, value)
1063 except (KeyError, ValueError):
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/core/series.py in _set_with_engine(self, key, value)
1094 # fails with AttributeError for IntervalIndex
-> 1095 loc = self.index._engine.get_loc(key)
1096 # error: Argument 1 to "validate_numeric_casting" has incompatible type
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 0
During handling of the above exception, another exception occurred:
IndexError Traceback (most recent call last)
/var/folders/v1/yp29bgzj6631r45byvnx3tc00000gn/T/ipykernel_29179/2130552721.py in <module>
----> 1 df.plot(kind='box', subplots=True, layout=(8,8), sharex=False, sharey=False, figsize=(12,12));
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/plotting/_core.py in __call__(self, *args, **kwargs)
970 data.columns = label_name
971
--> 972 return plot_backend.plot(data, kind=kind, **kwargs)
973
974 __call__.__doc__ = __doc__
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/plotting/_matplotlib/__init__.py in plot(data, kind, **kwargs)
69 kwargs["ax"] = getattr(ax, "left_ax", ax)
70 plot_obj = PLOT_CLASSES[kind](data, **kwargs)
---> 71 plot_obj.generate()
72 plot_obj.draw()
73 return plot_obj.result
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/plotting/_matplotlib/core.py in generate(self)
286 self._compute_plot_data()
287 self._setup_subplots()
--> 288 self._make_plot()
289 self._add_table()
290 self._make_legend()
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/plotting/_matplotlib/boxplot.py in _make_plot(self)
144 )
145 self.maybe_color_bp(bp)
--> 146 self._return_obj[label] = ret
147
148 label = [pprint_thing(label)]
~/Desktop/Python/Machine Learning Mastery with Python/mlmp_venv/lib/python3.9/site-packages/pandas/core/series.py in __setitem__(self, key, value)
1065 if is_integer(key) and self.index.inferred_type != "integer":
1066 # positional setter
-> 1067 values[key] = value
1068 else:
1069 # GH#12862 adding a new key to the Series
IndexError: index 0 is out of bounds for axis 0 with size 0
有人可以帮我理解这个错误的含义、导致错误的原因以及如何解决它吗?
提前致谢!
【问题讨论】:
此错误表示索引key
为零,并且变量values
的大小也为0。values
的形状是什么?
【参考方案1】:
如果列标题未命名,则此箱线图不起作用。为每一列命名后,箱形图应该可以工作了。
【讨论】:
以上是关于箱线图(Box Plot)理论篇的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 df.plot(kind='box) 创建多个箱线图并收到“IndexError: index 0 is out of bounds for axis 0 with size 0”