python - 将 CSV 表转换为 Redis 数据结构

标签 python csv dataframe redis distributed

我正在寻找一种方法/数据结构来实现二进制匹配器的评估系统以进行验证。

该系统将分布在多台PC上。

互联网上很多地方都描述了基本思想,例如,在这个文档中:https://precisebiometrics.com/wp-content/uploads/2014/11/White-Paper-Understanding-Biometric-Performance-Evaluation.pdf

我正在测试的这个匹配器将两个数据项作为输入并计算反射(reflect)它们相似性的匹配分数(然后将选择一个阈值,具体取决于错误匹配/错误不匹配率)。

目前我在 CSV 文件中存储匹配分数和标签,如下所示:

label1, label2, genuine, 0.1
label1, label4, genuine, 0.2
... 
label_2, label_n+1, impostor, 0.8
label_2, label_n+3, impostor, 0.9
...
label_m, label_m+k, genuine, 0.3
...

(我有一个带标签的数据库)

然后我运行一个 python 脚本,将此表加载到 Pandas DataFrame 并计算 FMR/FNMR 曲线,类似于上面链接中图 2 所示的曲线。处理过程相当简单,只需对数据框进行排序,从上到下扫描各行,然后计算每行上方和下方各行的冒名顶替者/正品数量。

系统还应支持查找异常值以支持匹配算法改进(数据项对的标签,产生异常大的真实分数或异常小的冒名顶替分数)。使用 DataFrames 这也很容易(只需排序并获取标题行)。

现在我正在考虑如何将比较数据存储在 RAM 中而不是 HDD 上的 CSV 文件。

我在这方面考虑Redis:数据量大,多台PC参与计算,Redis有主从特性,可以通过网络快速同步数据,这样几台PC就有精确的克隆数据的。 它也是免费的。

但是,在我看来,Redis 不太适合存储此类表格数据。

因此,我需要改变数据结构和算法来处理它们。 但是,如何将此表转换为 Redis 数据结构对我来说并不明显。

另一种选择是使用其他一些数据存储系统而不是 Redis。但是,我不知道有这样的系统,非常感谢您的建议。

最佳答案

您需要更多地了解 Redis 才能解决您的挑战。我推荐你给https://try.redis.io尝试一下,然后思考您的问题。

TL;DR - Redis 不是“表格数据”存储,它是数据结构的存储。您可以使用以最佳方式为您的查询提供服务的数据结构。

IMO 你想要做的实际上是将大数据(到底有多大?)保存在较慢的存储上,并将模型(FMR 曲线计算?异常值?)存储在 Redis 中。这几乎可以肯定地使用现有的核心数据结构(在这种情况下可能是哈希和排序集)来完成,但使用新的模块 API 可能更优化。查看redis-ml模块作为从 Redis 提供机器学习模型的示例(也许您的用例会是一个很好的补充;))

免责声明:我在 Redis Labs 工作,这里是开源 Redis 的发源地,也是利用它的商业解决方案提供商,包括上述模块(开源,AGPL 许可)。

关于python - 将 CSV 表转换为 Redis 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45352240/

相关文章:

python - StringListProperty 限制为 500 个字符字符串(Google App Engine/Python)

java - 在 Eclipse 中编辑 CSV 文件

MySQL加载CSV文件但没有双引号?

python - 如何通过 Pandas 中第一个和最后一个找到的模式将一列分成两列 (Python 3.x)

python - 如何使用子进程运行 virtualenv 包安装

python - x 上的对数

python - 删除任意列包含特定字符串的行

php - 需要在 PHP 中解析较大的(15k 记录),做一些其他的操作。建议?

python - 考虑第一个数据帧的 2 个条件创建第二个数据帧

r - 根据条件填充多列的行