找回密码
 会员注册
查看: 17|回复: 0

不同处理的土壤样本的各功能群落的香农指数(Shannon)和辛普森指数(Simpson)的计算(Python)

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-10 17:25:44 | 显示全部楼层 |阅读模式
香农指数(ShannonIndex)香农指数(ShannonIndex),也称为香农多样性指数(ShannonDiversityIndex),是用来衡量群落中物种多样性的一种指数。它考虑了物种的丰富度(即物种数量)和均匀度(即各物种的相对丰度)。 分析角度-如果所有物种的个体数量都非常均匀,则香农指数较高。-如果某个物种非常占优势,香农指数较低。-香农指数通常介于0到ln(S)之间,其中 S是物种总数。辛普森指数(SimpsonIndex)辛普森指数(SimpsonIndex)也是用来衡量群落多样性的指标,但它更侧重于描述物种的优势度。辛普森指数衡量的是在一个随机抽样中两个个体属于同一种类的概率。辛普森指数的计算公式如下:分析角度-如果群落中所有物种的个体数量都非常均匀,则辛普森多样性指数接近于0。-如果某个物种非常占优势,辛普森多样性指数接近于1。-辛普森指数可以用来衡量群落中物种的均匀度,指数越高表示均匀度越高。Shannon更注重均匀度和物种的丰富度,是一个综合性较强的多样性指标。Simpson更侧重于描述物种的优势度,对于衡量某些物种占优势的情况比较敏感。数据结构如图 这里面我就根据需求直接定义了哪些Genus属于一类群落(例如:产甲烷群落等等) importpandasaspdfromscipy.statsimportentropyimportnumpyasnpimportmatplotlib.pyplotasplt#读取Excel文件file_path='/mnt/data/Genusbasic6.xlsx'df=pd.read_excel(file_path)#定义各群落的Genusmethanogenic=['Methanobacterium','Methanobrevibacter','Methanosaeta','Methanosarcina','Methanospirillum']methane_oxidizing=['Methylobacter','Methylomonas']iron_reducing=['Geobacter','Shewanella','Thiobacillus']sulfate_reducing=['Desulfobulbus','Desulfotomaculum','Desulfovibrio']#定义计算多样性指数的函数defcalculate_diversity(df,group_columns):diversity_indices=[]forgroupindf['Group'].unique():group_data=df[df['Group']==group]forname,columnsingroup_columns.items():group_counts=group_data[columns].values.flatten()group_counts=group_counts[group_counts>0]#移除零计数以进行多样性计算iflen(group_counts)>0:shannon_index=entropy(group_counts)simpson_index=1-sum((group_counts/sum(group_counts))**2)else:shannon_index=np.nansimpson_index=np.nandiversity_indices.append({'Group':group,'Community':name,'ShannonIndex':shannon_index,'SimpsonIndex':simpson_index})returnpd.DataFrame(diversity_indices)#定义群落分类group_columns_corrected={'Methanogenic':methanogenic,'MethaneOxidizing':methane_oxidizing,'IronReducing':iron_reducing,'SulfateReducing':sulfate_reducing}#计算多样性指数diversity_df_corrected=calculate_diversity(df,group_columns_corrected)#绘制多样性指数图的函数defplot_diversity_indices(df,index_name):communities=df['Community'].unique()groups=df['Group'].unique()forcommunityincommunities:plt.figure(figsize=(10,6))community_data=df[df['Community']==community]plt.bar(community_data['Group'],community_data[index_name])plt.xlabel('Group')plt.ylabel(index_name)plt.title(f'{index_name}for{community}Community')plt.xticks(rotation=45)plt.show()#绘制香农指数图plot_diversity_indices(diversity_df_corrected,'ShannonIndex')#绘制辛普森指数图plot_diversity_indices(diversity_df_corrected,'SimpsonIndex')最后得到数据这里面我加了大组分类,是想直接粗略看一下处理的影响然后数据透视表就可以看到各处理下各分组的值的对比啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 06:33 , Processed in 0.425059 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表