我是新用的dplyr,我需要计算一组中的不同值.这是一个表格示例:
data=data.frame(aa=c(1,2,3,4,NA), bb=c('a', 'b', 'a', 'c', 'c'))
Run Code Online (Sandbox Code Playgroud)
我知道我可以这样做:
by_bb<-group_by(data, bb, add = TRUE)
summarise(by_bb, mean(aa, na.rm=TRUE), max(aa), sum(!is.na(aa)), length(aa))
Run Code Online (Sandbox Code Playgroud)
但如果我想要独特元素的数量?
我可以:
> summarise(by_bb,length(unique(unlist(aa))))
bb length(unique(unlist(aa)))
1 a 2
2 b 1
3 c 2
Run Code Online (Sandbox Code Playgroud)
如果我想排除NAs,我会做:
> summarise(by_bb,length(unique(unlist(aa[!is.na(aa)]))))
bb length(unique(unlist(aa[!is.na(aa)])))
1 a 2
2 b 1
3 c 1
Run Code Online (Sandbox Code Playgroud)
但这对我来说有点难以理解.有没有更好的方法来进行这种摘要?
a <- c(rep(1:2,3))
b <- c("A","A","B","B","B","B")
df <- data.frame(a,b)
> str(b)
chr [1:6] "A" "A" "B" "B" "B" "B"
a b
1 1 A
2 2 A
3 1 B
4 2 B
5 1 B
6 2 B
Run Code Online (Sandbox Code Playgroud)
我想按变量分组a并返回最常用的值b
我想要的结果看起来像
a b
1 1 B
2 2 B
Run Code Online (Sandbox Code Playgroud)
在dplyr它会是这样的
df %>% group_by(a) %>% summarize (b = most.frequent(b))
Run Code Online (Sandbox Code Playgroud)
我dplyr只提到可视化问题.
我发现自己不得不一直学习新事物.我一直试图想办法加快学习新科目的过程.如果我能编写一个解析维基百科文章的程序并除去最有价值的信息之外的所有内容,我认为这可能很简洁.
我首先阅读维基百科关于PDF的文章并提取前100个句子.我根据我的想法给出了每个句子得分.我最终创建了一个遵循以下格式的文件:
<sentence>
<value>
<sentence>
<value>
etc.
Run Code Online (Sandbox Code Playgroud)
然后我解析了这个文件并试图找到各种函数,将每个句子与我给出的值相关联.我刚刚开始学习机器学习和统计学等等,所以我在这里做了很多摸索.这是我最近的尝试:https: //github.com/JesseAldridge/Wikipedia-Summarizer/blob/master/plot_sentences.py.
我尝试了一堆似乎根本没有产生任何相关性的东西 - 平均字长,文章中的位置等等.几乎唯一产生任何有用关系的东西是字符串的长度(更具体地说,计算小写字母'e'的数量似乎效果最好).但这似乎有点蹩脚,因为很明显,较长的句子更有可能包含有用的信息.
有一次我以为我找到了一些有趣的功能,但是当我尝试删除异常值时(仅计算内部四分位数),结果却产生了更糟糕的结果,然后只为每个句子返回0.这让我想知道我可能做错了多少其他事情......我也想知道这是否是解决这个问题的好方法.
你觉得我走在正确的轨道上吗?或者这只是一个傻瓜的差事?链接代码中是否存在明显缺陷?有没有人知道更好的方法来解决总结维基百科文章的问题?我宁愿有一个快速而肮脏的解决方案而不是完美的东西需要很长时间才能组合在一起.任何一般性建议也将受到欢迎.
我有一个带有ID列的数据框,一个日期列(每个ID 12个月),我有23个数字变量.我希望在每个ID中按月获得百分比变化.我正在使用quantmod包来获得百分比变化.
这是一个只有三列的例子(为简单起见):
ID Date V1 V2 V3
1 Jan 2 3 5
1 Feb 3 4 6
1 Mar 7 8 9
2 Jan 1 1 1
2 Feb 2 3 4
2 Mar 7 8 8
Run Code Online (Sandbox Code Playgroud)
我试图使用dplyr和summarise_each函数,但这是不成功的.更具体地说,我尝试了以下(train是数据集的名称):
library(dplyr)
library(quantmod)
group1<-group_by(train,EXAMID)
foo<-function(x){
return(Delt(x))
}
summarise_each(group1,funs(foo))
Run Code Online (Sandbox Code Playgroud)
我也尝试在dplyr中使用do函数,但我也没有成功(我猜错了!).
我认为问题是Delt功能.当我用sum函数替换Delt时:
foo<-function(x){
return(sum(x))
}
summarise_each(group1,funs(foo))
Run Code Online (Sandbox Code Playgroud)
结果是每个变量在每个ID的日期之间求和.那么每个ID的百分比变化百分比怎么样呢?
我们的MySQL网站分析数据库包含一个摘要表,该表在导入新活动时全天更新.我们使用ON DUPLICATE KEY UPDATE以便汇总覆盖先前的计算,但由于汇总表的UNIQUE KEY中的一列是可选的FK并且包含NULL值,因此很难.
这些NULL旨在表示"不存在,并且所有这些情况都是等效的".当然,MySQL通常将NULL视为"未知,所有这些情况都不等同".
基本结构如下:
"活动"表,其中包含每个会话的条目,每个条目都属于一个广告系列,其中包含某些条目的可选过滤器和事务ID.
CREATE TABLE `Activity` (
`session_id` INTEGER AUTO_INCREMENT
, `campaign_id` INTEGER NOT NULL
, `filter_id` INTEGER DEFAULT NULL
, `transaction_id` INTEGER DEFAULT NULL
, PRIMARY KEY (`session_id`)
);
Run Code Online (Sandbox Code Playgroud)
"摘要"表,其中包含活动表中会话总数的每日汇总,d表示包含事务ID的会话总数.这些摘要是分开的,每个广告系列和(可选)过滤器的组合都有一个.这是一个使用MyISAM的非事务性表.
CREATE TABLE `Summary` (
`day` DATE NOT NULL
, `campaign_id` INTEGER NOT NULL
, `filter_id` INTEGER DEFAULT NULL
, `sessions` INTEGER UNSIGNED DEFAULT NULL
, `transactions` INTEGER UNSIGNED DEFAULT NULL
, UNIQUE KEY (`day`, `campaign_id`, `filter_id`)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)
实际的摘要查询类似于以下内容,计算会话数和事务数,然后按广告系列和(可选)过滤器进行分组.
INSERT INTO `Summary`
(`day`, `campaign_id`, …Run Code Online (Sandbox Code Playgroud) 我有两个表,记录正从外部源连续插入这些表.让我们说这些表保持用户交互的统计数据.当用户单击按钮时,该单击的详细信息(用户,点击时间等)将写入其中一个表.当用户将鼠标悬停在该按钮上时,会将记录添加到其他表中.
如果有很多用户经常与系统交互,那么将会生成大量数据,这些表将会大大增加.
当我想查看数据时,我希望以小时或每日分辨率查看数据.
是否有一种方法或最佳实践可以按要求的分辨率逐步(按数据收集)连续汇总数据?
或者有更好的方法解决这类问题吗?
PS.到目前为止我发现的是像Talend这样的ETL工具可以让生活更轻松.
更新:我目前正在使用MySQL,但我想知道无论数据库,环境等最佳实践.
我有以下格式的数据:
gen = function () sample.int(10, replace = TRUE)
x = data.frame(A = gen(), C = gen(), G = gen(), T = gen())
Run Code Online (Sandbox Code Playgroud)
我现在想要在每行中附加行中所有元素的总和(我的实际函数更复杂,但sum说明了问题).
没有dplyr,我会写
cbind(x, Sum = apply(x, 1, sum))
Run Code Online (Sandbox Code Playgroud)
导致:
A C G T Sum
1 3 1 6 9 19
2 3 4 3 3 13
3 3 1 10 5 19
4 7 2 1 6 16
…
Run Code Online (Sandbox Code Playgroud)
但用dplyr做这件事似乎很难.
我试过了
x %>% rowwise() %>% mutate(Sum = sum(A : T))
Run Code Online (Sandbox Code Playgroud)
但结果不是每一行的总和,这是意想不到的东西,(对我来说)莫名其妙.
我也试过了
x %>% rowwise() …Run Code Online (Sandbox Code Playgroud) 我的情况是我的数据框包含图像分析的结果,其中列是图像中存在的特定类的比例,因此示例数据框class_df看起来像:
id A B C D E F
1 0.20 0.30 0.10 0.15 0.25 0.00
2 0.05 0.10 0.05 0.30 0.10 0.40
3 0.10 0.10 0.10 0.20 0.20 0.30
Run Code Online (Sandbox Code Playgroud)
这些类中的每一个属于一个功能组,我想创建新的列,其中每个功能组的比例是从类计算的.示例映射class_fg
class fg
A Z
B Z
C Z
D Y
E Y
F X
Run Code Online (Sandbox Code Playgroud)
并且所需的结果将是(添加行以显示所需的新列):
id A B C D E F | X Y Z
1 0.20 0.30 0.10 0.15 0.25 0.00 | 0.00 0.40 0.60
2 0.05 0.10 0.05 0.30 0.10 0.40 | 0.40 0.40 …Run Code Online (Sandbox Code Playgroud) 如果这不是提出这个问题的最佳地点,请引导我找到最准确的地点。
我计划使用 Huggingface 摘要模型之一 ( https://huggingface.co/models?pipeline_tag=summarization ) 来总结我的讲座视频转录。
到目前为止,我已经测试了facebook/bart-large-cnn和sshleifer/distilbart-cnn-12-6,但它们最多只支持 1,024 个令牌作为输入。
所以,这是我的问题:
是否有支持更长输入(例如 10,000 字文章)的摘要模型?
对于给定的输入长度,最佳输出长度是多少?假设对于 1,000 个单词的输入,最佳(最小)输出长度(摘要文本的最小长度)是多少?
哪种模型可能适用于编程相关文章?
nlp summarization mlmodel huggingface-transformers huggingface
在R中,我有一个包含Location,sample_year和count的表.所以,
Location sample_year count
A 1995 1
A 1995 1
A 2000 3
B 2000 1
B 2000 1
B 2000 5
Run Code Online (Sandbox Code Playgroud)
我想要一个汇总表来检查'Location'和'sample_year'列,并根据这个独特的组合而不是单个列来汇总'count'.所以,最终结果应该是:
Location sample_year sum_count
A 1995 2
A 2000 3
B 2000 7
Run Code Online (Sandbox Code Playgroud)
我可以将列和数据合并到一个新列中以创建唯一的Location-sample_year但这不是一个干净的解决方案,特别是如果我需要在某个时刻将其扩展到三列.必须有一个更好的方法.