Functions
將互動矩陣轉換為三元關係
我在 MS Excel 中有我所謂的稀疏“互動矩陣”數據,我希望將其轉換為 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
活動作為 Excel 標題,m
每個數據行的第一列中的名稱,以及在任何人(姓名)進行活動時輸入的零個或多個特定*週。*如果n
它們很小且固定,我可以將關係保留為矩陣,但n
可以變得非常大並且矩陣將非常稀疏。因此所需的關係表結構(我稱之為分配)是這樣的:
Assignment: Name, Activity, Week
Excel 或 Access 中是否有一個簡單的工具來促進這種數據轉換?
虛擬碼算法將是
for each Name (row) for each Activity (column) if Week, add Assignment: Name, Activity, Week
雖然我在 VBA 中編碼(幾年前),但我從未將它與 Excel 結合使用。我傾向於使用 Python 和 CSV 文件。也許有一種很好的 SQL 技術(即使不是訪問特定的)?還是與“旋轉”有關(我從來不明白那是什麼意思)?
對於這種轉換,您有什麼想分享的經驗嗎?
我的解決方案是將電子表格保存為製表符分隔的“矩陣”文件,執行以下“資料結構轉換”程序,然後將生成的製表符分隔的“關係”文件導入 Access。
Python 3.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()