In [22]:
# function to calculate levenshtein distance
def levenshtein(s, t):
        ''' From Wikipedia article; Iterative with two matrix rows. '''
        if s == t: return 0
        elif len(s) == 0: return len(t)
        elif len(t) == 0: return len(s)
        v0 = [None] * (len(t) + 1)
        v1 = [None] * (len(t) + 1)
        for i in range(len(v0)):
            v0[i] = i
        for i in range(len(s)):
            v1[0] = i + 1
            for j in range(len(t)):
                cost = 0 if s[i] == t[j] else 1
                v1[j + 1] = min(v1[j] + 1, v0[j + 1] + 1, v0[j] + cost)
            for j in range(len(v0)):
                v0[j] = v1[j]
                
        return v1[len(t)]

import csv
import pandas as pd

# get right answer list
df = pd.read_csv('right_answers.csv', encoding = "ISO-8859-1")
typB_right_list = df['TypB'].tolist()
typC_right_list = df['TypC'].tolist()
# split() works not well
# file = open('right_answers.csv','r')
# the_list = file.read().split('\n')
# for row in the_list:
#     right_answer_list = row.split(',')
#     typB_right_list.append(right_answer_list[0])
#     typC_right_list.append(right_answer_list[1])
# typB_right_list = typB_right_list[1:]
# typC_right_list = typC_right_list[1:]

# create a list of lists
typB_distance_list = [[] for x in range(8)]
typC_distance_list = [[] for x in range(8)]

# get users' answers from csv file
df = pd.read_csv('results-survey.csv', encoding = "ISO-8859-1")
df2 = df.copy()
for i in range(8):
    for index, row in df.iterrows():
        if pd.isnull(row[6*i + 9]):
            row[6*i + 9] = ''
#         if row[6*i + 9] != '':
        typB_distance = levenshtein(row[6*i + 9],typB_right_list[i])
        typB_word_length = len(typB_right_list[i])
        if typB_distance > typB_word_length:
            typB_distance = typB_word_length
#         this does not works, do not know why
#         if row[6*i + 9] != '':
#             df2.set_value(index,6*i + 9,typB_distance)
#             print(row[6*i + 9],df2.iloc[index][6*i + 9])
        if row[6*i + 9] == '':
            typB_distance = None
        if pd.notnull(typB_distance):
            typB_word_success_ratio = (typB_word_length - typB_distance) / typB_word_length
            typB_word_success_ratio = ("%.4f" % typB_word_success_ratio)
        else:
            typB_word_success_ratio = None
        typB_distance_list[i].append(typB_word_success_ratio)
        
        if pd.isnull(row[6*i + 10]):
            row[6*i + 10] = ''
#         if row[6*i + 10] != '':
        typC_distance = levenshtein(row[6*i + 10],typC_right_list[i])
        typC_word_length = len(typC_right_list[i])
        if typC_distance > typC_word_length:
            typC_distance = typC_word_length
        if row[6*i + 10] == '':
            typC_distance = None
        if pd.notnull(typC_distance):
            typC_word_success_ratio = (typC_word_length - typC_distance) / typC_word_length
            typC_word_success_ratio = ("%.4f" % typC_word_success_ratio)
        else:
            typC_word_success_ratio = None
        typC_distance_list[i].append(typC_word_success_ratio)
df2.colorhalftone6TypB = typB_distance_list[0]
df2.colorhalftone6TypC = typC_distance_list[0]
df2.colorhalftone5TypB = typB_distance_list[1]
df2.colorhalftone5TypC = typC_distance_list[1]
df2.crystallize8TypB = typB_distance_list[2]
df2.crystallize8TypC = typC_distance_list[2]
df2.crystallize7TypB = typB_distance_list[3]
df2.crystallize7TypC = typC_distance_list[3]
df2.gauss8TypB = typB_distance_list[4]
df2.gauss8TypC = typC_distance_list[4]
df2.gauss75TypB = typB_distance_list[5]
df2.gauss75TypC = typC_distance_list[5]
df2.mosaik11TypB = typB_distance_list[6]
df2.mosaik11TypC = typC_distance_list[6]
df2.mosaik10TypB = typB_distance_list[7]
df2.mosaik10TypC = typC_distance_list[7]
#     print('\ndistance of ' + typB_right_list[i] + ':\n', typB_distance_list[i][:], 
#           '\ndistance of ' + typC_right_list[i] + ':\n', typC_distance_list[i][:])
df2.to_csv('results-survey-after-calculated.csv',sep=',', encoding='ISO-8859-1')

