我在MS中有一个稀疏的数据“交互矩阵”,希望在Access中转换成一个“三元关系”(表)。
电子表格数据采用以下模式:
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会变得相当大,并且矩阵会非常稀疏。
因此,所需的关系表结构(我称之为赋值)如下所示:
Assignment: Name, Activity, Week在Excel或Access中是否有方便的工具来促进数据转换?
psuedocode算法将是
for each Name (row)
for each Activity (column)
if Week, add Assignment: Name, Activity, Week虽然我已经用VBA (几年前)编写了代码,但我从未将它与Excel结合使用。我倾向于使用Python和CSV文件。也许有一种很好的SQL技术(即使不是特定于访问的)?或者是与“旋转”有关(我从来不明白那是关于什么的)?
你有什么经验想要分享这种转换吗?
发布于 2015-02-06 20:17:33
我的解决方案是将电子表格保存为一个由制表符分隔的“矩阵”文件,运行以下“数据结构转换”程序,然后将结果以制表符分隔的“关系”文件导入Access。
Python3.4代码:
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()https://dba.stackexchange.com/questions/91220
复制相似问题