小编Dav*_*agh的帖子

维基百科哲学游戏图在python和R


所以我对python来说比较新,为了学习,我已经开始编写一个上传到维基百科的程序,在随机文章的概述部分找到第一个链接,跟随该链接并继续前进,直到它进入环或发现哲学页面(详见这里),然后重复这个过程对于一个新的随机文章一个指定的次数.然后我想以某种形式的有用数据结构收集结果,这样我就可以使用Rpy库将数据传递给R,这样我就可以绘制某种网络图(R很擅长绘制这样的东西)图中的每个节点代表访问的页面,以及从起始文章到哲学页面的路径的箭头.

所以我没有问题让python从wiki返回相当结构化的html,但是有一些我无法弄清楚的问题.到目前为止,我已经使用lxml库中的cssselector选择了第一个链接.它选择第一个链接(在一个标记中),它是ap标记的直接后代,它是div标记的直接后代,类似于"mw-content-ltr",如下所示:

    user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)'
    values = {'name' : 'David Kavanagh',
      'location' : 'Belfast',
      'language' : 'Python' }
    headers = { 'User-Agent' : user_agent }
    encodes = urllib.urlencode(values)
    req = urllib2.Request(url, encodes, headers)
    page = urllib2.urlopen(req)
    root = parse(page).getroot()
    return root.cssselect("div.mw-content-ltr>p>a")[0].get('href')
Run Code Online (Sandbox Code Playgroud)

此代码驻留在一个函数中,我用它来查找页面中的第一个链接.它大部分都有效,但问题是如果第一个链接在某个其他标记内部而不是像ap标记的直接后代那样让我们说ab标记或其他东西然后我会想念它.正如你从上面的wiki文章中看到的那样,斜体或括号内的链接不符合游戏的条件,这意味着我从来没有得到斜体链接(好)但经常得到括号内的链接(坏)和有时会错过一个页面上的第一个链接,比如椅子上的第一个链接,即凳子,但它是粗体,所以我不明白.我已经尝试删除直接后代规定,但后来我经常得到概述部分"上方"的链接,这些链接通常位于侧边框,ap标记,表格中,与概览部分相同的div中.

所以我的问题的第一部分是:

我如何使用cssselectors或其他函数或库来选择概述部分中不在括号内或斜体中的第一个链接.我想过使用正则表达式查看原始html,但这似乎是一个非常笨重的解决方案,我认为可能有一些更好的东西,我没有想到.

所以目前我将结果存储在列表列表中.所以我有一个名为paths的列表,其中有一些列表包含包含wiki文章标题的字符串.

问题的第二部分是:如何遍历此列表列表以表示多个收敛路径?存储这样的结果是个好主意吗?由于结束图应该看起来像一个颠倒的树,我考虑制作某种树类,但这对于概念上相当简单的东西来说似乎很多工作.

任何想法或建议将不胜感激.
干杯,
戴维

python parsing wikipedia

5
推荐指数
1
解决办法
460
查看次数

使用同一列中的值绘制折线图

我有一个融化的数据框,其中包含标准 id、变量和值列。变量有 4 个级别。

我想使用 ggplot 使用每个因素的 value 来绘制散点图

为了显示

data.frame(id= gl(4,1,labels=paste("id",1:4,sep="")), variable=gl(4,4,labels=LETTERS[1:4]),value=rnorm(16))

        id variable        value
1  id1        A -0.494270766
2  id2        A  0.189400188
3  id3        A -0.550961030
4  id4        A -1.046945450
5  id1        B -0.525552660
6  id2        B -0.293601677
7  id3        B  0.009664513
8  id4        B -0.214687215
9  id1        C  1.253551926
10 id2        C -1.241847326
11 id3        C -0.307036508
12 id4        C -0.228632605
13 id1        D -1.683798512
14 id2        D -0.419295267
15 id3        D -0.154469178
16 id4        D -0.763460558 …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

5
推荐指数
1
解决办法
2754
查看次数

lapply和do.call运行得很慢?

我有一个数据框,大约35,000行,7列.它看起来像这样:

头(NUC)

  chr feature    start      end   gene_id    pctAT    pctGC length
1   1     CDS 67000042 67000051 NM_032291 0.600000 0.400000     10
2   1     CDS 67091530 67091593 NM_032291 0.609375 0.390625     64
3   1     CDS 67098753 67098777 NM_032291 0.600000 0.400000     25
4   1     CDS 67101627 67101698 NM_032291 0.472222 0.527778     72
5   1     CDS 67105460 67105516 NM_032291 0.631579 0.368421     57
6   1     CDS 67108493 67108547 NM_032291 0.436364 0.563636     55
Run Code Online (Sandbox Code Playgroud)