# split() works not well
# for i in range(8):
#     for item in row_list:
#         row_str_list = item.split(',')
# #         print(len(row_str_list))
#         # claculate levenshtein distance
#         # clean the empty string
#         if row_str_list[6*i + 9] != '':
#             typB_distance = levenshtein(row_str_list[6*i + 9],typB_right_list[i])
#             typB_str = '(' + row_str_list[6*i + 9] + ',' + typB_right_list[i] + ')' + str(typB_distance)
#             typB_distance_list[i].append(typB_str)
#         if row_str_list[6*i + 10] != '':
#             typC_distance = levenshtein(row_str_list[6*i + 10],typC_right_list[i])
#             typC_distance_list[i].append(typC_distance)
#     print('distance of ' + typB_right_list[i] + ':')
#     print(typB_distance_list[i][1:])
#     print('distance of ' + typC_right_list[i] + ':')
#     print(typC_distance_list[i][1:])


     Unnamed: 0   id   Abgeschlossen  Letzte Seite Start-Sprache  \
0             0    1  14/07/17 17:51             2            de   
1             1    5   15/07/17 0:02             2            de   
2             2    9  16/07/17 10:07             2            de   
3             3   10  16/07/17 10:38             2            de   
4             4   12  16/07/17 12:01             2            de   
5             5   13  16/07/17 17:38             2            de   
6             6   14  16/07/17 20:58             2            de   
7             7   17   17/07/17 6:29             2            de   
8             8   18  17/07/17 18:00             2            de   
9             9   22   18/07/17 0:47             2            de   
10           10   23   18/07/17 0:41             2            de   
11           11   24   18/07/17 7:37             2            de   
12           12   25   18/07/17 8:33             2            de   
13           13   29  18/07/17 11:29             2            de   
14           14   30  18/07/17 13:01             2            de   
15           15   31  18/07/17 11:42             2            de   
16           16   32  18/07/17 11:41             2            de   
17           17   33  18/07/17 11:40             2            de   
18           18   34  18/07/17 11:50             2            de   
19           19   35  18/07/17 11:58             2            de   
20           20   36  18/07/17 12:08             2            de   
21           21   37  18/07/17 12:07             2            de   
22           22   38  18/07/17 12:42             2            de   
23           23   39  18/07/17 13:11             2            de   
24           24   40  18/07/17 13:31             2            de   
25           25   41  18/07/17 13:25             2            de   
26           26   42  18/07/17 13:42             2            de   
27           27   43  18/07/17 14:27             2            de   
28           28   44  18/07/17 15:23             2            de   
29           29   46  18/07/17 16:23             2            de   
..          ...  ...             ...           ...           ...   
111         111  174  20/07/17 10:18             2            de   
112         112  176  20/07/17 11:08             2            de   
113         113  177  20/07/17 11:25             2            de   
114         114  178  20/07/17 12:12             2            de   
115         115  179  20/07/17 12:32             2            de   
116         116  180  20/07/17 12:55             2            de   
117         117  182  20/07/17 13:35             2            de   
118         118  183  20/07/17 14:11             2            de   
119         119  185  20/07/17 15:09             2            de   
120         120  186  20/07/17 15:09             2            de   
121         121  188  20/07/17 16:29             2            de   
122         122  189  20/07/17 16:34             2            de   
123         123  190  20/07/17 17:27             2            de   
124         124  192  20/07/17 18:10             2            de   
125         125  193  20/07/17 19:32             2            de   
126         126  194  20/07/17 22:16             2            de   
127         127  195  20/07/17 23:38             2            de   
128         128  196  21/07/17 12:09             2            de   
129         129  197  21/07/17 13:35             2            de   
130         130  198  21/07/17 14:07             2            de   
131         131  199  21/07/17 14:15             2            de   
132         132  201  21/07/17 18:20             2            de   
133         133  202  21/07/17 18:32             2            de   
134         134  203  21/07/17 19:42             2            de   
135         135  204  21/07/17 21:28             2            de   
136         136  205  21/07/17 21:53             2            de   
137         137  206   22/07/17 1:41             2            de   
138         138  207   22/07/17 2:45             2            de   
139         139  209  22/07/17 23:32             2            de   
140         140  210   23/07/17 8:21             2            de   

    Datum gestartet Datum letzte Aktivit_t       IP-Adresse  \
