我根本不懂python,因此我在解释类似的先前答案并使用它们时未能成功。
我有一个我希望在unix中执行的python脚本。该脚本使用输入文件,但我不明白如何确保输入文件被读取为numpy float数组。
我的输入文件名为chk.bed,它有一列数值
-bash-4.1$ # head chk.bed
7.25236
0.197037
0.189464
2.60056
0
32.721
11.3978
3.85692
0
0
原始脚本是 -
from scipy.stats import gaussian_kde
import numpy as np
#assume "fpkm" is a NumPy array of log2(fpkm) values
kernel = gaussian_kde(fpkm)
xi = np.linspace(fpkm.min(), fpkm.max(), 100)
yi = kernel.evaluate(xi)
mu = xi[np.argmax(yi)]
U = fpkm[fpkm > mu].mean()
sigma = (U - mu) * np.sqrt(np.pi / 2)
zFPKM = (fpkm - mu) / sigma
到目前为止我能理解的是确保脚本正在读取文件,所以我包括 fpkm = open(" chk.bed",' r') 代码。
但是在执行代码时 - 我收到以下错误 -
Traceback (most recent call last):
File "./calc_zfpkm.py", line 10, in <module>
kernel = gaussian_kde(fpkm)
File "/usr/lib64/python2.6/site-packages/scipy/stats/kde.py", line 88, in __init__
self._compute_covariance()
File "/usr/lib64/python2.6/site-packages/scipy/stats/kde.py", line 340, in _compute_covariance
self.factor * self.factor)
File "/usr/lib64/python2.6/site-packages/numpy/lib/function_base.py", line 1971, in cov
X = array(m, ndmin=2, dtype=float)
TypeError: float() argument must be a string or a number
这似乎表明我没有正确读取文件,因此函数gaussian_kde()无法读取值为float。
你能帮忙吗?
谢谢!
答案 0 :(得分:1)
您将文件对象传递给gaussian_kde
但是它需要NumPy数组,您需要先使用numpy.loadtxt
来加载数组中的数据:
>>> import numpy as np
>>> arr = np.loadtxt('chk.bed')
>>> arr
array([ 7.25236 , 0.197037, 0.189464, 2.60056 , 0. ,
32.721 , 11.3978 , 3.85692 , 0. , 0. ])
>>> gaussian_kde(arr)
<scipy.stats.kde.gaussian_kde object at 0x7f7350390190>
答案 1 :(得分:-2)
在这里你可以找到
我从上面给出的python代码以及此链接中获得了灵感:https://www.biostars.org/p/94680/
install.packages("ks","pracma")
library(ks)
library(pracma)
/ * fpkm是一个示例数据* /
fpkm&lt; - c(1,2,3,4,5,6,7,8,4,5,6,5,6,5,6,5,5,5,5,6,6 ,78,8,89,8,8,8,2,2,2,1,1,4,4,4,4,4,4,4,4,4,4,4,3,2,2 ,3,23,2,3,23,4,2,2,4,23,2,2,24,4,4,2,2,4,4,4,2,2,4,4,2 ,2,4,2,45,5,5,5,3,2,2,4,4,4,4,4,4,4,4,4,3,2,2,3,23,2 ,3,23,4,2,2,4,23,2,2,24,4,4,2,2,4,4,4,2,2,4,4,2,2,4,2 ,45,5,5,5,3,2,2)
xi=linspace(min(fpkm),max(fpkm),100)
fhat = kde(x=fpkm,gridsize=100,eval.points=xi)
/ *这里我把数字= 0。如果我不对数字进行舍入(yi),结果会有所改变。* /
yi=round(fhat$estimate,digits=0)
mu=xi[which.max(yi)]
U=mean(fpkm[fpkm>mu])
sigma=(U-mu)* (sqrt(pi/2))
zFPKM = (fpkm - mu) / sigma
Cankut CUBUK
计算基因组学计划 - 系统基因组学实验室
CentrodeInvestigaciónPríncipeFelipe(CIPF)
C / EduardoPrimoYúferanº3
46012西班牙巴伦西亚