In [13]:
import matplotlib.pyplot as plt
import os
import pandas as pd
import numpy as np
from tqdm import tqdm
import pickle

In [14]:
# preprocessing functions
def one_hot (sentence):
    
    vocabulary = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я',
              'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я',
             '!','@','#','$','%','^','&','*','(',')',':',';','/',',','.','%','№','?','~','-','+','=',' ',
              'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
             'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    result = np.zeros((1,len(vocabulary)))
    for char in sentence:
        if char in vocabulary:
            vector = np.zeros((1,len(vocabulary)))
            vector[0, vocabulary.index(char)] = 1
            result = np.concatenate((result, vector)) 
            
    result = np.delete(result, (0), axis=0)
    #encoded = one_hot(sentence)
    num_of_lett = 300
    if len(result)<num_of_lett:
        result = np.concatenate((result, np.zeros((num_of_lett-result.shape[0],result.shape[1]))))
    if len(result)>num_of_lett:
        result = result[:num_of_lett,:]
    return result
            
def char_to_vocab (sentence):
    vocabulary = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я',
              'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я',
             '!','@','#','$','%','^','&','*','(',')',':',';','/',',','.','%','№','?','~','-','+','=',' ',
              'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
             'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    result = []
    for char in sentence:
        if char in vocabulary:
            result.append(vocabulary.index(char)+1)
            
    result = np.array(result)
    #encoded = one_hot(sentence)
    num_of_lett = 300
    if len(result)<num_of_lett:
        result = np.concatenate((result, np.zeros(num_of_lett-result.shape[0])))
    if len(result)>num_of_lett:
        result = result[:num_of_lett]
    return list(result)
#char_to_vocab(X_train[1])
#X_train[0]

In [11]:
data = pd.read_csv('Dataset/dataset_raw.csv')
plt.hist(data.likes,bins = 150)
plt.show()
data.likes.mean()
data[data.likes < 10000].


