Python-数据统计分析的显著性标注
今天,小编给大家带来的是如何使用Python-Seaborn进行显著性统计图表绘制,详细内容如下:我们可以通过自定义绘图函数的方式在统计图表中添加显著性标注,这里我们直接使用Seaborn自带的iris数据集进行绘制,具体内容如下:由于是完全的自定义,这里需要定义一个函数将P值结果和对应星号进行转化,代码如下:scipy.stats 计算显著性指标由于scipy.stats部分中提供多种显著性检验
今天,小编给大家带来的是如何使用Python-Seaborn进行显著性统计图表绘制,详细内容如下:
- Python-Seaborn自定义函数绘制
- Python-statannotations库添加显著性标注
Python-Seaborn 自定义函数绘制
我们可以通过自定义绘图函数的方式在统计图表中添加显著性标注,这里我们直接使用Seaborn自带的iris数据集进行绘制,具体内容如下:
自定义P值和星号对应关系
由于是完全的自定义,这里需要定义一个函数将P值结果和对应星号进行转化,代码如下:
def convert_pvalue_to_asterisks(pvalue):
if pvalue <= 0.0001:
return "****"
elif pvalue <= 0.001:
return "***"
elif pvalue <= 0.01:
return "**"
elif pvalue <= 0.05:
return "*"
return "ns"
scipy.stats 计算显著性指标
由于scipy.stats部分中提供多种显著性检验方法,如T-test、ANOVA等,由于篇幅有限,这里只介绍scipy.stats.ttest_ind() t检验方法,详细结算过程如下:
iris = sns.load_dataset("iris")
data_p = iris[["sepal_length","species"]]
stat,p_value = scipy.stats.ttest_ind(data_p[data_p["species"]=="setosa"]["sepal_length"],
data_p[data_p["species"]=="versicolor"]["sepal_length"],
equal_var=False)
上述结果就将P值计算,然后再通过之前定义的convert_pvalue_to_asterisks函数进行转换,得到星号表示形式。
可视化绘制
这一步主要使用自定义的绘图方法进行显著性标注绘制,详细绘制代码如下:
plt.rcParams['font.family'] = ['Times New Roman']
plt.rcParams["axes.labelsize"] = 18
palette=['#0073C2FF','#EFC000FF','#868686FF']
fig,ax = plt.subplots(figsize=(5,4),dpi=100,facecolor="w")
ax = sns.barplot(x="species",y="sepal_length",data=iris,palette=palette,
estimator=np.mean,ci="sd", capsize=.1,errwidth=1,errcolor="k",
ax=ax,
**{"edgecolor":"k","linewidth":1})
# 添加P值
x1, x2 = 0, 1
y,h = data_p["sepal_length"].mean()+1,.2
#绘制横线位置
ax.plot([x1, x1, x2, x2], [y, y+h, y+h, y], lw=1, c="k")
#添加P值
ax.text((x1+x2)*.5, y+h, "T-test: "+ p_value_cov, ha='center', va='bottom', color="k")
ax.tick_params(which='major',direction='in',length=3,width=1.,labelsize=14,bottom=False)
for spine in ["top","left","right"]:
ax.spines[spine].set_visible(False)
ax.spines['bottom'].set_linewidth(2)
ax.grid(axis='y',ls='--',c='gray')
ax.set_axisbelow(True)
「注意」:这里由于是自定义绘制,在添加其他组间数据的显著性编著时也采用相同方法。
在涉及较多组之间绘制P值是有没有较为方便便捷的方法呢?下面小编介绍一个优秀的第三方拓展库进行绘制。
Python-statannotations库添加显著性标注
Python-statannotations库则是针对Seaborn绘图对象进行显著性标注的专用库,其可以提供柱形图、箱线图、小提琴图等统计图表的显著性标注绘制,计算P值方法基于scipy.stats方法,这里我们简单列举几个示例演示即可,更多详细内容可参看:Python-statannotations官网[1]。
「样例一」:
import seaborn as sns
from statannotations.Annotator import Annotator
df = sns.load_dataset("tips")
x = "day"
y = "total_bill"
order = ['Sun', 'Thur', 'Fri', 'Sat']
fig,ax = plt.subplots(figsize=(5,4),dpi=100,facecolor="w")
ax = sns.boxplot(data=df, x=x, y=y, order=order,ax=ax)
pairs=[("Thur", "Fri"), ("Thur", "Sat"), ("Fri", "Sun")]
annotator = Annotator(ax, pairs, data=df, x=x, y=y, order=order)
annotator.configure(test='Mann-Whitney', text_format='star',line_height=0.03,line_width=1)
annotator.apply_and_annotate()
ax.tick_params(which='major',direction='in',length=3,width=1.,labelsize=14,bottom=False)
for spine in ["top","left","right"]:
ax.spines[spine].set_visible(False)
ax.spines['bottom'].set_linewidth(2)
ax.grid(axis='y',ls='--',c='gray')
ax.set_axisbelow(True)
「样例二」:
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['Times New Roman']
plt.rcParams["axes.labelsize"] = 18
#palette=['#0073C2FF','#EFC000FF']
palette=['#E59F01','#56B4E8']
#palette = ["white","black"]
fig,ax = plt.subplots(figsize=(5,4),dpi=100,facecolor="w")
ax = sns.barplot(x="order",y="value",hue="class",data=group_data_p,palette=palette,ci="sd",
capsize=.1,errwidth=1,errcolor="k",ax=ax,
**{"edgecolor":"k","linewidth":1})
# 添加P值
box_pairs = [(("one","type01"),("two","type01")),
(("one","type02"),("two","type02")),
(("one","type01"),("three","type01")),
(("one","type02"),("three","type02")),
(("two","type01"),("three","type01")),
(("two","type02"),("three","type02"))]
annotator = Annotator(ax, data=group_data_p, x="order",y="value",hue="class",
pairs=box_pairs)
annotator.configure(test='t-test_ind', text_format='star',line_height=0.03,line_width=1)
annotator.apply_and_annotate()
当然,还可以设置灰色系颜色,如下:
「样例三」如果针对组间数据进行统计分析,可以设置pairs参数据如下:
box_pairs = [(("one","type01"),("one","type02")),
(("two","type01"),("two","type02")),
(("three","type01"),("three","type02"))]
其他比如抖动图、横向分组柱形图等,可视化结果如下:
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。
👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]](安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
四、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、Python练习题
检查学习结果。
七、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)