- "text": "14.7 特定年份分析:\n\n2005 年 vs 2006 年:\n\n2005 年的箱体整体较低,中位数为负,且上胡须较短,反映当年大部分交易日处于负收益区间,市场情绪低迷。\n2006 年则大为反转,中位数跃升至零之上,箱体明显上移,收益分布更偏向正区间,显示出市场在牛市初期的积极走势。这一变化与当年“股权分置改革推进、人民币升值预期增强”等政策背景密切相关。\n\n2024 年:\n\n箱体高度极窄,即 Q75 与 Q25 非常接近,说明日收益率的四分位间距(IQR)很小,波动性低;\n同时,存在较多离群点分布在上下两侧,提示虽然整体震荡区间狭窄,但偶发性的大涨或大跌依然存在,这可能与 AI、芯片等概念股轮动剧烈,但整体指数运行平稳有关。\n\n\n下图呈现了几个特定年份的沪市综合指数的时序图 (codes),大家可以挑选一些年份,将其收盘价的时序图与上图中对应年份的箱型图进行对比,以便更深入地理解箱型图的含义。\n\n\n\n# 绘制小提琴图\nplt.figure(figsize=(6, 3))\nsns.violinplot(x='year', y='daily_return', \n data=filtered_data, palette='Set3')\nplt.grid(axis='y', linestyle='--', alpha=0.7)\nplt.show()\n\n\n\n\n\n\n\n\n\n# https://matplotlib.org/stable/gallery/statistics/boxplot_vs_violin.html\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nfig, axs = plt.subplots(nrows=1, ncols=2, figsize=(9, 4))\n\n# Fixing random state for reproducibility\nnp.random.seed(19680801)\n\n\n# generate some random test data\nall_data = [np.random.normal(0, std, 100) for std in range(6, 10)]\n\n# plot violin plot\naxs[0].violinplot(all_data,\n showmeans=False,\n showmedians=True)\naxs[0].set_title('Violin plot')\n\n# plot box plot\naxs[1].boxplot(all_data)\naxs[1].set_title('Box plot')\n\n# adding horizontal grid lines\nfor ax in axs:\n ax.yaxis.grid(True)\n ax.set_xticks([y + 1 for y in range(len(all_data))],\n labels=['x1', 'x2', 'x3', 'x4'])\n ax.set_xlabel('Four separate samples')\n ax.set_ylabel('Observed values')\n\nplt.show()\n\n\n\n\n\n\n\n\n\n14.7.1 Add Jitter\nBy adding a stripplot, you can show all observations along with some representation of the underlying distribution.\n\nSource: Hidden Data Under Boxplot\n\n\n# libraries\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport seaborn as sns\nimport pandas as pd\n \n# Dataset:\na = pd.DataFrame({ 'group' : np.repeat('A',500), 'value': np.random.normal(10, 5, 500) })\nb = pd.DataFrame({ 'group' : np.repeat('B',500), 'value': np.random.normal(13, 1.2, 500) })\nc = pd.DataFrame({ 'group' : np.repeat('B',500), 'value': np.random.normal(18, 1.2, 500) })\nd = pd.DataFrame({ 'group' : np.repeat('C',20), 'value': np.random.normal(25, 4, 20) })\ne = pd.DataFrame({ 'group' : np.repeat('D',100), 'value': np.random.uniform(12, size=100) })\ndf = pd.concat([a,b,c,d,e])\n\n# boxplot\nax = sns.boxplot(x='group', y='value', data=df)\n# add stripplot\nax = sns.stripplot(x='group', y='value', data=df, color=\"orange\", jitter=0.2, size=2.5)\n\n# add title\nplt.title(\"Boxplot with jitter\", loc=\"left\")\n\n# show the graph\nplt.show()",
0 commit comments