0    14/07/17 17:48         14/07/17 17:51     10.176.87.75   
1    14/07/17 23:52          15/07/17 0:02   185.17.207.193   
2     16/07/17 9:45         16/07/17 10:07   93.211.199.157   
3    16/07/17 10:21         16/07/17 10:38       91.7.8.180   
4    16/07/17 11:54         16/07/17 12:01     91.12.166.51   
5    16/07/17 17:27         16/07/17 17:38   88.217.181.197   
6    16/07/17 20:50         16/07/17 20:58    95.91.251.216   
7     17/07/17 6:21          17/07/17 6:29   202.36.244.178   
8    17/07/17 17:16         17/07/17 18:00     80.128.35.26   
9     18/07/17 0:25          18/07/17 0:47    77.190.69.192   
10    18/07/17 0:29          18/07/17 0:41     141.84.69.20   
11    18/07/17 7:31          18/07/17 7:37   185.17.205.194   
12    18/07/17 8:20          18/07/17 8:33   77.190.219.115   
13   18/07/17 11:18         18/07/17 11:29     88.215.95.30   
14   18/07/17 11:29         18/07/17 13:01  195.135.184.187   
15   18/07/17 11:32         18/07/17 11:42     10.183.4.215   
16   18/07/17 11:32         18/07/17 11:41      141.84.8.85   
17   18/07/17 11:35         18/07/17 11:40      89.191.50.3   
18   18/07/17 11:37         18/07/17 11:50    193.34.101.17   
19   18/07/17 11:47         18/07/17 11:58    82.135.69.251   
20   18/07/17 12:01         18/07/17 12:08  131.159.214.163   
21   18/07/17 12:01         18/07/17 12:07    82.135.69.251   
22   18/07/17 12:31         18/07/17 12:42     95.90.197.66   
23   18/07/17 12:43         18/07/17 13:11    82.113.98.153   
24   18/07/17 13:19         18/07/17 13:31    95.91.234.179   
25   18/07/17 13:20         18/07/17 13:25      10.176.99.2   
26   18/07/17 13:32         18/07/17 13:42    141.113.11.11   
27   18/07/17 14:13         18/07/17 14:27  217.250.128.251   
28   18/07/17 15:11         18/07/17 15:23    10.155.167.62   
29   18/07/17 16:17         18/07/17 16:23    84.159.78.159   
..              ...                    ...              ...   
111  20/07/17 10:11         20/07/17 10:18     10.176.92.80   
112  20/07/17 11:00         20/07/17 11:08   83.171.171.177   
113  20/07/17 11:18         20/07/17 11:25   83.171.165.136   
114  20/07/17 11:58         20/07/17 12:12    84.141.239.96   
115  20/07/17 12:25         20/07/17 12:32     10.180.53.72   
116  20/07/17 12:51         20/07/17 12:55    84.129.112.23   
117  20/07/17 13:29         20/07/17 13:35     95.91.235.41   
118  20/07/17 13:48         20/07/17 14:11    89.15.159.148   
119  20/07/17 14:57         20/07/17 15:09    93.230.208.88   
120  20/07/17 15:01         20/07/17 15:09  217.254.156.219   
121  20/07/17 16:25         20/07/17 16:29    10.153.33.133   
122  20/07/17 16:29         20/07/17 16:34  212.114.177.154   
123  20/07/17 17:22         20/07/17 17:27   10.163.190.137   
124  20/07/17 18:05         20/07/17 18:10    93.211.195.95   
125  20/07/17 19:20         20/07/17 19:32    178.27.70.172   
126  20/07/17 22:09         20/07/17 22:16  188.110.165.241   
127  20/07/17 23:31         20/07/17 23:38   79.196.162.184   
128  21/07/17 12:03         21/07/17 12:09    10.180.115.36   
129  21/07/17 13:29         21/07/17 13:35     89.15.205.44   
130  21/07/17 13:48         21/07/17 14:07   10.153.121.126   
131  21/07/17 14:08         21/07/17 14:15   80.147.136.238   
132  21/07/17 18:13         21/07/17 18:20    79.211.184.51   
133  21/07/17 18:25         21/07/17 18:32     92.74.210.94   
134  21/07/17 19:36         21/07/17 19:42    95.91.236.229   
135  21/07/17 21:19         21/07/17 21:28   87.163.191.140   
136  21/07/17 21:46         21/07/17 21:53     92.194.11.98   
137   22/07/17 1:32          22/07/17 1:41    94.216.51.192   
138   22/07/17 2:41          22/07/17 2:45   62.216.206.177   
139  22/07/17 23:26         22/07/17 23:32    84.142.82.203   
140   23/07/17 8:16          23/07/17 8:21   84.178.246.134   

                                         Referring URL colorhalftone6TypA  \
