Advertisement
Guest User

recommendations

a guest
Aug 22nd, 2019
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.88 KB | None | 0 0
  1. import pandas as pd
  2. import numpy as np
  3.  
  4. file_obj = open('coursera_sessions_train.txt', 'r')
  5. data_train = list(file_obj)
  6.  
  7.  
  8. file_obj2 = open('coursera_sessions_test.txt', 'r')
  9. data_test = list(file_obj2)
  10.  
  11. views_freq = dict()
  12. buys_freq = dict()
  13.  
  14. for line in data_train:
  15.     views, buys = line.strip().split(';')
  16.     views = views.split(',')
  17.     buys = buys.split(',')
  18.     for id_viewed in views:
  19.         if id_viewed in views_freq:
  20.             views_freq[str(id_viewed)] += 1
  21.         else:
  22.             views_freq[str(id_viewed)] = 1
  23.        
  24.     for id_bought in buys:
  25.         if id_bought in buys_freq:
  26.             buys_freq[str(id_bought)] += 1
  27.         else:
  28.             buys_freq[str(id_bought)] = 1
  29.  
  30. # 1. Сортировка по просмотрам, на тренировочных данных
  31.                      
  32.  
  33. prec_1_list = []
  34. prec_5_list = []
  35. rec_1_list = []
  36. rec_5_list = []
  37.  
  38. for line in data_train:
  39.     views, buys = line.strip().split(';')
  40.     views = views.split(',')
  41.     buys = buys.split(',')
  42.     if buys[0] != '':
  43.  
  44.         views = np.unique(np.array(views))
  45.        
  46.         freqs=[]
  47.         views = list(views)
  48.         for i in range(len(views)):
  49.             freqs.append([i, views[i], views_freq[str(views[i])]])
  50.  
  51.        
  52.         freqs.sort(cmp=lambda (x1, y1, z1), (x2, y2, z2): cmp(-z1, -z2) or cmp(x1, x2))
  53.        
  54.         #для AP@1, AR@1
  55.         recom_1 = freqs[0][1]
  56.         if recom_1 in buys:
  57.             prec_1 = 1
  58.             rec_1 = 1. / len(buys)
  59.         else:
  60.             prec_1 = 0
  61.             rec_1 = 0
  62.         prec_1_list.append(prec_1)
  63.         rec_1_list.append(rec_1)
  64.        
  65.         #для AP@5, AR@5
  66.         recom_5 = []
  67.         if len(views) < 5:
  68.             recom_5 = views
  69.             znam = 0
  70.             for j in range(len(views)):
  71.                 if recom_5[j] in buys:
  72.                     znam += 1
  73.             #prec_5 = float(znam) / len(views)
  74.             prec_5 = float(znam) / 5
  75.             rec_5 = float(znam) / len(buys)
  76.            
  77.         else:            
  78.             znam = 0
  79.             for j in range(5):
  80.                 recom_5.append(freqs[j][1])
  81.                 if recom_5[j] in buys:
  82.                     znam += 1
  83.             prec_5 = float(znam) / 5
  84.             rec_5 = float(znam) / len(buys)
  85.            
  86.         prec_5_list.append(prec_5)
  87.         rec_5_list.append(rec_5)  
  88.                
  89. ans1 = []
  90. ans1.append(np.array(rec_1_list).mean())
  91. ans1.append(np.array(prec_1_list).mean())
  92. ans1.append(np.array(rec_5_list).mean())
  93. ans1.append(np.array(prec_5_list).mean())
  94.  
  95. print ans1
  96.  
  97.  
  98. #2. Сортировка по просмотрам, на тестовых данных
  99.  
  100. prec_1_list = []
  101. prec_5_list = []
  102. rec_1_list = []
  103. rec_5_list = []
  104.  
  105. for line in data_test:
  106.     views, buys = line.strip().split(';')
  107.     views = views.split(',')
  108.     buys = buys.split(',')
  109.     if buys[0] != '':
  110.         views = np.unique(np.array(views))
  111.        
  112.         freqs=[]
  113.         views = list(views)
  114.         for i in range(len(views)):
  115.             if views[i] in views_freq:
  116.                 freqs.append([i, views[i], views_freq[str(views[i])]])
  117.             else:
  118.                 freqs.append([i, views[i], 0])
  119.  
  120.         if freqs != []:
  121.             freqs.sort(cmp=lambda (x1, y1, z1), (x2, y2, z2): cmp(-z1, -z2) or cmp(x1, x2))
  122.        
  123.         #для AP@1, AR@1
  124.             recom_1 = freqs[0][1]
  125.             if recom_1 in buys:
  126.                 prec_1 = 1
  127.                 rec_1 = 1. / len(buys)
  128.             else:
  129.                 prec_1 = 0
  130.                 rec_1 = 0
  131.             prec_1_list.append(prec_1)
  132.             rec_1_list.append(rec_1)
  133.  
  134.  
  135.             #для AP@5, AR@5
  136.             #recom_5 = []
  137.             znam = 0
  138.             for j in range(5):
  139.                 if j < len(freqs):
  140.                     #recom_5.append(freqs[j][1])
  141.                     if freqs[j][1] in buys:
  142.                         znam += 1
  143.             prec_5 = float(znam) / 5
  144.             rec_5 = float(znam) / len(buys)
  145.  
  146.             prec_5_list.append(prec_5)
  147.             rec_5_list.append(rec_5)
  148.  
  149.        
  150. ans2 = []
  151. ans2.append(np.array(rec_1_list).mean())
  152. ans2.append(np.array(prec_1_list).mean())
  153. ans2.append(np.array(rec_5_list).mean())
  154. ans2.append(np.array(prec_5_list).mean())
  155.  
  156. print ans2
  157.  
  158.  
  159. # 3. Сортировка по покупкам, на тренировочных данных
  160.  
  161. prec_1_list = []
  162. prec_5_list = []
  163. rec_1_list = []
  164. rec_5_list = []
  165.  
  166. for line in data_train:
  167.     views, buys = line.strip().split(';')
  168.     views = views.split(',')
  169.     buys = buys.split(',')
  170.     if buys[0] != '':
  171.         views = np.unique(np.array(views))
  172.        
  173.         freqs=[]
  174.         views = list(views)
  175.         for i in range(len(views)):
  176.             if views[i] in buys_freq:
  177.                 freqs.append([i, views[i], buys_freq[str(views[i])]])
  178.             #else:
  179.                 #freqs.append([i, views[i], 0])
  180.  
  181.         #print freqs
  182.         if freqs != []:
  183.             freqs.sort(cmp=lambda (x1, y1, z1), (x2, y2, z2): cmp(-z1, -z2) or cmp(x1, x2))
  184.        
  185.         #для AP@1, AR@1
  186.             recom_1 = freqs[0][1]
  187.             if recom_1 in buys:
  188.                 prec_1 = 1
  189.                 rec_1 = 1. / len(buys)
  190.             else:
  191.                 prec_1 = 0
  192.                 rec_1 = 0
  193.             prec_1_list.append(prec_1)
  194.             rec_1_list.append(rec_1)
  195.  
  196.  
  197.             #для AP@5, AR@5
  198.             recom_5 = []
  199.             znam = 0
  200.             for j in range(5):
  201.                 if j < len(freqs):
  202.                     recom_5.append(freqs[j][1])
  203.                     if freqs[j][1] in buys:
  204.                         znam += 1
  205.             prec_5 = float(znam) / 5
  206.             rec_5 = float(znam) / len(buys)
  207.  
  208.             prec_5_list.append(prec_5)
  209.             rec_5_list.append(rec_5)
  210.  
  211.        
  212. ans3 = []
  213. ans3.append(np.array(rec_1_list).mean())
  214. ans3.append(np.array(prec_1_list).mean())
  215. ans3.append(np.array(rec_5_list).mean())
  216. ans3.append(np.array(prec_5_list).mean())
  217.  
  218. print ans3
  219.  
  220.  
  221. # 4. Сортировка по покупкам, на тестовых данных
  222.  
  223.  
  224. prec_1_list = []
  225. prec_5_list = []
  226. rec_1_list = []
  227. rec_5_list = []
  228.  
  229. count = 0
  230. for line in data_test:
  231.  
  232.     views, buys = line.strip().split(';')
  233.     views = views.split(',')
  234.     buys = buys.split(',')
  235.     if buys[0] != '':
  236.         count += 1
  237.         views = np.unique(np.array(views))
  238.         buys = np.unique(np.array(buys))
  239.        
  240.         freqs=[]
  241.         views = list(views)
  242.         for i in range(len(views)):
  243.             if views[i] in buys_freq:
  244.                 freqs.append([i, views[i], buys_freq[str(views[i])]])
  245.             else:    
  246.                 if views[i] not in views_freq:    
  247.                     freqs.append([i, views[i], 0])
  248.  
  249.         if freqs != []:
  250.             freqs.sort(cmp=lambda (x1, y1, z1), (x2, y2, z2): cmp(-z1, -z2) or cmp(x1, x2))
  251.             #freqs.sort(key = lambda (x1,y1,z1): -z1)
  252.        
  253.         #для AP@1, AR@1
  254.             recom_1 = freqs[0][1]
  255.             if recom_1 in buys:
  256.                 prec_1 = 1.
  257.                 rec_1 = 1. / len(buys)
  258.             else:
  259.                 prec_1 = 0.
  260.                 rec_1 = 0.
  261.             prec_1_list.append(prec_1)
  262.             rec_1_list.append(rec_1)
  263.  
  264.  
  265.         #для AP@5, AR@5
  266.             recom_5 = []
  267.             znam = 0.
  268.             for j in range(5):
  269.                 if j < len(freqs):
  270.                     recom_5.append(freqs[j][1])
  271.                     if freqs[j][1] in buys:
  272.                         znam += 1
  273.             prec_5 = float(znam) / 5
  274.             rec_5 = float(znam) / len(buys)
  275.  
  276.             prec_5_list.append(prec_5)
  277.             rec_5_list.append(rec_5)
  278.  
  279.        
  280. ans4 = []
  281. ans4.append(np.array(rec_1_list).mean())
  282. ans4.append(np.array(prec_1_list).mean())
  283. ans4.append(np.array(rec_5_list).mean())
  284. ans4.append(np.array(prec_5_list).mean())
  285.  
  286. print ans4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement