Showing
2 changed files
with
1478 additions
and
0 deletions
Apriori.ipynb
0 → 100644
1 | +{ | ||
2 | + "cells": [ | ||
3 | + { | ||
4 | + "cell_type": "code", | ||
5 | + "execution_count": 1, | ||
6 | + "metadata": { | ||
7 | + "collapsed": true | ||
8 | + }, | ||
9 | + "outputs": [], | ||
10 | + "source": [ | ||
11 | + "dataSet = [[1,3,4],[2,3,5],[1,2,3,5],[2,5]]" | ||
12 | + ] | ||
13 | + }, | ||
14 | + { | ||
15 | + "cell_type": "code", | ||
16 | + "execution_count": 2, | ||
17 | + "metadata": { | ||
18 | + "collapsed": true | ||
19 | + }, | ||
20 | + "outputs": [], | ||
21 | + "source": [ | ||
22 | + "#对数据集中的每一项构建一个不变的集合,作为第一个候选项集\n", | ||
23 | + "def createC1(dataSet):\n", | ||
24 | + " c1 = []\n", | ||
25 | + " for transaction in dataSet:\n", | ||
26 | + " for item in transaction:\n", | ||
27 | + " if not [item] in c1:\n", | ||
28 | + " c1.append([item])\n", | ||
29 | + " c1.sort()\n", | ||
30 | + " return map(frozenset,c1)\n", | ||
31 | + "\n", | ||
32 | + "#找出满足最小支持度的频繁项集,Ck为候选项集列表,最开始为单个的候选项集,D表示数据集合\n", | ||
33 | + "def scanD(D,Ck,minSupport):\n", | ||
34 | + " ssCnt ={}\n", | ||
35 | + " for tid in D:\n", | ||
36 | + " for can in Ck:#遍历每一个候选项集\n", | ||
37 | + " if can.issubset(tid):\n", | ||
38 | + " if not ssCnt.has_key(can):\n", | ||
39 | + " ssCnt[can]=1\n", | ||
40 | + " else:\n", | ||
41 | + " ssCnt[can]+=1\n", | ||
42 | + " numItems = float(len(D))#数据集总共有多少项\n", | ||
43 | + " retList = []\n", | ||
44 | + " supportData = {}\n", | ||
45 | + " for key in ssCnt:\n", | ||
46 | + " support = ssCnt[key]/numItems\n", | ||
47 | + " if support >= minSupport:\n", | ||
48 | + " retList.insert(0,key)\n", | ||
49 | + " supportData[key]=support\n", | ||
50 | + " #supportData包含每一个候选项集的支持度\n", | ||
51 | + " #retlist包含每一个满足最小支持度的项集\n", | ||
52 | + " return retList,supportData\n", | ||
53 | + "#生成频繁项集\n", | ||
54 | + "\n", | ||
55 | + "\n", | ||
56 | + "#参数为频繁项集列表Lk和项集个数K,输出候选集\n", | ||
57 | + "def aprioriGen(Lk, k):\n", | ||
58 | + " retList = []\n", | ||
59 | + " lenLk = len(Lk)#频繁项集个数\n", | ||
60 | + " for i in range(lenLk):\n", | ||
61 | + " for j in range(i+1,lenLk):\n", | ||
62 | + " L1=list(Lk[i])[:k-2]\n", | ||
63 | + " L2=list(Lk[j])[:k-2]\n", | ||
64 | + " L1.sort(),L2.sort()\n", | ||
65 | + " if L1==L2:\n", | ||
66 | + " retList.append(Lk[i]|Lk[j])\n", | ||
67 | + " return retList\n", | ||
68 | + "\n", | ||
69 | + "def apriori(dataSet,minSupport=0.5):\n", | ||
70 | + " C1=createC1(dataSet)\n", | ||
71 | + " D = map(set,dataSet)\n", | ||
72 | + " L1, supportData = scanD(D,C1,minSupport)\n", | ||
73 | + " L=[L1]\n", | ||
74 | + " k=2\n", | ||
75 | + " while (len(L[k-2])>0):\n", | ||
76 | + " Ck = aprioriGen(L[k-2],k)#输出候选项集\n", | ||
77 | + " Lk, supK = scanD(D,Ck,minSupport)#生成频繁项集\n", | ||
78 | + " supportData.update(supK)#更每一个候选集的字典\n", | ||
79 | + " L.append(Lk)\n", | ||
80 | + " k += 1\n", | ||
81 | + " return L, supportData\n", | ||
82 | + "\n", | ||
83 | + "\n", | ||
84 | + "def generateRules(L,supportData,minConf=0.7):\n", | ||
85 | + " bigRuleList=[]\n", | ||
86 | + " for i in range(1,len(L)):\n", | ||
87 | + " for freqSet in L[i]:\n", | ||
88 | + " H1 = [frozenset([item]) for item in freqSet]\n", | ||
89 | + " if(i>1):\n", | ||
90 | + " rulesFromConseq(freqSet,H1,supportData,bigRuleList,minConf)\n", | ||
91 | + " else:\n", | ||
92 | + " calcConf(freqSet,H1,supportData,bigRuleList,minConf)\n", | ||
93 | + " return bigRuleList\n", | ||
94 | + "\n", | ||
95 | + "def calcConf(freqSet,H,supportData,br1,minConf=0.7):\n", | ||
96 | + " prunedH = []\n", | ||
97 | + " for conseq in H:\n", | ||
98 | + " conf = supportData[freqSet]/supportData[freqSet-conseq]\n", | ||
99 | + " if conf >= minConf:\n", | ||
100 | + " print (freqSet-conseq,'-->',conseq,'conf:',conf)\n", | ||
101 | + " br1.append((freqSet-conseq,conseq,conf))\n", | ||
102 | + " prunedH.append(conseq)\n", | ||
103 | + " return prunedH\n", | ||
104 | + "\n", | ||
105 | + "def rulesFromConseq(freqSet,H,supportData,br1,minConf=0.7):\n", | ||
106 | + " m=len(H[0])\n", | ||
107 | + " if (len(freqSet)>(m+1)):\n", | ||
108 | + " Hmp1=aprioriGen(H,m+1)\n", | ||
109 | + " Hmp1=calcConf(freqSet,Hmp1,supportData,br1,minConf)\n", | ||
110 | + " if (len(Hmp1)>1):\n", | ||
111 | + " rulesFromConseq(freqSet,Hmp1,supportData,br1,minConf)" | ||
112 | + ] | ||
113 | + }, | ||
114 | + { | ||
115 | + "cell_type": "code", | ||
116 | + "execution_count": 4, | ||
117 | + "metadata": { | ||
118 | + "collapsed": false | ||
119 | + }, | ||
120 | + "outputs": [], | ||
121 | + "source": [ | ||
122 | + "#和上面函数功能一致,用列表表达式标书\n", | ||
123 | + "# C1 = []\n", | ||
124 | + "# [[C1.append([item]) for item in transaction if [item] not in C1]for transaction in DataSet]\n", | ||
125 | + "# C1.sort()\n", | ||
126 | + "# map(frozenset,C1)" | ||
127 | + ] | ||
128 | + }, | ||
129 | + { | ||
130 | + "cell_type": "code", | ||
131 | + "execution_count": 5, | ||
132 | + "metadata": { | ||
133 | + "collapsed": false | ||
134 | + }, | ||
135 | + "outputs": [], | ||
136 | + "source": [ | ||
137 | + "# C1=createC1(DataSet)\n", | ||
138 | + "# D=map(set,DataSet)\n", | ||
139 | + "# L1,suppData0=scanD(D,C1,0.5)\n", | ||
140 | + "# L1" | ||
141 | + ] | ||
142 | + }, | ||
143 | + { | ||
144 | + "cell_type": "code", | ||
145 | + "execution_count": 6, | ||
146 | + "metadata": { | ||
147 | + "collapsed": false | ||
148 | + }, | ||
149 | + "outputs": [], | ||
150 | + "source": [ | ||
151 | + "# #it's a test!\n", | ||
152 | + "# for i in range(4):\n", | ||
153 | + "# for j in range(i+1,4):\n", | ||
154 | + "# print (i,j)\n", | ||
155 | + "# #把0、1、2、3共四个数两两进行组合" | ||
156 | + ] | ||
157 | + }, | ||
158 | + { | ||
159 | + "cell_type": "code", | ||
160 | + "execution_count": 7, | ||
161 | + "metadata": { | ||
162 | + "collapsed": false | ||
163 | + }, | ||
164 | + "outputs": [ | ||
165 | + { | ||
166 | + "data": { | ||
167 | + "text/plain": [ | ||
168 | + "[[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]" | ||
169 | + ] | ||
170 | + }, | ||
171 | + "execution_count": 7, | ||
172 | + "metadata": {}, | ||
173 | + "output_type": "execute_result" | ||
174 | + } | ||
175 | + ], | ||
176 | + "source": [ | ||
177 | + "dataSet" | ||
178 | + ] | ||
179 | + }, | ||
180 | + { | ||
181 | + "cell_type": "code", | ||
182 | + "execution_count": 26, | ||
183 | + "metadata": { | ||
184 | + "collapsed": false | ||
185 | + }, | ||
186 | + "outputs": [ | ||
187 | + { | ||
188 | + "data": { | ||
189 | + "text/plain": [ | ||
190 | + "[[frozenset({1}), frozenset({3}), frozenset({2}), frozenset({5})],\n", | ||
191 | + " [frozenset({1, 3}), frozenset({2, 5}), frozenset({2, 3}), frozenset({3, 5})],\n", | ||
192 | + " [frozenset({2, 3, 5})],\n", | ||
193 | + " []]" | ||
194 | + ] | ||
195 | + }, | ||
196 | + "execution_count": 26, | ||
197 | + "metadata": {}, | ||
198 | + "output_type": "execute_result" | ||
199 | + } | ||
200 | + ], | ||
201 | + "source": [ | ||
202 | + "L,suppData=apriori(dataSet,minSupport=0.5)\n", | ||
203 | + "# rules=generateRules(L,suppData,minConf=0.7)\n", | ||
204 | + "L" | ||
205 | + ] | ||
206 | + }, | ||
207 | + { | ||
208 | + "cell_type": "code", | ||
209 | + "execution_count": 27, | ||
210 | + "metadata": { | ||
211 | + "collapsed": false | ||
212 | + }, | ||
213 | + "outputs": [ | ||
214 | + { | ||
215 | + "data": { | ||
216 | + "text/plain": [ | ||
217 | + "{frozenset({5}): 0.75,\n", | ||
218 | + " frozenset({3}): 0.75,\n", | ||
219 | + " frozenset({2, 3, 5}): 0.5,\n", | ||
220 | + " frozenset({1, 2}): 0.25,\n", | ||
221 | + " frozenset({1, 5}): 0.25,\n", | ||
222 | + " frozenset({3, 5}): 0.5,\n", | ||
223 | + " frozenset({4}): 0.25,\n", | ||
224 | + " frozenset({2, 3}): 0.5,\n", | ||
225 | + " frozenset({2, 5}): 0.75,\n", | ||
226 | + " frozenset({1}): 0.5,\n", | ||
227 | + " frozenset({1, 3}): 0.5,\n", | ||
228 | + " frozenset({2}): 0.75}" | ||
229 | + ] | ||
230 | + }, | ||
231 | + "execution_count": 27, | ||
232 | + "metadata": {}, | ||
233 | + "output_type": "execute_result" | ||
234 | + } | ||
235 | + ], | ||
236 | + "source": [ | ||
237 | + "suppData" | ||
238 | + ] | ||
239 | + }, | ||
240 | + { | ||
241 | + "cell_type": "code", | ||
242 | + "execution_count": null, | ||
243 | + "metadata": { | ||
244 | + "collapsed": true | ||
245 | + }, | ||
246 | + "outputs": [], | ||
247 | + "source": [] | ||
248 | + }, | ||
249 | + { | ||
250 | + "cell_type": "code", | ||
251 | + "execution_count": 3, | ||
252 | + "metadata": { | ||
253 | + "collapsed": false | ||
254 | + }, | ||
255 | + "outputs": [], | ||
256 | + "source": [ | ||
257 | + "import pandas as pd\n", | ||
258 | + "import random\n", | ||
259 | + "from pandas import DataFrame\n", | ||
260 | + "import numpy as np\n" | ||
261 | + ] | ||
262 | + }, | ||
263 | + { | ||
264 | + "cell_type": "code", | ||
265 | + "execution_count": 5, | ||
266 | + "metadata": { | ||
267 | + "collapsed": false | ||
268 | + }, | ||
269 | + "outputs": [], | ||
270 | + "source": [ | ||
271 | + "df=pd.read_csv('tbl_books.csv')" | ||
272 | + ] | ||
273 | + }, | ||
274 | + { | ||
275 | + "cell_type": "code", | ||
276 | + "execution_count": 12, | ||
277 | + "metadata": { | ||
278 | + "collapsed": false | ||
279 | + }, | ||
280 | + "outputs": [], | ||
281 | + "source": [ | ||
282 | + "# random.randint(0,5001)" | ||
283 | + ] | ||
284 | + }, | ||
285 | + { | ||
286 | + "cell_type": "code", | ||
287 | + "execution_count": 10, | ||
288 | + "metadata": { | ||
289 | + "collapsed": false | ||
290 | + }, | ||
291 | + "outputs": [ | ||
292 | + { | ||
293 | + "data": { | ||
294 | + "text/plain": [ | ||
295 | + "0 新刊王氏脉经\n", | ||
296 | + "1 处境特殊儿童心理\n", | ||
297 | + "2 幼儿心理学\n", | ||
298 | + "3 遇见德国\n", | ||
299 | + "4 多民族国家的文学与文化\n", | ||
300 | + "Name: title, dtype: object" | ||
301 | + ] | ||
302 | + }, | ||
303 | + "execution_count": 10, | ||
304 | + "metadata": {}, | ||
305 | + "output_type": "execute_result" | ||
306 | + } | ||
307 | + ], | ||
308 | + "source": [ | ||
309 | + "books=df.title\n", | ||
310 | + "books[:5]" | ||
311 | + ] | ||
312 | + }, | ||
313 | + { | ||
314 | + "cell_type": "code", | ||
315 | + "execution_count": 11, | ||
316 | + "metadata": { | ||
317 | + "collapsed": false | ||
318 | + }, | ||
319 | + "outputs": [], | ||
320 | + "source": [ | ||
321 | + "data_value = []\n", | ||
322 | + "data_title=[]\n", | ||
323 | + "for index in range(500):\n", | ||
324 | + " temp_value = []\n", | ||
325 | + " temp_title = []\n", | ||
326 | + " for random_value in range(random.randint(3,15)):\n", | ||
327 | + " value_random=random.randint(0,20)\n", | ||
328 | + " temp_value.append(value_random)\n", | ||
329 | + " temp_title.append(books[value_random])\n", | ||
330 | + " data_value.append(temp_value)\n", | ||
331 | + " data_title.append(temp_title)" | ||
332 | + ] | ||
333 | + }, | ||
334 | + { | ||
335 | + "cell_type": "code", | ||
336 | + "execution_count": 15, | ||
337 | + "metadata": { | ||
338 | + "collapsed": false | ||
339 | + }, | ||
340 | + "outputs": [ | ||
341 | + { | ||
342 | + "name": "stdout", | ||
343 | + "output_type": "stream", | ||
344 | + "text": [ | ||
345 | + "<class 'pandas.core.frame.DataFrame'>\n", | ||
346 | + "RangeIndex: 500 entries, 0 to 499\n", | ||
347 | + "Data columns (total 15 columns):\n", | ||
348 | + "0 500 non-null object\n", | ||
349 | + "1 500 non-null object\n", | ||
350 | + "2 500 non-null object\n", | ||
351 | + "3 457 non-null object\n", | ||
352 | + "4 421 non-null object\n", | ||
353 | + "5 375 non-null object\n", | ||
354 | + "6 340 non-null object\n", | ||
355 | + "7 302 non-null object\n", | ||
356 | + "8 261 non-null object\n", | ||
357 | + "9 232 non-null object\n", | ||
358 | + "10 194 non-null object\n", | ||
359 | + "11 167 non-null object\n", | ||
360 | + "12 123 non-null object\n", | ||
361 | + "13 78 non-null object\n", | ||
362 | + "14 40 non-null object\n", | ||
363 | + "dtypes: object(15)\n", | ||
364 | + "memory usage: 58.7+ KB\n" | ||
365 | + ] | ||
366 | + }, | ||
367 | + { | ||
368 | + "data": { | ||
369 | + "text/plain": [ | ||
370 | + "(500, 15)" | ||
371 | + ] | ||
372 | + }, | ||
373 | + "execution_count": 15, | ||
374 | + "metadata": {}, | ||
375 | + "output_type": "execute_result" | ||
376 | + } | ||
377 | + ], | ||
378 | + "source": [ | ||
379 | + "df=DataFrame(data_title)#模拟展示用户收藏信息 模拟800个用户2000本书\n", | ||
380 | + "df.info()\n", | ||
381 | + "df.shape" | ||
382 | + ] | ||
383 | + }, | ||
384 | + { | ||
385 | + "cell_type": "code", | ||
386 | + "execution_count": 46, | ||
387 | + "metadata": { | ||
388 | + "collapsed": false | ||
389 | + }, | ||
390 | + "outputs": [ | ||
391 | + { | ||
392 | + "data": { | ||
393 | + "text/plain": [ | ||
394 | + "[[16, 4, 12, 18, 4, 5, 2, 14],\n", | ||
395 | + " [0, 17, 7, 6, 20],\n", | ||
396 | + " [20, 13, 6, 10, 19],\n", | ||
397 | + " [12, 11, 18, 12],\n", | ||
398 | + " [0, 17, 17, 8, 4, 17, 6],\n", | ||
399 | + " [5, 4, 3, 0, 17, 18, 18, 8, 9],\n", | ||
400 | + " [2, 8, 5, 14, 17, 4, 3, 1, 1],\n", | ||
401 | + " [7, 11, 16, 11, 10],\n", | ||
402 | + " [15, 10, 14, 15, 4, 9, 2, 14],\n", | ||
403 | + " [1, 6, 18, 9],\n", | ||
404 | + " [3, 10, 6, 15, 10, 17, 4, 20, 4],\n", | ||
405 | + " [11, 14, 20, 7],\n", | ||
406 | + " [12, 6, 14, 4, 9, 14, 20, 0],\n", | ||
407 | + " [2, 13, 1, 5, 13, 6],\n", | ||
408 | + " [16, 17, 0, 0],\n", | ||
409 | + " [4, 0, 19, 20, 14, 12, 0, 18, 9, 18, 18, 11, 4, 20, 1],\n", | ||
410 | + " [1, 10, 8, 18, 17, 8, 10],\n", | ||
411 | + " [8, 14, 0, 14, 7, 3, 13, 19, 9, 10, 14, 14, 13, 9],\n", | ||
412 | + " [7, 2, 10, 16, 4, 13, 15, 7, 9, 11, 2, 18, 9, 1, 13],\n", | ||
413 | + " [11, 13, 14, 20, 2, 7, 19, 5, 16, 9, 6, 2, 14, 10],\n", | ||
414 | + " [15, 11, 14, 14, 0, 4, 14, 17, 20, 19, 13, 13, 15],\n", | ||
415 | + " [7, 8, 8, 5],\n", | ||
416 | + " [4, 14, 19, 19, 11, 5, 14, 9, 17, 13, 7, 15],\n", | ||
417 | + " [19, 16, 1, 15, 12, 5, 7, 18],\n", | ||
418 | + " [11, 20, 12, 10],\n", | ||
419 | + " [7, 10, 13, 3, 15, 14],\n", | ||
420 | + " [3, 0, 19, 8, 4, 1, 6],\n", | ||
421 | + " [20, 8, 20, 5, 12, 6],\n", | ||
422 | + " [19, 19, 11, 18, 17, 8, 6, 3, 9, 2, 18, 15, 11],\n", | ||
423 | + " [1, 2, 17, 14, 3, 14, 14, 16, 8, 11, 7, 11],\n", | ||
424 | + " [8, 16, 10, 2, 8, 13, 4, 1, 4, 6, 2, 1, 20, 6, 19],\n", | ||
425 | + " [9, 2, 4, 6, 0, 0],\n", | ||
426 | + " [9, 1, 15, 8, 19, 12, 13, 13, 2, 4, 3, 17],\n", | ||
427 | + " [13, 9, 14, 14, 11, 10],\n", | ||
428 | + " [12, 9, 0, 5, 19, 10, 6, 20, 7, 5, 3, 5, 6],\n", | ||
429 | + " [10, 12, 13, 19, 11, 16, 20, 9, 15, 6, 19, 2, 0, 16],\n", | ||
430 | + " [5, 0, 3, 15, 14, 4, 17],\n", | ||
431 | + " [17, 0, 14, 17, 17],\n", | ||
432 | + " [1, 7, 11, 7, 10, 10, 20],\n", | ||
433 | + " [11, 7, 6, 0, 3, 2, 5, 6, 4],\n", | ||
434 | + " [4, 1, 18, 20, 9, 16, 7, 4, 6],\n", | ||
435 | + " [7, 6, 14],\n", | ||
436 | + " [8, 3, 3, 14, 16],\n", | ||
437 | + " [17, 11, 2, 16, 10],\n", | ||
438 | + " [3, 0, 15, 5, 5, 1, 11, 15, 3, 17, 20, 16, 1],\n", | ||
439 | + " [13, 8, 12, 17],\n", | ||
440 | + " [20, 9, 6, 3, 2, 14, 9, 1, 17, 6],\n", | ||
441 | + " [19, 5, 1, 16, 19, 10, 5, 10],\n", | ||
442 | + " [12, 8, 16, 2, 18, 15, 0, 5, 19],\n", | ||
443 | + " [14, 7, 11, 18, 7, 3, 18, 1, 18, 19, 9, 12, 9],\n", | ||
444 | + " [13, 6, 2],\n", | ||
445 | + " [6, 1, 0, 9],\n", | ||
446 | + " [2, 17, 20, 10, 1, 11, 16, 18, 3, 8, 5],\n", | ||
447 | + " [19, 20, 3, 6, 19, 8, 4, 8, 5, 0, 3, 20, 3, 1],\n", | ||
448 | + " [12, 10, 6],\n", | ||
449 | + " [7, 0, 16, 14, 0, 7],\n", | ||
450 | + " [20, 6, 3, 7, 4, 7, 9, 9, 18, 19, 14, 3, 20, 19, 17],\n", | ||
451 | + " [10, 4, 0, 13, 10, 6, 0, 6, 0, 11, 20, 6],\n", | ||
452 | + " [10, 4, 14, 5, 1],\n", | ||
453 | + " [1, 11, 1, 10, 12, 13, 6, 17, 6, 9, 15],\n", | ||
454 | + " [14, 13, 7, 15, 0, 3, 2, 3, 15],\n", | ||
455 | + " [1, 10, 1, 17],\n", | ||
456 | + " [2, 15, 0, 11, 12, 4, 1, 12, 6, 9, 19, 3, 20, 5],\n", | ||
457 | + " [10, 2, 20, 10],\n", | ||
458 | + " [7, 17, 5, 14, 15, 4, 13, 1, 17, 5, 2, 4, 4, 20],\n", | ||
459 | + " [3, 6, 12, 7],\n", | ||
460 | + " [10, 7, 10, 11, 16, 13, 1, 1, 9, 14, 16],\n", | ||
461 | + " [4, 19, 15, 17],\n", | ||
462 | + " [20, 9, 18, 11, 20, 14],\n", | ||
463 | + " [2, 2, 0, 13, 7, 9, 4, 16, 3, 5, 9, 17],\n", | ||
464 | + " [0, 9, 19, 12, 12, 3, 18, 6, 8, 8, 4],\n", | ||
465 | + " [11, 1, 2, 18, 6, 14, 4, 10, 17, 20, 1, 16],\n", | ||
466 | + " [2, 13, 17, 12, 7, 16, 6, 1, 4, 11, 10],\n", | ||
467 | + " [0, 15, 19],\n", | ||
468 | + " [15, 2, 18, 2, 0, 16, 2, 13, 15, 9, 14, 19, 20, 10],\n", | ||
469 | + " [10, 19, 5, 12, 18, 3, 17, 7],\n", | ||
470 | + " [18, 5, 15, 16, 20, 9, 18, 13, 0],\n", | ||
471 | + " [2, 11, 4, 15, 15],\n", | ||
472 | + " [17, 5, 12, 9, 15, 7, 5, 5, 11],\n", | ||
473 | + " [3, 15, 14, 15, 0],\n", | ||
474 | + " [3, 18, 3, 17, 17, 3, 11, 1, 4, 7, 1, 19],\n", | ||
475 | + " [17, 13, 19, 7, 10, 17, 7, 19, 11, 13, 12],\n", | ||
476 | + " [17, 2, 11, 7, 0, 12, 12, 20, 9, 20, 11, 7, 4, 1],\n", | ||
477 | + " [5, 4, 19, 2],\n", | ||
478 | + " [4, 10, 1, 0],\n", | ||
479 | + " [0, 17, 17, 17, 4],\n", | ||
480 | + " [9, 7, 10],\n", | ||
481 | + " [7, 9, 20, 5, 3, 0, 2, 16, 6, 3, 14, 2],\n", | ||
482 | + " [20, 18, 9, 12, 4, 17, 2, 4, 3],\n", | ||
483 | + " [15, 0, 5, 3, 2, 5, 20, 20, 3, 9, 3, 12, 5, 13, 9],\n", | ||
484 | + " [7, 16, 19, 1],\n", | ||
485 | + " [7, 10, 12],\n", | ||
486 | + " [7, 12, 9, 14, 6, 13, 16],\n", | ||
487 | + " [11, 4, 16, 1, 3, 16, 6, 3, 4, 20, 15, 17, 10, 7],\n", | ||
488 | + " [14, 8, 13],\n", | ||
489 | + " [6, 14, 17, 0, 3, 13, 19, 2, 10],\n", | ||
490 | + " [13, 8, 15, 17, 13, 10, 15, 6],\n", | ||
491 | + " [6, 14, 8, 14, 11, 4, 6, 18, 10],\n", | ||
492 | + " [18, 15, 4, 13, 6, 18],\n", | ||
493 | + " [15, 5, 7, 20, 20, 7, 6, 6, 12, 16, 20, 8, 13],\n", | ||
494 | + " [1, 11, 14],\n", | ||
495 | + " [14, 6, 6],\n", | ||
496 | + " [11, 5, 10, 16, 11, 11, 1, 14, 8, 2, 16, 14],\n", | ||
497 | + " [3, 5, 6, 12, 17, 3, 15, 0, 19, 5, 6, 18, 10, 20, 16],\n", | ||
498 | + " [16, 6, 15, 16, 14],\n", | ||
499 | + " [1, 5, 5, 18, 4, 2, 4, 20, 18],\n", | ||
500 | + " [6, 13, 0, 14, 3, 14, 13, 16, 2, 13],\n", | ||
501 | + " [12, 6, 20, 11, 9, 12, 9, 5],\n", | ||
502 | + " [15, 4, 5, 15, 13, 16, 3, 7, 12],\n", | ||
503 | + " [9, 13, 0, 7, 17, 16, 9, 13],\n", | ||
504 | + " [15, 20, 7, 12, 20, 7, 18, 4, 11, 15],\n", | ||
505 | + " [17, 10, 6, 9, 4, 5],\n", | ||
506 | + " [18, 9, 13, 13, 16],\n", | ||
507 | + " [8, 2, 16, 5],\n", | ||
508 | + " [9, 18, 17, 19, 13, 7],\n", | ||
509 | + " [15, 3, 3, 8, 0, 7, 7, 3],\n", | ||
510 | + " [15, 9, 18, 19, 7, 1, 7, 2, 6, 14],\n", | ||
511 | + " [19, 1, 2, 14, 11, 8],\n", | ||
512 | + " [9, 13, 14, 9, 1, 20, 7, 15, 4, 15, 6],\n", | ||
513 | + " [13, 20, 8, 4, 12, 8, 6, 13, 7],\n", | ||
514 | + " [20, 13, 8, 18, 9, 17],\n", | ||
515 | + " [0, 10, 5, 5, 2, 10, 12, 5, 12, 15, 11, 10, 14],\n", | ||
516 | + " [20, 19, 9, 16, 19, 16, 11, 3],\n", | ||
517 | + " [9, 19, 4, 8, 20, 4, 13],\n", | ||
518 | + " [15, 1, 6, 5, 9, 1],\n", | ||
519 | + " [20, 15, 9, 10, 0, 1],\n", | ||
520 | + " [0, 14, 10, 2, 7, 2, 2, 14, 13, 20, 12, 15],\n", | ||
521 | + " [6, 20, 7, 5, 1, 14, 17, 17, 14, 18],\n", | ||
522 | + " [6, 16, 10, 17, 8, 10, 9, 1, 18],\n", | ||
523 | + " [15, 15, 20, 12, 8, 0],\n", | ||
524 | + " [7, 9, 19, 0, 7, 19, 13, 8, 16, 15, 20],\n", | ||
525 | + " [10, 15, 12, 6, 7, 19, 14, 19, 9, 20, 14, 6],\n", | ||
526 | + " [3, 3, 5, 12, 14, 17, 20, 11, 6],\n", | ||
527 | + " [12, 18, 11, 9, 4, 17, 4],\n", | ||
528 | + " [7, 8, 19, 11, 13, 4, 4, 6, 7, 14, 12],\n", | ||
529 | + " [8, 2, 5, 18, 18],\n", | ||
530 | + " [20, 6, 4, 2, 15, 1, 15, 16],\n", | ||
531 | + " [0, 12, 13],\n", | ||
532 | + " [5, 6, 16, 19, 11, 11, 20, 10, 19, 14, 12, 7],\n", | ||
533 | + " [3, 16, 18, 10, 2],\n", | ||
534 | + " [11, 11, 16],\n", | ||
535 | + " [20, 9, 18, 6, 10, 8, 6, 18, 16, 6],\n", | ||
536 | + " [10, 0, 0, 13, 2, 16, 11, 2, 5, 17, 0],\n", | ||
537 | + " [14, 3, 10, 7, 2, 16],\n", | ||
538 | + " [7, 3, 11, 3, 11],\n", | ||
539 | + " [11, 0, 17, 16],\n", | ||
540 | + " [7, 8, 10, 16, 15, 14, 8, 20, 4, 3, 17, 7],\n", | ||
541 | + " [14, 11, 17, 13, 11, 7, 19, 11, 17, 2, 13, 19, 3],\n", | ||
542 | + " [5, 14, 14, 13, 6, 17, 4, 14, 11],\n", | ||
543 | + " [15, 14, 20, 19, 3, 8, 16, 0, 4, 12, 6, 4, 1, 20, 2],\n", | ||
544 | + " [8, 11, 20],\n", | ||
545 | + " [16, 16, 5, 2, 8, 13, 12, 6, 8, 9, 5, 8, 5, 19],\n", | ||
546 | + " [0, 5, 17, 15, 16, 11, 3, 4, 0, 3, 5],\n", | ||
547 | + " [1, 4, 0, 1, 1, 15, 5, 8, 12, 10, 10, 1, 10, 10, 10],\n", | ||
548 | + " [15, 14, 4, 7, 13, 19, 19, 15, 12, 14, 7, 8, 11, 19, 10],\n", | ||
549 | + " [18, 12, 6, 11, 1, 2, 7],\n", | ||
550 | + " [2, 12, 3, 20, 7, 0, 14, 15, 1, 4, 19],\n", | ||
551 | + " [9, 0, 4, 19, 9, 20, 14, 1, 11],\n", | ||
552 | + " [17, 8, 0, 1],\n", | ||
553 | + " [13, 19, 1, 0, 1, 4, 19, 10],\n", | ||
554 | + " [19, 9, 2, 18],\n", | ||
555 | + " [6, 0, 4, 5, 7, 13, 3, 14, 17, 12, 7, 8, 19, 7],\n", | ||
556 | + " [12, 10, 17, 6, 14, 19, 4, 19, 14, 16, 3],\n", | ||
557 | + " [12, 15, 2, 0, 10, 16, 15, 10, 16, 2],\n", | ||
558 | + " [20, 8, 13, 19, 17, 16, 0],\n", | ||
559 | + " [7, 15, 10, 19, 14, 1, 18, 16, 5, 18, 17, 1],\n", | ||
560 | + " [7, 0, 12, 4, 15, 19, 9, 17, 8, 9, 20, 16, 11, 13],\n", | ||
561 | + " [3, 18, 13, 6, 10, 16, 19, 15, 19, 15, 15, 0, 5, 17],\n", | ||
562 | + " [7, 5, 20, 2, 17, 16, 6, 2, 18],\n", | ||
563 | + " [12, 0, 4],\n", | ||
564 | + " [7, 14, 15, 8, 10, 2, 20, 7, 13, 17, 11, 2],\n", | ||
565 | + " [14, 3, 10, 2, 15, 20, 4, 14, 18, 17, 1],\n", | ||
566 | + " [11, 15, 2, 3, 20, 0, 18, 10, 20, 16, 14, 10, 15, 6, 1],\n", | ||
567 | + " [6, 12, 11],\n", | ||
568 | + " [18, 15, 3, 14, 19, 6],\n", | ||
569 | + " [16, 4, 2, 18, 9, 19, 18, 2, 8, 11, 14],\n", | ||
570 | + " [7, 12, 5, 5, 18, 4],\n", | ||
571 | + " [11, 11, 11],\n", | ||
572 | + " [17, 2, 9, 12],\n", | ||
573 | + " [18, 3, 1, 8, 14, 13, 0],\n", | ||
574 | + " [19, 11, 2, 8, 5, 1, 20, 18, 1, 2, 8, 2],\n", | ||
575 | + " [19, 17, 12, 20, 10],\n", | ||
576 | + " [20, 20, 3, 11],\n", | ||
577 | + " [16, 14, 1, 3, 20, 0, 19, 14, 16, 15, 17, 6],\n", | ||
578 | + " [9, 8, 18, 13, 12, 2, 9, 12, 7, 8, 19],\n", | ||
579 | + " [1, 3, 8, 9, 2, 12, 5],\n", | ||
580 | + " [19, 4, 7, 10, 18, 13, 10, 13],\n", | ||
581 | + " [8, 1, 6, 19, 7, 8],\n", | ||
582 | + " [10, 12, 9, 7, 2, 5, 4, 1, 20, 14, 0, 13],\n", | ||
583 | + " [1, 2, 19, 7, 16, 19, 0, 15, 20, 0, 1, 6],\n", | ||
584 | + " [1, 14, 15, 20, 3, 7],\n", | ||
585 | + " [5, 3, 1, 8],\n", | ||
586 | + " [8, 7, 9, 8, 6, 19, 7, 8, 10, 13, 17],\n", | ||
587 | + " [0, 12, 6, 2, 6, 4, 20, 15, 10, 2, 10],\n", | ||
588 | + " [16, 1, 16, 17, 15, 14, 16, 14, 4, 14, 0, 18, 2, 6, 5],\n", | ||
589 | + " [14, 13, 5],\n", | ||
590 | + " [6, 1, 20, 14, 11, 3, 12, 14, 3, 11, 11, 0],\n", | ||
591 | + " [10, 14, 13, 20, 13, 13, 17],\n", | ||
592 | + " [20, 0, 0, 14, 5, 15, 18, 10, 5, 16, 14, 12],\n", | ||
593 | + " [5, 2, 1, 15, 6, 13, 15, 8, 7, 6, 10],\n", | ||
594 | + " [2, 15, 8, 1, 4, 10, 1, 7],\n", | ||
595 | + " [9, 7, 13, 12, 17, 20, 5, 15, 20],\n", | ||
596 | + " [4, 3, 18, 6, 18, 4],\n", | ||
597 | + " [3, 4, 10, 13, 1, 5, 20],\n", | ||
598 | + " [14, 14, 1, 14, 9, 15, 2, 14, 2, 19, 11, 10, 4],\n", | ||
599 | + " [9, 13, 2, 9, 3, 20, 10, 14],\n", | ||
600 | + " [1, 20, 3],\n", | ||
601 | + " [1, 17, 12, 19, 16, 14, 18, 5, 1],\n", | ||
602 | + " [2, 14, 13, 9, 2, 10],\n", | ||
603 | + " [8, 5, 4, 10, 12, 14, 15],\n", | ||
604 | + " [20, 8, 16, 6, 20, 16, 4, 4, 7, 6, 19, 7, 9, 1],\n", | ||
605 | + " [4, 8, 0, 14, 17],\n", | ||
606 | + " [19, 7, 15, 16, 18, 19, 12, 4, 15, 1, 10, 16],\n", | ||
607 | + " [20, 3, 2, 17, 8, 5, 20, 16, 10, 9, 10, 1],\n", | ||
608 | + " [2, 12, 14, 13, 18, 7, 9, 13],\n", | ||
609 | + " [4, 11, 12, 2, 14, 20, 5, 6, 0, 16, 3, 8],\n", | ||
610 | + " [18, 12, 20, 14, 19, 18, 3, 6],\n", | ||
611 | + " [12, 15, 2, 4, 20, 16, 16, 9, 19, 15, 3, 9, 9, 1, 9],\n", | ||
612 | + " [18, 1, 7, 7, 18, 14, 2, 2, 15, 3, 13],\n", | ||
613 | + " [5, 7, 2, 17, 13, 1, 9, 3, 15, 17, 18, 4, 20, 5],\n", | ||
614 | + " [12, 4, 1, 17, 17, 0, 1],\n", | ||
615 | + " [17, 16, 10, 7, 15, 8, 1, 6, 5, 17, 10, 15, 13, 15],\n", | ||
616 | + " [9, 13, 12],\n", | ||
617 | + " [15, 7, 6, 2, 1, 2, 10, 17, 8, 4, 14, 15, 15],\n", | ||
618 | + " [16, 13, 7, 0, 12, 16, 19, 5],\n", | ||
619 | + " [20, 10, 10],\n", | ||
620 | + " [20, 3, 3, 16, 8, 17, 8, 16, 16, 8],\n", | ||
621 | + " [3, 9, 1, 5, 6],\n", | ||
622 | + " [15, 15, 1, 11, 15, 17, 1, 9, 7, 16, 20, 10],\n", | ||
623 | + " [19, 3, 4, 7, 2],\n", | ||
624 | + " [3, 7, 14, 8, 13, 3, 19, 9, 17, 2, 17, 0, 11, 19],\n", | ||
625 | + " [3, 7, 10, 1, 8, 19, 9, 15, 17, 5, 20, 0],\n", | ||
626 | + " [0, 2, 16, 2, 7, 0, 15, 17, 14, 15, 8, 10, 19, 19],\n", | ||
627 | + " [3, 17, 6, 2, 4, 7, 5, 5, 8, 11, 10, 3, 1],\n", | ||
628 | + " [1, 15, 4, 16, 17, 4, 7],\n", | ||
629 | + " [10, 20, 16, 7, 2, 12],\n", | ||
630 | + " [0, 13, 7, 1, 17, 12, 2, 16, 15, 3, 10, 17],\n", | ||
631 | + " [1, 20, 1, 20, 10, 8],\n", | ||
632 | + " [12, 5, 7, 5, 11, 13, 7, 8],\n", | ||
633 | + " [18, 15, 18, 13, 17, 4],\n", | ||
634 | + " [12, 14, 0, 15, 6, 1, 2],\n", | ||
635 | + " [15, 17, 18, 0, 18, 4, 0, 11, 18],\n", | ||
636 | + " [14, 5, 11, 18, 10, 8, 5, 3, 0, 15, 8, 1, 17],\n", | ||
637 | + " [8, 4, 19, 6, 12, 8, 7, 4, 7, 1, 6, 3],\n", | ||
638 | + " [17, 5, 14, 7, 16, 1, 5, 19, 13, 16, 17, 0],\n", | ||
639 | + " [7, 8, 2, 5, 9, 10, 15, 10, 6, 5, 18, 6, 19, 5, 11],\n", | ||
640 | + " [8, 1, 10, 7, 3, 19, 11, 3],\n", | ||
641 | + " [1, 16, 13, 20, 16, 8, 8, 5, 11, 6, 9],\n", | ||
642 | + " [4, 15, 11, 10, 7, 14, 18, 4, 14, 12, 18, 7],\n", | ||
643 | + " [0, 2, 19, 13, 6, 2, 13, 12, 4, 12, 15],\n", | ||
644 | + " [5, 15, 15, 1, 10, 16, 7, 0, 7, 10, 3, 9],\n", | ||
645 | + " [16, 12, 17, 16, 12, 7, 2, 20, 1],\n", | ||
646 | + " [0, 11, 14, 7, 5, 9, 8, 10],\n", | ||
647 | + " [1, 12, 11, 14, 19, 6, 15, 19, 1],\n", | ||
648 | + " [10, 17, 1, 0, 18, 15, 16, 8],\n", | ||
649 | + " [18, 9, 17, 13, 9, 8, 6, 10, 3, 10, 18, 10, 15],\n", | ||
650 | + " [16, 0, 14, 3, 15, 5],\n", | ||
651 | + " [11, 3, 0, 5, 6, 2, 18, 19, 3, 6],\n", | ||
652 | + " [5, 11, 20, 1],\n", | ||
653 | + " [13, 11, 18, 2, 0, 14, 15, 15, 16],\n", | ||
654 | + " [15, 8, 6, 17, 3, 11, 9],\n", | ||
655 | + " [2, 9, 1, 8, 16, 2, 5, 7],\n", | ||
656 | + " [1, 11, 11, 5, 4, 11, 2, 9, 18, 4, 20, 4],\n", | ||
657 | + " [0, 13, 16, 15, 19, 4, 7, 8, 2, 11],\n", | ||
658 | + " [1, 6, 13, 6, 2],\n", | ||
659 | + " [8, 13, 7, 18, 12, 0, 18, 5, 15, 2, 9, 9, 0],\n", | ||
660 | + " [12, 12, 1, 0, 12, 7, 8, 4, 16, 17, 10, 13, 13],\n", | ||
661 | + " [4, 12, 6, 12, 0, 5],\n", | ||
662 | + " [4, 15, 12, 9, 20],\n", | ||
663 | + " [17, 5, 6, 14, 12, 2, 0, 5, 4, 3, 19, 20, 0, 3],\n", | ||
664 | + " [20, 18, 1, 9, 19, 14, 8],\n", | ||
665 | + " [1, 4, 11, 2, 6, 20, 1, 0, 7, 16, 16, 19, 5, 20],\n", | ||
666 | + " [14, 1, 1, 3, 16, 8, 5, 19],\n", | ||
667 | + " [16, 4, 19, 9, 17, 13, 20, 7],\n", | ||
668 | + " [0, 19, 6, 19, 4, 10, 11, 1, 13, 1],\n", | ||
669 | + " [9, 3, 19, 11],\n", | ||
670 | + " [16, 13, 12, 2, 15, 19],\n", | ||
671 | + " [9, 15, 7, 20, 3, 15, 4, 10, 10, 19, 7, 20, 11],\n", | ||
672 | + " [6, 12, 13, 2, 11, 13, 12, 6, 6, 12, 14],\n", | ||
673 | + " [17, 10, 15, 17, 18, 14],\n", | ||
674 | + " [5, 12, 2, 1, 19, 9, 17, 5, 0],\n", | ||
675 | + " [15, 13, 1, 8, 15],\n", | ||
676 | + " [7, 0, 7, 19, 17],\n", | ||
677 | + " [7, 10, 13, 1, 2, 7, 13, 16, 10, 4, 18],\n", | ||
678 | + " [20, 11, 11],\n", | ||
679 | + " [4, 16, 0, 0, 7, 10, 17, 1, 17, 7],\n", | ||
680 | + " [10, 4, 8, 7, 13, 9, 12, 2, 20, 16, 0],\n", | ||
681 | + " [2, 3, 6, 3, 19, 20],\n", | ||
682 | + " [12, 7, 13, 15, 18, 10, 14, 2],\n", | ||
683 | + " [8, 0, 3],\n", | ||
684 | + " [2, 17, 18, 13, 7, 17, 4, 0, 8, 18, 16],\n", | ||
685 | + " [15, 4, 16, 3, 5, 14, 4, 15, 0, 8, 7, 18, 4, 0],\n", | ||
686 | + " [9, 14, 0, 18, 0, 14, 5, 0, 4, 14, 3, 0],\n", | ||
687 | + " [5, 12, 10, 12, 10, 19, 11, 2, 8, 1, 8, 4, 16, 0],\n", | ||
688 | + " [11, 0, 10, 18, 10, 19, 19, 1, 0, 19, 8, 1],\n", | ||
689 | + " [13, 5, 18, 3],\n", | ||
690 | + " [1, 6, 10],\n", | ||
691 | + " [1, 17, 18, 8, 3, 15, 4, 12, 8, 16, 1, 8, 16, 18],\n", | ||
692 | + " [1, 2, 12, 11, 10, 7, 18, 2, 7, 11, 0, 7, 16, 2],\n", | ||
693 | + " [15, 19, 15, 3, 11],\n", | ||
694 | + " [19, 17, 0],\n", | ||
695 | + " [0, 14, 9, 18, 1, 8, 12, 20, 18, 17, 6, 8],\n", | ||
696 | + " [2, 14, 17, 19, 9, 5, 7, 10, 14, 8, 14, 18, 4],\n", | ||
697 | + " [14, 7, 4, 9, 14, 5, 19, 6, 4],\n", | ||
698 | + " [19, 3, 20, 18, 1, 3, 20],\n", | ||
699 | + " [13, 18, 0, 18, 3, 9, 5, 0, 18],\n", | ||
700 | + " [7, 13, 15, 20, 12, 6, 10, 0, 9, 15, 10],\n", | ||
701 | + " [16, 0, 6],\n", | ||
702 | + " [3, 15, 13, 19, 14, 15],\n", | ||
703 | + " [0, 0, 15, 17, 3, 1, 9, 15, 20, 14, 16, 17, 2, 10],\n", | ||
704 | + " [1, 14, 9, 4, 11, 2, 13, 2, 4],\n", | ||
705 | + " [0, 7, 14, 3, 3, 20, 7, 17, 15, 5, 2],\n", | ||
706 | + " [3, 17, 3, 0, 7, 4, 2, 0, 17, 3, 10, 4, 3, 14],\n", | ||
707 | + " [7, 14, 15, 16, 7, 6],\n", | ||
708 | + " [7, 10, 19],\n", | ||
709 | + " [10, 12, 3, 4],\n", | ||
710 | + " [20, 12, 20, 5, 4, 2, 14, 8, 14, 17, 11, 20, 2],\n", | ||
711 | + " [18, 15, 14, 6, 8, 6, 15, 3, 9, 16, 4, 19, 8, 0],\n", | ||
712 | + " [2, 4, 20, 14, 6],\n", | ||
713 | + " [5, 4, 18, 17, 19, 16, 10, 12, 13, 2, 20, 8, 17, 4, 1],\n", | ||
714 | + " [7, 7, 15, 10, 9, 14, 15, 12, 5, 5, 13, 5, 10, 16, 16],\n", | ||
715 | + " [20, 19, 8],\n", | ||
716 | + " [8, 13, 14, 8, 4, 4, 1, 20, 4, 19],\n", | ||
717 | + " [3, 10, 2],\n", | ||
718 | + " [20, 17, 12, 18, 2, 19, 6, 4, 17, 8, 16, 20, 12, 9],\n", | ||
719 | + " [16, 20, 10, 7, 15, 20, 20, 12, 17, 14, 3],\n", | ||
720 | + " [15, 4, 10, 2, 20, 14, 20, 11, 17],\n", | ||
721 | + " [1, 10, 3, 5, 20],\n", | ||
722 | + " [3, 13, 5],\n", | ||
723 | + " [7, 18, 16, 16, 11, 3, 9, 7, 2],\n", | ||
724 | + " [1, 8, 18, 17, 0, 17, 1, 17, 1, 6, 16],\n", | ||
725 | + " [18, 12, 16, 3, 1, 2, 1, 11, 0, 2],\n", | ||
726 | + " [5, 18, 16, 16, 7, 16, 11, 16, 16, 1, 2, 7, 9, 14],\n", | ||
727 | + " [13, 11, 4],\n", | ||
728 | + " [2, 20, 4, 19, 15, 5, 1, 16, 20],\n", | ||
729 | + " [1, 16, 10, 8, 6, 20, 12, 20, 20, 7, 14, 10, 16, 3, 6],\n", | ||
730 | + " [20, 12, 19],\n", | ||
731 | + " [11, 15, 5, 15, 1, 14, 3, 16],\n", | ||
732 | + " [14, 17, 14, 19, 2, 1, 7, 10, 16, 12],\n", | ||
733 | + " [7, 2, 8, 6, 6],\n", | ||
734 | + " [10, 16, 1, 19, 2, 14, 17, 9],\n", | ||
735 | + " [3, 16, 4, 9, 15, 7, 9, 19],\n", | ||
736 | + " [15, 6, 12, 16, 4, 17],\n", | ||
737 | + " [17, 16, 18, 3, 14, 5, 4, 10, 6, 12, 10],\n", | ||
738 | + " [17, 2, 7, 5],\n", | ||
739 | + " [10, 10, 20, 12, 16, 6, 6],\n", | ||
740 | + " [20, 0, 7, 16, 11, 9, 1, 8, 16, 6, 19],\n", | ||
741 | + " [8, 10, 1, 16, 17, 19, 16, 17, 2, 16, 8, 4, 18, 4, 4],\n", | ||
742 | + " [17, 0, 0, 2, 17, 17, 11, 18, 19, 6, 10, 3, 15, 9],\n", | ||
743 | + " [18, 13, 10, 5, 6, 17, 4, 19, 18, 1, 14, 9, 14, 4],\n", | ||
744 | + " [20, 10, 12, 3],\n", | ||
745 | + " [7, 9, 15, 6, 15, 15, 9, 19, 11],\n", | ||
746 | + " [10, 4, 18, 16, 14, 2],\n", | ||
747 | + " [0, 16, 12, 3, 17, 4, 17, 5, 5, 8, 12, 18, 8, 11],\n", | ||
748 | + " [18, 13, 13, 10, 2],\n", | ||
749 | + " [17, 17, 16, 5, 7, 2, 16, 9],\n", | ||
750 | + " [14, 2, 20, 1, 14, 5, 7, 4, 16, 13, 5, 0, 12, 2, 9],\n", | ||
751 | + " [5, 5, 0, 1, 1, 11, 5, 19, 15, 2, 12, 7, 7, 7],\n", | ||
752 | + " [10, 20, 10, 19, 8],\n", | ||
753 | + " [5, 19, 8, 3, 17, 16, 10, 16, 20, 4, 2, 15, 9],\n", | ||
754 | + " [1, 8, 15, 8, 19, 1, 14, 15, 3, 7, 13, 20, 0, 10],\n", | ||
755 | + " [10, 4, 7, 20, 16, 12, 0],\n", | ||
756 | + " [11, 3, 5, 15, 2, 14, 8, 2],\n", | ||
757 | + " [1, 17, 6, 13, 19, 3],\n", | ||
758 | + " [20, 0, 3, 7, 7],\n", | ||
759 | + " [17, 1, 20, 7, 8, 18, 4, 10, 19, 1, 14, 6],\n", | ||
760 | + " [5, 17, 20, 10, 1, 13, 19, 2, 3, 3],\n", | ||
761 | + " [7, 8, 4, 20, 5, 13, 20, 5, 4, 19, 3, 2, 13, 19, 1],\n", | ||
762 | + " [16, 20, 16],\n", | ||
763 | + " [5, 17, 6, 2, 16, 1, 8],\n", | ||
764 | + " [8, 5, 14, 0, 18, 15, 20, 20, 3, 15],\n", | ||
765 | + " [12, 7, 2, 18, 4, 16, 20, 2, 4, 16],\n", | ||
766 | + " [4, 7, 12, 13, 13],\n", | ||
767 | + " [0, 1, 16, 7, 12, 15, 1, 12],\n", | ||
768 | + " [4, 4, 9, 12],\n", | ||
769 | + " [4, 14, 5],\n", | ||
770 | + " [3, 9, 8, 14, 14, 20, 15, 8, 8, 11, 20, 12, 20],\n", | ||
771 | + " [0, 18, 11, 17, 13, 18, 6, 18, 11, 10, 19, 2, 11, 7, 8],\n", | ||
772 | + " [4, 11, 10, 12],\n", | ||
773 | + " [3, 12, 8, 2, 6, 15],\n", | ||
774 | + " [0, 6, 9, 14],\n", | ||
775 | + " [15, 17, 16],\n", | ||
776 | + " [13, 19, 2],\n", | ||
777 | + " [0, 1, 13],\n", | ||
778 | + " [13, 18, 16, 14, 16, 2, 5, 5],\n", | ||
779 | + " [10, 1, 6, 15, 17, 19, 13, 8, 20, 1, 17, 16],\n", | ||
780 | + " [13, 10, 4],\n", | ||
781 | + " [0, 2, 4],\n", | ||
782 | + " [3, 3, 5, 9, 14, 17, 12, 11, 2, 6, 5, 1, 15, 15],\n", | ||
783 | + " [3, 4, 11, 1, 17, 16],\n", | ||
784 | + " [11, 2, 18],\n", | ||
785 | + " [3, 10, 19, 17, 12, 12, 10, 2, 9, 16, 9],\n", | ||
786 | + " [8, 11, 15, 6, 19, 11, 19],\n", | ||
787 | + " [4, 9, 7, 0, 6, 7, 12, 4, 9, 20, 12],\n", | ||
788 | + " [6, 13, 16, 6, 18, 6, 11, 15, 17],\n", | ||
789 | + " [4, 11, 16],\n", | ||
790 | + " [7, 7, 15, 2],\n", | ||
791 | + " [0, 11, 8, 5, 17, 13, 2, 9, 10, 3, 17, 17],\n", | ||
792 | + " [10, 3, 6, 11, 17, 0, 18, 20, 0, 7, 2, 7, 5],\n", | ||
793 | + " [16, 3, 1, 10, 11],\n", | ||
794 | + " [16, 15, 5, 0, 16, 1, 6, 10, 6, 1, 7, 16, 13, 0],\n", | ||
795 | + " [10, 17, 11, 18, 19, 12, 12],\n", | ||
796 | + " [2, 7, 1, 11, 8, 3, 0, 16, 14, 16, 3, 11, 17],\n", | ||
797 | + " [2, 11, 14, 16, 3, 0, 0, 17, 13, 20, 6, 12],\n", | ||
798 | + " [15, 16, 20, 16, 2, 2, 3, 7, 1, 5],\n", | ||
799 | + " [0, 15, 14, 12, 9, 16, 17, 5],\n", | ||
800 | + " [7, 0, 8],\n", | ||
801 | + " [13, 6, 18, 1, 15, 13, 4, 16, 13, 3],\n", | ||
802 | + " [0, 15, 18, 3],\n", | ||
803 | + " [6, 1, 6, 6],\n", | ||
804 | + " [9, 18, 13, 7, 13, 2, 20, 14, 6, 20, 6, 6],\n", | ||
805 | + " [13, 8, 12, 3, 6, 6, 11, 4, 9, 14, 6, 12, 1, 3, 5],\n", | ||
806 | + " [14, 3, 2, 14, 4, 10],\n", | ||
807 | + " [3, 0, 11, 12, 6, 9, 3, 13, 12, 2],\n", | ||
808 | + " [15, 14, 2, 1, 1, 9, 17, 15, 15, 4, 13, 12, 1, 9],\n", | ||
809 | + " [4, 11, 20, 0, 13, 18, 3, 0, 0, 17, 18],\n", | ||
810 | + " [14, 16, 7],\n", | ||
811 | + " [14, 8, 18, 4, 1, 0],\n", | ||
812 | + " [7, 7, 0, 1, 16, 10, 1, 19, 9, 0],\n", | ||
813 | + " [9, 14, 3, 19, 14, 10, 17, 13, 8, 19, 18, 19, 5],\n", | ||
814 | + " [18, 6, 6, 0, 8, 3, 10, 4, 14],\n", | ||
815 | + " [0, 3, 19, 10, 18],\n", | ||
816 | + " [1, 18, 11, 2, 5, 3, 11, 5, 11, 4, 4, 16, 3],\n", | ||
817 | + " [4, 2, 0, 9, 17, 3, 2, 16, 19, 3, 2, 8, 18],\n", | ||
818 | + " [19, 11, 2, 10, 9, 0],\n", | ||
819 | + " [7, 18, 3, 16, 10, 10],\n", | ||
820 | + " [2, 19, 5, 11, 20, 15],\n", | ||
821 | + " [17, 12, 0, 20, 9, 0, 15, 13, 15, 8, 11],\n", | ||
822 | + " [6, 5, 7, 16, 5, 11, 15, 16],\n", | ||
823 | + " [9, 15, 8, 16, 10, 13, 14, 2, 4, 7, 10, 3, 17],\n", | ||
824 | + " [0, 6, 15, 6, 16, 10, 8, 9, 4, 14],\n", | ||
825 | + " [12, 20, 3, 0, 17, 4, 8, 1, 8],\n", | ||
826 | + " [20, 4, 8],\n", | ||
827 | + " [17, 9, 10, 8, 8, 20, 0],\n", | ||
828 | + " [7, 2, 14, 3, 2],\n", | ||
829 | + " [9, 20, 10],\n", | ||
830 | + " [15, 7, 16, 1, 18, 16, 20, 5, 14],\n", | ||
831 | + " [12, 11, 8, 16, 1, 1, 10, 2, 20, 17],\n", | ||
832 | + " [4, 8, 10, 14, 8],\n", | ||
833 | + " [9, 13, 1, 0, 10, 0],\n", | ||
834 | + " [10, 13, 7, 19, 0],\n", | ||
835 | + " [5, 8, 5],\n", | ||
836 | + " [4, 14, 16, 20, 18, 12, 9, 10, 5, 20, 0, 3, 15, 7],\n", | ||
837 | + " [10, 6, 3, 6, 1, 19, 15, 10, 10, 13, 6, 20, 12, 5, 17],\n", | ||
838 | + " [17, 17, 10, 8, 19, 14, 14, 19, 3, 4, 10, 5, 11, 20, 20],\n", | ||
839 | + " [5, 11, 9, 14, 12, 11, 20, 13, 11, 16, 15, 0, 12, 20, 16],\n", | ||
840 | + " [11, 16, 15, 8, 7, 9, 13, 10, 4, 18, 1, 1, 9, 0],\n", | ||
841 | + " [12, 15, 18],\n", | ||
842 | + " [14, 18, 6, 6, 1],\n", | ||
843 | + " [16, 6, 12, 11],\n", | ||
844 | + " [12, 19, 17, 0, 18, 10, 11, 2, 12, 4, 5, 16],\n", | ||
845 | + " [8, 20, 15, 5, 16, 7, 20, 14, 15, 17, 1],\n", | ||
846 | + " [5, 7, 5, 13, 2, 18, 5, 2, 2, 12, 20, 14],\n", | ||
847 | + " [2, 11, 4, 9],\n", | ||
848 | + " [2, 13, 1, 5, 4],\n", | ||
849 | + " [11, 5, 5, 2, 17, 8, 5, 17, 13, 5, 9],\n", | ||
850 | + " [20, 19, 6, 3, 10, 8, 6, 0],\n", | ||
851 | + " [2, 20, 18, 6, 14, 15, 13, 12, 10, 12, 8, 20, 16, 4],\n", | ||
852 | + " [14, 0, 13, 9],\n", | ||
853 | + " [13, 20, 18, 1, 3, 5, 0, 18, 20],\n", | ||
854 | + " [7, 14, 5, 12, 12, 8, 9, 6, 20, 16],\n", | ||
855 | + " [18, 7, 12, 5, 5, 19, 19, 4, 10, 8, 11, 18, 17, 19, 6],\n", | ||
856 | + " [2, 7, 17, 16, 19, 18, 7, 9, 12, 3, 6, 7, 10],\n", | ||
857 | + " [6, 10, 11, 14, 3, 18, 10, 2, 13, 0, 20, 11, 20, 1],\n", | ||
858 | + " [8, 12, 6, 5, 4, 20, 12, 8],\n", | ||
859 | + " [7, 8, 1, 16, 10, 11, 19, 18],\n", | ||
860 | + " [16, 0, 17, 1, 3, 18],\n", | ||
861 | + " [3, 6, 17, 19, 17, 1, 13, 13, 13],\n", | ||
862 | + " [2, 20, 16, 5, 19, 16, 6, 4, 2],\n", | ||
863 | + " [17, 12, 15, 2, 11, 16, 19, 15, 3, 20],\n", | ||
864 | + " [8, 20, 20, 9, 2, 4, 14, 1, 13],\n", | ||
865 | + " [17, 0, 19, 7, 6, 10, 2, 5, 7, 17, 17, 4, 16],\n", | ||
866 | + " [18, 17, 15, 20, 15, 0, 6, 7, 20],\n", | ||
867 | + " [17, 13, 15, 15, 19, 11, 9, 10, 8],\n", | ||
868 | + " [20, 20, 13, 15, 6, 16, 11, 14, 14, 6],\n", | ||
869 | + " [2, 10, 3, 15, 3, 14, 4, 12, 19],\n", | ||
870 | + " [1, 12, 8, 16],\n", | ||
871 | + " [6, 10, 10, 9, 20, 1, 15, 3, 10, 5, 8, 0, 13, 7, 10],\n", | ||
872 | + " [11, 15, 2],\n", | ||
873 | + " [4, 4, 20, 4, 7, 7, 4, 7, 2, 9, 18, 4],\n", | ||
874 | + " [13, 7, 1, 20],\n", | ||
875 | + " [12, 14, 10, 18, 12, 13, 5, 13, 18, 16, 12, 4, 1, 16, 9],\n", | ||
876 | + " [20, 7, 15],\n", | ||
877 | + " [5, 14, 0, 7, 3, 1, 9, 15, 11, 10, 20, 2, 18, 6],\n", | ||
878 | + " [11, 19, 12, 10, 1, 5, 20, 19, 8, 10, 14, 9, 14, 16, 3],\n", | ||
879 | + " [5, 15, 18, 8, 2],\n", | ||
880 | + " [7, 17, 20, 12],\n", | ||
881 | + " [19, 14, 9, 3, 14, 4, 17, 15, 14, 12, 16],\n", | ||
882 | + " [3, 18, 6, 15, 10, 3, 15, 11, 3, 5, 14],\n", | ||
883 | + " [8, 15, 19, 16, 4],\n", | ||
884 | + " [8, 12, 18, 0, 9],\n", | ||
885 | + " [5, 4, 1, 7, 9, 5, 10, 14, 19, 7, 4, 0],\n", | ||
886 | + " [1, 15, 11, 5, 11, 14, 12, 20, 17, 4, 13, 12],\n", | ||
887 | + " [11, 9, 11, 18, 5],\n", | ||
888 | + " [9, 18, 19, 0, 4, 1, 8, 0, 4, 7, 8, 19, 3],\n", | ||
889 | + " [3, 9, 13, 4, 1, 11, 3],\n", | ||
890 | + " [3, 4, 14, 15, 9, 2, 16, 0, 17, 8, 2, 3],\n", | ||
891 | + " [11, 12, 18, 11, 11, 10, 19, 16, 10, 9],\n", | ||
892 | + " [11, 19, 9, 3, 4, 18, 8, 15, 4, 3, 15, 17, 18, 1, 13],\n", | ||
893 | + " [14, 20, 0, 1, 2, 19, 0, 4, 8, 2, 8, 11, 14]]" | ||
894 | + ] | ||
895 | + }, | ||
896 | + "execution_count": 46, | ||
897 | + "metadata": {}, | ||
898 | + "output_type": "execute_result" | ||
899 | + } | ||
900 | + ], | ||
901 | + "source": [ | ||
902 | + "data_value #模拟展示用户搜藏图书id" | ||
903 | + ] | ||
904 | + }, | ||
905 | + { | ||
906 | + "cell_type": "code", | ||
907 | + "execution_count": 16, | ||
908 | + "metadata": { | ||
909 | + "collapsed": false | ||
910 | + }, | ||
911 | + "outputs": [ | ||
912 | + { | ||
913 | + "name": "stdout", | ||
914 | + "output_type": "stream", | ||
915 | + "text": [ | ||
916 | + "563 房地产经济专业知识与实务历年真题及名师密押试卷\n", | ||
917 | + "296 金博士一点全通\n", | ||
918 | + "1236 会计电算化应用教程\n", | ||
919 | + "Name: title, dtype: object\n" | ||
920 | + ] | ||
921 | + } | ||
922 | + ], | ||
923 | + "source": [ | ||
924 | + "print books[[563,296,1236]] #验证id号和书名一一对应" | ||
925 | + ] | ||
926 | + }, | ||
927 | + { | ||
928 | + "cell_type": "code", | ||
929 | + "execution_count": 53, | ||
930 | + "metadata": { | ||
931 | + "collapsed": false | ||
932 | + }, | ||
933 | + "outputs": [ | ||
934 | + { | ||
935 | + "data": { | ||
936 | + "text/plain": [ | ||
937 | + "[[frozenset({9}),\n", | ||
938 | + " frozenset({2}),\n", | ||
939 | + " frozenset({12}),\n", | ||
940 | + " frozenset({1}),\n", | ||
941 | + " frozenset({16}),\n", | ||
942 | + " frozenset({19}),\n", | ||
943 | + " frozenset({4}),\n", | ||
944 | + " frozenset({14}),\n", | ||
945 | + " frozenset({8}),\n", | ||
946 | + " frozenset({11}),\n", | ||
947 | + " frozenset({18}),\n", | ||
948 | + " frozenset({13}),\n", | ||
949 | + " frozenset({15}),\n", | ||
950 | + " frozenset({6}),\n", | ||
951 | + " frozenset({17}),\n", | ||
952 | + " frozenset({0}),\n", | ||
953 | + " frozenset({3}),\n", | ||
954 | + " frozenset({10}),\n", | ||
955 | + " frozenset({5}),\n", | ||
956 | + " frozenset({20}),\n", | ||
957 | + " frozenset({7})],\n", | ||
958 | + " [frozenset({3, 14}),\n", | ||
959 | + " frozenset({1, 15}),\n", | ||
960 | + " frozenset({4, 5}),\n", | ||
961 | + " frozenset({9, 15}),\n", | ||
962 | + " frozenset({4, 11}),\n", | ||
963 | + " frozenset({6, 14}),\n", | ||
964 | + " frozenset({5, 8}),\n", | ||
965 | + " frozenset({11, 19}),\n", | ||
966 | + " frozenset({5, 18}),\n", | ||
967 | + " frozenset({6, 15}),\n", | ||
968 | + " frozenset({2, 4}),\n", | ||
969 | + " frozenset({5, 16}),\n", | ||
970 | + " frozenset({4, 13}),\n", | ||
971 | + " frozenset({0, 8}),\n", | ||
972 | + " frozenset({7, 19}),\n", | ||
973 | + " frozenset({1, 17}),\n", | ||
974 | + " frozenset({9, 14}),\n", | ||
975 | + " frozenset({9, 19}),\n", | ||
976 | + " frozenset({8, 14}),\n", | ||
977 | + " frozenset({7, 8}),\n", | ||
978 | + " frozenset({10, 14}),\n", | ||
979 | + " frozenset({2, 7}),\n", | ||
980 | + " frozenset({11, 20}),\n", | ||
981 | + " frozenset({2, 10}),\n", | ||
982 | + " frozenset({13, 19}),\n", | ||
983 | + " frozenset({11, 12}),\n", | ||
984 | + " frozenset({3, 9}),\n", | ||
985 | + " frozenset({17, 18}),\n", | ||
986 | + " frozenset({12, 20}),\n", | ||
987 | + " frozenset({10, 17}),\n", | ||
988 | + " frozenset({0, 6}),\n", | ||
989 | + " frozenset({7, 12}),\n", | ||
990 | + " frozenset({9, 10}),\n", | ||
991 | + " frozenset({17, 19}),\n", | ||
992 | + " frozenset({7, 14}),\n", | ||
993 | + " frozenset({12, 16}),\n", | ||
994 | + " frozenset({4, 18}),\n", | ||
995 | + " frozenset({0, 16}),\n", | ||
996 | + " frozenset({0, 9}),\n", | ||
997 | + " frozenset({2, 6}),\n", | ||
998 | + " frozenset({1, 2}),\n", | ||
999 | + " frozenset({13, 20}),\n", | ||
1000 | + " frozenset({7, 15}),\n", | ||
1001 | + " frozenset({0, 13}),\n", | ||
1002 | + " frozenset({3, 7}),\n", | ||
1003 | + " frozenset({7, 9}),\n", | ||
1004 | + " frozenset({12, 19}),\n", | ||
1005 | + " frozenset({6, 8}),\n", | ||
1006 | + " frozenset({19, 20}),\n", | ||
1007 | + " frozenset({0, 17}),\n", | ||
1008 | + " frozenset({4, 15}),\n", | ||
1009 | + " frozenset({17, 20}),\n", | ||
1010 | + " frozenset({1, 8}),\n", | ||
1011 | + " frozenset({11, 16}),\n", | ||
1012 | + " frozenset({12, 17}),\n", | ||
1013 | + " frozenset({13, 17}),\n", | ||
1014 | + " frozenset({2, 9}),\n", | ||
1015 | + " frozenset({16, 19}),\n", | ||
1016 | + " frozenset({10, 16}),\n", | ||
1017 | + " frozenset({2, 17}),\n", | ||
1018 | + " frozenset({4, 12}),\n", | ||
1019 | + " frozenset({3, 8}),\n", | ||
1020 | + " frozenset({16, 18}),\n", | ||
1021 | + " frozenset({4, 20}),\n", | ||
1022 | + " frozenset({15, 17}),\n", | ||
1023 | + " frozenset({0, 4}),\n", | ||
1024 | + " frozenset({0, 12}),\n", | ||
1025 | + " frozenset({0, 1}),\n", | ||
1026 | + " frozenset({7, 11}),\n", | ||
1027 | + " frozenset({14, 15}),\n", | ||
1028 | + " frozenset({2, 15}),\n", | ||
1029 | + " frozenset({1, 6}),\n", | ||
1030 | + " frozenset({2, 3}),\n", | ||
1031 | + " frozenset({1, 16}),\n", | ||
1032 | + " frozenset({3, 6}),\n", | ||
1033 | + " frozenset({9, 11}),\n", | ||
1034 | + " frozenset({3, 4}),\n", | ||
1035 | + " frozenset({1, 20}),\n", | ||
1036 | + " frozenset({4, 19}),\n", | ||
1037 | + " frozenset({11, 17}),\n", | ||
1038 | + " frozenset({1, 14}),\n", | ||
1039 | + " frozenset({14, 20}),\n", | ||
1040 | + " frozenset({5, 20}),\n", | ||
1041 | + " frozenset({4, 10}),\n", | ||
1042 | + " frozenset({6, 9}),\n", | ||
1043 | + " frozenset({2, 11}),\n", | ||
1044 | + " frozenset({1, 9}),\n", | ||
1045 | + " frozenset({3, 11}),\n", | ||
1046 | + " frozenset({8, 15}),\n", | ||
1047 | + " frozenset({3, 10}),\n", | ||
1048 | + " frozenset({5, 7}),\n", | ||
1049 | + " frozenset({8, 13}),\n", | ||
1050 | + " frozenset({1, 7}),\n", | ||
1051 | + " frozenset({4, 6}),\n", | ||
1052 | + " frozenset({7, 13}),\n", | ||
1053 | + " frozenset({14, 19}),\n", | ||
1054 | + " frozenset({8, 20}),\n", | ||
1055 | + " frozenset({1, 4}),\n", | ||
1056 | + " frozenset({8, 16}),\n", | ||
1057 | + " frozenset({3, 18}),\n", | ||
1058 | + " frozenset({2, 14}),\n", | ||
1059 | + " frozenset({10, 19}),\n", | ||
1060 | + " frozenset({3, 15}),\n", | ||
1061 | + " frozenset({13, 14}),\n", | ||
1062 | + " frozenset({8, 10}),\n", | ||
1063 | + " frozenset({6, 12}),\n", | ||
1064 | + " frozenset({12, 15}),\n", | ||
1065 | + " frozenset({5, 11}),\n", | ||
1066 | + " frozenset({4, 9}),\n", | ||
1067 | + " frozenset({4, 8}),\n", | ||
1068 | + " frozenset({0, 15}),\n", | ||
1069 | + " frozenset({15, 20}),\n", | ||
1070 | + " frozenset({5, 17}),\n", | ||
1071 | + " frozenset({7, 16}),\n", | ||
1072 | + " frozenset({2, 12}),\n", | ||
1073 | + " frozenset({0, 2}),\n", | ||
1074 | + " frozenset({5, 9}),\n", | ||
1075 | + " frozenset({2, 20}),\n", | ||
1076 | + " frozenset({3, 5}),\n", | ||
1077 | + " frozenset({5, 15}),\n", | ||
1078 | + " frozenset({11, 14}),\n", | ||
1079 | + " frozenset({7, 17}),\n", | ||
1080 | + " frozenset({6, 10}),\n", | ||
1081 | + " frozenset({16, 20}),\n", | ||
1082 | + " frozenset({3, 16}),\n", | ||
1083 | + " frozenset({6, 19}),\n", | ||
1084 | + " frozenset({4, 7}),\n", | ||
1085 | + " frozenset({0, 10}),\n", | ||
1086 | + " frozenset({14, 18}),\n", | ||
1087 | + " frozenset({0, 14}),\n", | ||
1088 | + " frozenset({10, 15}),\n", | ||
1089 | + " frozenset({3, 19}),\n", | ||
1090 | + " frozenset({14, 17}),\n", | ||
1091 | + " frozenset({2, 8}),\n", | ||
1092 | + " frozenset({1, 5}),\n", | ||
1093 | + " frozenset({5, 6}),\n", | ||
1094 | + " frozenset({3, 17}),\n", | ||
1095 | + " frozenset({9, 16}),\n", | ||
1096 | + " frozenset({10, 13}),\n", | ||
1097 | + " frozenset({2, 19}),\n", | ||
1098 | + " frozenset({1, 11}),\n", | ||
1099 | + " frozenset({16, 17}),\n", | ||
1100 | + " frozenset({0, 20}),\n", | ||
1101 | + " frozenset({8, 17}),\n", | ||
1102 | + " frozenset({9, 17}),\n", | ||
1103 | + " frozenset({7, 10}),\n", | ||
1104 | + " frozenset({0, 7}),\n", | ||
1105 | + " frozenset({15, 16}),\n", | ||
1106 | + " frozenset({10, 18}),\n", | ||
1107 | + " frozenset({7, 20}),\n", | ||
1108 | + " frozenset({1, 10}),\n", | ||
1109 | + " frozenset({0, 3}),\n", | ||
1110 | + " frozenset({4, 17}),\n", | ||
1111 | + " frozenset({1, 3}),\n", | ||
1112 | + " frozenset({12, 14}),\n", | ||
1113 | + " frozenset({10, 11}),\n", | ||
1114 | + " frozenset({0, 19}),\n", | ||
1115 | + " frozenset({10, 20}),\n", | ||
1116 | + " frozenset({3, 20}),\n", | ||
1117 | + " frozenset({6, 17}),\n", | ||
1118 | + " frozenset({10, 12}),\n", | ||
1119 | + " frozenset({8, 19}),\n", | ||
1120 | + " frozenset({9, 12}),\n", | ||
1121 | + " frozenset({4, 16}),\n", | ||
1122 | + " frozenset({1, 18}),\n", | ||
1123 | + " frozenset({9, 13}),\n", | ||
1124 | + " frozenset({2, 5}),\n", | ||
1125 | + " frozenset({9, 20}),\n", | ||
1126 | + " frozenset({11, 15}),\n", | ||
1127 | + " frozenset({5, 14}),\n", | ||
1128 | + " frozenset({5, 10}),\n", | ||
1129 | + " frozenset({2, 18}),\n", | ||
1130 | + " frozenset({1, 13}),\n", | ||
1131 | + " frozenset({0, 5}),\n", | ||
1132 | + " frozenset({15, 19}),\n", | ||
1133 | + " frozenset({5, 12}),\n", | ||
1134 | + " frozenset({6, 16}),\n", | ||
1135 | + " frozenset({6, 20}),\n", | ||
1136 | + " frozenset({1, 19}),\n", | ||
1137 | + " frozenset({9, 18}),\n", | ||
1138 | + " frozenset({8, 9}),\n", | ||
1139 | + " frozenset({2, 13}),\n", | ||
1140 | + " frozenset({6, 7}),\n", | ||
1141 | + " frozenset({4, 14}),\n", | ||
1142 | + " frozenset({14, 16}),\n", | ||
1143 | + " frozenset({2, 16}),\n", | ||
1144 | + " frozenset({13, 15})],\n", | ||
1145 | + " []]" | ||
1146 | + ] | ||
1147 | + }, | ||
1148 | + "execution_count": 53, | ||
1149 | + "metadata": {}, | ||
1150 | + "output_type": "execute_result" | ||
1151 | + } | ||
1152 | + ], | ||
1153 | + "source": [ | ||
1154 | + "L,suppData=apriori(data_value,minSupport=0.1)\n", | ||
1155 | + "L\n" | ||
1156 | + ] | ||
1157 | + }, | ||
1158 | + { | ||
1159 | + "cell_type": "code", | ||
1160 | + "execution_count": 60, | ||
1161 | + "metadata": { | ||
1162 | + "collapsed": false | ||
1163 | + }, | ||
1164 | + "outputs": [ | ||
1165 | + { | ||
1166 | + "name": "stdout", | ||
1167 | + "output_type": "stream", | ||
1168 | + "text": [ | ||
1169 | + "(frozenset([14]), '-->', frozenset([3]), 'conf:', 0.4057142857142857)\n", | ||
1170 | + "(frozenset([3]), '-->', frozenset([14]), 'conf:', 0.41764705882352937)\n", | ||
1171 | + "(frozenset([4]), '-->', frozenset([2]), 'conf:', 0.41208791208791207)\n", | ||
1172 | + "(frozenset([2]), '-->', frozenset([4]), 'conf:', 0.4098360655737705)\n", | ||
1173 | + "(frozenset([5]), '-->', frozenset([16]), 'conf:', 0.4140127388535032)\n", | ||
1174 | + "(frozenset([19]), '-->', frozenset([7]), 'conf:', 0.4)\n", | ||
1175 | + "(frozenset([12]), '-->', frozenset([20]), 'conf:', 0.4267515923566879)\n", | ||
1176 | + "(frozenset([17]), '-->', frozenset([10]), 'conf:', 0.4285714285714285)\n", | ||
1177 | + "(frozenset([18]), '-->', frozenset([4]), 'conf:', 0.4)\n", | ||
1178 | + "(frozenset([15]), '-->', frozenset([7]), 'conf:', 0.4082840236686391)\n", | ||
1179 | + "(frozenset([9]), '-->', frozenset([7]), 'conf:', 0.4)\n", | ||
1180 | + "(frozenset([8]), '-->', frozenset([1]), 'conf:', 0.4276729559748428)\n", | ||
1181 | + "(frozenset([9]), '-->', frozenset([2]), 'conf:', 0.4)\n", | ||
1182 | + "(frozenset([10]), '-->', frozenset([16]), 'conf:', 0.41208791208791207)\n", | ||
1183 | + "(frozenset([16]), '-->', frozenset([10]), 'conf:', 0.41899441340782123)\n", | ||
1184 | + "(frozenset([12]), '-->', frozenset([4]), 'conf:', 0.42038216560509556)\n", | ||
1185 | + "(frozenset([18]), '-->', frozenset([16]), 'conf:', 0.4)\n", | ||
1186 | + "(frozenset([15]), '-->', frozenset([14]), 'conf:', 0.42603550295857984)\n", | ||
1187 | + "(frozenset([14]), '-->', frozenset([15]), 'conf:', 0.4114285714285714)\n", | ||
1188 | + "(frozenset([1]), '-->', frozenset([16]), 'conf:', 0.42391304347826086)\n", | ||
1189 | + "(frozenset([16]), '-->', frozenset([1]), 'conf:', 0.4357541899441341)\n", | ||
1190 | + "(frozenset([20]), '-->', frozenset([1]), 'conf:', 0.4157303370786517)\n", | ||
1191 | + "(frozenset([1]), '-->', frozenset([20]), 'conf:', 0.40217391304347827)\n", | ||
1192 | + "(frozenset([19]), '-->', frozenset([4]), 'conf:', 0.40625)\n", | ||
1193 | + "(frozenset([11]), '-->', frozenset([2]), 'conf:', 0.41935483870967744)\n", | ||
1194 | + "(frozenset([13]), '-->', frozenset([7]), 'conf:', 0.4155844155844156)\n", | ||
1195 | + "(frozenset([4]), '-->', frozenset([1]), 'conf:', 0.4065934065934066)\n", | ||
1196 | + "(frozenset([1]), '-->', frozenset([4]), 'conf:', 0.40217391304347827)\n", | ||
1197 | + "(frozenset([14]), '-->', frozenset([2]), 'conf:', 0.41714285714285715)\n", | ||
1198 | + "(frozenset([19]), '-->', frozenset([10]), 'conf:', 0.41875)\n", | ||
1199 | + "(frozenset([8]), '-->', frozenset([4]), 'conf:', 0.4088050314465409)\n", | ||
1200 | + "(frozenset([7]), '-->', frozenset([16]), 'conf:', 0.4357541899441341)\n", | ||
1201 | + "(frozenset([16]), '-->', frozenset([7]), 'conf:', 0.4357541899441341)\n", | ||
1202 | + "(frozenset([5]), '-->', frozenset([3]), 'conf:', 0.40764331210191085)\n", | ||
1203 | + "(frozenset([5]), '-->', frozenset([1]), 'conf:', 0.43312101910828027)\n", | ||
1204 | + "(frozenset([3]), '-->', frozenset([17]), 'conf:', 0.411764705882353)\n", | ||
1205 | + "(frozenset([17]), '-->', frozenset([3]), 'conf:', 0.4166666666666667)\n", | ||
1206 | + "(frozenset([17]), '-->', frozenset([16]), 'conf:', 0.4345238095238095)\n", | ||
1207 | + "(frozenset([16]), '-->', frozenset([17]), 'conf:', 0.40782122905027934)\n", | ||
1208 | + "(frozenset([8]), '-->', frozenset([17]), 'conf:', 0.4025157232704403)\n", | ||
1209 | + "(frozenset([7]), '-->', frozenset([10]), 'conf:', 0.41899441340782123)\n", | ||
1210 | + "(frozenset([10]), '-->', frozenset([7]), 'conf:', 0.41208791208791207)\n", | ||
1211 | + "(frozenset([15]), '-->', frozenset([16]), 'conf:', 0.4319526627218934)\n", | ||
1212 | + "(frozenset([16]), '-->', frozenset([15]), 'conf:', 0.40782122905027934)\n", | ||
1213 | + "(frozenset([10]), '-->', frozenset([1]), 'conf:', 0.4065934065934066)\n", | ||
1214 | + "(frozenset([1]), '-->', frozenset([10]), 'conf:', 0.40217391304347827)\n", | ||
1215 | + "(frozenset([3]), '-->', frozenset([0]), 'conf:', 0.41764705882352937)\n", | ||
1216 | + "(frozenset([0]), '-->', frozenset([3]), 'conf:', 0.4127906976744186)\n", | ||
1217 | + "(frozenset([17]), '-->', frozenset([4]), 'conf:', 0.4166666666666667)\n", | ||
1218 | + "(frozenset([3]), '-->', frozenset([1]), 'conf:', 0.4)\n", | ||
1219 | + "(frozenset([13]), '-->', frozenset([9]), 'conf:', 0.4090909090909091)\n", | ||
1220 | + "(frozenset([5]), '-->', frozenset([2]), 'conf:', 0.4394904458598726)\n", | ||
1221 | + "(frozenset([9]), '-->', frozenset([20]), 'conf:', 0.4)\n", | ||
1222 | + "(frozenset([18]), '-->', frozenset([2]), 'conf:', 0.4068965517241379)\n", | ||
1223 | + "(frozenset([6]), '-->', frozenset([20]), 'conf:', 0.42138364779874216)\n", | ||
1224 | + "(frozenset([19]), '-->', frozenset([1]), 'conf:', 0.4)\n", | ||
1225 | + "(frozenset([13]), '-->', frozenset([2]), 'conf:', 0.4025974025974026)\n", | ||
1226 | + "(frozenset([14]), '-->', frozenset([4]), 'conf:', 0.4000000000000001)\n", | ||
1227 | + "(frozenset([2]), '-->', frozenset([16]), 'conf:', 0.42622950819672134)\n", | ||
1228 | + "(frozenset([16]), '-->', frozenset([2]), 'conf:', 0.4357541899441341)\n" | ||
1229 | + ] | ||
1230 | + }, | ||
1231 | + { | ||
1232 | + "data": { | ||
1233 | + "text/plain": [ | ||
1234 | + "[(frozenset({14}), frozenset({3}), 0.4057142857142857),\n", | ||
1235 | + " (frozenset({3}), frozenset({14}), 0.41764705882352937),\n", | ||
1236 | + " (frozenset({4}), frozenset({2}), 0.41208791208791207),\n", | ||
1237 | + " (frozenset({2}), frozenset({4}), 0.4098360655737705),\n", | ||
1238 | + " (frozenset({5}), frozenset({16}), 0.4140127388535032),\n", | ||
1239 | + " (frozenset({19}), frozenset({7}), 0.4),\n", | ||
1240 | + " (frozenset({12}), frozenset({20}), 0.4267515923566879),\n", | ||
1241 | + " (frozenset({17}), frozenset({10}), 0.4285714285714285),\n", | ||
1242 | + " (frozenset({18}), frozenset({4}), 0.4),\n", | ||
1243 | + " (frozenset({15}), frozenset({7}), 0.4082840236686391),\n", | ||
1244 | + " (frozenset({9}), frozenset({7}), 0.4),\n", | ||
1245 | + " (frozenset({8}), frozenset({1}), 0.4276729559748428),\n", | ||
1246 | + " (frozenset({9}), frozenset({2}), 0.4),\n", | ||
1247 | + " (frozenset({10}), frozenset({16}), 0.41208791208791207),\n", | ||
1248 | + " (frozenset({16}), frozenset({10}), 0.41899441340782123),\n", | ||
1249 | + " (frozenset({12}), frozenset({4}), 0.42038216560509556),\n", | ||
1250 | + " (frozenset({18}), frozenset({16}), 0.4),\n", | ||
1251 | + " (frozenset({15}), frozenset({14}), 0.42603550295857984),\n", | ||
1252 | + " (frozenset({14}), frozenset({15}), 0.4114285714285714),\n", | ||
1253 | + " (frozenset({1}), frozenset({16}), 0.42391304347826086),\n", | ||
1254 | + " (frozenset({16}), frozenset({1}), 0.4357541899441341),\n", | ||
1255 | + " (frozenset({20}), frozenset({1}), 0.4157303370786517),\n", | ||
1256 | + " (frozenset({1}), frozenset({20}), 0.40217391304347827),\n", | ||
1257 | + " (frozenset({19}), frozenset({4}), 0.40625),\n", | ||
1258 | + " (frozenset({11}), frozenset({2}), 0.41935483870967744),\n", | ||
1259 | + " (frozenset({13}), frozenset({7}), 0.4155844155844156),\n", | ||
1260 | + " (frozenset({4}), frozenset({1}), 0.4065934065934066),\n", | ||
1261 | + " (frozenset({1}), frozenset({4}), 0.40217391304347827),\n", | ||
1262 | + " (frozenset({14}), frozenset({2}), 0.41714285714285715),\n", | ||
1263 | + " (frozenset({19}), frozenset({10}), 0.41875),\n", | ||
1264 | + " (frozenset({8}), frozenset({4}), 0.4088050314465409),\n", | ||
1265 | + " (frozenset({7}), frozenset({16}), 0.4357541899441341),\n", | ||
1266 | + " (frozenset({16}), frozenset({7}), 0.4357541899441341),\n", | ||
1267 | + " (frozenset({5}), frozenset({3}), 0.40764331210191085),\n", | ||
1268 | + " (frozenset({5}), frozenset({1}), 0.43312101910828027),\n", | ||
1269 | + " (frozenset({3}), frozenset({17}), 0.411764705882353),\n", | ||
1270 | + " (frozenset({17}), frozenset({3}), 0.4166666666666667),\n", | ||
1271 | + " (frozenset({17}), frozenset({16}), 0.4345238095238095),\n", | ||
1272 | + " (frozenset({16}), frozenset({17}), 0.40782122905027934),\n", | ||
1273 | + " (frozenset({8}), frozenset({17}), 0.4025157232704403),\n", | ||
1274 | + " (frozenset({7}), frozenset({10}), 0.41899441340782123),\n", | ||
1275 | + " (frozenset({10}), frozenset({7}), 0.41208791208791207),\n", | ||
1276 | + " (frozenset({15}), frozenset({16}), 0.4319526627218934),\n", | ||
1277 | + " (frozenset({16}), frozenset({15}), 0.40782122905027934),\n", | ||
1278 | + " (frozenset({10}), frozenset({1}), 0.4065934065934066),\n", | ||
1279 | + " (frozenset({1}), frozenset({10}), 0.40217391304347827),\n", | ||
1280 | + " (frozenset({3}), frozenset({0}), 0.41764705882352937),\n", | ||
1281 | + " (frozenset({0}), frozenset({3}), 0.4127906976744186),\n", | ||
1282 | + " (frozenset({17}), frozenset({4}), 0.4166666666666667),\n", | ||
1283 | + " (frozenset({3}), frozenset({1}), 0.4),\n", | ||
1284 | + " (frozenset({13}), frozenset({9}), 0.4090909090909091),\n", | ||
1285 | + " (frozenset({5}), frozenset({2}), 0.4394904458598726),\n", | ||
1286 | + " (frozenset({9}), frozenset({20}), 0.4),\n", | ||
1287 | + " (frozenset({18}), frozenset({2}), 0.4068965517241379),\n", | ||
1288 | + " (frozenset({6}), frozenset({20}), 0.42138364779874216),\n", | ||
1289 | + " (frozenset({19}), frozenset({1}), 0.4),\n", | ||
1290 | + " (frozenset({13}), frozenset({2}), 0.4025974025974026),\n", | ||
1291 | + " (frozenset({14}), frozenset({4}), 0.4000000000000001),\n", | ||
1292 | + " (frozenset({2}), frozenset({16}), 0.42622950819672134),\n", | ||
1293 | + " (frozenset({16}), frozenset({2}), 0.4357541899441341)]" | ||
1294 | + ] | ||
1295 | + }, | ||
1296 | + "execution_count": 60, | ||
1297 | + "metadata": {}, | ||
1298 | + "output_type": "execute_result" | ||
1299 | + } | ||
1300 | + ], | ||
1301 | + "source": [ | ||
1302 | + "rules=generateRules(L,suppData,minConf=0.4)\n", | ||
1303 | + "rules" | ||
1304 | + ] | ||
1305 | + }, | ||
1306 | + { | ||
1307 | + "cell_type": "code", | ||
1308 | + "execution_count": null, | ||
1309 | + "metadata": { | ||
1310 | + "collapsed": true | ||
1311 | + }, | ||
1312 | + "outputs": [], | ||
1313 | + "source": [] | ||
1314 | + }, | ||
1315 | + { | ||
1316 | + "cell_type": "code", | ||
1317 | + "execution_count": null, | ||
1318 | + "metadata": { | ||
1319 | + "collapsed": true | ||
1320 | + }, | ||
1321 | + "outputs": [], | ||
1322 | + "source": [] | ||
1323 | + }, | ||
1324 | + { | ||
1325 | + "cell_type": "code", | ||
1326 | + "execution_count": null, | ||
1327 | + "metadata": { | ||
1328 | + "collapsed": true | ||
1329 | + }, | ||
1330 | + "outputs": [], | ||
1331 | + "source": [] | ||
1332 | + } | ||
1333 | + ], | ||
1334 | + "metadata": { | ||
1335 | + "anaconda-cloud": {}, | ||
1336 | + "kernelspec": { | ||
1337 | + "display_name": "Python [Root]", | ||
1338 | + "language": "python", | ||
1339 | + "name": "Python [Root]" | ||
1340 | + }, | ||
1341 | + "language_info": { | ||
1342 | + "codemirror_mode": { | ||
1343 | + "name": "ipython", | ||
1344 | + "version": 2 | ||
1345 | + }, | ||
1346 | + "file_extension": ".py", | ||
1347 | + "mimetype": "text/x-python", | ||
1348 | + "name": "python", | ||
1349 | + "nbconvert_exporter": "python", | ||
1350 | + "pygments_lexer": "ipython2", | ||
1351 | + "version": "2.7.12" | ||
1352 | + } | ||
1353 | + }, | ||
1354 | + "nbformat": 4, | ||
1355 | + "nbformat_minor": 0 | ||
1356 | +} |
user_FC.py
0 → 100644
1 | +import math | ||
2 | +#!usr/bin/python | ||
3 | + | ||
4 | + | ||
5 | + | ||
6 | +def readFile(file_name): | ||
7 | + contents_lines=[] | ||
8 | + f = open(file_name,'r') | ||
9 | + contents_lines=f.readlines() | ||
10 | + f.close() | ||
11 | + return contents_lines | ||
12 | + | ||
13 | +def getBooksList(file_name): | ||
14 | + books_contents=readFile(file_name) | ||
15 | + books_info={} | ||
16 | + for book in books_contents: | ||
17 | + book_info=book.split("|") | ||
18 | + books_info[int(book_info[0])]=book_info[1:] | ||
19 | + return books_info | ||
20 | + | ||
21 | + | ||
22 | + | ||
23 | +def getRatingInformation(ratings): | ||
24 | + rates=[] | ||
25 | + for line in ratings: | ||
26 | + rate = line.split('\t') | ||
27 | + rates.append([int(rate[0]),int(rate[1]),int(rate[2])]) | ||
28 | + return rates | ||
29 | + | ||
30 | +def createUserRankDic(rates): | ||
31 | + user_rate_dic={} | ||
32 | + item_to_user={} | ||
33 | + for i in rates: | ||
34 | + user_rank=(i[1],i[2]) | ||
35 | + if i[0] in user_rate_dic: | ||
36 | + user_rate_dic[i[0]].append(user_rank) | ||
37 | + else: | ||
38 | + user_rate_dic[i[0]]=[user_rank] | ||
39 | + | ||
40 | + if i[1] in item_to_user: | ||
41 | + item_to_user[i[1]].append(i[0]) | ||
42 | + else: | ||
43 | + item_to_user[i[1]]=[i[0]] | ||
44 | + return user_rate_dic,item_to_user | ||
45 | + | ||
46 | +def clacSimlaryCosDist(user1,user2): | ||
47 | + sum_x=0.0 | ||
48 | + sum_y=0.0 | ||
49 | + sum_xy=0.0 | ||
50 | + avg_x=0.0 | ||
51 | + avg_y=0.0 | ||
52 | + for key in user1: | ||
53 | + avg_x+=key[1] | ||
54 | + avg_x=avg_x/len(user1) | ||
55 | + | ||
56 | + for key in user2: | ||
57 | + avg_y+=key[1] | ||
58 | + avg_y=avg_y/len(user2) | ||
59 | + | ||
60 | + for key1 in user1: | ||
61 | + for key2 in user2: | ||
62 | + if key1[0]==key2[0]: | ||
63 | + sum_xy+=(key1[1]-avg_x)*(key2[1]-avg_y) | ||
64 | + sum_x+=(key1[1]-avg_x)*(key1[1]-avg_x) | ||
65 | + for key2 in user2: | ||
66 | + sum_y+=(key2[1]-avg_y)*(key2[1]-avg_y) | ||
67 | + # print sum_x,sum_y,sum_xy | ||
68 | + if sum_xy ==0.0: | ||
69 | + return 0 | ||
70 | + sx_sy=math.sqrt(sum_x*sum_y) | ||
71 | + return sum_xy/sx_sy | ||
72 | + | ||
73 | + | ||
74 | + | ||
75 | +def calcNearestNeighbor(userid,users_dic,item_dic): | ||
76 | + neighbors=[] | ||
77 | + for item in users_dic[userid]: | ||
78 | + for neighbor in item_dic[item[0]]: | ||
79 | + if neighbor != userid and neighbor not in neighbors: | ||
80 | + neighbors.append(neighbor) | ||
81 | + | ||
82 | + neighbors_dist=[] | ||
83 | + for neighbor in neighbors: | ||
84 | + dist=clacSimlaryCosDist(users_dic[userid],users_dic[neighbor]) | ||
85 | + neighbors_dist.append([dist,neighbor]) | ||
86 | + neighbors_dist.sort(reverse=True) | ||
87 | + return neighbors_dist | ||
88 | + | ||
89 | + | ||
90 | +def recommendByUserFC(file_name,userid,k=5): | ||
91 | + test_contents=readFile(file_name) | ||
92 | + test_rates = getRatingInformation(test_contents) | ||
93 | + test_dic,test_item_to_user=createUserRankDic(test_rates) | ||
94 | + | ||
95 | + neighbors=calcNearestNeighbor(userid,test_dic,test_item_to_user)[:k] | ||
96 | + | ||
97 | + recommend_dic={} | ||
98 | + for neighbor in neighbors: | ||
99 | + neighbor_user_id=neighbor[1] | ||
100 | + books=test_dic[neighbor_user_id] | ||
101 | + for book in books: | ||
102 | + if book[0] not in recommend_dic: | ||
103 | + recommend_dic[book[0]]=neighbor[0] | ||
104 | + else: | ||
105 | + recommend_dic[book[0]]+=neighbor[0] | ||
106 | + recommend_list=[] | ||
107 | + for key in recommend_dic: | ||
108 | + recommend_list.append([recommend_dic[key],key]) | ||
109 | + | ||
110 | + recommend_list.sort(reverse=True) | ||
111 | + user_books = [i[0] for i in test_dic[userid]] | ||
112 | + | ||
113 | + return [i[1] for i in recommend_list],user_books,neighbors | ||
114 | + | ||
115 | + | ||
116 | +if __name__ == '__main__': | ||
117 | + books = readFile('u.data') | ||
118 | + rates = getRatingInformation(books) | ||
119 | + recommend_list,user_movie,neighbors=recommendByUserFC("u.data",222) | ||
120 | + | ||
121 | + print recommend_list[:5] | ||
122 | + |
-
Please register or login to post a comment