如何将大量表格数据拆分为较小的相关表格? (不是数据库问题)

时间:2011-05-11 20:45:15

标签: vb.net algorithm math scripting

我真的希望我能以一种可以理解的方式描述这个问题。这是一个我无法开始解决的难题,即使我(大多数)理解它。我只是不确定从哪里开始,我真的希望有人可以让我朝着正确的方向前进。

我有一个大数据表。它描述了对象之间的关系。假设Y轴具有编号为1-1000的项目,并且X轴也具有项目1-1000。如果Y轴上的项目#234与X上的项目#791相关,则表格中将有一个标记,其中行和列交叉。在某些行业中,这被称为真值表。人们可以一眼就看出系统中有多少项相互关联。表中的标记有助于识别趋势和模式。

这里有一些关于桌子性质的其他有用的东西:

  • 任一轴上每个项目的关系数(r)的完整范围可以是1< = r< = axisTotal。
  • X和Y轴将共享公共项目,但每个轴也将包含另一个轴不具有的项目。
  • 每个项目每个轴只存在一次。它可以在X和Y上,但它只会在每次一次。
  • 每个轴上的项目总数很可能不相等。每个轴可以有50到1000个项目。

最终结果是这将是一份需要打印的报告。我们已经成功地在11英寸X 17英寸纸上打印了一张桌子,每个轴上有大约100-150个项目。除此之外,它开始变得如此之小,以至于它不可读。

我想要做的是将超大表拆分成更小的表,但相关点需要保持在一起。如果我在X上抓取项目1-100,那么我需要与Y相关的每个项目。

我已经生成了许多这些表格,虽然关系数量可以是任意的,但我从未见过某个项目与所有其他项目有关。因此在实际操作中,范围更像是1< = r< =(10%* axisTotal)。如果某个项目的关系超出此范围,则可以将其拆分为多个表格,但这根本不是最优的。

在一天结束时,我认为如果1000x1000项目表分成8到10个较小的相关表格的打印页面,我们和我们的客户会很高兴。

任何指导都会有很大的帮助!感谢。

--- --- EDIT 另外值得注意的是,表中没有空行或列。 x轴和y轴上的每个项目都与相反轴上的至少一个项目相关。

--- --- EDIT 这是我正在描述的一个小真值表的示例:Example Truth Table。每行和每列至少有一个关系。

--- --- EDIT 2011年5月18日 对于它的价值,我在这个项目上的表现相当不错,我被拉了几个星期。所以在我回到这个问题之前会有一段时间。但这是我必须尽快解决的问题。

--- --- EDIT 2011年7月11日 游民。好吧,看起来我现在无法解决这个问题。我真的希望能够弄明白这一点。通过讨论,我们决定在Excel电子表格中将真值表作为主报表的附加资源。 Excel 2007及更高版本将处理1000多列,这些就足够了。另外,我们添加了一些VBA,允许观众双击列标题。此操作会将行减少到仅存在交互的行。然后它删除空列。通过这种方式,他们可以根据他们想要查看的项目查看一个小的子表,并可以根据需要进行打印。

2 个答案:

答案 0 :(得分:1)

这不是一个答案,我只想尝试更好地可视化您的数据。它看起来像这样吗?

        Alice  Bob  Charlie ... Zelda
Shoes     X            X
Hats            X                 X
Gloves                 X
...
Pants           X

修改

是否需要以表格格式显示数据?或者你可以列出每一个?类似的东西:

  • 鲍勃
    • 帽子
    • 裤子
  • 查理
    • 手套
  • 塞尔达
    • 帽子

或者另一种方式:

  • 鞋类
    • 爱丽丝
    • 查理
  • 帽子
    • 鲍勃
    • 塞尔达
  • 手套
    • 查理
  • 裤子
    • 鲍勃

编辑2

好的,我已经制作了另一个更大的真值表,希望能更好地理解你想要如何分解:

   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 1 x   x     x                             x
 2   x x     x             x         x     x
 3 x               x             x             x
 4         x             x     x
 5   x           x                 x
 6               x             x           x
 7   x             x             x
 8         x               x               x

为了论证,我们只能说你只能在页面上放4行(因为我不想在早上打出一张巨大的表格),所以我们将把它分成两页。首先,显示每一行都很重要,对吧?其次,您是否需要显示从不具有值的列。例如,YZ在此表中从不拥有第1行到第8行的值,它们是否可以从报告中排除,还是仍然需要存在?第三,行的顺序是否重要?

如果显示完全空列并不重要,那么我们可以从上表中删除10列并将其压缩到:

   A B C E F H I L M O P Q R U V W
 1 x   x   x                 x
 2   x x   x       x       x x
 3 x           x       x         x
 4       x       x   x
 5   x       x           x
 6           x       x       x
 7   x         x       x
 8       x         x         x

然后,如果行顺序不重要,您可以通过采用最佳行排列(此处未必显示)进一步压缩它。下面的两个表格进一步压缩为11和10列:

  A B C F H I M P Q R U
1 x   x x             x
2   x x x     x     x x
5   x     x       x
7   x       x   x

  A E H I L M O P U W
3 x     x       x   x
4   x     x   x
6     x       x   x
8   x       x     x

我在这里走错了路吗?这些都是帮助我更好地理解您的数据和输出要求的问题。

另外,严肃地说,是否可以选择更大的打印机/绘图仪?此外,是否可以选择仅生成PDF并使用Acrobat的打印磁贴选项?

答案 1 :(得分:0)

去年我在计算生物学PLoS期刊(www.ploscompbiol.org)上阅读了一篇与您的问题相关的文章。

简而言之,它描述了一种新的方法,当我们已经拥有一组关于它们的一对一交互的蛋白质和表格数据时,我们想要对它们进行分组,以便组内的交互和两组之间的交互是最大化或(这是创新的想法)最小化。

如果我们绘制起始数据表,黑色表示高,白色表示低相互作用,它看起来是随机灰色的。完成计算和重新排列后的结果表(因此分组项目彼此靠近)看起来更像是黑白交叉区域。

文章: Protein Interaction Networks—More Than Mere Modules

其中还引用了其他旧技术来分组此类数据。