首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将交互作用矩阵转换为三元关系

将交互作用矩阵转换为三元关系
EN

Database Administration用户
提问于 2015-02-05 19:25:40
回答 1查看 242关注 0票数 0

我在MS中有一个稀疏的数据“交互矩阵”,希望在Access中转换成一个“三元关系”(表)。

电子表格数据采用以下模式:

代码语言:javascript
复制
Name   Act-1  Act-2  Act-3  ... Act-n
name-1         week
name-2                week
name-3  week                     week
  :                         week
name-m         week   week

每个数据行的第一列中都有n活动,每个数据行的第一列中都有m名称,在每个人(名称)所做的活动中输入的具体周数为零或更多。如果n是小的、固定的,我可以将这个关系保持为一个矩阵,但是n会变得相当大,并且矩阵会非常稀疏。

因此,所需的关系表结构(我称之为赋值)如下所示:

代码语言:javascript
复制
Assignment: Name, Activity, Week

在Excel或Access中是否有方便的工具来促进数据转换?

psuedocode算法将是

代码语言:javascript
复制
for each Name (row)
    for each Activity (column)
        if Week, add Assignment: Name, Activity, Week

虽然我已经用VBA (几年前)编写了代码,但我从未将它与Excel结合使用。我倾向于使用Python和CSV文件。也许有一种很好的SQL技术(即使不是特定于访问的)?或者是与“旋转”有关(我从来不明白那是关于什么的)?

你有什么经验想要分享这种转换吗?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-02-06 20:17:33

我的解决方案是将电子表格保存为一个由制表符分隔的“矩阵”文件,运行以下“数据结构转换”程序,然后将结果以制表符分隔的“关系”文件导入Access。

Python3.4代码:

代码语言:javascript
复制
import csv
source_path = 'matrix.txt'
target_path = 'relation.txt'
source_deli = '\t'
target_deli = '\t'
target_head = ("Name", "Activity", "Week")
fin = open (source_path, 'r', newline='')
fout = open (target_path, 'w', newline='')
reader = csv.DictReader (fin, delimiter=source_deli)
writer = csv.writer (fout, delimiter=target_deli)
writer.writerow (target_head)
for row in reader:
    for key in row:
        if key != "Name" and row[key]:
            target_row = (row["Name"], key, row[key])
            writer.writerow (target_row)
fin.close()
fout.close()
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/91220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档