标签: aggregate

python是否等同于C#的Enumerable.Aggregate?

在C#中,如果我有一个字符串集合,并且我想获得一个逗号分隔的字符串表示集合(在开头或结尾没有无关的注释),我可以这样做:

string result = collection.Aggregate((s1, s2) => String.Format("{0}, {1}", s1, s2));
Run Code Online (Sandbox Code Playgroud)

我可以做点什么

result = collection[0]
for string in collection[1:]:
    result = "{0}, {1}".format(result, string)
Run Code Online (Sandbox Code Playgroud)

但这感觉就像一块垃圾.python是否有一种优雅的方式来完成同样的事情?

c# python aggregate aggregate-functions

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

Django聚合.extra值

模型,带抽象基类:

class MapObject(models.Model):
    start_date = models.DateTimeField(default= datetime.strptime('1940-09-01T00:00:00',  '%Y-%m-%dT%H:%M:%S'))
    end_date = models.DateTimeField(default= datetime.strptime('1941-07-01T00:00:00',  '%Y-%m-%dT%H:%M:%S'))
    description = models.TextField(blank=True)
    location = models.PointField()
    objects = models.GeoManager()
    user = models.ForeignKey(User)
    created = models.DateTimeField(auto_now_add = True)
    last_modified = models.DateTimeField(auto_now = True)
    source = models.ForeignKey(Source)
    address= models.TextField(blank=True, null=True)
    address_road = models.TextField(blank=True, null=True)

class Meta:
    abstract = True

class Bomb(MapObject, BombExtraManager):
    #Bomb Attributes
    type = models.CharField(choices= Type_CHOICES, max_length=10)
    night_bombing = models.BooleanField(blank=True)
    map_sheet = models.ForeignKey(MapSheet, blank=True, null=True)
    def __unicode__(self):
        return self.type
Run Code Online (Sandbox Code Playgroud)

现在,我希望使用Django ORM获得与此查询相同的结果:

Select date_part('day',"start_date") as "day", date_part('hour',"start_date") as …
Run Code Online (Sandbox Code Playgroud)

django orm aggregate

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

在组外使用 SQL 聚合函数

我有一张桌子,叫它 TEST,就像这样:

+----+--------+
| id | PRCNTG |
+----+--------+
|  1 | 10     | 
|  2 | 20     | 
|  2 | 30     | 
|  3 | 40     | 
|  4 | 50     | 
|  5 | 20     | 
|  5 | 10     | 
|  6 | 20     | 
+----+--------+
Run Code Online (Sandbox Code Playgroud)

PRCNTG在本例中,该列总计 200。它不会总是如此。

如果我执行此查询:

SELECT ID, SUM(PRCNTG) FROM TEST GROUP BY ID;
Run Code Online (Sandbox Code Playgroud)

我希望得到以下结果:

+----+--------+
| id | PRCNTG |
+----+--------+
|  1 | 10     | 
|  2 | 50     | …
Run Code Online (Sandbox Code Playgroud)

sql t-sql aggregate

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

如何在R中提取结果对象的关键和值?

我有以下片段,有点不言自明:

> value <- by(df$Percent, df$Year, sum)
> str(value)
  'by' int [1:20(1d)] 100 100 100 100 100 100 100 100 100 100 ...
  - attr(*, "dimnames")=List of 1
   ..$ df$Year: chr [1:20] "1993" "1994" "1995" "1996" ...
  - attr(*, "call")= language by.default(data = df$Percent, INDICES = df$Year, FUN = sum)
Run Code Online (Sandbox Code Playgroud)

问题是如何提取所有密钥(在本例中为Year)和聚合值(所有和Percents)作为集合?我已经尝试了很多东西,但无法弄清楚如何获得它,例如在这种情况下所有年份和所有百分之.

我找到的唯一方法是使用[[]]运算符迭代和访问它,例如值[[1]],但这是非常低效和不方便的.

更新:我的用例是我有以下数据集,例如