Out[11]:
Unnamed: 0 date likes photos texts
0 0 1508585255 1976 https://pp.userapi.com/c7002/v7002908/3a5c5/yC... Один из самых интересных пунктов в изучении ин...
1 1 1508580588 1465 https://pp.userapi.com/c7002/v7002604/3aff0/Jt... Специалисты по кибербезопасности рассказывают ...
2 2 1508576733 6350 https://pp.userapi.com/c7002/v7002044/3a8ae/YB... Дамы и господа, представляем вам главу комитет...
3 3 1508573167 6113 https://pp.userapi.com/c7002/v7002060/3a76a/gx... Рисунок Трампа был продан на аукционе за $16 0...
5 5 1508564728 4289 https://pp.userapi.com/c7002/v7002106/3ac9b/VE... Специалисты Стэнфордского университета создали...
6 6 1508562082 5250 https://pp.userapi.com/c7002/v7002099/3a751/Lf... Квартиру дочери Собянина арестовали за долги. ...
7 7 1508536796 994 https://pp.userapi.com/c837231/v837231758/55f2... Павел Додонов — гитарист, электронный музыкант...
8 8 1508534250 776 https://pp.userapi.com/c841222/v841222297/2ad3... • ЦБ введёт правила для выдачи кредитов выше 7...
9 9 1508532746 4539 https://pp.userapi.com/c7002/v7002002/39e72/yw... На православном форуме в Краснодаре рассказали...
10 10 1508532027 3800 https://pp.userapi.com/c639224/v639224297/5249... Биржевой курс биткоина обновил исторический ре...
11 11 1508522468 3159 https://pp.userapi.com/c7002/v7002589/39e09/e8... Ну что, Лентач, вот и подошла к концу очередна...
12 12 1508520844 1359 https://pp.userapi.com/c837237/v837237692/5d5b... У Бердянську пам'ятник Дзержинському переробил...
13 13 1508517900 806 https://pp.userapi.com/c841529/v841529980/2dbf... • В Польше мужчина с ножом напал на посетителе...
14 14 1508516271 2883 https://pp.userapi.com/c841430/u415363814/vide... Губернатору Ленинградской области представили ...
15 15 1508512474 4147 https://pp.userapi.com/c7002/v7002656/3a489/_x... Тут из Киева долетели вести, что Наталья Покло...
16 16 1508509388 7582 https://pp.userapi.com/c7002/v7002313/3ae27/RG... В школах ХМАО пройдут тесты по выявлению нарко...
17 17 1508507756 4395 https://pp.userapi.com/c7002/v7002847/3a139/VB... Глава Сбербанка, выступая на Всемирном фестива...
18 18 1508505000 6554 https://pp.userapi.com/c7002/v7002220/3aa66/uD... Иллюзиониста Дэвида Блейна обвинили в изнасило...
19 19 1508501756 3399 https://pp.userapi.com/c7002/v7002113/3b20a/0H... «Нам остается только драться» — владелица успе...
20 20 1508500812 1033 https://pp.userapi.com/c841522/v841522577/2d80... • Суд признал новосибирского экс-губернатора в...
21 21 1508498188 2565 https://pp.userapi.com/c7002/v7002771/3a5fc/fX... Президиум ВАК рекомендовал оставить Мединскому...
22 22 1508494881 5400 https://pp.userapi.com/c7002/v7002850/3ae7b/de... Роспотребнадзор вновь запретил продажу «боярыш...
23 23 1508491009 3453 https://pp.userapi.com/c7002/v7002116/3a8a4/Z2... Судебные приставы теперь смогут задерживать до...
24 24 1508490015 756 https://pp.userapi.com/c639617/v639617843/5b21... • Правительство предложило в четыре раза увели...
26 26 1508484726 9117 https://pp.userapi.com/c7002/v7002996/3a4f8/mB... На Украине остановили джип с наркотиками и ору...
27 27 1508481551 6267 https://pp.userapi.com/c7002/v7002702/3a90e/pa... Правонарушения на дорогах теперь смогут фиксир...
28 28 1508478440 7295 https://pp.userapi.com/c7002/v7002765/3a5d5/4N... Учёные определили, как надо гладить людей, что...
29 29 1508475740 7766 https://pp.userapi.com/c7002/v7002666/3a98c/1L... Сегодня весь мир отмечает День повара.<br><br>...
30 30 1508447760 834 https://pp.userapi.com/c837139/v837139778/5be0... • В Пулково массово задерживаются рейсы; <br>•...
31 31 1508447132 3311 no_photo Глава поддержки «ВКонтакте» рассказала о том, ...
... ... ... ... ... ...
15958 15958 1442991928 7144 https://pp.userapi.com/c7002/v7002410/c95b/6uJ... В 2015 году от "селфи" погибло больше людей, ч...
15959 15959 1442988615 5244 https://pp.userapi.com/c7002/v7002731/c74e/PXS... Хакеры опубликовали переписку, в которой говор...
15960 15960 1442953512 2240 https://pp.userapi.com/c624228/v624228798/4a5a... Этот бородатый американец ирландского происхож...
15961 15961 1442952322 4475 https://pp.userapi.com/c7002/v7002445/c99e/in8... В больницах ОАЭ появились первые роботы-врачи<...
15962 15962 1442950458 3777 https://pp.userapi.com/c7002/v7002446/c359/yk1... Украина потребует от России $50 млрд компенсац...
15963 15963 1442946563 4101 https://pp.userapi.com/c7002/v7002831/c606/ZSj... Россия оказалась на 32 месте по индексу Робин ...
15964 15964 1442942865 4442 https://pp.userapi.com/c7002/v7002559/c819/Ey3... Сергей Пугачев, финансировавший в 1999 году пр...
15965 15965 1442940770 2363 https://pp.userapi.com/c7002/v7002757/c639/fz8... В Краснодаре девушку оштрафовали за известны...
15966 15966 1442935666 3182 https://pp.userapi.com/c543106/v543106780/7cea... Путин хочет ввести безвизовый режим для турис...
15967 15967 1442934133 717 https://pp.userapi.com/c543106/v543106563/8029... В Омске обрушился жилой дом; Совфед поддержал ...
15968 15968 1442930105 2740 https://pp.userapi.com/c543106/v543106780/7cd6... Мужик отсидел 20 лет за изнасилования и убийст...
15969 15969 1442923509 2267 https://pp.userapi.com/c543101/v543101001/716f...
15970 15970 1442921425 4531 https://pp.userapi.com/c543106/v543106638/7c0e... Норвегии предложили вступить в Евразийский эко...
15971 15971 1442919904 4556 https://pp.userapi.com/c543106/v543106638/7bff... Россия стала второй в мире по утечке конфиденц...
15972 15972 1442918626 4803 https://pp.userapi.com/c543106/v543106638/7c06... Репер Гуф арестован на 6 суток после того, как...
15973 15973 1442917146 3108 https://pp.userapi.com/c543106/v543106638/7bf7... В Госдуме хотят запретить передачу долгов колл...
15974 15974 1442912496 953 https://pp.userapi.com/c543106/v543106638/7be0... Россия и Израиль создадут рабочую группу для к...
15975 15975 1442910673 5733 https://pp.userapi.com/c543106/v543106638/7bd3... В Госдуму внесен законопроект о запрете продаж...
15976 15976 1442908511 2992 https://pp.userapi.com/c543106/v543106638/7bcb... Указы и резолюции Путина на сумму 893 млрд пов...
15977 15977 1442907324 4995 https://pp.userapi.com/c543106/v543106906/b71f... РПЦ на высшем уровне вступилась за мужика из Р...
15978 15978 1442905504 5311 https://pp.userapi.com/c543106/v543106906/b708... Компания из США выпустила "христианскую" винто...
15979 15979 1442902035 1152 https://pp.userapi.com/c627819/u11580906/video... Фильм Михалкова "Солнечный удар" выдвинули на ...
15980 15980 1442865968 1180 https://pp.userapi.com/c623423/v623423183/4b45... The Bloody Beetroots — псевдоним итальянского ...
15981 15981 1442863849 5317 https://pp.userapi.com/c543106/v543106906/b6ec... Жириновский утверждает, что воздух в его кабин...
15982 15982 1442859308 2936 https://pp.userapi.com/c543106/v543106711/1751... ВКонтакте заблокировал четыре из пяти запрещен...
15983 15983 1442856848 2772 https://pp.userapi.com/c543106/v543106780/7ca1... В Крыму через две недели могут закончиться зап...
15984 15984 1442854854 2223 https://pp.userapi.com/c543106/v543106882/a200... Подборка альтернатив Скайпу (который до сих по...
15985 15985 1442850802 4485 https://pp.userapi.com/c543106/v543106780/7c97... По данным Bloomberg, «утечка мозгов» из России...
15986 15986 1442847689 1021 https://pp.userapi.com/c543106/v543106711/1750... Рада зарегистрировала законопроект о легализац...
15987 15987 1442843831 1509 https://pp.userapi.com/c543106/v543106780/7c2a... Экс-сотрудника ГРУ осудили на 14 лет колонии з...

