##
## DOMACI UKOL 7
## HOMEWORK 7
##
## Ukolem je dopsat funkce csv_reader (5 bodu), ktera nacte soubor a ulozi dva specifikovane sloupce z jednoho radku do Ntice (tuple) a vsechny
## radky ulozi do listu a ty vrati, a contingency_table (3 body), 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()