Как кодировать IP-адреса в python? - PullRequest
0 голосов
/ 04 февраля 2020

Я новичок ie в ноутбуке Jupyter (и python). Это пример набора данных, который у меня есть:

Time    Source  Destination Protocol    Source port Dest port   User-Agent  Accept Encoding Length  Host    Full request URI    Request Method
04:29:02    172.31.64.26    23.219.88.136   HTTP    49454.0 80.0    Microsoft BITS/7.8  identity    333 img-s-msn-com.akamaized.net http://img-s-msn-com.akamaized.net/tenant/amp/...   GET
04:29:04    172.31.64.26    23.219.88.136   HTTP    49454.0 80.0    Microsoft BITS/7.8  identity    388 img-s-msn-com.akamaized.net http://img-s-msn-com.akamaized.net/tenant/amp/...   GET
04:30:43    172.31.64.26    23.219.88.136   HTTP    49458.0 80.0    Microsoft BITS/7.8  identity    332 img-s-msn-com.akamaized.net http://img-s-msn-com.akamaized.net/tenant/amp/...   GET
04:31:21    172.31.64.26    169.254.169.254 HTTP    49460.0 80.0    aws-sdk-go/1.12.20 (go1.9; windows; amd64)  gzip    202 169.254.169.254 http://169.254.169.254/latest/meta-data/instan...   GET
04:31:21    172.31.64.26    169.254.169.254 HTTP    49461.0 80.0    aws-sdk-go/1.12.20 (go1.9; windows; amd64)  gzip    215 169.254.169.254 http://169.254.169.254/latest/meta-data/iam/se...   GET

Я преобразовал IP-адреса и все другие атрибуты в целые числа, поэтому я могу передать их в алгоритм KNN, используя:

from functools import reduce
ip2int = lambda ip: reduce(lambda a,b: int(a)*256 + int(b), ip.split('.')) 
df['Source'] = df['Source'].apply(ip2int)
df['Destination'] = df['Destination'].apply(ip2int)

Вывод пример (Пожалуйста, игнорируйте атрибуты User Agent и Accept Encoding):

    Time       Source   Destination Protocol    Source port Dest port   User-Agent  Accept Encoding Length  Host    Full request URI    Request Method
  16142 2887729178  400251016   HTTP    49454.0 80.0    Microsoft BITS/7.8  identity    333 (0, 1325)\t0.2549063512932777\n (0, 60)\t0....  (0, 5188)\t0.30234613640985336\n (0, 17099)...  0
  16144 2887729178  400251016   HTTP    49454.0 80.0    Microsoft BITS/7.8  identity    388 (0, 1325)\t0.2549063512932777\n (0, 60)\t0....  (0, 5188)\t0.30234613640985336\n (0, 17099)...  0
  16243 2887729178  400251016   HTTP    49458.0 80.0    Microsoft BITS/7.8  identity    332 (0, 1325)\t0.2549063512932777\n (0, 60)\t0....  (0, 5188)\t0.30234613640985336\n (0, 17099)...  0
  16281 2887729178  2852039166  HTTP    49460.0 80.0    aws-sdk-go/1.12.20 (go1.9; windows; amd64)  gzip    202 (0, 1325)\t0.2549063512932777\n (0, 60)\t0....  (0, 5188)\t0.30234613640985336\n (0, 17099)...  0

Однако, когда я пытаюсь соответствовать обучающему набору данных:

X = df.iloc[:, :-1].values
y = df.iloc[:, 4].values
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)

Это показывает мне эту ошибку:

    ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-182-701d38c6b940> in <module>
      5 from sklearn.preprocessing import StandardScaler
      6 scaler = StandardScaler()
----> 7 scaler.fit(X_train)


ValueError: could not convert string to float: '169.254.169.254'

Что я сделал не так? Это потому, что я не преобразовал набор данных в фрейм данных? Заранее спасибо.

...