标签: normalization

PostgreSQL:有效地将数据加载到Star Schema中

想象一下PostgreSQL 9.0上具有以下结构的表:

create table raw_fact_table (text varchar(1000));
Run Code Online (Sandbox Code Playgroud)

为了简化起见,我只提到一个文本列,实际上它有十几个.该表有100亿行,每列有很多重复.该表是使用COPY FROM从平面文件(csv)创建的.

为了提高性能,我想转换为以下星型模式结构:

create table dimension_table (id int, text varchar(1000));
Run Code Online (Sandbox Code Playgroud)

然后将事实表替换为如下事实表:

create table fact_table (dimension_table_id int);
Run Code Online (Sandbox Code Playgroud)

我当前的方法是基本上运行以下查询来创建维度表:

Create table dimension_table (id int, text varchar(1000), primary key(id));
Run Code Online (Sandbox Code Playgroud)

然后创建填充我使用的维度表:

insert into dimension_table (select null, text from raw_fact_table group by text);
Run Code Online (Sandbox Code Playgroud)

之后我需要运行以下查询:

select id into fact_table from dimension inner join raw_fact_table on (dimension.text = raw_fact_table.text);
Run Code Online (Sandbox Code Playgroud)

想象一下,通过多次将所有字符串与所有其他字符串进行比较,我获得了可怕的性能.

在MySQL上,我可以在COPY FROM期间运行存储过程.这可以创建字符串的哈希值,并且所有后续字符串比较都是在哈希而不是长原始字符串上完成的.这似乎不可能在PostgreSQL上,我该怎么办?

样本数据将是包含类似内容的CSV文件(我也使用整数和双精度的引号):

"lots and lots of text";"3";"1";"2.4";"lots of text";"blabla"
"sometext";"30";"10";"1.0";"lots of text";"blabla"
"somemoretext";"30";"10";"1.0";"lots of text";"fooooooo"
Run Code Online (Sandbox Code Playgroud)

postgresql etl normalization star-schema fact-table

7
推荐指数
2
解决办法
5740
查看次数

关于地址,城市,国家数据的规范化问题

我目前有3个表格,用于存储世界上所有主要城市的信息,每个地区/州对应这些国家/地区,以及每个城市/地区.

城市,州和国家

现在我在我的数据库中有大约6个其他表,例如需要完全相同的5列的用户或组织表:地址,郊区,城市,州/地区,国家.所以我想知道是否"良好"的规范化实践可能使用存储这5条信息的"位置"表,然后用户或组织表将有一个location_id来引用回来.

有位置表的城市,州和国家

好主意还是坏主意?我也在考虑使用"联系人"表,其原理相同,包括home_phone,business_phone,mobile_phone,email_address,而不是在6个表中的每个表中都有相同的5列.

任何建议表示赞赏 非常感谢!

mysql database database-design normalization denormalization

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

在Python 2.7中使用unicodedata.normalize

再一次,我对unicode问题非常困惑.我无法弄清楚如何成功使用unicodedata.normalize按预期转换非ASCII字符.例如,我想转换字符串

u"Cœur"
Run Code Online (Sandbox Code Playgroud)

u"Coeur"
Run Code Online (Sandbox Code Playgroud)

我很确定unicodedata.normalize是这样做的方法,但我不能让它工作.它只是保持字符串不变.

>>> s = u"Cœur"
>>> unicodedata.normalize('NFKD', s) == s
True
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python unicode normalization unicode-normalization python-2.7

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

将表规范化为第3范式

这个问题显然是一个功课问题.我无法理解我的教授,也不知道他在大选期间所说的话.我需要逐步指示将下表归一化为1NF,然后是2NF,然后是3NF.

在此输入图像描述

我感谢任何帮助和指导.

database database-design normalization relational-database database-schema

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

NoSQL与关系数据库与可能的混合数据库

我听到的更多left joins,但是还有人给我一个清楚的解释,用它来代替它left joins.

我读过它无法做到left joins,所以我试图找出你如何能够使用这样的数据存储.从阅读:通过MongoDB中的代码保留连接似乎是一个建议就是创建一个大表,就好像你已经在它上面进行了连接一样.

如果上面的陈述是真的,那么我可以看到它是如何使用的.但是我很好奇你如何处理重复数据...作为规范化的概念,可以帮助你消除冗余并确保数据的一致性(例如像大写,空白等轻微修改)......

我们只是为了可扩展的速度而牺牲数据的一致性,还是我错过了什么?我们非常感谢任何澄清,以及帮助我​​理解的任何资源.

美东时间

我一直在做更多的挖掘,并找到了以下问题的答案,有助于澄清我的理解:

从这些答案来看,我对一致性的理解似乎是正确的.看起来似乎left joins是用于特定的问题类型,如果你需要关系,你应该使用关系数据库.

但这引发了更多的问题,如:

  1. 它让我想知道什么时候使用的现实例子left joins与何时不使用?
  2. 通过left joins数据,您应该能够解决关系数据库所做的所有相同问题......但是有关于如何left joins使用关系数据库进行数据的规则.是否有可用于帮助left joins数据使用left joins解决方案的规则?
  3. 您可能想要考虑同时使用两个left joins解决方案的任何示例left joins

normalization left-join relational-database mongodb nosql

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

