免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3880 | 回复: 16
打印 上一主题 下一主题

[文本处理] 文本按照多列分组 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-03 18:54 |只看该作者 |倒序浏览
本帖最后由 tainche 于 2016-06-03 18:55 编辑

求教各位大神,文件的每一列表示一个性质,我想按照多列将下面的文件分成两部分

CID60 -1 1 -1 -1 -1 1
CID615 1 1 1 -1 1 1
CID1017 1 -1 -1 -1 -1 -1
CID1064 1 -1 -1 -1 -1 -1
CID1103 -1 1 -1 -1 -1 -1
CID1189 1 -1 -1 1 -1 1

第1列是CID名字,第2到7列是6种性质,我想根据2到6列按照4:1将CID分成两个文件,比如说第二列有5个1,第三列有5个-1,在第一个文件里第二列有4个1,第三列有4个-1,第二个文件里第二列有1个1,,第三列有1个-1.
总之,是按照多列性质将上述文件按照4:1分成两个。
新手,不会啊,求教各位大神。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-06-03 19:32 |只看该作者
本帖最后由 sunzhiguolu 于 2016-06-03 19:37 编辑

回复 1# tainche
第1列是CID名字,第2到7列是6种性质,我想根据2到6列按照4:1将CID分成两个文件,比如说第二列有5个1第三列有5个-1

你这个文件里, 并不想你描述的那样啊, 没看明白, 麻烦解释下, 谢谢...
另外, 这个文本中有多少条记录, 结果允许记录之间重叠吗.
   

论坛徽章:
0
3 [报告]
发表于 2016-06-03 19:53 |只看该作者
本帖最后由 tainche 于 2016-06-03 20:05 编辑

回复 2# sunzhiguolu


不好意思,原来为了说明就将文本转换了一下,结果没想到反而说明不了。我现在黏贴的时候原始文本,我的目的是想将这个文本按照多列性质分成两类。
比如说文本是:
CID00000055        1        2        6                       
CID00000058        1        2        6                       
CID00000060        2        3                               
CID00000061        1        2                               
CID00000062        4        6                               
CID00000063        1        6                               
CID00000064        5                                       
CID00000065        2                                       

CID是化合物名字。这个文本当中一共有六种性质,1,2,3,4,5,6。每个化合物可能不只有一种性质。其中我想按照4:1将这些化合物分成训练集和测试集,其中测试集中每种性质所占的比例接近中相应种类的化合物比例。
比如说训练集中有性质1的化合物有8个,性质2的化合物有16个。
那么在测试集里有性质1的化合物有2个,性质2的化合物有4个。
这样把化合物按照多种性质均分到训练集和测试集中。因为有的化合物不只有一种性质,所以我就不会处理了。

不知道我这样表述是不是能清楚一些?多谢大神了。

另外,这个记录大概有120000多条,性质会有重叠,但是化合物的名字不会重叠。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
4 [报告]
发表于 2016-06-03 20:06 |只看该作者
回复 3# tainche
我不是大神. 另外, 经过你这么一弄我更糊涂了.
我的水平有限, 只能为您顶帖了. 等大神出手...

   

论坛徽章:
0
5 [报告]
发表于 2016-06-03 20:13 |只看该作者
回复 4# sunzhiguolu


多谢您了,大概是我语言表述的问题,我这样说不知道您能不能理解。
我有一个文本,有多条记录。每条记录有不同的性质,我分别标记为1,2,3,4,5,6。有就标记没有就不标记。然后我想把这个文本分成两部分。这两个部分中六种性质的比例都是4:1.   

论坛徽章:
0
6 [报告]
发表于 2016-06-04 07:12 来自手机 |只看该作者
tainche 发表于 2016-06-03 20:13:12
回复 4# sunzhiguol

不是太清楚你想做的。你可以先用grep或awk统计一下含有1 2 3 4 5 6的乃至各种组合的各有多少行。然后从最少的开始,比如有6的一共有10行,有1的有1000行,就先移2行含6的到另外一组,再看看该组中含1的还差多少行,差多少就移多少。感觉需要比较多的判断

论坛徽章:
0
7 [报告]
发表于 2016-06-04 14:15 |只看该作者
回复 6# wjemail


多谢帮忙,一直没有思路,你这样一说我貌似有点头绪了。不过我重新说一下我的问题,呵呵。
我的问题是
CID00000055        1        2        6                        
CID00000058        1        2        6                        
CID00000060        2        3                                
CID00000061        1        2                                
CID00000062        4        6                                
CID00000063        1        6                                
CID00000064        5                                       
CID00000065        2      

对于这样一个文本,有六个性质1,2,3,4,5,6,每条记录可能有多个性质,比如说第一条记录就有1,2,6三个性质。我想根据记录里的性质把这些记录分成两部分,第一部分的记录是第二部分记录的4倍。而且保证在每个性质在第一部分和第二部分里的比例也是4:1

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
8 [报告]
发表于 2016-06-04 23:31 |只看该作者
回复 7# tainche
帮顶一下,

   

论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
9 [报告]
发表于 2016-06-06 14:48 |只看该作者
你这要求这么复杂,不一定能全部符合要求啊,可能满足了性质1  4:1 但是性质2 性质3 可能就满足不了了。 除非你是每种性质分组一次,否则我觉得 做不到4:1  

论坛徽章:
10
15-16赛季CBA联赛之同曦
日期:2016-06-11 19:22:4115-16赛季CBA联赛之深圳
日期:2020-05-31 16:13:5615-16赛季CBA联赛之同曦
日期:2020-01-28 12:42:47每日论坛发贴之星
日期:2016-08-09 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00每日论坛发贴之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-12 06:20:00程序设计版块每日发帖之星
日期:2016-07-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-04 06:20:0015-16赛季CBA联赛之佛山
日期:2021-02-26 09:33:41
10 [报告]
发表于 2016-06-06 17:36 |只看该作者
如果要写出来感觉会很复杂、我有一个思路就是首先利用这个
~/pwb/tmp# cat s|awk '{print NF}'|sort|uniq -c
      1 2
     12 3
     10 4
      2 5
      1 7
统计出性质有几个是最多的、比如拥有三个性质的是12个、拥有4个性质的是10个、
如果样本足够大、假设性质就是完全的分布、那么直接从最多的那几个取就可以、
一般来说中间位就是最多的、然后要取1/5的数据、按照分布来从最多的里面按照比例来取吧
占个楼、坐等结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP