本着使用摘要来避免使用所有数据的精神。可能与您最初的要求完全不同。只是一种非常幼稚的开始方式——这可能在一个非常大的 Postgres 实例上完成。这是一个初步的探索步骤,因此它使用粗略的总和和计数来获得一些粗略的见解。您可以从 DBMS 的非常有效的求和/计数功能中获得一些功能,并使用它进行一些粗略的分析。我来自数据库和大规模并行数据分析背景,因此将其视为一种统计新手方法,(我确实有一个 Appl Math 的 MS 直到最近才被积极使用)
所以这里有所有这些警告
a) 天真地考虑将属性(日期、已售商品、价格、邮政编码)作为表格的列。我相信你有更多,但让我们专注于这些。
b) 在数据库中创建一个辅助表,通过添加所有 $ amts 来获得按邮政编码的一天销售额(日期、dailysales、邮政编码)。一些简单的 SQL(select date, zipcode, sum(price) as dailysales from table group by ....)为您提供此表。
一个小得多的表,每个邮政编码 365 行 X # 个邮政编码在您的数据中。
使用此表进行初步探索,并且当您采样时,您可以将其用作现实检查。
根据你给它多少 CPU 和内存,这个步骤可能需要几分钟或几小时。建议不要在笔记本电脑上尝试(当时在大约 2005 年的笔记本电脑上运行了 100 次类似大小的问题后,我的主板炸毁了 :-))
c)为每个邮政编码分别做“你最喜欢的回归”,(dailysales因变量,日期自变量)。如果您想就地执行此操作,请参阅 MADlib 项目http://MADlib.net(MADlib 通过在 Postgres 中嵌入 C++ 数学、数组和统计库来进行数据库内分析)
d) 每个邮政编码一个地块,365 个数据点(如果您有每日数据) - 寻找增加、减少或不确定的结果。或者只是获取相关系数并分成三个桶+,-和“不知道”。
现在,这允许您通过 Pareto 思维分离出销售额增长最多的前 20 个(或 10 个或 ..)邮政编码(按 % 和 $amt 计算)。大多数减少类似...
您现在可以分别制定策略,以分而治之的方式,深入了解增加、不确定和减少的邮政编码桶。
MADlib 还允许您通过 PL/R 运行数据库内 R 例程,但对于线性/逻辑回归和 SVM,嵌入式 C++ 的速度要快 100 倍。C4.5 也可用。
如果您的数据大小对于 Postgres 来说太大了(不要这么认为,但以防万一),那么就有了 Greenplum MPP 数据库。对于 7500 万行,您应该能够在 X-Large EC2 实例或类似的 Postgres 实例上执行此操作。
如果您不想在 dbms 中执行此操作,则可以编写一些 Python 代码并遍历磁盘文件或数据库表,一次将几千或十万行拉入内存。如果您确实将其放入 Postgres 中,则有一些方法可以获取行的小随机样本。
希望这是有道理的,或者至少在您的上下文中不是完全胡说八道:-)