Julia:将DataFrame传递给函数会创建一个指向DataFrame的指针吗?

我有一个函数,我在其中规范化DataFrame的前N列.我想返回规范化的DataFrame,但保留原文.然而,似乎该函数也改变了传递的DataFrame!

using DataFrames

function normalize(input_df::DataFrame, cols::Array{Int})
    norm_df = input_df
    for i in cols
        norm_df[i] = (input_df[i] - minimum(input_df[i])) / 
            (maximum(input_df[i]) - minimum(input_df[i]))
    end
    norm_df
end

using RDatasets
iris = dataset("datasets", "iris")
println("original df:\n", head(iris))

norm_df = normalize(iris, [1:4]);
println("should be the same:\n", head(iris))
Run Code Online (Sandbox Code Playgroud)

输出:

original df:
6x5 DataFrame
| Row | SepalLength | SepalWidth | PetalLength | PetalWidth | Species  |
|-----|-------------|------------|-------------|------------|----------|
| 1   | 5.1         | 3.5        | 1.4         | 0.2        | "setosa" |
| 2   | 4.9         | …
Run Code Online (Sandbox Code Playgroud)

normalization dataframe julia

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

神经网络中的批量归一化

我对ANN仍然相当新,我只是阅读批量标准化论文(http://arxiv.org/pdf/1502.03167.pdf),但我不确定我是否正在做他们正在做的事情(以及更多重要的是,它为什么有效)

所以假设我有两层L1和L2,其中L1产生输出并将它们发送到L2中的神经元.批量标准化只需从L1获取所有输出(即每个神经元的每一个输出,获得|L1| X |L2|完全连接网络的数字的整体向量),将它们标准化为0和SD为1,然后将它们提供给L2中各自的神经元(加上应用他们在论文中讨论的γ和β的线性变换)?

如果确实如此,这对NN有何帮助?关于不断分配的特别之处是什么?

machine-learning normalization neural-network

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

流数据的规范化方法

我正在使用Clustream算法,我发现我需要规范化我的数据.我决定使用min-max算法来做到这一点,但我认为通过这种方式,新的数据对象的值将以不同的方式计算,因为min和max的值可能会发生变化.你认为我是对的吗?如果是这样,我应该使用哪种算法?

machine-learning stream normalization data-mining

7
推荐指数
2
解决办法
1025
查看次数

tf-idf不同长度的文件

我在网上搜索了关于文件长度差别很大的情况下的tf等级标准化(例如,文件长度从500字到2500字不等)

唯一正规化我发现谈论将术语频率除以文档的长度,因此导致文档的长度没有任何意义.

这种方法对于规范化tf来说是一个非常糟糕的方法.如果有的话,它会导致每个文档的tf等级具有非常大的偏差(除非所有文档都是从几乎相同的字典构造的,使用tf-idf时不是这种情况)

例如,我们可以获取2个文档 - 一个包含100个唯一单词,另一个包含1000个唯一单词.doc1中的每个单词的tf值为0.01,而在doc2中,每个单词的tf值为0.001

当使用doc1与doc2匹配单词时,这会导致tf-idf等级自动变大

有没有人有任何更合适的正规化配方?

谢谢

编辑 我还看到一种方法,说明我们应该将术语频率除以每个文档的doc的最大术语频率,这也解决了我的问题

我在想的是,计算所有文档的最大术语频率,然后通过将每个术语频率除以最大值来对所有术语进行归一化

我很想知道你的想法

python normalization tf-idf textblob

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

tensorflow上的批量标准化 - tf.contrib.layers.batch_norm在培训方面表现良好,但测试/验证结果不佳

我尝试在Mnist数据集上使用函数tf.contrib.layers.batch_norm实现CNN.

当我训练和检查模型时,我发现损失正在减少(好!)但是测试数据集的准确性保持随机(~10%)(BAD !!!)

如果我在没有批量标准化的情况下使用相同的模型,我会发现测试精度正在按预期增加.

你可以在下面的代码中看到我如何使用批量规范化功能.如果我用于测试数据集来设置is_training = True我得到了很好的结果,所以问题是批量标准化函数的is_training = False模式.

请帮我解决一下这个.提前感谢所有人.

    # BLOCK2 - Layer 1
    conv1 = tf.nn.conv2d(output, block2_layer1_1_weights, [1, 1, 1, 1], padding='SAME')
    conv2 = tf.nn.conv2d(output, block2_layer1_2_weights, [1, 1, 1, 1], padding='SAME')
    conv3 = tf.nn.conv2d(output, block2_layer1_3_weights, [1, 1, 1, 1], padding='SAME')
    conv4 = tf.nn.conv2d(output, block2_layer1_4_weights, [1, 1, 1, 1], padding='SAME')

    conv_normed1 = tf.contrib.layers.batch_norm(conv1, scale=True, decay=batch_norm_decay, center=True,  is_training=is_training, updates_collections=None )
    conv_normed2 = tf.contrib.layers.batch_norm(conv2, scale=True, decay=batch_norm_decay, center=True,  is_training=is_training, updates_collections=None )
    conv_normed3 = tf.contrib.layers.batch_norm(conv3, scale=True, decay=batch_norm_decay, center=True,  is_training=is_training, …
Run Code Online (Sandbox Code Playgroud)

normalization tensorflow

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