Year Percent
1999 40
1999 20
1999 10
2000 10
2000 20
Run Code Online (Sandbox Code Playgroud)

我只需要每年的百分比之和即

Year Percent
1999 70
2000 30
Run Code Online (Sandbox Code Playgroud)

通过给我这个,但在一个EXTREMELLY不方便的输出结构.我只需要两个列表或一个简单的输出数据帧.

grouping aggregate r

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

Spark:groupBy需要花费大量时间

在我的应用程序中,当获取性能数字时,groupby正在吃掉很多时间.

我的RDD低于strcuture:

JavaPairRDD<CustomTuple, Map<String, Double>>
Run Code Online (Sandbox Code Playgroud)

CustomTuple: 此对象包含有关RDD中当前行的信息,如周,月,城市等.

public class CustomTuple implements Serializable{

private Map hierarchyMap = null;
private Map granularMap  = null;
private String timePeriod = null;
private String sourceKey  = null;
}
Run Code Online (Sandbox Code Playgroud)

地图

此地图包含有关该行的统计数据,例如投资额,GRP数量等.

<"Inv", 20>

<"GRP", 30>
Run Code Online (Sandbox Code Playgroud)

我正在这个RDD上执行DAG

  1. 对此RDD应用过滤器并限定相关行:过滤器
  2. 对此RDD应用过滤器并限定相关行:过滤器
  3. 加入RDD:加入
  4. 应用地图阶段计算投资:地图
  5. 应用GroupBy阶段根据所需视图对数据进行分组:GroupBy
  6. 应用地图阶段按照上一步骤中实现的分组聚合数据(比如跨时间段的视图数据),并根据希望收集的结果集创建新对象:Map
  7. 收集结果:收集

因此,如果用户想要跨时间段查看投资,则返回List以下(这是在上面的步骤4中实现的):

<timeperiod1, value> 
Run Code Online (Sandbox Code Playgroud)

当我检查操作时间时,GroupBy占用了执行整个DAG所用时间的90%.

IMO,我们可以通过sing reduce替换GroupBy和后续的Map操作.但是reduce会对JavaPairRDD类型的对象起作用.所以我的reduce会像T reduce(T,T,T),其中T将是CustomTuple,Map.

或者也许在上面的DAG中的第3步之后,我运行另一个map函数,该函数返回一个需要聚合的度量的RDD类型,然后运行reduce.

此外,我不确定聚合函数如何工作,并且它能够在这种情况下帮助我.

其次,我的应用程序将收到不同密钥的请求.在我当前的RDD设计中,每个请求都要求我在此密钥上重新分区或重新分组我的RDD.这意味着对于每个请求,分组/重新分区将占用我95%的时间来计算作业.

<"market1", 20>
<"market2", 30>
Run Code Online (Sandbox Code Playgroud)

这是非常令人沮丧的,因为没有Spark的应用程序的当前性能比Spark的性能好10倍.

任何见解都表示赞赏.

[编辑]我们也注意到JOIN花了很多时间.也许这就是为什么groupby需要时间.[编辑]

TIA!

reduce aggregate apache-spark

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

如何通过多个组获取多个变量的摘要统计信息?

我知道,有在这个论坛上如何获得汇总统计提供了很多的答案(例如,平均值,SE,N)为多组使用选项,如aggregate,ddplydata.table.但是,我不确定如何在多个列上同时应用这些函数.

更具体地说,我想知道如何ddply在多列(dv1,dv2,dv3)上扩展以下命令,而无需每次都重新键入具有不同变量名的代码.

library(reshape2)
library(plyr)

group1 <- c(rep(LETTERS[1:4], c(4,6,6,8)))
group2 <- c(rep(LETTERS[5:8], c(6,4,8,6)))
group3 <- c(rep(LETTERS[9:10], c(12,12)))
my.dat <- data.frame(group1, group2, group3, dv1=rnorm(24),dv2=rnorm(24),dv3=rnorm(24))
my.dat