15025 rows × 5 columns


In [56]:
data.likes = data.likes/data.likes.max()

pic_names = os.listdir('Dataset/images/')
msk = np.random.rand(len(pic_names)) < 0.8
train_names = np.array(pic_names)[msk]
val_names = np.array(pic_names)[~msk]

msk = np.random.rand(len(val_names)) < 0.5
test_names = val_names[msk]
val_names = val_names[~msk]

print(train_names.shape)
print(val_names.shape)
print(test_names.shape)


(12643,)
(1520,)
(1551,)

In [57]:
#data_lett = pd.read_csv('Dataset/dataset_raw.csv')
X = data.texts.values

#np.isnan(np.nan)

X_test = []
y_test = []
id_test = []

for name in test_names:
    cache = data.iloc[int(name[:-4])]
    if type(cache.texts) == type('a'):
        id_test.append(name)
        X_test.append(cache.texts)
        y_test.append(cache.likes)

X_val = []
y_val = []
id_val = []
for name in val_names:
    cache = data.iloc[int(name[:-4])]
    if type(cache.texts) == type('a'):
        id_val.append(name)
        X_val.append(cache.texts)
        y_val.append(cache.likes)
        
X_train = []
y_train = []
id_train = []
for name in train_names:
    cache = data.iloc[int(name[:-4])]
    if type(cache.texts) == type('a'):
        id_train.append(name)
        X_train.append(cache.texts)
        y_train.append(cache.likes)
        
        
print('train dataset: '+str(len(id_train)))
print('val dataset: '+str(len(id_val)))
print('test dataset: '+str(len(id_test)))
# X_ = []
# y_ = []


# for i in range(len(X)):
#     if type(X[i])==type('a'):
#         X_.append(X[i])
#         y_.append(y[i])
        
# print(len(X_))
# print(len(y_))


train dataset: 12473
val dataset: 1497
test dataset: 1533

In [ ]:
len_X =[]
for i in X:
    len_X.append(len(i))
plt.hist(len_X, bins =100)
plt.show()

In [58]:
X_train_encoded = []
for sentence in tqdm(X_train):
    X_train_encoded.append(char_to_vocab(sentence))
#X_train_encoded = np.array(X_train_encoded)

X_val_encoded = []
for sentence in tqdm(X_val):
    X_val_encoded.append(char_to_vocab(sentence))
#X_val_encoded = np.array(X_val_encoded)

X_test_encoded = []
for sentence in tqdm(X_test):
    X_test_encoded.append(char_to_vocab(sentence))
#X_test_encoded = np.array(X_test_encoded)


100%|██████████| 12473/12473 [00:03<00:00, 3499.23it/s]
100%|██████████| 1497/1497 [00:00<00:00, 3508.47it/s]
100%|██████████| 1533/1533 [00:00<00:00, 3582.65it/s]

In [47]:
X_val_encoded


Out[47]:
array([[ 46.,   6.,  15., ...,  16.,  19.,  20.],
       [ 51.,  16.,  19., ...,   0.,   0.,   0.],
       [ 36.,  89.,  50., ...,  20.,  21.,   5.],
       ..., 
       [ 34.,  13.,   4., ...,   0.,   0.,   0.],
       [ 51.,  16.,  19., ...,   0.,   0.,   0.],
       [ 54.,  25.,   6., ...,   0.,   0.,   0.]])

In [59]:
data_test = {'id':id_test, 'texts':X_test, 'likes':y_test}
dataset_test = pd.DataFrame(data_test)
with open ('Dataset/dataset_test.pkl', 'wb') as f:
    pickle.dump(dataset_test, f)
#dataset_test.to_csv('Dataset/dataset_test.csv', encoding='utf-8')

data_val = {'id':id_val, 'texts':X_val, 'likes':y_val}
dataset_val = pd.DataFrame(data_val)
with open ('Dataset/dataset_val.pkl', 'wb') as f:
    pickle.dump(dataset_val, f)
#dataset_val.to_csv('Dataset/dataset_val.csv',encoding='utf-8')

data_train = {'id':id_train, 'texts':X_train, 'likes':y_train}
dataset_train = pd.DataFrame(data_train)
with open ('Dataset/dataset_train.pkl', 'wb') as f:
    pickle.dump(dataset_train, f)
#dataset_train.to_csv('Dataset/dataset_train.csv',encoding='utf-8')

In [52]:
dataset_train.texts.values[0]


Out[52]:
[116.0,
 103.0,
 96.0,
 94.0,
 101.0,
 108.0,
 89.0,
 90.0,
 103.0,
 93.0,
 89.0,
 116.0,
 98.0,
 107.0,
 112.0,
 90.0,
 111.0,
 94.0,
 108.0,
 89.0,
 89.0,
 108.0,
 105.0,
 90.0,
 92.0,
 94.0,
 86.0,
 107.0,
 104.0,
 92.0,
 100.0,
 86.0,
 17.0,
 18.0,
 16.0,
 6.0,
 12.0,
 20.0,
 89.0,
 16.0,
 20.0,
 89.0,
 2.0,
 29.0,
 3.0,
 26.0,
 6.0,
 4.0,
 16.0,
 89.0,
 21.0,
 25.0,
 1.0,
 19.0,
 20.0,
 15.0,
 10.0,
 12.0,
 1.0,
 89.0,
 4.0,
 18.0,
 21.0,
 17.0,
 17.0,
 29.0,
 89.0,
 117.0,
 101.0,
 98.0,
 103.0,
 100.0,
 86.0,
 89.0,
 53.0,
 16.0,
 14.0,
 1.0,
 89.0,
 38.0,
 6.0,
 13.0,
 16.0,
 15.0,
 4.0,
 1.0,
 81.0,
 91.0,
 107.0,
 91.0,
 107.0,
 36.0,
 18.0,
 6.0,
 14.0,
 33.0,
 89.0,
 12.0,
 16.0,
 19.0,
 14.0,
 16.0,
 19.0,
 1.0,
 89.0,
 10.0,
 89.0,
 13.0,
 32.0,
 2.0,
 3.0,
 10.0,
 67.0,
 91.0,
 107.0,
 91.0,
 107.0,
 53.0,
 18.0,
 1.0,
 5.0,
 10.0,
 24.0,
 10.0,
 16.0,
 15.0,
 15.0,
 29.0,
 11.0,
 89.0,
 69.0,
 18.0,
 1.0,
 5.0,
 10.0,
 16.0,
 13.0,
 6.0,
 15.0,
 20.0,
 1.0,
 25.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0]