0    https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
1    https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
2    https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
3    https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
4    https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
5                                                  NaN                NaN   
6    https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
7    https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
8    https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
9                                                  NaN                 A3   
10                                                 NaN                NaN   
11                                                 NaN                NaN   
12                                                 NaN                 A3   
13                                                 NaN                 A3   
14                                                 NaN                 A3   
15                                                 NaN                 A3   
16                                                 NaN                NaN   
17                                                 NaN                 A3   
18   https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
19                                                 NaN                NaN   
20   https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
21                                                 NaN                NaN   
22                                                 NaN                NaN   
23   https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
24                                                 NaN                 A3   
25                                                 NaN                NaN   
26   https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
27   https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
28                                                 NaN                NaN   
29   https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
..                                                 ...                ...   
111                                                NaN                NaN   
112                                                NaN                 A3   
113                                                NaN                 A3   
114                                                NaN                NaN   
115                                                NaN                 A3   
116                                                NaN                NaN   
117                                                NaN                NaN   
118                                                NaN                 A3   
119                                                NaN                 A3   
120  https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
121  https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
122                                                NaN                NaN   
123                                                NaN                NaN   
124  https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
125                                                NaN                NaN   
126                                                NaN                NaN   
127                                                NaN                 A3   
128                                                NaN                 A3   
129                                                NaN                 A3   
130  https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
131  https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
132  https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
133                                                NaN                NaN   
134                                                NaN                 A3   
135                                                NaN                 A3   
136  https://survey.medien.ifi.lmu.de/index.php/195...                 A3   
137  https://survey.medien.ifi.lmu.de/index.php/195...                NaN   
138                                                NaN                 A3   
139                                                NaN                NaN   
140  https://survey.medien.ifi.lmu.de/index.php/195...                 A3   

       ...     mosaik10TypATime  mosaik10TypBTime mosaik10TypCTime  \