data1 <- ddply(my.dat, c("group1", "group2","group3"), summarise,
               N    = length(dv1),
               mean = mean(dv1,na.rm=T),
               sd   = sd(dv1,na.rm=T),
               se   = sd / sqrt(N)
)
data1
Run Code Online (Sandbox Code Playgroud)

如何ddply在多个列上应用此函数,以便结果将是每个结果变量的data1,data2,data3 ...?我认为可能是解决方案:

dfm <- melt(my.dat, id.vars = c("group1", "group2","group3"))
lapply(list(.(group1, variable), .(group2, variable),.(group3, variable)), 
   ddply, .data = dfm, .fun = summarize, 
   mean = …
Run Code Online (Sandbox Code Playgroud)

aggregate r plyr

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

带通配符的系列的石墨最大值

我正在寻找类似于 sumSeriesWithWildcards 的东西,但对于最大值/最小值。我的意思是,它应该计算最小值或最大值,而不是计算在所需字段上聚合的总和。我很惊讶没有在 Graphite 库中找到 maxSeriesWithWildcards 调用。如果它不存在,我怎么能模拟呢?

谢谢,你好,索林

aggregate series graphite

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

R 按周聚合

R 新手请原谅我,如果术语是关闭的。

我有一个数据框

      date           val1   val2 val3         val4
1  2016-01-01     8007.59 128739 1573            0
2  2016-01-02     8526.98 142289 1798            0
3  2016-01-03     7720.77 132418 1433            0
4  2016-01-04     6845.67 123710 1280            0
5  2016-01-05     7176.20 126395 1302            0
6  2016-01-06     6125.98 117223 1148            2
7  2016-01-07     6125.16 109752 1119           30
8  2016-01-08     6869.92 107377 1233           24
9  2016-01-09     7289.16 107644 1326           25
10 2016-01-10     7360.92 124131 1330           21
11 2016-01-11     6697.14 112992 1185           26
12 2016-01-12     6418.59 106102 1116           22 …
Run Code Online (Sandbox Code Playgroud)

datetime group-by aggregate r

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

处理两个事实粒度 - 维度模型

我有一个关于创建维度模型和处理不同粒度级别的问题。

我想知道这两种方法中哪一种最好,为什么。或者如果有另一种方法会更好。

我使用的场景很简单:我有 2 个维度,Region 和 Customer,1 个事实,Sales。

这变成了两个维度表,一个用于区域,另一个用于客户,其中包含一个包含销售额的事实表,如下所示:

在此处输入图片说明

现在我想按地区汇总销售额。但我不确定哪种方法是最好的。

我是否应该按地区汇总销售额,然后将数据加入事实表,使模型如下所示:

在此处输入图片说明

或者我应该创建一个新表来保存聚合值,并使用一个键连接回事实和区域维度表,如下所示:

在此处输入图片说明

还是有另一种方法可以击败这两种方法?

感谢您的智慧和投入。

谢谢

aggregate data-modeling data-warehouse dimensional-modeling snowflake-schema

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

MySQL top-N排名,然后将同一组的其余部分求和

我大部分时间都在研究这个主题,但是对于使用group()和使用sum()进行聚合的MySQL表的排名(前3名),我没有一个有效而完美的答案。

数据如下:

TS         | Name     | Count
=============================
1552286160 | Apple    | 7
1552286160 | Orange   | 8
1552286160 | Grape    | 8
1552286160 | Pear     | 9
1552286160 | Kiwi     | 10
...
1552286100 | Apple    | 10
1552286100 | Orange   | 12
1552286100 | Grape    | 14
1552286100 | Pear     | 16
1552286100 | Kiwi     | 9
...
1552286040 | Apple    | 4
1552286040 | Orange   | 2
1552286040 | Grape    | 3
1552286040 | Pear     | 7 …
Run Code Online (Sandbox Code Playgroud)

mysql aggregate sum top-n

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