Advertisement
Guest User

loadsvm.py

a guest
Apr 29th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 21.12 KB | None | 0 0
  1. import numpy as np
  2. import Image
  3. import theano
  4. # goran = 0 .....  georgi =  1 ..... gorjan  = 2 ..... ivan = 3
  5. def normalize(x):
  6.     x_norm = x
  7.     num_col = x.shape[1]
  8.     for i in range(1,num_col):
  9.         x_norm[:, i] = (x_norm[:, i] - np.mean(x[:, i]))/np.std(x[:, i])
  10.     return x_norm
  11.  
  12. def one_hot(x,n):
  13.     if type(x) == list:
  14.         x = np.array(x)
  15.     x = x.flatten()
  16.     o_h = np.zeros((len(x),n))
  17.     o_h[np.arange(len(x)),x] = 1
  18.     return o_h
  19.  
  20. def data():
  21.     n = 9
  22.     brojnesto = 0
  23.     kolkuceka =0
  24.     kt = 0
  25.     kolkulevo = kolkudesno = kolkugore = kolkudole = 0
  26.     kolkutrening = 0
  27.     rastprva = 0
  28.     vkupnovreme = 0
  29.     vremedesno = vremelevo = vremegore = vremedole = 1
  30.     brzina = brojac = 0
  31.     agolminus = agolplus= 0
  32.     brojacgoran = brojacgeorgi = brojacgorjan = brojacivan =0
  33.     brgore = brdole = brdesno = brlevo = 1
  34.     trX = np.zeros([959, n])
  35.     trY = np.zeros([959],dtype=np.int8)
  36.     teX = np.zeros([192, n])
  37.     teY = np.zeros([192],dtype=np.int8)
  38.     lines = [line.rstrip('\n') for line in open('hw2_mouse_data.txt')]
  39.     for i in range(0,len(lines)-1):
  40.         linei = lines[i]
  41.         linei = linei[1:len(linei) - 1]
  42.         splitovano = linei.split(', ')
  43.         vlezi = np.asarray(splitovano)
  44.         if vlezi[0] == 'Goran':
  45.             prva = lines[i+1]
  46.             prva = prva[1:len(prva) - 1]
  47.             splitprva = prva.split(', ')
  48.             prva = np.asarray(splitprva, dtype=float)
  49.             brojacgoran += 1
  50.             izlez = 0
  51.             i = i +1
  52.             vlez = lines[i]
  53.             vlez = vlez[1:len(vlez) - 1]
  54.             splitovano = vlez.split(', ')
  55.             vlez = np.asarray(splitovano)
  56.             while len(vlez)> 1:
  57.                 line1 = lines[i]
  58.                 line1 = line1[1:len(line1) -1]
  59.                 splitovano = line1.split(', ')
  60.                 line1 = np.asarray(splitovano, dtype=float)
  61.                 i = i+1
  62.                 if i > (len(lines) - 1):
  63.                     break
  64.                 pom = lines[i]
  65.                 pom = pom[1:len(pom)-1]
  66.                 splitovano = pom.split(', ')
  67.                 pom = np.asarray(splitovano)
  68.                 if len(pom) >1:
  69.                     line2 = lines[i]
  70.                     line2 = line2[1:len(line2) - 1]
  71.                     splitovano = line2.split(', ')
  72.                     line2 = np.asarray(splitovano, dtype=float)
  73.                 else:
  74.                     break
  75.                     vlez = pom
  76.  
  77.                 x_razlika = line1[0] - line2[0]
  78.                 y_razlika = line1[1] - line2[1]
  79.                 rastprva += np.sqrt((prva[0] - line1[0])**2 + (prva[1] - line1[1])**2)
  80.                 if x_razlika:
  81.                     agol= np.arctan(np.abs(y_razlika)/np.abs(x_razlika))
  82.                 else: agol = 1.57079623
  83.                 if (x_razlika >= 0 and y_razlika >= 0) or (x_razlika <= 0 and y_razlika <= 0):
  84.                     agolplus += agol
  85.  
  86.                 elif (x_razlika >=0 and y_razlika <=0) or (x_razlika<=0 and y_razlika>= 0):
  87.                     agolminus += agol
  88.  
  89.                 vreme = line2[2]
  90.                 if x_razlika > 0:
  91.                     kolkulevo += np.abs(x_razlika)
  92.                     vremelevo += vreme
  93.                     brlevo += 1
  94.                 if x_razlika < 0:
  95.                     kolkudesno += np.abs(x_razlika)
  96.                     vremedesno += vreme
  97.                     brdesno += 1
  98.                 if y_razlika > 0:
  99.                     kolkudole += np.abs(y_razlika)
  100.                     vremedole += vreme
  101.                     brdole += 1
  102.                 if y_razlika < 0:
  103.                     kolkugore += np.abs(y_razlika)
  104.                     vremegore += vreme
  105.                     brgore += 1
  106.                 brzina += np.sqrt(x_razlika ** 2 + y_razlika ** 2) / float(vreme)
  107.                 if vreme < 100:
  108.                     vkupnovreme += vreme
  109.                 else:
  110.                     vkupnovreme += 1
  111.                     kolkuceka +=1
  112.                 kolkutrening += 1
  113.  
  114.             brzinalevo = float(kolkulevo)/ float(vremelevo)
  115.             brzinadesno = float(kolkudesno) / float(vremedesno)
  116.             brzinagore = float(kolkugore) / float(vremegore)
  117.             brzinadole = float(kolkudole) / float(vremedole)
  118.             brzinalevo = float(brzinalevo) / float(brlevo)
  119.             brzinadesno = float(brzinadesno) / float(brdesno)
  120.             brzinagore = float(brzinagore) / float(brgore)
  121.             brzinadole = float(brzinadole) / float(brdole)
  122.             brzina = float(brzina) / float(kolkutrening)
  123.             rastprva = float(rastprva) / float(kolkutrening)
  124.             if kolkulevo:
  125.                 kolkulevo = float(kolkulevo) / float(brlevo)
  126.             if kolkudesno:
  127.                 kolkudesno = float(kolkudesno) / float(brdesno)
  128.             if kolkugore:
  129.                 kolkugore = float(kolkugore) / float(brgore)
  130.             if kolkudole:
  131.                 kolkudole = float(kolkudole) / float(brdole)
  132.             prosecnovreme = float(vkupnovreme) / float(kolkutrening)
  133.  
  134.             zabrzuvanje = float(brzina) / float(prosecnovreme)
  135.             agolplus = float(agolplus)/ float(kolkutrening)
  136.             agolminus = float(agolminus) / float(kolkutrening)
  137.             #brzinahorizontalno = float(brzinalevo + brzinadesno ) / 2.0
  138.             #brzinavertikalno = float(brzinagore + brzinadole ) / 2.0
  139.  
  140.             #print agolplus, agolminus
  141.             niza = np.asarray(
  142.                 [kolkugore, kolkudole, kolkulevo, kolkudesno,brzina, np.sqrt(prosecnovreme), kolkuceka, agolplus,agolminus])
  143.             if brojnesto %6  != 0:
  144.                 trX[brojac] = niza
  145.                 trY[brojac] = izlez
  146.                 brojac +=1
  147.                 brojnesto += 1
  148.             else:
  149.                 teX[kt] = niza
  150.                 teY[kt] = izlez
  151.                 kt += 1
  152.                 brojnesto +=1
  153.  
  154.             brzina = kolkutrening= vkupnovreme = agol =agolplus = agolminus =0
  155.             vremelevo = vremedesno = vremegore = vremedole = 1
  156.             kolkulevo = kolkudesno = kolkugore = kolkudole = rastprva = kolkuceka = 0
  157.             brdole = brgore = brdesno = brlevo = 1
  158.         if vlezi[0] == 'Georgi':
  159.             prva = lines[i + 1]
  160.             prva = prva[1:len(prva) - 1]
  161.             splitprva = prva.split(', ')
  162.             prva = np.asarray(splitprva, dtype=float)
  163.             brojacgeorgi += 1
  164.             izlez = 1
  165.             i = i + 1
  166.             vlez = lines[i]
  167.             vlez = vlez[1:len(vlez) - 1]
  168.             splitovano = vlez.split(', ')
  169.             vlez = np.asarray(splitovano)
  170.             while len(vlez) > 1:
  171.                 line1 = lines[i]
  172.                 line1 = line1[1:len(line1) - 1]
  173.                 splitovano = line1.split(', ')
  174.                 line1 = np.asarray(splitovano,dtype=float)
  175.                 i = i + 1
  176.                 if i > (len(lines) - 1):
  177.                     break
  178.                 pom = lines[i]
  179.                 pom = pom[1:len(pom) - 1]
  180.                 splitovano = pom.split(', ')
  181.                 pom = np.asarray(splitovano)
  182.                 if len(pom) > 1:
  183.                     line2 = lines[i]
  184.                     line2 = line2[1:len(line2) - 1]
  185.                     splitovano = line2.split(', ')
  186.                     line2 = np.asarray(splitovano,dtype=float)
  187.                 else:
  188.                     break
  189.                     vlez = pom
  190.                 x_razlika = line1[0] - line2[0]
  191.                 y_razlika = line1[1] - line2[1]
  192.                 rastprva += np.sqrt((prva[0] - line1[0]) ** 2 + (prva[1] - line1[1]) ** 2)
  193.                 vreme = line2[2]
  194.                 if x_razlika > 0:
  195.                     vremelevo += vreme
  196.                     kolkulevo += np.abs(x_razlika)
  197.                     brlevo += 1
  198.                 if x_razlika < 0:
  199.                     vremedesno += vreme
  200.                     kolkudesno += np.abs(x_razlika)
  201.                     brdesno += 1
  202.                 if y_razlika > 0:
  203.                     vremedole += vreme
  204.                     kolkudole += np.abs(y_razlika)
  205.                     brdole += 1
  206.                 if y_razlika < 0:
  207.                     vremegore += vreme
  208.                     kolkugore += np.abs(y_razlika)
  209.                     brgore += 1
  210.                 brzina += np.sqrt(x_razlika**2 + y_razlika**2 )/float(vreme)
  211.                 if vreme < 100:
  212.                     vkupnovreme += vreme
  213.                 else:
  214.                     vkupnovreme += 1
  215.                     kolkuceka += 1
  216.                 kolkutrening += 1
  217.                 if x_razlika:
  218.                     agol = np.arctan(np.abs(y_razlika) / np.abs(x_razlika))
  219.                 else:
  220.                     agol = 1.57079623
  221.                 if (x_razlika >= 0 and y_razlika >= 0) or (x_razlika <= 0 and y_razlika <= 0):
  222.                     agolplus += agol
  223.  
  224.                 elif (x_razlika >= 0 and y_razlika <= 0) or (x_razlika <= 0 and y_razlika >= 0):
  225.                     agolminus += agol
  226.             brzinalevo = float(kolkulevo) / float(vremelevo)
  227.             brzinadesno = float(kolkudesno) / float(vremedesno)
  228.             brzinagore = float(kolkugore) / float(vremegore)
  229.             brzinadole = float(kolkudole) / float(vremedole)
  230.             brzinalevo = float(brzinalevo) / float(brlevo)
  231.             brzinadesno = float(brzinadesno) / float(brdesno)
  232.             brzinagore = float(brzinagore) / float(brgore)
  233.             brzinadole = float(brzinadole) / float(brdole)
  234.             brzina = float(brzina) / float(kolkutrening)
  235.             rastprva = float(rastprva) / float(kolkutrening)
  236.             if kolkulevo:
  237.                 kolkulevo = float(kolkulevo) / float(brlevo)
  238.             if kolkudesno:
  239.                 kolkudesno = float(kolkudesno) / float(brdesno)
  240.             if kolkugore:
  241.                 kolkugore = float(kolkugore) / float(brgore)
  242.             if kolkudole:
  243.                 kolkudole = float(kolkudole) / float(brdole)
  244.             prosecnovreme = float(vkupnovreme) / float(kolkutrening)
  245.             zabrzuvanje = float(brzina) / float(prosecnovreme)
  246.             agolplus /= float(kolkutrening)
  247.             agolminus /= float(kolkutrening)
  248.             niza = np.asarray(
  249.                 [kolkugore, kolkudole, kolkulevo, kolkudesno,brzina, np.sqrt(prosecnovreme), kolkuceka, agolplus, agolminus])
  250.             if brojnesto % 6 != 0:
  251.                 trX[brojac] = niza
  252.                 trY[brojac] = izlez
  253.                 brojac += 1
  254.                 brojnesto += 1
  255.             else:
  256.                 teX[kt] = niza
  257.                 teY[kt] = izlez
  258.                 kt += 1
  259.                 brojnesto +=1
  260.             agolplus = agolminus = agol = kolkulevo = kolkudesno = kolkugore = kolkudole = 0
  261.             vremelevo = vremedesno = vremegore = vremedole = 1
  262.             brzina = kolkutrening =vkupnovreme=rastprva= kolkuceka =  0
  263.             brdole = brgore = brdesno = brlevo = 1
  264.         if vlezi[0] == 'Gorjan':
  265.             prva = lines[i + 1]
  266.             prva = prva[1:len(prva) - 1]
  267.             splitprva = prva.split(', ')
  268.             prva = np.asarray(splitprva, dtype=float)
  269.             brojacgorjan += 1
  270.             izlez = 2
  271.             i = i + 1
  272.             vlez = lines[i]
  273.             vlez = vlez[1:len(vlez) - 1]
  274.             splitovano = vlez.split(', ')
  275.             vlez = np.asarray(splitovano)
  276.             while len(vlez) > 1:
  277.                 line1 = lines[i]
  278.                 line1 = line1[1:len(line1) - 1]
  279.                 splitovano = line1.split(', ')
  280.                 line1 = np.asarray(splitovano,dtype=float)
  281.                 i = i + 1
  282.                 if i > (len(lines) - 1):
  283.                     break
  284.                 pom = lines[i]
  285.                 pom = pom[1:len(pom) - 1]
  286.                 splitovano = pom.split(', ')
  287.                 pom = np.asarray(splitovano)
  288.                 if len(pom) > 1:
  289.                     line2 = lines[i]
  290.                     line2 = line2[1:len(line2) - 1]
  291.                     splitovano = line2.split(', ')
  292.                     line2 = np.asarray(splitovano,dtype=float)
  293.                 else:
  294.                     break
  295.                     vlez = pom
  296.                 x_razlika = line1[0] - line2[0]
  297.                 y_razlika = line1[1] - line2[1]
  298.                 rastprva += np.sqrt((prva[0] - line1[0]) ** 2 + (prva[1] - line1[1]) ** 2)
  299.                 vreme = line2[2]
  300.                 if x_razlika > 0:
  301.                     kolkulevo += np.abs(x_razlika)
  302.                     vremelevo += vreme
  303.                     brlevo += 1
  304.                 if x_razlika < 0:
  305.                     kolkudesno += np.abs(x_razlika)
  306.                     vremedesno += vreme
  307.                     brdesno += 1
  308.                 if y_razlika > 0:
  309.                     vremedole += vreme
  310.                     kolkudole += np.abs(y_razlika)
  311.                     brdole += 1
  312.                 if y_razlika < 0:
  313.                     vremegore += vreme
  314.                     kolkugore += np.abs(y_razlika)
  315.                     brgore += 1
  316.                 brzina += np.sqrt(x_razlika ** 2 + y_razlika ** 2) / float(vreme)
  317.                 kolkutrening += 1
  318.                 if x_razlika:
  319.                     agol = np.arctan(np.abs(y_razlika) / np.abs(x_razlika))
  320.                 else:
  321.                     agol = 1.57079623
  322.                 if (x_razlika >= 0 and y_razlika >= 0) or (x_razlika <= 0 and y_razlika <= 0):
  323.                     agolplus += agol
  324.  
  325.                 elif (x_razlika >= 0 and y_razlika <= 0) or (x_razlika <= 0 and y_razlika >= 0):
  326.                     agolminus += agol
  327.                 if vreme < 100:
  328.                     vkupnovreme += vreme
  329.                 else:
  330.                     vkupnovreme += 1
  331.                     kolkuceka +=1
  332.             brzinalevo = float(kolkulevo) / float(vremelevo)
  333.             brzinadesno = float(kolkudesno) / float(vremedesno)
  334.             brzinagore = float(kolkugore) / float(vremegore)
  335.             brzinadole = float(kolkudole) / float(vremedole)
  336.             brzinalevo = float(brzinalevo) / float(brlevo)
  337.             brzinadesno = float(brzinadesno) / float(brdesno)
  338.             brzinagore = float(brzinagore) / float(brgore)
  339.             brzinadole = float(brzinadole) / float(brdole)
  340.             brzina = float(brzina) / float(kolkutrening)
  341.             rastprva = float(rastprva) / float(kolkutrening)
  342.             if kolkulevo:
  343.                 kolkulevo = float(kolkulevo) / float(brlevo)
  344.             if kolkudesno:
  345.                 kolkudesno = float(kolkudesno) / float(brdesno)
  346.             if kolkugore:
  347.                 kolkugore = float(kolkugore) / float(brgore)
  348.             if kolkudole:
  349.                 kolkudole = float(kolkudole) / float(brdole)
  350.             prosecnovreme = float(vkupnovreme) / float(kolkutrening)
  351.             zabrzuvanje = float(brzina) / float(prosecnovreme)
  352.             agolplus /= float(kolkutrening)
  353.             agolminus /= float(kolkutrening)
  354.             niza = np.asarray(
  355.                 [kolkugore, kolkudole, kolkulevo, kolkudesno,  brzina, np.sqrt(prosecnovreme), kolkuceka, agolplus, agolminus])
  356.             if brojnesto % 6 != 0:
  357.                 trX[brojac] = niza
  358.                 trY[brojac] = izlez
  359.                 brojac += 1
  360.                 brojnesto +=1
  361.             else:
  362.                 teX[kt] = niza
  363.                 teY[kt] = izlez
  364.                 kt += 1
  365.                 brojnesto +=1
  366.             kolkulevo = kolkudesno = kolkugore = kolkudole = rastprva= 0
  367.             brzina = kolkutrening = vkupnovreme= agol = agolminus= agolplus = kolkuceka = 0
  368.             vremelevo = vremedesno = vremegore = vremedole = 1
  369.             brdole = brgore = brdesno = brlevo = 1
  370.  
  371.         if vlezi[0] == 'Ivan':
  372.             prva = lines[i + 1]
  373.             prva = prva[1:len(prva) - 1]
  374.             splitprva = prva.split(', ')
  375.             prva = np.asarray(splitprva, dtype=float)
  376.             brojacivan += 1
  377.             izlez = 3
  378.             i = i + 1
  379.             vlez = lines[i]
  380.             vlez = vlez[1:len(vlez) - 1]
  381.             splitovano = vlez.split(', ')
  382.             vlez = np.asarray(splitovano)
  383.             while len(vlez) > 1:
  384.                 line1 = lines[i]
  385.                 line1 = line1[1:len(line1) - 1]
  386.                 splitovano = line1.split(', ')
  387.                 line1 = np.asarray(splitovano,dtype=float)
  388.                 i = i + 1
  389.                 if i > (len(lines)-1):
  390.                     break
  391.                 pom = lines[i]
  392.                 pom = pom[1:len(pom) - 1]
  393.                 splitovano = pom.split(', ')
  394.                 pom = np.asarray(splitovano)
  395.                 if len(pom) > 1:
  396.                     line2 = lines[i]
  397.                     line2 = line2[1:len(line2) - 1]
  398.                     splitovano = line2.split(', ')
  399.                     line2 = np.asarray(splitovano,dtype=float)
  400.                 else:
  401.                     break
  402.                     vlez = pom
  403.                 x_razlika = line1[0] - line2[0]
  404.                 y_razlika = line1[1] - line2[1]
  405.                 rastprva += np.sqrt((prva[0] - line1[0]) ** 2 + (prva[1] - line1[1]) ** 2)
  406.                 vreme = line2[2]
  407.                 if x_razlika > 0:
  408.                     kolkulevo += np.abs(x_razlika)
  409.                     vremelevo += vreme
  410.                     brlevo += 1
  411.                 if x_razlika < 0:
  412.                     vremedesno += vreme
  413.                     kolkudesno += np.abs(x_razlika)
  414.                     brdesno += 1
  415.                 if y_razlika > 0:
  416.                     vremedole += vreme
  417.                     kolkudole += np.abs(y_razlika)
  418.                     brdole += 1
  419.                 if y_razlika < 0:
  420.                     vremegore += vreme
  421.                     kolkugore += 1
  422.                     brgore += 1
  423.                 brzinalevo = float(kolkulevo) / float(vremelevo)
  424.                 brzinadesno = float(kolkudesno) / float(vremedesno)
  425.                 brzinagore = float(kolkugore) / float(vremegore)
  426.                 brzinadole = float(kolkudole) / float(vremedole)
  427.                 brzinalevo = float(brzinalevo) / float(brlevo)
  428.                 brzinadesno = float(brzinadesno) / float(brdesno)
  429.                 brzinagore = float(brzinagore) / float(brgore)
  430.                 brzinadole = float(brzinadole) / float(brdole)
  431.                 brzina += np.sqrt(x_razlika**2 + y_razlika**2) / float(vreme)
  432.                 if vreme < 100:
  433.                     vkupnovreme += vreme
  434.                 else:
  435.                     vkupnovreme += 1
  436.                     kolkuceka +=1
  437.                 kolkutrening += 1
  438.                 if x_razlika:
  439.                     agol = np.arctan(np.abs(y_razlika) / np.abs(x_razlika))
  440.                 else:
  441.                     agol = 1.57079623
  442.                 if (x_razlika >= 0 and y_razlika >= 0) or (x_razlika <= 0 and y_razlika <= 0):
  443.                     agolplus += agol
  444.  
  445.                 elif (x_razlika >= 0 and y_razlika <= 0) or (x_razlika <= 0 and y_razlika >= 0):
  446.                     agolminus += agol
  447.             brzina = float(brzina) / float(kolkutrening)
  448.             if kolkulevo:
  449.                 kolkulevo = float(kolkulevo) / float(brlevo)
  450.             if kolkudesno:
  451.                 kolkudesno = float(kolkudesno) / float(brdesno)
  452.             if kolkugore:
  453.                 kolkugore = float(kolkugore) / float(brgore)
  454.             if kolkudole:
  455.                 kolkudole = float(kolkudole) / float(brdole)
  456.             prosecnovreme = float(vkupnovreme) / float(kolkutrening)
  457.             zabrzuvanje = float(brzina) / float(prosecnovreme)
  458.             agolplus /= float(kolkutrening)
  459.             agolminus /= float(kolkutrening)
  460.             rastprva = float(rastprva) / float(kolkutrening)
  461.             niza = np.asarray(
  462.                 [kolkugore, kolkudole, kolkulevo, kolkudesno,brzina, np.sqrt(prosecnovreme), kolkuceka, agolplus, agolminus])
  463.  
  464.             if brojnesto %6 != 0:
  465.                 trX[brojac] = niza
  466.                 trY[brojac] = izlez
  467.                 brojac += 1
  468.                 brojnesto += 1
  469.             else:
  470.                 teX[kt] = niza
  471.                 teY[kt] = izlez
  472.                 kt += 1
  473.                 brojnesto +=1
  474.             kolkulevo = kolkudesno=agolminus= agolplus= kolkugore = kolkudole = 0
  475.             brdole = brgore = brdesno = brlevo = 1
  476.             brzina = kolkutrening = agol = vkupnovreme=rastprva= kolkuceka= 0
  477.             vremelevo = vremedesno = vremegore = vremedole = 1
  478.     pom1 = trX
  479.     pomtest1 = teX
  480.     trX = np.ones([959,n+1])
  481.     trX[:,1:959] = pom1
  482.     teX = np.ones([192, n + 1])
  483.     teX[:, 1:192] = pomtest1
  484.     trX = normalize(trX)
  485.     teX = normalize(teX)
  486.     #trY = one_hot(trY, 4) #one hot ne treba za svm
  487.     #teY = one_hot(teY, 4) # pusti ja ednas ovaa za da vidis kakov e cel data set ( posledna kolona izlez)
  488.     #ovde se site koloni normalizirani i dava 55
  489.     #ako sakas prva kolona da ne normaliziras samo najgore u funkcijata normalize staj da ne pocnue od 1
  490.     #  for i in range(1,num_col): od 2 staj go i dava 65%
  491.     #i koj menjas broj na parametri, samo najgore promenlivata "n" smeni ja namesteno e nisto da ne menjavas u svm.py samoto da si znae, znaci
  492.     #samo n na broj na features
  493.  
  494.     for asd,i in zip(trX, trY):
  495.         print asd[1],",",asd[2],",",asd[3],",",asd[4],",",asd[5],",",asd[6],",",asd[7],",",asd[8],",",asd[9],",",i
  496.     return trX, teX, trY, teY, n
  497.  
  498. data()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement