gpt4 book ai didi

python - 在 Python 中绘制 pandas 数据框和多处理

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:38 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,我想在一个使用多处理的函数中绘制它的切片。尽管函数“process_expression”在我独立调用时有效,但当我使用“multiprocessing”选项时它没有给出任何图。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import scipy
import seaborn as sns
import sys
from multiprocessing import Pool
import os
os.system("taskset -p 0xff %d" % os.getpid())


pool = Pool()
gn = pool.map(process_expression, gene_ids)
pool.close()
pool.join()

def process_expression(gn_name, df_gn=df_coding):
df_part = df_gn.loc[df_gn['Gene_id'] == gn_name]
df_part = df_part.drop('Gene_id', 1)
df_part = df_part.drop('Transcript_biotype', 1)

COUNT100 = df_part[df_part >100 ].count()
COUNT10 = (df_part[df_part >10 ].count()) - COUNT100
COUNT1 = (df_part[df_part >1].count())- COUNT100 - COUNT10
COUNT0 = (df_part[df_part >0].count())- COUNT100-COUNT10- COUNT1
result = pd.concat([COUNT0,COUNT1,COUNT10,COUNT100], axis=1)
result.columns = [ '0 TO 1', '1 TO 10','10 TO 100', '>100']
result.plot( kind='bar', figsize=(50, 20), fontsize=7, stacked=True)
plt.savefig('./expression_levels/all_genes/'+gn_name+'.png')#,bbox_inches='tight')
plt.close()

df_coding 表是这样的(它有更多的列,我删除了一些):

 Isoform_name,heart,heart.1,lung.3,Gene_id,Transcript_biotype
ENST00000296782,0.14546900000000001,0.161245,0.09479889999999999,ENSG00000164327,protein_coding
ENST00000357387,6.53902,5.86969,7.057689999999999,ENSG00000164327,protein_coding
ENST00000514735,0.0,0.0,0.0,ENSG00000164327,protein_coding

输入数据帧 df_coding 是一个带有 Gene_id 列的数据帧。在本专栏中,我有一个 gn_name 列表。我想要的是每次只获取 Gene_id 列中名称为 gn_name[i] 的数据框部分,并根据该数据框绘制条形图。

例如,如果我调用 'process_expression('ENSG00000164327')',这是一个特定的 gn_name,输出是这样的:

This is the barplot of the dataframe if the gn_name is ENSG00000164327

我做错了什么?我知道当我使用多处理运行它时,进程会在绘图命令处停止。

最佳答案

问题出在 multiprocessing 和 matplotlib 之间。使用多处理,您可以为每个进程创建一个全新的上下文。新上下文没有(也不能)成功初始化上下文,因为它已经在父进程中初始化。

如果您正在尝试克服性能问题,那么您可能走在了正确的轨道上。但是,绘制回父进程正确初始化的上下文将需要您更深入地了解底层 matplotlib 内脏的结构。 Here is an example of setting a data pipe back to the original application.实际上,如果您在绘制数据之前要对数据进行大量处理,这只会有所帮助。看起来这不是您在这里所做的。

如果您正在尝试获得类似堆叠/叠加结果的视觉效果,那么您可能需要考虑重复绘图功能或修改数据结构以更好地表示您想要可视化的内容。

所以。你想解决什么问题?性能问题还是可视化问题? 如果这是一个可视化问题,那么您不想使用多处理

关于python - 在 Python 中绘制 pandas 数据框和多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30870072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com