0      ...                  NaN               NaN              NaN   
1      ...                  NaN               NaN              NaN   
2      ...                  NaN               NaN              NaN   
3      ...                  NaN               NaN              NaN   
4      ...                  NaN               NaN              NaN   
5      ...                  NaN               NaN              NaN   
6      ...                  NaN               NaN              NaN   
7      ...                  NaN               NaN              NaN   
8      ...                  NaN               NaN              NaN   
9      ...                  NaN               NaN              NaN   
10     ...                  NaN               NaN              NaN   
11     ...                  NaN               NaN              NaN   
12     ...                  NaN               NaN              NaN   
13     ...                  NaN               NaN              NaN   
14     ...                  NaN               NaN              NaN   
15     ...                  NaN               NaN              NaN   
16     ...                  NaN               NaN              NaN   
17     ...                  NaN               NaN              NaN   
18     ...                  NaN               NaN              NaN   
19     ...                  NaN               NaN              NaN   
20     ...                  NaN               NaN              NaN   
21     ...                  NaN               NaN              NaN   
22     ...                  NaN               NaN              NaN   
23     ...                  NaN               NaN              NaN   
24     ...                  NaN               NaN              NaN   
25     ...                  NaN               NaN              NaN   
26     ...                  NaN               NaN              NaN   
27     ...                  NaN               NaN              NaN   
28     ...                  NaN               NaN              NaN   
29     ...                  NaN               NaN              NaN   
..     ...                  ...               ...              ...   
111    ...                  NaN               NaN              NaN   
112    ...                  NaN               NaN              NaN   
113    ...                  NaN               NaN              NaN   
114    ...                  NaN               NaN              NaN   
115    ...                  NaN               NaN              NaN   
116    ...                  NaN               NaN              NaN   
117    ...                  NaN               NaN              NaN   
118    ...                  NaN               NaN              NaN   
119    ...                  NaN               NaN              NaN   
120    ...                  NaN               NaN              NaN   
121    ...                  NaN               NaN              NaN   
122    ...                  NaN               NaN              NaN   
123    ...                  NaN               NaN              NaN   
124    ...                  NaN               NaN              NaN   
125    ...                  NaN               NaN              NaN   
126    ...                  NaN               NaN              NaN   
127    ...                  NaN               NaN              NaN   
128    ...                  NaN               NaN              NaN   
129    ...                  NaN               NaN              NaN   
130    ...                  NaN               NaN              NaN   
131    ...                  NaN               NaN              NaN   
132    ...                  NaN               NaN              NaN   
133    ...                  NaN               NaN              NaN   
134    ...                  NaN               NaN              NaN   
135    ...                  NaN               NaN              NaN   
136    ...                  NaN               NaN              NaN   
137    ...                  NaN               NaN              NaN   
138    ...                  NaN               NaN              NaN   
139    ...                  NaN               NaN              NaN   
140    ...                  NaN               NaN              NaN   

    mosaik10TypDTime mosaik10TypETime mosaik10TypFTime  groupTime1298  \
0                NaN              NaN              NaN          18.85   
1                NaN              NaN              NaN          58.37   
2                NaN              NaN              NaN          49.02   
3                NaN              NaN              NaN          30.29   
4                NaN              NaN              NaN          28.22   
5                NaN              NaN              NaN          21.14   
6                NaN              NaN              NaN          24.53   
7                NaN              NaN              NaN          49.10   
8                NaN              NaN              NaN          25.83   
9                NaN              NaN              NaN          22.48   
10               NaN              NaN              NaN          20.80   
11               NaN              NaN              NaN          23.10   
12               NaN              NaN              NaN          34.62   
13               NaN              NaN              NaN          33.61   
14               NaN              NaN              NaN          15.88   
15               NaN              NaN              NaN          34.69   
16               NaN              NaN              NaN          60.48   
17               NaN              NaN              NaN          15.08   
18               NaN              NaN              NaN          19.70   
19               NaN              NaN              NaN          20.74   
20               NaN              NaN              NaN          14.72   
21               NaN              NaN              NaN          19.91   
22               NaN              NaN              NaN          20.49   
23               NaN              NaN              NaN          86.38   
24               NaN              NaN              NaN          19.83   
25               NaN              NaN              NaN          35.44   
26               NaN              NaN              NaN          16.13   
27               NaN              NaN              NaN          72.64   
28               NaN              NaN              NaN          26.68   
29               NaN              NaN              NaN          44.26   
..               ...              ...              ...            ...   
111              NaN              NaN              NaN          32.31   
112              NaN              NaN              NaN          15.08   
113              NaN              NaN              NaN          23.26   
114              NaN              NaN              NaN          33.62   
115              NaN              NaN              NaN          21.05   
116              NaN              NaN              NaN          20.34   
117              NaN              NaN              NaN          23.92   
118              NaN              NaN              NaN          23.06   
119              NaN              NaN              NaN          52.40   
120              NaN              NaN              NaN          19.72   
121              NaN              NaN              NaN          29.36   
122              NaN              NaN              NaN          18.31   
123              NaN              NaN              NaN           9.00   
124              NaN              NaN              NaN          17.89   
125              NaN              NaN              NaN          46.03   
126              NaN              NaN              NaN          32.59   
127              NaN              NaN              NaN          29.47   
128              NaN              NaN              NaN          46.87   
129              NaN              NaN              NaN          61.10   
130              NaN              NaN              NaN          19.06   
131              NaN              NaN              NaN          12.08   
132              NaN              NaN              NaN          17.53   
133              NaN              NaN              NaN          22.30   
134              NaN              NaN              NaN          31.50   
135              NaN              NaN              NaN          90.75   
136              NaN              NaN              NaN          57.87   
137              NaN              NaN              NaN          20.27   
138              NaN              NaN              NaN           6.31   
139              NaN              NaN              NaN          34.26   
140              NaN              NaN              NaN          45.63   

     SehschwaecheTime AnwortSehschwaecheTime EmailTime  
0                 NaN                    NaN       NaN  
1                 NaN                    NaN       NaN  
2                 NaN                    NaN       NaN  
3                 NaN                    NaN       NaN  
4                 NaN                    NaN       NaN  
5                 NaN                    NaN       NaN  
6                 NaN                    NaN       NaN  
7                 NaN                    NaN       NaN  
8                 NaN                    NaN       NaN  
9                 NaN                    NaN       NaN  
10                NaN                    NaN       NaN  
11                NaN                    NaN       NaN  
12                NaN                    NaN       NaN  
13                NaN                    NaN       NaN  
14                NaN                    NaN       NaN  
15                NaN                    NaN       NaN  
16                NaN                    NaN       NaN  
17                NaN                    NaN       NaN  
18                NaN                    NaN       NaN  
19                NaN                    NaN       NaN  
20                NaN                    NaN       NaN  
21                NaN                    NaN       NaN  
22                NaN                    NaN       NaN  
23                NaN                    NaN       NaN  
24                NaN                    NaN       NaN  
25                NaN                    NaN       NaN  
26                NaN                    NaN       NaN  
27                NaN                    NaN       NaN  
28                NaN                    NaN       NaN  
29                NaN                    NaN       NaN  
..                ...                    ...       ...  
111               NaN                    NaN       NaN  
112               NaN                    NaN       NaN  
113               NaN                    NaN       NaN  
114               NaN                    NaN       NaN  
115               NaN                    NaN       NaN  
116               NaN                    NaN       NaN  
117               NaN                    NaN       NaN  
118               NaN                    NaN       NaN  
119               NaN                    NaN       NaN  
120               NaN                    NaN       NaN  
121               NaN                    NaN       NaN  
122               NaN                    NaN       NaN  
123               NaN                    NaN       NaN  
124               NaN                    NaN       NaN  
125               NaN                    NaN       NaN  
126               NaN                    NaN       NaN  
127               NaN                    NaN       NaN  
128               NaN                    NaN       NaN  
129               NaN                    NaN       NaN  
130               NaN                    NaN       NaN  
131               NaN                    NaN       NaN  
132               NaN                    NaN       NaN  
133               NaN                    NaN       NaN  
134               NaN                    NaN       NaN  
135               NaN                    NaN       NaN  
136               NaN                    NaN       NaN  
137               NaN                    NaN       NaN  
138               NaN                    NaN       NaN  
139               NaN                    NaN       NaN  
140               NaN                    NaN       NaN  

[141 rows x 114 columns]

In [ ]:


In [ ]: