# Autor: Stanislav Geidl # C2184 Uvod do programovani v Pythonu # Domaci ukol 07 # Ukolem je dopsat funkce csv_reader, ktera nacte soubor a ulozi dva specifikovane sloupce z jednoho radku do N-tice (tuple) a vsechny # radky ulozi do listu a ty vrati, a contingency_table, ktera vytvori kontingencni tabulku. Funkce print_contingency_table vam ji pak umozni vytisknout. # http://cs.wikipedia.org/wiki/Kontingenčn%C3%AD_tabulka # Napr: """ ;1;2;3;sum A;40;40;49;129 B;45;46;40;131 C;34;41;46;121 D;41;37;41;119 sum;160;164;176;500 """ def csv_reader(filename, column1, column2): """ >>> print(csv_reader("homework07.csv", 5, 4)) [('C', '2'), ('D', '2'), ('D', '2'), ('C', '3'), ('D', '2'), ('C', '2'), ('C', '1'), ('B', '1'), ('B', '3'), ('B', '3'), ('A', '1'), ('C', '3'), ('B', '3'), ('B', '1'), ('A', '3'), ('A', '3'), ('A', '2'), ('C', '3'), ('B', '3'), ('A', '1'), ('A', '3'), ('A', '2'), ('A', '3'), ('D', '1'), ('B', '3'), ('C', '3'), ('A', '1'), ('B', '1'), ('C', '2'), ('C', '2'), ('A', '3'), ('A', '3'), ('C', '2'), ('A', '2'), ('A', '2'), ('B', '1'), ('B', '2'), ('A', '3'), ('A', '2'), ('B', '3'), ('A', '2'), ('B', '2'), ('B', '3'), ('B', '2'), ('C', '1'), ('B', '3'), ('C', '3'), ('C', '1'), ('C', '1'), ('A', '1'), ('B', '1'), ('C', '2'), ('D', '1'), ('B', '2'), ('A', '3'), ('A', '2'), ('C', '3'), ('A', '3'), ('D', '1'), ('A', '3'), ('A', '1'), ('D', '3'), ('D', '1'), ('A', '3'), ('C', '1'), ('B', '3'), ('B', '3'), ('A', '1'), ('B', '1'), ('B', '1'), ('A', '1'), ('D', '3'), ('B', '3'), ('A', '2'), ('C', '2'), ('B', '3'), ('B', '1'), ('C', '2'), ('A', '1'), ('A', '3'), ('D', '3'), ('A', '3'), ('B', '1'), ('D', '1'), ('C', '1'), ('D', '2'), ('B', '1'), ('C', '1'), ('B', '2'), ('C', '3'), ('B', '1'), ('D', '2'), ('B', '3'), ('C', '3'), ('A', '2'), ('D', '1'), ('B', '2'), ('A', '1'), ('A', '1'), ('D', '3'), ('D', '3'), ('C', '2'), ('D', '2'), ('B', '2'), ('D', '3'), ('C', '2'), ('B', '1'), ('A', '2'), ('C', '2'), ('C', '2'), ('A', '3'), ('C', '3'), ('C', '3'), ('D', '1'), ('C', '2'), ('C', '1'), ('B', '1'), ('B', '1'), ('D', '3'), ('B', '1'), ('A', '1'), ('D', '1'), ('D', '3'), ('D', '3'), ('A', '3'), ('A', '1'), ('B', '2'), ('D', '2'), ('D', '3'), ('D', '1'), ('A', '2'), ('D', '2'), ('D', '1'), ('C', '2'), ('C', '2'), ('C', '2'), ('C', '1'), ('C', '1'), ('B', '1'), ('C', '2'), ('C', '3'), ('D', '1'), ('B', '3'), ('D', '2'), ('B', '2'), ('C', '2'), ('A', '3'), ('B', '2'), ('C', '3'), ('D', '2'), ('B', '3'), ('D', '2'), ('B', '2'), ('A', '2'), ('C', '1'), ('C', '3'), ('C', '1'), ('A', '2'), ('A', '2'), ('D', '2'), ('C', '2'), ('A', '3'), ('D', '2'), ('D', '1'), ('D', '2'), ('C', '2'), ('C', '3'), ('A', '1'), ('D', '1'), ('B', '3'), ('D', '1'), ('C', '2'), ('C', '1'), ('D', '1'), ('C', '1'), ('D', '3'), ('C', '3'), ('D', '2'), ('D', '1'), ('C', '1'), ('B', '1'), ('B', '1'), ('C', '3'), ('A', '3'), ('C', '1'), ('C', '1'), ('C', '3'), ('D', '3'), ('C', '2'), ('A', '3'), ('A', '3'), ('B', '1'), ('B', '2'), ('C', '3'), ('B', '2'), ('C', '1'), ('A', '2'), ('D', '2'), ('C', '2'), ('C', '3'), ('C', '3'), ('C', '2'), ('A', '2'), ('A', '1'), ('B', '1'), ('C', '2'), ('C', '2'), ('B', '2'), ('D', '1'), ('A', '1'), ('A', '2'), ('A', '3'), ('B', '1'), ('B', '2'), ('D', '1'), ('D', '2'), ('D', '3'), ('C', '1'), ('B', '3'), ('D', '2'), ('A', '2'), ('D', '3'), ('B', '1'), ('A', '3'), ('A', '1'), ('A', '3'), ('D', '2'), ('C', '3'), ('A', '3'), ('B', '1'), ('B', '2'), ('A', '2'), ('B', '2'), ('A', '1'), ('B', '2'), ('C', '2'), ('D', '1'), ('C', '3'), ('D', '2'), ('C', '1'), ('A', '2'), ('A', '2'), ('B', '3'), ('B', '1'), ('A', '3'), ('B', '1'), ('A', '2'), ('D', '2'), ('C', '2'), ('A', '3'), ('D', '3'), ('C', '2'), ('A', '1'), ('C', '3'), ('B', '3'), ('C', '3'), ('D', '1'), ('D', '2'), ('D', '3'), ('B', '1'), ('A', '3'), ('D', '1'), ('C', '1'), ('B', '3'), ('C', '3'), ('A', '2'), ('A', '3'), ('C', '3'), ('C', '1'), ('C', '1'), ('A', '3'), ('A', '2'), ('B', '1'), ('D', '1'), ('A', '3'), ('A', '3'), ('A', '3'), ('A', '2'), ('D', '1'), ('A', '3'), ('B', '2'), ('B', '3'), ('A', '2'), ('D', '2'), ('B', '2'), ('B', '2'), ('B', '1'), ('A', '2'), ('A', '3'), ('C', '1'), ('B', '1'), ('A', '1'), ('D', '2'), ('A', '1'), ('D', '2'), ('B', '2'), ('A', '2'), ('C', '1'), ('B', '1'), ('A', '3'), ('C', '3'), ('B', '1'), ('B', '2'), ('B', '1'), ('A', '1'), ('B', '2'), ('B', '3'), ('D', '2'), ('A', '1'), ('B', '1'), ('B', '3'), ('C', '1'), ('B', '2'), ('B', '2'), ('C', '3'), ('A', '2'), ('B', '3'), ('D', '3'), ('D', '2'), ('D', '1'), ('D', '2'), ('D', '3'), ('C', '2'), ('C', '2'), ('C', '3'), ('B', '2'), ('D', '3'), ('A', '1'), ('C', '3'), ('B', '2'), ('C', '1'), ('A', '2'), ('B', '1'), ('A', '1'), ('C', '2'), ('C', '1'), ('B', '2'), ('B', '2'), ('D', '3'), ('A', '3'), ('B', '1'), ('A', '2'), ('D', '1'), ('B', '3'), ('D', '1'), ('D', '1'), ('A', '2'), ('A', '1'), ('D', '2'), ('B', '2'), ('C', '2'), ('A', '1'), ('A', '1'), ('A', '3'), ('C', '3'), ('D', '1'), ('D', '3'), ('D', '3'), ('B', '3'), ('B', '3'), ('D', '1'), ('A', '3'), ('D', '2'), ('D', '3'), ('B', '3'), ('D', '3'), ('B', '2'), ('A', '1'), ('C', '3'), ('D', '3'), ('B', '3'), ('B', '1'), ('A', '2'), ('D', '3'), ('B', '3'), ('C', '3'), ('B', '1'), ('D', '2'), ('B', '2'), ('C', '3'), ('D', '3'), ('C', '1'), ('C', '1'), ('B', '3'), ('D', '3'), ('C', '3'), ('B', '2'), ('D', '3'), ('A', '3'), ('B', '1'), ('D', '2'), ('D', '3'), ('B', '2'), ('B', '3'), ('A', '3'), ('B', '3'), ('C', '2'), ('C', '3'), ('B', '2'), ('C', '2'), ('B', '1'), ('A', '3'), ('D', '3'), ('A', '1'), ('A', '1'), ('A', '1'), ('B', '2'), ('D', '1'), ('A', '3'), ('A', '3'), ('B', '2'), ('B', '2'), ('A', '2'), ('C', '3'), ('D', '3'), ('D', '1'), ('A', '3'), ('D', '3'), ('B', '3'), ('D', '2'), ('B', '1'), ('D', '1'), ('D', '3'), ('B', '1'), ('C', '3'), ('C', '3'), ('C', '2'), ('B', '3'), ('D', '1'), ('B', '2'), ('A', '1'), ('A', '1'), ('D', '2'), ('A', '2'), ('D', '1'), ('B', '1'), ('C', '3'), ('A', '2'), ('C', '1'), ('A', '1'), ('B', '3'), ('C', '2'), ('A', '2'), ('D', '1'), ('B', '2'), ('D', '3'), ('D', '1'), ('A', '1'), ('D', '1'), ('C', '3'), ('D', '3'), ('C', '3'), ('B', '1'), ('B', '3'), ('B', '3'), ('A', '1'), ('A', '3'), ('C', '1'), ('B', '2'), ('C', '3'), ('B', '2'), ('A', '3'), ('A', '2'), ('D', '2'), ('C', '2'), ('C', '2'), ('D', '1'), ('D', '1'), ('B', '1'), ('B', '2'), ('C', '3'), ('C', '3'), ('A', '2'), ('B', '3'), ('B', '2'), ('B', '2'), ('A', '3'), ('D', '2'), ('D', '3'), ('C', '2'), ('D', '3'), ('D', '2'), ('B', '3'), ('A', '3'), ('D', '3'), ('A', '3'), ('A', '1'), ('A', '1'), ('D', '1'), ('C', '2'), ('C', '1'), ('D', '3'), ('D', '1'), ('C', '1'), ('A', '1'), ('A', '1'), ('D', '3'), ('A', '2'), ('C', '3'), ('B', '1')] >>> print(csv_reader("homework07.csv", 4, 5)) [('2', 'C'), ('2', 'D'), ('2', 'D'), ('3', 'C'), ('2', 'D'), ('2', 'C'), ('1', 'C'), ('1', 'B'), ('3', 'B'), ('3', 'B'), ('1', 'A'), ('3', 'C'), ('3', 'B'), ('1', 'B'), ('3', 'A'), ('3', 'A'), ('2', 'A'), ('3', 'C'), ('3', 'B'), ('1', 'A'), ('3', 'A'), ('2', 'A'), ('3', 'A'), ('1', 'D'), ('3', 'B'), ('3', 'C'), ('1', 'A'), ('1', 'B'), ('2', 'C'), ('2', 'C'), ('3', 'A'), ('3', 'A'), ('2', 'C'), ('2', 'A'), ('2', 'A'), ('1', 'B'), ('2', 'B'), ('3', 'A'), ('2', 'A'), ('3', 'B'), ('2', 'A'), ('2', 'B'), ('3', 'B'), ('2', 'B'), ('1', 'C'), ('3', 'B'), ('3', 'C'), ('1', 'C'), ('1', 'C'), ('1', 'A'), ('1', 'B'), ('2', 'C'), ('1', 'D'), ('2', 'B'), ('3', 'A'), ('2', 'A'), ('3', 'C'), ('3', 'A'), ('1', 'D'), ('3', 'A'), ('1', 'A'), ('3', 'D'), ('1', 'D'), ('3', 'A'), ('1', 'C'), ('3', 'B'), ('3', 'B'), ('1', 'A'), ('1', 'B'), ('1', 'B'), ('1', 'A'), ('3', 'D'), ('3', 'B'), ('2', 'A'), ('2', 'C'), ('3', 'B'), ('1', 'B'), ('2', 'C'), ('1', 'A'), ('3', 'A'), ('3', 'D'), ('3', 'A'), ('1', 'B'), ('1', 'D'), ('1', 'C'), ('2', 'D'), ('1', 'B'), ('1', 'C'), ('2', 'B'), ('3', 'C'), ('1', 'B'), ('2', 'D'), ('3', 'B'), ('3', 'C'), ('2', 'A'), ('1', 'D'), ('2', 'B'), ('1', 'A'), ('1', 'A'), ('3', 'D'), ('3', 'D'), ('2', 'C'), ('2', 'D'), ('2', 'B'), ('3', 'D'), ('2', 'C'), ('1', 'B'), ('2', 'A'), ('2', 'C'), ('2', 'C'), ('3', 'A'), ('3', 'C'), ('3', 'C'), ('1', 'D'), ('2', 'C'), ('1', 'C'), ('1', 'B'), ('1', 'B'), ('3', 'D'), ('1', 'B'), ('1', 'A'), ('1', 'D'), ('3', 'D'), ('3', 'D'), ('3', 'A'), ('1', 'A'), ('2', 'B'), ('2', 'D'), ('3', 'D'), ('1', 'D'), ('2', 'A'), ('2', 'D'), ('1', 'D'), ('2', 'C'), ('2', 'C'), ('2', 'C'), ('1', 'C'), ('1', 'C'), ('1', 'B'), ('2', 'C'), ('3', 'C'), ('1', 'D'), ('3', 'B'), ('2', 'D'), ('2', 'B'), ('2', 'C'), ('3', 'A'), ('2', 'B'), ('3', 'C'), ('2', 'D'), ('3', 'B'), ('2', 'D'), ('2', 'B'), ('2', 'A'), ('1', 'C'), ('3', 'C'), ('1', 'C'), ('2', 'A'), ('2', 'A'), ('2', 'D'), ('2', 'C'), ('3', 'A'), ('2', 'D'), ('1', 'D'), ('2', 'D'), ('2', 'C'), ('3', 'C'), ('1', 'A'), ('1', 'D'), ('3', 'B'), ('1', 'D'), ('2', 'C'), ('1', 'C'), ('1', 'D'), ('1', 'C'), ('3', 'D'), ('3', 'C'), ('2', 'D'), ('1', 'D'), ('1', 'C'), ('1', 'B'), ('1', 'B'), ('3', 'C'), ('3', 'A'), ('1', 'C'), ('1', 'C'), ('3', 'C'), ('3', 'D'), ('2', 'C'), ('3', 'A'), ('3', 'A'), ('1', 'B'), ('2', 'B'), ('3', 'C'), ('2', 'B'), ('1', 'C'), ('2', 'A'), ('2', 'D'), ('2', 'C'), ('3', 'C'), ('3', 'C'), ('2', 'C'), ('2', 'A'), ('1', 'A'), ('1', 'B'), ('2', 'C'), ('2', 'C'), ('2', 'B'), ('1', 'D'), ('1', 'A'), ('2', 'A'), ('3', 'A'), ('1', 'B'), ('2', 'B'), ('1', 'D'), ('2', 'D'), ('3', 'D'), ('1', 'C'), ('3', 'B'), ('2', 'D'), ('2', 'A'), ('3', 'D'), ('1', 'B'), ('3', 'A'), ('1', 'A'), ('3', 'A'), ('2', 'D'), ('3', 'C'), ('3', 'A'), ('1', 'B'), ('2', 'B'), ('2', 'A'), ('2', 'B'), ('1', 'A'), ('2', 'B'), ('2', 'C'), ('1', 'D'), ('3', 'C'), ('2', 'D'), ('1', 'C'), ('2', 'A'), ('2', 'A'), ('3', 'B'), ('1', 'B'), ('3', 'A'), ('1', 'B'), ('2', 'A'), ('2', 'D'), ('2', 'C'), ('3', 'A'), ('3', 'D'), ('2', 'C'), ('1', 'A'), ('3', 'C'), ('3', 'B'), ('3', 'C'), ('1', 'D'), ('2', 'D'), ('3', 'D'), ('1', 'B'), ('3', 'A'), ('1', 'D'), ('1', 'C'), ('3', 'B'), ('3', 'C'), ('2', 'A'), ('3', 'A'), ('3', 'C'), ('1', 'C'), ('1', 'C'), ('3', 'A'), ('2', 'A'), ('1', 'B'), ('1', 'D'), ('3', 'A'), ('3', 'A'), ('3', 'A'), ('2', 'A'), ('1', 'D'), ('3', 'A'), ('2', 'B'), ('3', 'B'), ('2', 'A'), ('2', 'D'), ('2', 'B'), ('2', 'B'), ('1', 'B'), ('2', 'A'), ('3', 'A'), ('1', 'C'), ('1', 'B'), ('1', 'A'), ('2', 'D'), ('1', 'A'), ('2', 'D'), ('2', 'B'), ('2', 'A'), ('1', 'C'), ('1', 'B'), ('3', 'A'), ('3', 'C'), ('1', 'B'), ('2', 'B'), ('1', 'B'), ('1', 'A'), ('2', 'B'), ('3', 'B'), ('2', 'D'), ('1', 'A'), ('1', 'B'), ('3', 'B'), ('1', 'C'), ('2', 'B'), ('2', 'B'), ('3', 'C'), ('2', 'A'), ('3', 'B'), ('3', 'D'), ('2', 'D'), ('1', 'D'), ('2', 'D'), ('3', 'D'), ('2', 'C'), ('2', 'C'), ('3', 'C'), ('2', 'B'), ('3', 'D'), ('1', 'A'), ('3', 'C'), ('2', 'B'), ('1', 'C'), ('2', 'A'), ('1', 'B'), ('1', 'A'), ('2', 'C'), ('1', 'C'), ('2', 'B'), ('2', 'B'), ('3', 'D'), ('3', 'A'), ('1', 'B'), ('2', 'A'), ('1', 'D'), ('3', 'B'), ('1', 'D'), ('1', 'D'), ('2', 'A'), ('1', 'A'), ('2', 'D'), ('2', 'B'), ('2', 'C'), ('1', 'A'), ('1', 'A'), ('3', 'A'), ('3', 'C'), ('1', 'D'), ('3', 'D'), ('3', 'D'), ('3', 'B'), ('3', 'B'), ('1', 'D'), ('3', 'A'), ('2', 'D'), ('3', 'D'), ('3', 'B'), ('3', 'D'), ('2', 'B'), ('1', 'A'), ('3', 'C'), ('3', 'D'), ('3', 'B'), ('1', 'B'), ('2', 'A'), ('3', 'D'), ('3', 'B'), ('3', 'C'), ('1', 'B'), ('2', 'D'), ('2', 'B'), ('3', 'C'), ('3', 'D'), ('1', 'C'), ('1', 'C'), ('3', 'B'), ('3', 'D'), ('3', 'C'), ('2', 'B'), ('3', 'D'), ('3', 'A'), ('1', 'B'), ('2', 'D'), ('3', 'D'), ('2', 'B'), ('3', 'B'), ('3', 'A'), ('3', 'B'), ('2', 'C'), ('3', 'C'), ('2', 'B'), ('2', 'C'), ('1', 'B'), ('3', 'A'), ('3', 'D'), ('1', 'A'), ('1', 'A'), ('1', 'A'), ('2', 'B'), ('1', 'D'), ('3', 'A'), ('3', 'A'), ('2', 'B'), ('2', 'B'), ('2', 'A'), ('3', 'C'), ('3', 'D'), ('1', 'D'), ('3', 'A'), ('3', 'D'), ('3', 'B'), ('2', 'D'), ('1', 'B'), ('1', 'D'), ('3', 'D'), ('1', 'B'), ('3', 'C'), ('3', 'C'), ('2', 'C'), ('3', 'B'), ('1', 'D'), ('2', 'B'), ('1', 'A'), ('1', 'A'), ('2', 'D'), ('2', 'A'), ('1', 'D'), ('1', 'B'), ('3', 'C'), ('2', 'A'), ('1', 'C'), ('1', 'A'), ('3', 'B'), ('2', 'C'), ('2', 'A'), ('1', 'D'), ('2', 'B'), ('3', 'D'), ('1', 'D'), ('1', 'A'), ('1', 'D'), ('3', 'C'), ('3', 'D'), ('3', 'C'), ('1', 'B'), ('3', 'B'), ('3', 'B'), ('1', 'A'), ('3', 'A'), ('1', 'C'), ('2', 'B'), ('3', 'C'), ('2', 'B'), ('3', 'A'), ('2', 'A'), ('2', 'D'), ('2', 'C'), ('2', 'C'), ('1', 'D'), ('1', 'D'), ('1', 'B'), ('2', 'B'), ('3', 'C'), ('3', 'C'), ('2', 'A'), ('3', 'B'), ('2', 'B'), ('2', 'B'), ('3', 'A'), ('2', 'D'), ('3', 'D'), ('2', 'C'), ('3', 'D'), ('2', 'D'), ('3', 'B'), ('3', 'A'), ('3', 'D'), ('3', 'A'), ('1', 'A'), ('1', 'A'), ('1', 'D'), ('2', 'C'), ('1', 'C'), ('3', 'D'), ('1', 'D'), ('1', 'C'), ('1', 'A'), ('1', 'A'), ('3', 'D'), ('2', 'A'), ('3', 'C'), ('1', 'B')] """ # Hodnoty neni nutne prevadet na cisla, pro nase ucely postaci s nimi pracovat jako s textem. pass def contingency_table(filename, id1, id2): """ >>> print(contingency_table("homework07.csv",5,4)) [['A', 'B', 'C', 'D', 'sum'], ['1', '2', '3', 'sum'], [[40, 40, 49, 129], [45, 46, 40, 131], [34, 41, 46, 121], [41, 37, 41, 119], [160, 164, 176, 500]]] >>> print(contingency_table("homework07.csv", 4, 5)) [['1', '2', '3', 'sum'], ['A', 'B', 'C', 'D', 'sum'], [[40, 45, 34, 41, 160], [40, 46, 41, 37, 164], [49, 40, 46, 41, 176], [129, 131, 121, 119, 500]]] """ data = csv_reader(filename, id1, id2) ## V prvnim kroku se podivame, jake hodnoty mohou jednotlive skupiny obsahovat. Z promenne data se udelame dva seznamy, ## ktere budou obsahovat hodnoty pouze pro jednu skupinu, takze group1 = ['C', 'D', ...] a group2 = ['2','2', ...] group1 = [] group2 = [] ## V nasledujicim kroku prevedeme list na set, set bude obsahovat pouze jedinecne hodnoty a funkce sorted nam hodnoty seradi. factors1 = sorted(set(group1)) ## factors1 = ['A', 'B', 'C', 'D'] factors2 = sorted(set(group2)) ## factors2 = ['1', '2', '3'] ## Ted bude stacit projit pouze kombinaci vsech moznych hodnot (kombinace polozek factors1 a factors2) a vyhledat pocet vyskytu konkretni kombinace ## pomoci funkce count() napr. data.count(('A','1')) matrix = [] return [factors1, factors2, matrix] def print_contingency_table(ct): print(";"+";".join(ct[1])) for i in range(len(ct[0])): print("{};{}".format(ct[0][i],";".join(str(x) for x in ct[2][i]))) ct = contingency_table("homework07.csv", 5, 4) print_contingency_table(ct) import doctest doctest.testmod()