我已将程序(如下)写入:
pandas dataframe
groupby
使用特定列值拆分数据并存储为数据帧列表.multiprocess Pool.map()
并行处理每个数据帧.一切都很好,该程序在我的小测试数据集上运行良好.但是,当我输入大数据(大约14 GB)时,内存消耗呈指数级增长,然后冻结计算机或被杀死(在HPC群集中).
一旦数据/变量无效,我就添加了代码来清除内存.一旦完成,我也正在关闭游泳池.仍然有14 GB的输入我只期望2*14 GB的内存负担,但似乎很多正在进行.我也尝试使用调整,chunkSize and maxTaskPerChild, etc
但我没有看到测试与大文件的优化有任何区别.
我认为,当我开始时,在此代码位置需要对此代码进行改进multiprocessing
.
p = Pool(3) # number of pool to run at once; default at 1
result = p.map(matrix_to_vcf, list(gen_matrix_df_list.values()))
但是,我发布了整个代码.
测试示例:我创建了一个高达250 mb的测试文件("genome_matrix_final-chr1234-1mb.txt")并运行该程序.当我检查系统监视器时,我可以看到内存消耗增加了大约6 GB.我不太清楚为什么250 mb文件加上一些输出需要这么大的内存空间.如果它有助于查看真正的问题,我通过下拉框共享该文件.https://www.dropbox.com/sh/coihujii38t5prd/AABDXv8ACGIYczeMtzKBo0eea?dl=0
有人可以建议,我怎么能摆脱这个问题?
我的python脚本:
#!/home/bin/python3
import pandas as pd
import collections
from multiprocessing import Pool
import io
import time
import resource
print()
print('Checking required modules')
print()
''' change this input file name and/or …
Run Code Online (Sandbox Code Playgroud) 使用以下代码我想>打开文件>读取内容并去除不需要的行>然后将数据写入文件并读取文件以进行下游分析.
with open("chr2_head25.gtf", 'r') as f,\
open('test_output.txt', 'w+') as f2:
for lines in f:
if not lines.startswith('#'):
f2.write(lines)
f2.close()
Run Code Online (Sandbox Code Playgroud)
现在,我想读取f2数据并在pandas或其他模块中进行进一步处理,但我在读取数据时遇到问题(f2
).
data = f2 # doesn't work
print(data) #gives
<_io.TextIOWrapper name='test_output.txt' mode='w+' encoding='UTF-8'>
data = io.StringIO(f2) # doesn't work
# Error message
Traceback (most recent call last):
File "/home/everestial007/PycharmProjects/stitcher/pHASE-Stitcher-Markov/markov_final_test/phase_to_vcf.py", line 64, in <module>
data = io.StringIO(f2)
TypeError: initial_value must be str or None, not _io.TextIOWrapper
Run Code Online (Sandbox Code Playgroud) 这个问题遵循问题:如何从文件中读取两行并在for循环中创建动态键?
但是,问题的性质已演变为我想要解决的某种复杂性.
下面是按空格分隔的数据结构.
chr pos M1 M2 Mk Mg1 F1_hybrid F1_PG F1_block S1 Sk1 S2 Sj
2 16229767 T/T T/T T/T G/T C|T 1|0 726 . T/C T/C T/C
2 16229783 C/C C/C C/C A/C G|C 0|1 726 G/C G/C G/C C|G
2 16229992 A/A A/A A/A G/A G|A 1|0 726 A/A A/A A/A A|G
2 16230007 T/T T/T T/T A/T A|T 1|0 726 A|T A|T A|T A|T
2 16230011 G/G G/G G/G G/G C|G 1|0 726 G/C C|G …
Run Code Online (Sandbox Code Playgroud) 在以下内容中pandas.DataFframe
:
df =
alfa beta ceta
a,b,c c,d,e g,e,h
a,b d,e,f g,h,k
j,k c,k,l f,k,n
Run Code Online (Sandbox Code Playgroud)
如何删除alfa的列值超过2个元素的行?这可以使用长度函数来完成,我知道但没有找到具体的答案.
df = df[['alfa'].str.split(',').map(len) < 3]
Run Code Online (Sandbox Code Playgroud) 在 pytest 中断言 UserWarning 和 SystemExit
在我的应用程序中,我有一个函数,当提供错误的参数值时,它将UserWarnings
从warnings
模块引发,然后SystemExit
从sys
模块引发。
代码是这样的:
def compare_tags(.....):
requested_tags = user_requested_tags # as list
all_tags = tags_calculated_from_input_file # as list
non_matching_key = [x for x in requested_tags if x not in all_tags]
# if user requested non existing tag then raise warning and then exit
if len(non_matching_key) > 0:
# generate warning
warnings.warn("The requested '%s' keys from '%s' is not present in the input file. Please makes sure the input …
Run Code Online (Sandbox Code Playgroud) 我想登录一个网站并导航到特定页面以抓取数据。我计划使用抓取(目前不是 API),出于学习目的,我计划在我的 stackoverflow 帐户上进行此操作,以提取我的声誉分数随时间的变化情况以及在哪个主题上的变化。
而且,我使用谷歌应用程序脚本作为编程语言,也是出于学习目的。
我使用下面给出的代码进行登录:
function stackLogin() {
var url = "https://stackoverflow.com/users/login?ssrc=head";
//var url = "https://stackoverflow.com/";
var payload = {
"email":"myLogin",
"password":"myPassword"
};
var opt = {
"payload":payload,
"method":"post",
"followRedirects": false
};
var response = UrlFetchApp.fetch(url, opt);
var sessionDetails = response.getAllHeaders()['Set-Cookie'];
var header = {
'Cookie': sessionDetails[1]
};
Logger.log(response.getResponseCode());
Logger.log(response);
}
Run Code Online (Sandbox Code Playgroud)
当我使用时:
url = "https://stackoverflow.com/users/login?ssrc=head"
Run Code Online (Sandbox Code Playgroud)
我得到“响应代码 = 302”,但“响应 html”非常短。我还看到StackExchange OpenID上出现了新的登录 ip 。
但是,如果我使用:
url = "https://stackoverflow.com"
Run Code Online (Sandbox Code Playgroud)
我得到“响应代码 = 200”,并且“响应 html”非常长。 …
screen-scraping login-control http-response-codes web-scraping google-apps-script
我想合并包含defaultdict
来自两个不同数据/文件的类(键)和列表值的列表。我想使用唯一键合并列表,但将列表值分开。
输入:
defaultdict(<class 'list'>, {'1335': ['C', 'T', 'T', 'C', 'T', 'G'], '254': ['T', 'T', 'G', 'C', 'G', 'G']})
defaultdict(<class 'list'>, {'1335': ['A', 'C', 'A', 'A', 'C', 'A'], '254': ['A', 'G', 'A', 'T', 'A', 'A']})
输出:
defaultdict(<class 'list'>, {'1335': ['C', 'T', 'T', 'C', 'T', 'G'], ['A', 'C', 'A', 'A', 'C', 'A'] , '254': ['T', 'T', 'G', 'C', 'G', 'G'], ['A', 'G', 'A', 'T', 'A', 'A']})
谢谢,
在以下数据中,我试图运行一个简单的马尔可夫模型.
假设我有一个具有以下结构的数据:
pos M1 M2 M3 M4 M5 M6 M7 M8 hybrid_block S1 S2 S3 S4 S5 S6 S7 S8
1 A T T A A G A C A|C C G C T T A G A
2 T G C T G T T G T|A A T A T C A A T
3 C A A C A G T C C|G G A C G C G C G
4 G T G T A …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 python 程序,它需要 scipy 依赖项。依赖项scipy
已安装,但我需要调用scipy.stats
and thenbinom
位于scipy
.
我尝试了这些答案中的方法:
\n\n\n\n没有名为 scipy.stats 的模块 - 为什么尽管安装了 scipy\n
\n\n>>> import scipy\n>>> import scipy.stats\nTraceback (most recent call last):\n File "<stdin>", line 1, in <module>\nImportError: No module named stats\n>>> from scipy import stats\nTraceback (most recent call last):\n File "<stdin>", line 1, in <module>\nImportError: cannot import name stats\n>>> from scipy.stats import binom\nTraceback (most recent call last):\n File "<stdin>", line 1, in <module>\nImportError: No …
Run Code Online (Sandbox Code Playgroud) 我正在对 pandas 数据帧进行多重处理,方法是将其拆分为多个数据帧,这些数据帧存储为列表。并且,使用Pool.map()
我将数据帧传递给定义的函数。我的输入文件约为“300 mb”,因此小数据帧大约为“75 mb”。但是,当多处理运行时,内存消耗会增加 7 GB,每个本地进程大约消耗 1 GB 内存。2 GB 内存。为什么会发生这种情况?
def main():
my_df = pd.read_table("my_file.txt", sep="\t")
my_df = my_df.groupby('someCol')
my_df_list = []
for colID, colData in my_df:
my_df_list.append(colData)
# now, multiprocess each small dataframe individually
p = Pool(3)
result = p.map(process_df, my_df_list)
p.close()
p.join()
print('Global maximum memory usage: %.2f (mb)' % current_mem_usage())
result_merged = pd.concat(result)
# write merged data to file
def process_df(my_df):
my_new_df = do something with "my_df"
print('\tWorker maximum memory usage: %.2f (mb)' % …
Run Code Online (Sandbox Code Playgroud) python multiprocessing threadpool pandas python-multiprocessing
python ×9
pandas ×5
defaultdict ×3
dictionary ×3
numpy ×2
dataframe ×1
for-loop ×1
importerror ×1
io ×1
list ×1
memory ×1
package ×1
printing ×1
pytest ×1
scipy ×1
systemexit ×1
threadpool ×1
typeerror ×1
unit-testing ×1
user-warning ×1
web-scraping ×1
word-wrap ×1