箱型图(Box plot)是一种用于展示数据分布的可视化图形。它由五个统计量组成:最小值、第一四分位数(Q1)、中位数(Q2)、第三四分位数(Q3)和最大值。在箱线图中,数据的分布范围被表示为一个箱子,箱子的上边界是第三四分位数(Q3),下边界是第一四分位数(Q1),箱子内部的中线表示中位数(Q2)。
箱线图还可以包括异常值的表示,异常值通常是指偏离数据整体分布较远的数值。在箱线图中,异常值以圆点或者星号等符号表示。
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None)
x:输入数据,可以是单个数组或多个数组组成的列表。
notch:是否绘制盒形图的缺口,默认为None。
sym:异常值的表示符号,默认为None。
vert:盒形图的方向,True为垂直方向,False为水平方向,默认为True。
whis:须与内部的长度,默认为1.5。
positions:盒形图的位置,默认为None。
widths:盒形图的宽度,默认为0.5。
patch_artist:是否为盒形图使用填充,默认为None。
bootstrap:是否启用自助法计算置信区间,默认为None。
usermedians:自定义中位数,默认为None。
conf_intervals:自定义置信区间,默认为None。
meanline:是否绘制均值线,默认为None。
showmeans:是否显示均值,默认为None。
showcaps:是否显示须的边界线,默认为None。
showbox:是否显示箱子,默认为None。
showfliers:是否显示异常值,默认为None。
boxprops:盒子的属性设置,默认为None。
labels:x轴上的标签,默认为None。
flierprops:异常值的属性设置,默认为None。
medianprops:中位数的属性设置,默认为None。
meanprops:均值线的属性设置,默认为None。
capprops:须的边界线的属性设置,默认为None。
whiskerprops:须的属性设置,默认为None。
manage_ticks:是否自动管理刻度,默认为True。
autorange:自动调整轴范围,默认为False。
zorder:图层顺序,默认为None。
异常值检测:箱型图可以帮助识别价格或其他金融指标的异常值。通过观察箱型图中的离群点,交易者可以发现价格的异常波动或者异常交易活动,从而作出相应的决策。例如,如果箱型图中存在异常值,可能表明市场出现了非正常的价格波动,交易者可以考虑调整策略或者采取其他措施。
趋势分析:箱型图可以用于分析价格的趋势和波动情况。通过观察箱型图中的箱子和须,交易者可以了解价格的中位数、上下四分位数以及价格的波动范围。这有助于判断价格的稳定性和趋势,从而指导交易策略的制定。例如,如果箱子较窄,须较短,表明价格波动较小,可能是一个稳定的趋势;而如果箱子较宽,须较长,表明价格波动较大,可能是一个不稳定的趋势。
统计分析:箱型图可以用于统计分析,如数据的分布情况、中位数、四分位数等。通过观察箱型图,交易者可以对市场的行情进行分析和比较。例如,可以比较不同时间段或不同品种的价格分布情况,找出价格的统计特征,从而帮助做出更准确的预测和决策。
风险管理:箱型图可以用于风险管理,帮助交易者识别和控制风险。通过观察箱型图中的须和异常值,交易者可以了解价格的波动范围和潜在的风险。例如,如果价格突破了箱型图中的上须,可能表明价格有进一步上涨的潜力,交易者可以相应地调整仓位或者采取避险措施。
在这个案例中,使用箱线图分别显示平安银行的开盘价、收盘价、最高价和最低价的分布情况
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 设置为默认字体
plt.rcParams['font.family'] = 'SimHei'
# 显示负数
plt.rcParams['axes.unicode_minus'] = False
# 导入数据
df = pd.read_excel("2023年一季度A股日线行情.xlsx")
# 将日期列转化为日期格式
df["trade_date"] = df["trade_date"].astype("str").apply(lambda x:x[:4]+"-"+x[4:6]+"-"+x[6:])
# 将日期列转换为日期类型,并设置为索引列
df['trade_date'] = pd.to_datetime(df['trade_date'])
df.set_index('trade_date', inplace=True)
# 筛选出股票代码是"000001.SZ"平安的股票
stock = df[df['ts_code'] == '000001.SZ']
# 绘制开盘价、收盘价、最高价、最低价的箱型图
# 设置各个子图的标题
titles = ['开盘价', '收盘价', '最高价', '最低价']
# 设置各个子图的数据集
datas = [stock['open'],stock['close'],stock['high'],stock['low']]
# 创建一个2x2的子图布局
fig, ax = plt.subplots(2, 2, figsize=(10, 10))
# 依次创建各个子图
for i in range(4):
prices = datas[i]
ax[i//2][i%2].boxplot(prices)
ax[i//2][i%2].set_title(titles[i])
ax[i//2][i%2].set_xlabel("Price")
ax[i//2][i%2].set_ylabel("Frequency")
plt.show()