gene_id是一个因子,有大约3,500个独特的水平.我想,对于gene_id的每个级别获得min(start),max(end),mean(pctAT),mean(pctGC),和sum(length).

我尝试使用lapply和do.call,但它需要持续+30分钟才能运行.我正在使用的代码是:

nuc_prof = lapply(levels(nuc$gene_id), function(gene){ …
Run Code Online (Sandbox Code Playgroud)

r lapply do.call data.table

5
推荐指数
3
解决办法
2087
查看次数

循环指标的进展

可能重复:
Python进度条

我正在运行10,000次for循环,但在循环内部有很多计算正在进行.我想向控制台打印一条进度消息,通知我循环程序在多长时间内我可能需要等待多长时间.

基本循环是

n = 10000 
for i in range(n):
   do_stuff_method()
   if(i%100 == 0):
      print (float(i)/n)*100,
Run Code Online (Sandbox Code Playgroud)

这会在同一行打印出一个百分比消息,但问题是我打印出的下一个内容也会打印在同一个屏幕上.那,并且由于有99个打印机,控制台变得相当宽,并且有很多滚动.

我真正想要的是控制台打印出当前完成的%,并且在一行上的finsih的估计时间替换之前已打印的时间,因此不必滚动很多.

可以这样做吗?

干杯,戴维

python progress-bar

5
推荐指数
1
解决办法
1万
查看次数

使用最小条件子集data.table

对于这个问题,可能有一个非常简单的解决方案,但我无法通过谷歌搜索或data.tableFAQ 找到它.

我有一个data.table像这样:

> test
    chr     bp          ID   REF       ALT        AF  AC   AN                EFFECT   IMPACT FUNCLASS CODING       GENE      pos effRank
 1:   1 860416  rs61464428     G         A 0.5000000  14   28              UPSTREAM MODIFIER          CODING     SAMD11 1:860416      21
 2:   1 860416  rs61464428     G         A 0.5000000  14   28              UPSTREAM MODIFIER          CODING     SAMD11 1:860416      21
 3:   1 860416  rs61464428     G         A 0.5000000  14   28            DOWNSTREAM MODIFIER          CODING AL645608.1 1:860416      22
 4:   1 860461  rs57465118     G         A 1.0000000  62   62              UPSTREAM MODIFIER          CODING     SAMD11 …
Run Code Online (Sandbox Code Playgroud)

r data.table

5
推荐指数
1
解决办法
381
查看次数

Django 中的复合外键

我需要 Django 中的复合外键,但它不受支持。我可以将其手动添加到数据库中,或通过迁移添加,但它不会反映在模型定义中(sadpanda)。后端数据库是postgres。

这是我的模型:

class Trial(models.Model):
    kit = models.ForeignKey(to='Kit')

class Kit(models.Model):
    name = models.CharField(max_length=500)


class Component(models.Model):
    kit = models.ForeignKey(null=True, blank=True, to='Kit', related_name='components')


class ComponentOverride(models.Model):
    trial = models.ForeignKey(to='Trial')
    kit = models.ForeignKey(to='Kit')
    component_to_replace = models.ForeignKey(to='Component', related_name='replaced')
    component_replace_with = models.ForeignKey(to='Component', related_name='replaced_with')
Run Code Online (Sandbox Code Playgroud)

我想要对 Trial_id 和 kit_id 列(模型中的 Trial 和 Kit)的 ComponentOverride 表的外键约束到 Trial 表上的 id 和 Kit id 列(id 由 django 自动创建,模型中的 kit 是 kit_id桌子)。

基本上我想要一个相当于:

ALTER TABLE app_label_trial
    ADD CONSTRAINT app_label_trial_unique_trial_id_kit_id
    UNIQUE (id, kit_id);
ALTER TABLE app_label_componentoverride
    ADD CONSTRAINT app_label_componentoverride_comp_constraint_trial_id_kit_id
    FOREIGN KEY (kit_id, …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-models

5
推荐指数
1
解决办法
6038
查看次数

将列表的内容写入R中的一个文件

我有一堆数据帧的摘要列表,我想将它们全部写入一个文件,所以我可以有一个文本文件,其中包含调用summary()每个数据帧的输出.

我试过这个:

 dflist = lapply(1:4, function(x){df = data.frame(SID=paste("S",1:10,sep=""),matrix(runif(100),nrow=10,ncol=10))})
 sumlist  = lapply(dflist, function(df){summary(df)})
lapply(sumlist, function(i){write(i,"all_data_summary.txt",append=T )})
Run Code Online (Sandbox Code Playgroud)

它有点工作,但它将每个变量的摘要级别写入一个新行,并且不包含变量名称,如下所示:

S1     :1  
S10    :1  
S2     :1  
S3     :1  
S4     :1  
S5     :1  
(Other):4  
Min.   :0.1557  
1st Qu.:0.2284  
Median :0.5109  
Mean   :0.4707  
3rd Qu.:0.6471  
Max.   :0.9509  
NA
Min.   :0.05512  
1st Qu.:0.14310  
Median :0.20889  
Mean   :0.41891  
3rd Qu.:0.78261  
Max.   :0.97565  
NA
Min.   :0.01937  
1st Qu.:0.23876  
Median :0.57103  
Mean   :0.50806  
3rd Qu.:0.70491  
Max.   :0.95610  
NA
Min.   :0.0212  
1st Qu.:0.3445  
Median :0.5634  
Mean   :0.5554  
3rd Qu.:0.7484 …
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
1
解决办法
1146
查看次数

data.frame的长度不等的字符向量列表

我有一个看起来像这样的命名列表:

> head(pathways)
$<NA>
NULL
$`2`
[1] "hsa04610"
$`9`
[1] "hsa00232" "hsa00983" "hsa01100"
$`10`
[1] "hsa00232" "hsa00983" "hsa01100"
$<NA>
NULL
$<NA>
NULL
Run Code Online (Sandbox Code Playgroud)

更多以前描述它.每个列表的名称是一个id号,作为列表元素的字符向量的每个元素的条目是另一个id号.我可以$<NA>轻松过滤掉条目is.na(),但后来我想改变其余部分,看起来像:

id   another_id
2    hsa04610   
9    hsa00232   
9    hsa00983   
9    hsa01100   
10   hsa00232  
10   hsa00983
10   hsa01100


> dput(test)
structure(list(`NA` = NULL, `2` = "hsa04610", `9` = c("hsa00232", 
"hsa00983", "hsa01100"), `10` = c("hsa00232", "hsa00983", "hsa01100"
), `NA` = NULL, `NA` = NULL), .Names = c(NA, "2", "9", "10", 
NA, NA))
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

r list dataframe

3
推荐指数
1
解决办法
1224
查看次数

将两个词典中的值组合到一个列表中

在python中如果我有两个字典,特别是Counter对象看起来像这样

c1 = Counter({'item1': 4, 'item2':2, 'item3': 5, 'item4': 3})
c2 = Counter({'item1': 6, 'item2':2, 'item3': 1, 'item5': 9})
Run Code Online (Sandbox Code Playgroud)

我可以组合这些词典,以便结果是列表字典,如下所示:

c3 = {'item1': [4,6], 'item2':[2,2], 'item3': [5,1], 'item4': [3], 'item5': [9]}
Run Code Online (Sandbox Code Playgroud)

其中每个值是来自相应键的前面词典的所有值的列表,并且在两个原始词典之间没有匹配键的情况下,添加包含一个元素列表的新键.

python dictionary list

3
推荐指数
1
解决办法
226
查看次数

在对象字典上调用str

我有一个像这样的对象的字典 {'name1':oject_instance_1,'name2':oject_instance_2,'name3':oject_instance_3} 在我的对象的类定义中,我已经定义了__str__() method以下__repr__()方法和方法:

def __str__(self):
    return('{0} pathway containing {1} genes, with a total sequence length of {2}'.format(self.id, len(self.genes), self.length))

def __repr(self):
    return self.__str__    
Run Code Online (Sandbox Code Playgroud)

如果重要的是self.id是一个字符串,self.genes是一个列表,self.length是一个int

问题是,当我打印这本字典时,我得到:

{'pid1003': <Pathway.Pathway instance at 0x10169d680>, 'pid1002': <Pathway.Pathway instance at 0x10169d638>, 'pid1001': <Pathway.Pathway instance at 0x10169d5f0>}
Run Code Online (Sandbox Code Playgroud)

但是像一个循环打印

for v in dict.values():
    print(v)
Run Code Online (Sandbox Code Playgroud)

工作良好.

有什么想法吗?谢谢!

python oop string repr

1
推荐指数
1
解决办法
187
查看次数

stats.scipy.chi2返回值0.0

我试图用scipy.stats.chi2.cdf计算一些p值,如下所示.但该函数返回0.

from scipy import stats
1-stats.chi2.cdf(332.185545938, 18.8967858326)
0.0
Run Code Online (Sandbox Code Playgroud)

可以告诉我是否有其他模块可以使用,或者如果有一个我缺少的参数可以让它计算这么小的p值,我能以某种方式设置代码以返回最小的非零P值?

干杯

python numpy scipy

1
推荐指数
1
解决办法
297
查看次数