├── README.md └── dga ├── __pycache__ ├── common.cpython-36.pyc └── load.cpython-36.pyc ├── common.py ├── common.pyc ├── load.py ├── load.pyc ├── lstm.py ├── main.py ├── main.pyc ├── svm.ipynb ├── train.txt └── word2vec.txt /README.md: -------------------------------------------------------------------------------- 1 | # dga_check 2 | 3 | 基于机器学习识别DGA域名 4 | 5 | 包括SVM , Word2Vec + LSTM两种方法实现 6 | 7 | acc: 8 | 9 | SVM~90% 10 | 11 | LSTM~99% 12 | 13 | 14 | 依赖: 15 | 16 | python3 17 | 18 | numpy 19 | 20 | pandas 21 | 22 | matplotlib 23 | 24 | sklearn 25 | 26 | gensim 27 | 28 | tensorflow 29 | 30 | keras 31 | 32 | 数据集来源: 33 | 34 | https://github.com/phunterlau/dga_classifier 35 | -------------------------------------------------------------------------------- /dga/__pycache__/common.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0FuzzingQ/dga_check/48dcee824187d4e8bcdef537f31926de8469f7ca/dga/__pycache__/common.cpython-36.pyc -------------------------------------------------------------------------------- /dga/__pycache__/load.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0FuzzingQ/dga_check/48dcee824187d4e8bcdef537f31926de8469f7ca/dga/__pycache__/load.cpython-36.pyc -------------------------------------------------------------------------------- /dga/common.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | import math 4 | from hmmlearn import hmm 5 | from gensim.models import Word2Vec 6 | 7 | def getshan(domain): 8 | tmp_dict = {} 9 | domain_len = len(domain) 10 | for i in range(0,domain_len): 11 | if domain[i] in tmp_dict.keys(): 12 | tmp_dict[domain[i]] = tmp_dict[domain[i]] + 1 13 | else: 14 | tmp_dict[domain[i]] = 1 15 | shannon = 0 16 | for i in tmp_dict.keys(): 17 | p = float(tmp_dict[i]) / domain_len 18 | shannon = shannon - p * math.log(p,2) 19 | return shannon 20 | 21 | def getyuanyin(domain): 22 | yuan_list = ['a','e','i','o','u'] 23 | domain = domain.lower() 24 | count_word = 0 25 | count_yuan = 0 26 | yuan_ratio = 0 27 | for i in range(0,len(domain)): 28 | if ord(domain[i]) >= ord('a') and ord(domain[i]) <= ord('z'): 29 | count_word = count_word + 1 30 | if domain[i] in yuan_list: 31 | count_yuan = count_yuan + 1 32 | if count_word == 0: 33 | return yuan_ratio 34 | else: 35 | yuan_ratio = float(count_yuan) / count_word 36 | return yuan_ratio 37 | 38 | def getroot(domain): 39 | return domain.split('.')[-1] 40 | 41 | def getrootclass(root): 42 | common_root = ['cn','com','cc','net','org','gov','info'] 43 | if root in common_root: 44 | return 0 45 | else: 46 | return 1 47 | 48 | def getlen(domain): 49 | return len(domain) 50 | 51 | def getw2v(domain_list,label_list): 52 | stop = ['/','~'] 53 | w2v_list = [] 54 | for i in range(0,domain_list.size): 55 | tmp = [] 56 | name = domain_list[i].split('.')[0] 57 | for j in range(0,len(name)): 58 | tmp.append(name[j]) 59 | w2v_list.append(tmp) 60 | 61 | model = Word2Vec(w2v_list, min_count = 1) 62 | #print (model._vocabulary) 63 | model.wv.save_word2vec_format('word2vec.txt',binary=False) 64 | #print model['a'] 65 | label_vect = [] 66 | wv_vect = [] 67 | for i in range(0,domain_list.size): 68 | name = domain_list[i].replace('.','') 69 | tmp = [] 70 | vect = [] 71 | for j in range(0,len(name)): 72 | if name[j] in stop: 73 | continue 74 | tmp.append(model[name[j]]) 75 | if j >= 9: 76 | break 77 | if len(tmp) < 10: 78 | for k in range(0,10-len(tmp)): 79 | tmp.append([0]*100) 80 | vect = np.vstack((x for x in tmp)) 81 | wv_vect.append(vect) 82 | label_vect.append(label_list[i]) 83 | if i ==100000: 84 | break 85 | wv_vect = np.array(wv_vect) 86 | label_vect = np.array(label_vect) 87 | return wv_vect,label_vect 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /dga/common.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0FuzzingQ/dga_check/48dcee824187d4e8bcdef537f31926de8469f7ca/dga/common.pyc -------------------------------------------------------------------------------- /dga/load.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys 4 | import os 5 | import numpy as np 6 | import pandas as pd 7 | import matplotlib.pyplot as plt 8 | import sklearn 9 | 10 | def load_data(path,method): 11 | if method == 'train': 12 | url_list = [] 13 | label_list = [] 14 | 15 | with open(path,'r') as f: 16 | content = f.readlines() 17 | for i in range(0,len(content)): 18 | tmp = content[i].strip('\n').lower() 19 | #print tmp.split(' ') 20 | url_list.append(tmp.split('\t')[0].strip()[0:-1]) 21 | label_list.append(tmp.split('\t')[1].strip()) 22 | f.close() 23 | 24 | #print 'can not read file' 25 | 26 | tmp = np.vstack((label_list,url_list)) 27 | train_data = pd.DataFrame(tmp.T,columns = ['label','domain']) 28 | #print train_data.info() 29 | #print train_data.head() 30 | return train_data 31 | 32 | elif method == 'test': 33 | exit() 34 | 35 | #load_data('train.txt','train') 36 | -------------------------------------------------------------------------------- /dga/load.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0FuzzingQ/dga_check/48dcee824187d4e8bcdef537f31926de8469f7ca/dga/load.pyc -------------------------------------------------------------------------------- /dga/lstm.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | import numpy as np 4 | import pandas as pd 5 | import matplotlib.pyplot as plt 6 | import sklearn 7 | import argparse 8 | from load import load_data 9 | from common import getshan,getyuanyin,getroot,getrootclass,getlen,getw2v 10 | from sklearn.feature_extraction.text import CountVectorizer 11 | import re 12 | from sklearn import preprocessing 13 | from sklearn.utils import shuffle 14 | from sklearn.svm import SVC 15 | from sklearn import cross_validation 16 | from keras.preprocessing import sequence 17 | from keras.models import Sequential 18 | from keras.layers import Dense,Embedding 19 | from keras.layers import LSTM 20 | 21 | 22 | method = 'train' 23 | path = 'train.txt' 24 | 25 | if 'train' in method: 26 | train_data = load_data(path,method) 27 | train_data = shuffle(train_data) 28 | w2v_word_list,label_list = getw2v(train_data['domain'],train_data['label']) 29 | #print (type(w2v_word_list)) 30 | #exit() 31 | x_train = w2v_word_list[0:80000] 32 | y_train = label_list[0:80000] 33 | x_test = w2v_word_list[80000:] 34 | y_test = label_list[80000:] 35 | model = Sequential() 36 | #model.add(Embedding()) 37 | model.add(LSTM(128,dropout = 0.2,recurrent_dropout = 0.2)) 38 | model.add(Dense(1,activation='sigmoid')) 39 | 40 | model.compile(loss = 'binary_crossentropy',optimizer = 'adam',metrics = ['accuracy']) 41 | print ('now training....') 42 | model.fit(x_train,y_train,nb_epoch = 50,batch_size = 32) 43 | print ('now evaling....') 44 | score,acc = model.evaluate(x_test,y_test) 45 | print (score,acc) 46 | 47 | -------------------------------------------------------------------------------- /dga/main.py: -------------------------------------------------------------------------------- 1 | 2 | import sys 3 | import os 4 | import numpy as np 5 | import pandas as pd 6 | import matplotlib.pyplot as plt 7 | import sklearn 8 | import argparse 9 | from load import load_data 10 | from common import getshan,getyuanyin,getroot,getrootclass,getlen,getw2v 11 | from sklearn.feature_extraction.text import CountVectorizer 12 | import re 13 | from sklearn import preprocessing 14 | from sklearn.utils import shuffle 15 | from sklearn import cross_vali 16 | from sklearn.svm import SVCdation 17 | 18 | 19 | method = 'train' 20 | path = 'train.txt' 21 | 22 | if 'train' in method: 23 | train_data = load_data(path,method) 24 | train_data['shan'] = train_data['domain'].map(lambda x:getshan(x)).astype(float) 25 | train_data['yuan_ratio'] = train_data['domain'].map(lambda x:getyuanyin(x)).astype(float) 26 | train_data['root'] = train_data['domain'].map(lambda x:getroot(x)).astype(str) 27 | train_data['rootclass'] = train_data['root'].map(lambda x:getrootclass(x)).astype(int) 28 | train_data['len'] = train_data['domain'].map(lambda x:getlen(x)).astype(int) 29 | 30 | scaler = preprocessing.StandardScaler() 31 | len_scale_param = scaler.fit(train_data['len'].values.reshape(-1,1)) 32 | train_data['len_scaled'] = scaler.fit_transform(train_data['len'].values.reshape(-1,1),len_scale_param) 33 | shan_scale_param = scaler.fit(train_data['shan'].values.reshape(-1,1)) 34 | train_data['shan_sclaed'] = scaler.fit_transform(train_data['shan'].values.reshape(-1,1),shan_scale_param) 35 | 36 | 37 | train_pre = train_data.filter(regex = 'label|yuan_ratio|len_scaled|shan_scale_param|rootclass') 38 | train_pre = shuffle(train_pre) 39 | print (train_data.info()) 40 | print (train_data.head(10)) 41 | print (train_data.tail(10)) 42 | train_pre =train_pre.as_matrix() 43 | y_train = train_pre[0:200000,0] 44 | x_train = train_pre[0:200000,1:] 45 | y_test = train_pre[200000:201000,0] 46 | x_test = train_pre[200000:201000,1:] 47 | print ('now training') 48 | lr = SVC(kernel='rbf',C=0.4).fit(x_train,y_train) 49 | print ('training finished') 50 | model = cross_validation.cross_val_score(lr,x_train,y_train,cv = 5) 51 | print (model) 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /dga/main.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0FuzzingQ/dga_check/48dcee824187d4e8bcdef537f31926de8469f7ca/dga/main.pyc -------------------------------------------------------------------------------- /dga/svm.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | "想要了解该内容的看客们一定对DGA相关内容有一定了解了,这里就不再赘述,只是做简单说明。\n", 12 | "\n", 13 | "僵尸网络中用来控制主机,负责处理信息,下发任务的中心机器,也称C&C服务器(control & command)。一个成熟的僵尸网络往往具有多个C&C服务 器。\n", 14 | "对于安全人员来说,查杀了僵尸网络的C&c服务器也就等于毁灭而这个僵尸网络,那么作为安全对抗,僵尸网络的缔造者也会想尽办法对其进行隐藏和保护其主控端。\n", 15 | "\n", 16 | "那么对于固定的C&C服务器域名,安全人员一般来说很容易对其进行查杀,因此,基于DGA方法僵尸网络也就产生了,DGA全程随机域名生成算法,是指使用主控端和被控端协商好的一种基于随机算法的域名生成协议,简单来说就是生成一个随机字符串来作为域名并进行注册,将其作为C&C服务器的域名并不定时经常性更换。由于具备强随机性,短时效性,通过DGA生成的域名往往在查杀上更具备难度。\n", 17 | "\n", 18 | "使用机器学习的方法来对DGA域名进行查杀,业界已有实现;笔者首次接触实在2016年wooyun年会上,phunter神做的一篇报告,在报告中他详细介绍了包括二层,三层flux方法等在内的诸多高级生成DGA方法,并从数学上介绍了一些生成算法以及机器学习的检测方法.本文是参考https://github.com/phunterlau/dga_classifier 的一个简单实现版本,本文全部代码可以在 笔者GitHub项目中查看https://github.com/0FuzzingQ/dga_check\n" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 1, 24 | "metadata": {}, 25 | "outputs": [ 26 | { 27 | "name": "stderr", 28 | "output_type": "stream", 29 | "text": [ 30 | "C:\\Users\\aldin\\AppData\\Roaming\\Python\\Python36\\site-packages\\gensim\\utils.py:1212: UserWarning: detected Windows; aliasing chunkize to chunkize_serial\n", 31 | " warnings.warn(\"detected Windows; aliasing chunkize to chunkize_serial\")\n", 32 | "c:\\program files\\python36\\lib\\site-packages\\sklearn\\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n", 33 | " \"This module will be removed in 0.20.\", DeprecationWarning)\n" 34 | ] 35 | } 36 | ], 37 | "source": [ 38 | "import sys\n", 39 | "import os\n", 40 | "import numpy as np\n", 41 | "import pandas as pd\n", 42 | "import matplotlib.pyplot as plt\n", 43 | "import sklearn\n", 44 | "import argparse\n", 45 | "from load import load_data\n", 46 | "from common import getshan,getyuanyin,getroot,getrootclass,getlen,getw2v\n", 47 | "from sklearn.feature_extraction.text import CountVectorizer\n", 48 | "import re\n", 49 | "from sklearn import preprocessing\n", 50 | "from sklearn.utils import shuffle\n", 51 | "from sklearn import cross_validation\n", 52 | "from sklearn.svm import SVC\n", 53 | "import seaborn as sns\n", 54 | "plt.style.use('seaborn')\n", 55 | "sns.set(font_scale=2)\n", 56 | "pd.set_option('display.max_columns', 500)" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 2, 62 | "metadata": {}, 63 | "outputs": [], 64 | "source": [ 65 | "method = 'train'\n", 66 | "path = 'train.txt'" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "metadata": {}, 72 | "source": [ 73 | "本次使用训练集位于train.txt中,共包含10w正常url数据以及15w 使用DGA算法生成的域名数据\n", 74 | "首先载入数据集看一下数据集情况" 75 | ] 76 | }, 77 | { 78 | "cell_type": "code", 79 | "execution_count": 3, 80 | "metadata": {}, 81 | "outputs": [], 82 | "source": [ 83 | "train_data = load_data(path,method)" 84 | ] 85 | }, 86 | { 87 | "cell_type": "code", 88 | "execution_count": 4, 89 | "metadata": {}, 90 | "outputs": [ 91 | { 92 | "name": "stdout", 93 | "output_type": "stream", 94 | "text": [ 95 | "\n", 96 | "RangeIndex: 249999 entries, 0 to 249998\n", 97 | "Data columns (total 2 columns):\n", 98 | "label 249999 non-null object\n", 99 | "domain 249999 non-null object\n", 100 | "dtypes: object(2)\n", 101 | "memory usage: 3.8+ MB\n" 102 | ] 103 | } 104 | ], 105 | "source": [ 106 | "train_data.info()" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 5, 112 | "metadata": {}, 113 | "outputs": [ 114 | { 115 | "data": { 116 | "text/html": [ 117 | "
\n", 118 | "\n", 131 | "\n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | "
labeldomain
00facebook.com
10youtube.com
20yahoo.com
30baidu.com
40wikipedia.org
\n", 167 | "
" 168 | ], 169 | "text/plain": [ 170 | " label domain\n", 171 | "0 0 facebook.com\n", 172 | "1 0 youtube.com\n", 173 | "2 0 yahoo.com\n", 174 | "3 0 baidu.com\n", 175 | "4 0 wikipedia.org" 176 | ] 177 | }, 178 | "execution_count": 5, 179 | "metadata": {}, 180 | "output_type": "execute_result" 181 | } 182 | ], 183 | "source": [ 184 | "train_data.head(5)" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": 6, 190 | "metadata": {}, 191 | "outputs": [ 192 | { 193 | "data": { 194 | "text/html": [ 195 | "
\n", 196 | "\n", 209 | "\n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | "
labeldomain
2499941zzznnx.ir
2499951zzztqrq.ht
2499961zzzvr.su
2499971zzzwtef.com.pa
2499981zzzzuvfbt.co.uk
\n", 245 | "
" 246 | ], 247 | "text/plain": [ 248 | " label domain\n", 249 | "249994 1 zzznnx.ir\n", 250 | "249995 1 zzztqrq.ht\n", 251 | "249996 1 zzzvr.su\n", 252 | "249997 1 zzzwtef.com.pa\n", 253 | "249998 1 zzzzuvfbt.co.uk" 254 | ] 255 | }, 256 | "execution_count": 6, 257 | "metadata": {}, 258 | "output_type": "execute_result" 259 | } 260 | ], 261 | "source": [ 262 | "train_data.tail(5)" 263 | ] 264 | }, 265 | { 266 | "cell_type": "markdown", 267 | "metadata": {}, 268 | "source": [ 269 | "可以看到正常域名都是大家比较熟悉的那些,Google,youtube等等,恶意域名,感觉就很奇怪,而且...根域名更奇怪,根域名,也许可以看成是一个特征向量也说不定" 270 | ] 271 | }, 272 | { 273 | "cell_type": "markdown", 274 | "metadata": {}, 275 | "source": [ 276 | "那么就先把根域名尝试作为一个特征吧,探测一下!周所周知,正大光明的网站一般使用正大光明的域名,比如说很常见的如com;cn;org;cc;net等等,因此我们把这个作为一个点来分类;由于是一个简单的项目,我们不是用one-hot编码,频率编码等手段,仅仅依照经验将其分为常见,不常见两个类别\n", 277 | "\n", 278 | "注:本文的功能函数代码均位于github中common.py文件中,本notebook仅仅演示主要的机器学习的使用流程和手法\n", 279 | "\n", 280 | "以下第一行代码用于获取每一个域名的根域名并加入DataFrame中\n", 281 | "第二行代码用于分类并将类别信息加入DataFrame中" 282 | ] 283 | }, 284 | { 285 | "cell_type": "code", 286 | "execution_count": 7, 287 | "metadata": {}, 288 | "outputs": [], 289 | "source": [ 290 | "train_data['root'] = train_data['domain'].map(lambda x:getroot(x)).astype(str)\n", 291 | "train_data['rootclass'] = train_data['root'].map(lambda x:getrootclass(x)).astype(int)" 292 | ] 293 | }, 294 | { 295 | "cell_type": "markdown", 296 | "metadata": {}, 297 | "source": [ 298 | "再看一下数据情况,会发现咱们原本的DataFrame多了两列信息,就是我们刚才加上去的~" 299 | ] 300 | }, 301 | { 302 | "cell_type": "code", 303 | "execution_count": 8, 304 | "metadata": {}, 305 | "outputs": [ 306 | { 307 | "data": { 308 | "text/html": [ 309 | "
\n", 310 | "\n", 323 | "\n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | "
labeldomainrootrootclass
00facebook.comcom0
10youtube.comcom0
20yahoo.comcom0
30baidu.comcom0
40wikipedia.orgorg0
\n", 371 | "
" 372 | ], 373 | "text/plain": [ 374 | " label domain root rootclass\n", 375 | "0 0 facebook.com com 0\n", 376 | "1 0 youtube.com com 0\n", 377 | "2 0 yahoo.com com 0\n", 378 | "3 0 baidu.com com 0\n", 379 | "4 0 wikipedia.org org 0" 380 | ] 381 | }, 382 | "execution_count": 8, 383 | "metadata": {}, 384 | "output_type": "execute_result" 385 | } 386 | ], 387 | "source": [ 388 | "train_data.head(5)" 389 | ] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "execution_count": 9, 394 | "metadata": {}, 395 | "outputs": [ 396 | { 397 | "data": { 398 | "text/html": [ 399 | "
\n", 400 | "\n", 413 | "\n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | "
labeldomainrootrootclass
2499941zzznnx.irir1
2499951zzztqrq.htht1
2499961zzzvr.susu1
2499971zzzwtef.com.papa1
2499981zzzzuvfbt.co.ukuk1
\n", 461 | "
" 462 | ], 463 | "text/plain": [ 464 | " label domain root rootclass\n", 465 | "249994 1 zzznnx.ir ir 1\n", 466 | "249995 1 zzztqrq.ht ht 1\n", 467 | "249996 1 zzzvr.su su 1\n", 468 | "249997 1 zzzwtef.com.pa pa 1\n", 469 | "249998 1 zzzzuvfbt.co.uk uk 1" 470 | ] 471 | }, 472 | "execution_count": 9, 473 | "metadata": {}, 474 | "output_type": "execute_result" 475 | } 476 | ], 477 | "source": [ 478 | "train_data.tail(5)" 479 | ] 480 | }, 481 | { 482 | "cell_type": "markdown", 483 | "metadata": {}, 484 | "source": [ 485 | "有没有发现看上去好像正常域名的rootclass都等于0,不正常的都等于1;\n", 486 | "感觉好像是的!那么我们来画个图看一看再整个数据集上的分布吧\n", 487 | "\n", 488 | "python科学计算可视化神器 matplotlib和seaborn" 489 | ] 490 | }, 491 | { 492 | "cell_type": "code", 493 | "execution_count": 10, 494 | "metadata": {}, 495 | "outputs": [], 496 | "source": [ 497 | "suby = train_data.label.values\n", 498 | "subx = train_data.rootclass.values" 499 | ] 500 | }, 501 | { 502 | "cell_type": "code", 503 | "execution_count": 11, 504 | "metadata": {}, 505 | "outputs": [ 506 | { 507 | "data": { 508 | "text/plain": [ 509 | "" 510 | ] 511 | }, 512 | "execution_count": 11, 513 | "metadata": {}, 514 | "output_type": "execute_result" 515 | }, 516 | { 517 | "data": { 518 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdQAAAEpCAYAAAAqK9OrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3XmYFNW9//H3zDAw7CCgooi48QVUXEBFBJcoKorRaK65P7dgJGhUTC4kxiUGdw0xGjWioom44JPcG68LiuCOiqIIXhWRrwuCuyIgOwww8/vjVEPT0z3T0xR09/B5Pc88xVR9q+r0KHzmVJ06VVJdXY2IiIhsmtJ8N0BERKQhUKCKiIjEQIEqIiISAwWqiIhIDBSoIiIiMVCgioiIxECBKiIiEgMFqoiISAwUqCIiIjFQoIqIiMSgUb4bIJtVE+AA4GtgXZ7bIiJSLMqAjsA0YHW2OylQG7YDgFfy3QgRkSLVH3g122IFasP2NcCiRcupqtJLEEREslFaWkLbts0h+jc0W0URqGY2GLgP6O/ur6Zs2wn4rJbdp7h7v5R9dgBGAgMI3frPgIeAUe5eo3tvZm2AS4GfADsB3wKPAFe5+5I09U2B3wBnALsAPwBPAX909xr/gcysDBgCnAfsAawAXojqP6zls9VlHUBVVbUCVUSk/up1q6zgByWZ2cHA7bWU7Bct3wXGpfmalHK8TsAbwFA2BF0r4GpgopmVp9S3AiYDFwNVwJPRcjjwupm1TqkvBx4HrgdaAhOAhYTAnGFmndN8hnuBu4BOUXvnAj8DppvZfmnqRUSkwBR0D9XMTgbGAi1qKUsEzih3H5fFYUcTgusKd782Ok9z4DHgKOAi4C9J9dcCPYF7gPPcvcrMGgH/AM6Mtg9Lqh9G6Pk+BZyS6PGa2XXAZcAdwAkpn3EwMAP4kbsvjtafSwjZsWa2r7uriykiUsAKsodqZp3M7AHCZdUywiXWTBKBOj2L4xowCPiE0IMEwN2XA+cQuvfDkurbEHqWS4AR7l4V1a8FzgcWAedEgYyZlRB6rtXAhSmXj68AHBhkZrskrf9ttByeCNPoHHcDzxHC/PC6PpuIiORXQQYqodd3JvAW0AeYXUvtfsAyIJt7jccAJcD4RDgmuPtnhF7izmbWI1p9KNAUeMHdl6bULyMEXlPgsGj13sCOwDvuPjelvgp4Ivp2IKwP7D6ES8LpRuM+mlwvIiKFq1ADdTbwc+Agd38vU5GZbQN0JoTpcDN7x8xWmNlXZjYmGnyUbM9oObOW80IIxi1R350Q8LNSAz5DvYiIFKiCvIfq7jdmWZq43Ls/IXQmA18Qnr/8JXCCmR3u7h7VdYyWmYZCJ9ZvV6D1IiJSoAoyUOshEajvAye4+6ewfpDRPcD/I4z07R3VNY+WKzIcb2W0TAyCKrT6nLRrt0m7i4hIFoo9UG8hDFxa6u7fJ1a6+3IzG0K4B9rLzPq4+1TC4y4QBg2lU5KyLLT6nCxYsEzPoYqIZKm0tCSnjkhRB6q7rwM+zbBthZm9QBjc1AuYShi8BGEgUToV0XJ5tCy0ehGRtNq2bkyjxk3y3YyCsLZyNYsWV27x8xZ1oGbhm2jZLFp+FS23z1Cfek+z0OpFRNJq1LgJ00cNyXczCkKvi+8FFKj1YmYjCYORrsowGjjxvOcX0TIx+rZHmloIo24BEsfa3PWzCJd9u6cvr1EvIiIFqlAfm8lWT+AU4NTUDWa2LXA0sAZ4MVo9MVr+2MxKU+o7EwY5zXP3WdHqlwkDg45KTN6QVN+CMLPSMqJnSN39A2AesH80x3ByfSnwY8L90klR/XLCmwy2NbO+aT7fSdFyQuYfgYiIFIJiD9S7o+UIMzsksTIKu38Q5ui9192/AYhGAU8EjDB3b6K+OWE+3TKSph2MAu9+oC0wOppykGh5B9AGGJMy6cOd0XH+nhLC1wBdgUfd/ZOk9aMTSzNrn9SmoYTAnuHuL9XjZyIiInlQ1Jd83f0ZM7uZMN3fy2Y2Bfie8A679oSe429TdrsAmAJcbmYnEqYD7Eu4X/k0IRCTXQ4cAZwF9DOzGYTnXncF3ia8tSbZLYTpDQcAH5nZa4QA34vwVpsLUz7Dv6L5fE8FPjSzlwizLR1ImLz/rPr9VEREJB+KvYeKu48ghNEUwiXbYwmDeC4GjnT3FSn1cwhhNRboABxPmJP3UuDkaJ7e5PqFhMC9DSgnTGxfBYwCjoimIEyuryRMcXgN4fnSQYTnSMcAfdK9vg04nfBLwVfAcYRA/SdwoLu/X9+fiYiIbHkl1dV6PrEB6wJ8qudQRRq+Dh1aapRvpNfF9zJ//tK6CzNIeg51F8LrNLPbL+czioiIyHoKVBERkRgoUGWLuvDCofTr15sFC76vuzjGfWvz9ddf0a9fb4YPH1Z3sYhIBgpUERGRGChQRUREYqBAFRERiUFRT+wgxW/dunWMH/8ozzwzkTlzPmHVqpW0atWaffbZj7PP/iW77rpbjX0WLPie2267malTp1BdDT177sM555xL9+571qh96qkneOyxf/Ppp3MoLS2je/cenHHGzznggD5b4uOJyFZEPVTJq2uvHclNN93ImjWVHH/8CZxyyqlst912vPjic5x//hAWLVpUY5/f/e7XvP/+ewwadBIHH3wI06a9wQUX/JK3356+Ud2f/nQdN9xwNUuXLuP443/Msccex9y5cxg+fBiPPfbIlvqIIrKVUA9V8uaDD97n2Wcn0q/fodxww18oKdnwHvWRIy/l+eefZerUKQwcOGij/dq02YY777yXZs3CVMlvvfUmI0YM46abbmDcuH8DMHnyi4wf/yj9+x/O1VffQHl5OQBDhvyK888/h1tvvYk+fQ5h++0zvTlPRKR+1EOVvGnXrj2XX34l559/0UZhCrD//gcApO2hnnfeBevDFKB37wPp3/9w5s2by+zZ4UVB48c/CsBFFw1fH6YArVq14owzBrNmzRomTXoq9s8kIlsv9VAlb7bddjsGDhzEunXr+Pjjj/jss3l8+eUXzJnzMTNmTAOgqmpdjf169ty3xro999ybl156HvfZdOvWg9mzP6C0tJQJE8bXqF24cAEAH33kMX8iEdmaKVAlr5588nHGjr2Xb74J7wxo2rQZXbsaXbt24/XXw6CjZBUVFTRv3qLGcZo1awbAypXhXQhLly6hqqqK++67J+O5ly7Nfa5PEZFUClTJmxdffI4bb7yGTp06c9VV19OtWw922GFHSkpKeOyxf/P661Nq7LNq1SrWrFmz0WVcgO+/nw9Aq1atgRDMjRo14sknn938H0REBN1DlTx65pmnARg58hqOPPJodtyx0/p7qZ9+OieqqvmWnMR90mTvvvsOAN26dQdgjz268sMPi/j6669q1M6aNZPRo29l2rSpcXwMERFAgSp51KRJBQALFy7caP0777zN+PGPA7B27doa+/3jH2NYs2bN+u9feul5pk9/kx499mLXXXcH4LjjTgDg5pv/xOrVq9bXrlixgptuuoGHH36QlStXISISF13ylbwZOHAQzz03iSuvvIwf/WgAbdq0Zc6cj3nzzam0atWaysrVLF68eKN9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\n", 519 | "text/plain": [ 520 | "
" 521 | ] 522 | }, 523 | "metadata": { 524 | "needs_background": "light" 525 | }, 526 | "output_type": "display_data" 527 | } 528 | ], 529 | "source": [ 530 | "sns.countplot(x='rootclass', hue='label',data=train_data)" 531 | ] 532 | }, 533 | { 534 | "cell_type": "markdown", 535 | "metadata": {}, 536 | "source": [ 537 | "ok 很明显可以看出来数据分布上的差异了,在正常样本上也就是label=0时,常见根域名出现的概率远远大于非正常域名,几乎可以说是忽略不计,而对于不正常域名label=1时,非常见根域名出现的概率大概是正常域名的4-5倍,\n", 538 | "\n", 539 | "所以我们完全可以将根域名作为我们模型的一个特征\n", 540 | "PS:笔者采用的这种方法是较为简陋的一种,更科学地特征工程可以更好的挖掘这一特征" 541 | ] 542 | }, 543 | { 544 | "cell_type": "markdown", 545 | "metadata": {}, 546 | "source": [ 547 | "接下来挖掘一些其他可能的特征,比如说最简单的,长度?\n", 548 | "\n", 549 | "试试看,还是使用一样的思路,将每一条域名的长度计算出来来,作为一列加入到我们的train_data中,并采用可视化的方法来看一看域名的长度是否在不同label上有着不同的分布\n", 550 | "\n", 551 | "以下代码用于计算每个域名的长度并返回结果,作为train_data中的一列" 552 | ] 553 | }, 554 | { 555 | "cell_type": "code", 556 | "execution_count": 12, 557 | "metadata": {}, 558 | "outputs": [], 559 | "source": [ 560 | "train_data['len'] = train_data['domain'].map(lambda x:getlen(x)).astype(int)" 561 | ] 562 | }, 563 | { 564 | "cell_type": "code", 565 | "execution_count": 13, 566 | "metadata": {}, 567 | "outputs": [ 568 | { 569 | "data": { 570 | "text/html": [ 571 | "
\n", 572 | "\n", 585 | "\n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | "
labeldomainrootrootclasslen
00facebook.comcom012
10youtube.comcom011
20yahoo.comcom09
30baidu.comcom09
40wikipedia.orgorg013
50qq.comcom06
60linkedin.comcom012
70taobao.comcom010
80twitter.comcom011
90live.comcom08
\n", 679 | "
" 680 | ], 681 | "text/plain": [ 682 | " label domain root rootclass len\n", 683 | "0 0 facebook.com com 0 12\n", 684 | "1 0 youtube.com com 0 11\n", 685 | "2 0 yahoo.com com 0 9\n", 686 | "3 0 baidu.com com 0 9\n", 687 | "4 0 wikipedia.org org 0 13\n", 688 | "5 0 qq.com com 0 6\n", 689 | "6 0 linkedin.com com 0 12\n", 690 | "7 0 taobao.com com 0 10\n", 691 | "8 0 twitter.com com 0 11\n", 692 | "9 0 live.com com 0 8" 693 | ] 694 | }, 695 | "execution_count": 13, 696 | "metadata": {}, 697 | "output_type": "execute_result" 698 | } 699 | ], 700 | "source": [ 701 | "train_data.head(10)" 702 | ] 703 | }, 704 | { 705 | "cell_type": "code", 706 | "execution_count": 14, 707 | "metadata": {}, 708 | "outputs": [ 709 | { 710 | "data": { 711 | "text/html": [ 712 | "
\n", 713 | "\n", 726 | "\n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | "
labeldomainrootrootclasslen
2499891zzzewwhfc.com.hnhn116
2499901zzzgx.co.vivi111
2499911zzzjxt.asas19
2499921zzzkf.tctc18
2499931zzzlxtam.co.krkr114
2499941zzznnx.irir19
2499951zzztqrq.htht110
2499961zzzvr.susu18
2499971zzzwtef.com.papa114
2499981zzzzuvfbt.co.ukuk115
\n", 820 | "
" 821 | ], 822 | "text/plain": [ 823 | " label domain root rootclass len\n", 824 | "249989 1 zzzewwhfc.com.hn hn 1 16\n", 825 | "249990 1 zzzgx.co.vi vi 1 11\n", 826 | "249991 1 zzzjxt.as as 1 9\n", 827 | "249992 1 zzzkf.tc tc 1 8\n", 828 | "249993 1 zzzlxtam.co.kr kr 1 14\n", 829 | "249994 1 zzznnx.ir ir 1 9\n", 830 | "249995 1 zzztqrq.ht ht 1 10\n", 831 | "249996 1 zzzvr.su su 1 8\n", 832 | "249997 1 zzzwtef.com.pa pa 1 14\n", 833 | "249998 1 zzzzuvfbt.co.uk uk 1 15" 834 | ] 835 | }, 836 | "execution_count": 14, 837 | "metadata": {}, 838 | "output_type": "execute_result" 839 | } 840 | ], 841 | "source": [ 842 | "train_data.tail(10)" 843 | ] 844 | }, 845 | { 846 | "cell_type": "code", 847 | "execution_count": 15, 848 | "metadata": {}, 849 | "outputs": [ 850 | { 851 | "data": { 852 | "text/plain": [ 853 | "" 854 | ] 855 | }, 856 | "execution_count": 15, 857 | "metadata": {}, 858 | "output_type": "execute_result" 859 | }, 860 | { 861 | "data": { 862 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAEpCAYAAAATTGLwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xd8HcW5//GP5CIDtrEBU0w17QFCTO+YEkowPbR7b4BcCIQQAiSBhFBCTAk1lIQkcAOkAIHfTbuQmF5C7y10HorpGDDGGBuQm/T745nxro6Oji1ZsiT8fb9efq18ZsucPbvz7MzOztY1NzcjIiIi1dV3dwZERER6MgVKERGRGhQoRUREalCgFBERqUGBUkREpAYFShERkRoUKEVERGpQoBQREalBgVJERKQGBUoREZEa+nZ3BqRdGoCNgPHArG7Oi4hIb9EHWAZ4FJjW3oUVKHuXjYB7uzsTIiK91CjgvvYupEDZu4wHmDTpU5qaNJi9iMjcqK+vY+jQRSCVoe2lQNm7zAJoampWoBQRab8O3bJSZx4REZEaFChFRERqUKAUERGpQYFSRESkBgVKERGRGhQoRUREalCgFBERqUGBUkREpAYNOCA90tBF+9O3fwMAM6dPY9Lk6e1KFxHpLAqU0iP17d/A4+ceCsAGx10OTG9XuohIZ1HTq4iISA0KlCIiIjUoUIqIiNSgQCkiIlKDAqWIiEgNCpQiIiI1KFCKiIjUoEApIiJSgwKlzJMjjzyMLbfckIkTP5yvy9Yyfvy7bLnlhhxzzFGdul4RWTApUIqIiNSgQCkiIlKDAqWIiEgNGhRdOtWsWbMYO/Zabr31ZsaNe5XGxs8ZPHhR1llnPQ4++FusvPIqrZaZOPFDLrroAh566H6am2HkyHU49tgfVF3/DTf8k+uu+xuvv/4azJzOyksM5Ngt7mf11Ud29VcTkQWUapTSqX72szGcd97ZzJgxnV122Y29996PpZZaijvvvJ0jjjiUSZMmtVrmRz/6Hs899wy77ronm222BY8++jD7778/L4z/uMV855xzBmeddRpTpkxl7733ZstVl+Sdjz/jkEMO4brr/j6/vqKILGBUo5RO88ILz3HbbTez5ZZbcdZZ51NXVzc7bcyYE7jjjtt46KH7GT161xbLDRmyGJdccjkLL7wIAI899gjHHnsUv7v/Fc7bZ0MA7r77TsaOvZZRo7bhtNPOYvjwxXj83DfYd4MVOefBCfzyl+ex6aZbsPTSS8+/LywiCwTVKKXTLL74Epx00ikcccTRLYIkwPrrbwRQtUZ5+OHfnR0kATbccGO233573p38OeMmTAFg7NhrATj66GPo16/f7HkHNvTjsMMOY8aMGdxyyw2d/p1ERFSjlE6z5JJLMXr0rsyaNYtXXnmZN998g3feeZtx417hiSceBaCpaVar5UaOXLfVZ+uuuy633HILr02cCsCLL75AfX09N944FoBFFmng3SfeAKDf1CcAePll75LvJSILNgVK6VTXX/8P/vjHy3nvvfEALLTQwqy+urH66mvw4IPRWadswIABLLLIwFbrWWSRqGE2zojAOmXKJzQ1NfGHP1zWeqNPvpnmmdKJ30REJChQSqe5887bOfvs01luuRU49dQzWWONtRg+fFnq6uq47rq/8eCD97daprGxkRkzZrRoTgX44IMPgGhahQi4ffv25frrbwNg2LBBPH7uoQBscNzlTJigICkiXUP3KKXT3HrrTQCMGXM62223I8suu9zse5WvvTYuzdXcarkXX3y+1WePP/44ACsvEbXN1VZbnY8/nsT48e+2mvfpp5/m4ot/yaOPPtQZX0NEpAUFSuk0DQ0DAPjoo49afP7UU08yduw/AJg5c2ar5X7/+0uZMWPG7P/fddcdPPjgg6w6bBDLLxZNsDvvvBsAF1xwDtOmNc6et3HGLMaMGcM111zF5583IiLS2dT0Kp1m9Ohduf32WzjllBP5yld2YMiQoYwb9wqPPPIQgwcvyvTp05g8eXKLZfr06cPbb7/FwQfvz+abb8E777zNvffezZAhQzhs1Mqz59tpp1146KH7ueOO2zjggP9gm2224qOnXuWxNyYy8dNp7LjjaEaN2np+f2URWQCoRimdZpNNNuOMM37OSiuN4M4772Ds2OuYOPFDDjroUK6++m80NDTw0EMPtFimT58+XHTR/7Dsssty7bV/4/HHH2Obbbbjr3/9K8sNLR4ZqaurY8yYM/jhD49nyJBFufbaa7n3lfdZdKF+nH766Zx44phWj6SIiHSGuubKbojSk60EvDZx4lSamr7Yv9ucOuuoM4+IzK36+joWX3wgwAjg9XYv39kZEhER+SJRoBQREalBgVJERKQGBUoREZEaFChF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\n", 863 | "text/plain": [ 864 | "
" 865 | ] 866 | }, 867 | "metadata": { 868 | "needs_background": "light" 869 | }, 870 | "output_type": "display_data" 871 | } 872 | ], 873 | "source": [ 874 | "sns.countplot(x='len', hue='label',data=train_data)" 875 | ] 876 | }, 877 | { 878 | "cell_type": "markdown", 879 | "metadata": {}, 880 | "source": [ 881 | "我们可以发现非正常域名的长度分布更加集中,而正常域名分布更像是一个正态分布,ok,把他作为一个特征\n", 882 | "\n", 883 | "下一步要想一想还有什么特征\n", 884 | "信息学中有一个很重要的概念,叫熵(虽然它最早出自化学和物理学2333),在信息学中,它用于衡量一个系统的混乱程度,简而言之,对于一个随机字符串,他就代表着字符串中字母出现以及分布的混乱程度,打个比方:\n", 885 | "str1 = 'aaabbb'\n", 886 | "str2 = 'asdfgh'\n", 887 | "两者长度相同,可是看上去str1比str2更整齐,更有规律不少,而str2更像是用脸滚键盘滚出来的,熵主要用于判断器混乱程度,不同于我们用肉眼判断,她有一个著名的公式,叫香农熵公式:\n", 888 | "\n", 889 | "G = -ΣLog(P(Xi)) * P(Xi)\n", 890 | "\n", 891 | "其中P(Xi)是字符出现的概率 比如 str1中 P('a') = 3 / (3+3) = 0.5 str2中 P('a') = 1 / (6) = 0.166667 " 892 | ] 893 | }, 894 | { 895 | "cell_type": "code", 896 | "execution_count": 16, 897 | "metadata": {}, 898 | "outputs": [], 899 | "source": [ 900 | "train_data['shan'] = train_data['domain'].map(lambda x:getshan(x)).astype(float)" 901 | ] 902 | }, 903 | { 904 | "cell_type": "code", 905 | "execution_count": 17, 906 | "metadata": {}, 907 | "outputs": [ 908 | { 909 | "data": { 910 | "text/html": [ 911 | "
\n", 912 | "\n", 925 | "\n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | "
labeldomainrootrootclasslenshan
00facebook.comcom0123.022055
10youtube.comcom0113.095795
20yahoo.comcom092.641604
30baidu.comcom093.169925
40wikipedia.orgorg0133.334679
\n", 985 | "
" 986 | ], 987 | "text/plain": [ 988 | " label domain root rootclass len shan\n", 989 | "0 0 facebook.com com 0 12 3.022055\n", 990 | "1 0 youtube.com com 0 11 3.095795\n", 991 | "2 0 yahoo.com com 0 9 2.641604\n", 992 | "3 0 baidu.com com 0 9 3.169925\n", 993 | "4 0 wikipedia.org org 0 13 3.334679" 994 | ] 995 | }, 996 | "execution_count": 17, 997 | "metadata": {}, 998 | "output_type": "execute_result" 999 | } 1000 | ], 1001 | "source": [ 1002 | "train_data.head(5)" 1003 | ] 1004 | }, 1005 | { 1006 | "cell_type": "code", 1007 | "execution_count": 18, 1008 | "metadata": {}, 1009 | "outputs": [ 1010 | { 1011 | "data": { 1012 | "text/html": [ 1013 | "
\n", 1014 | "\n", 1027 | "\n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | " \n", 1080 | " \n", 1081 | " \n", 1082 | " \n", 1083 | " \n", 1084 | " \n", 1085 | " \n", 1086 | "
labeldomainrootrootclasslenshan
2499941zzznnx.irir192.419382
2499951zzztqrq.htht1102.446439
2499961zzzvr.susu182.405639
2499971zzzwtef.com.papa1143.324863
2499981zzzzuvfbt.co.ukuk1153.106891
\n", 1087 | "
" 1088 | ], 1089 | "text/plain": [ 1090 | " label domain root rootclass len shan\n", 1091 | "249994 1 zzznnx.ir ir 1 9 2.419382\n", 1092 | "249995 1 zzztqrq.ht ht 1 10 2.446439\n", 1093 | "249996 1 zzzvr.su su 1 8 2.405639\n", 1094 | "249997 1 zzzwtef.com.pa pa 1 14 3.324863\n", 1095 | "249998 1 zzzzuvfbt.co.uk uk 1 15 3.106891" 1096 | ] 1097 | }, 1098 | "execution_count": 18, 1099 | "metadata": {}, 1100 | "output_type": "execute_result" 1101 | } 1102 | ], 1103 | "source": [ 1104 | "train_data.tail(5)" 1105 | ] 1106 | }, 1107 | { 1108 | "cell_type": "markdown", 1109 | "metadata": {}, 1110 | "source": [ 1111 | "sns.pointplot(x='label', y='shan',data=train_data)" 1112 | ] 1113 | }, 1114 | { 1115 | "cell_type": "code", 1116 | "execution_count": 19, 1117 | "metadata": {}, 1118 | "outputs": [ 1119 | { 1120 | "data": { 1121 | "text/plain": [ 1122 | "" 1123 | ] 1124 | }, 1125 | "execution_count": 19, 1126 | "metadata": {}, 1127 | "output_type": "execute_result" 1128 | }, 1129 | { 1130 | "data": { 1131 | "image/png": "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\n", 1132 | "text/plain": [ 1133 | "
" 1134 | ] 1135 | }, 1136 | "metadata": { 1137 | "needs_background": "light" 1138 | }, 1139 | "output_type": "display_data" 1140 | } 1141 | ], 1142 | "source": [ 1143 | "sns.pointplot(x='label', y='shan',data=train_data)" 1144 | ] 1145 | }, 1146 | { 1147 | "cell_type": "markdown", 1148 | "metadata": {}, 1149 | "source": [ 1150 | "接下来还有什么参数呢,plunter的原文从语言学提供了提供了一些新的思路,比如说 好读\n", 1151 | "\n", 1152 | "没错,根据常规来说一个正常的网站一定会希望他的网站域名是读起来朗朗上口并且好记的,根据语言学和音韵学来说,貌似在字符中插入一定的元音字母会让一个字符串卡萨诺航区或者读起来更像是一个单词一样,元音是啥 a e i o u ,比如说 baidu 五个字母中有3个都是元音 再比如说 google 六个字母中有3个元音,比如说zzzzuvfbt 9个单词中只有一个元音...\n", 1153 | "\n", 1154 | "看上去这会是一个好的特征 我们来看看!\n", 1155 | "以下一行代码用于计算元音字母所占的比例" 1156 | ] 1157 | }, 1158 | { 1159 | "cell_type": "code", 1160 | "execution_count": 20, 1161 | "metadata": {}, 1162 | "outputs": [], 1163 | "source": [ 1164 | "train_data['yuan_ratio'] = train_data['domain'].map(lambda x:getyuanyin(x)).astype(float)" 1165 | ] 1166 | }, 1167 | { 1168 | "cell_type": "code", 1169 | "execution_count": 21, 1170 | "metadata": {}, 1171 | "outputs": [ 1172 | { 1173 | "data": { 1174 | "text/html": [ 1175 | "
\n", 1176 | "\n", 1189 | "\n", 1190 | " \n", 1191 | " \n", 1192 | " \n", 1193 | " \n", 1194 | " \n", 1195 | " \n", 1196 | " \n", 1197 | " \n", 1198 | " \n", 1199 | " \n", 1200 | " \n", 1201 | " \n", 1202 | " \n", 1203 | " \n", 1204 | " \n", 1205 | " \n", 1206 | " \n", 1207 | " \n", 1208 | " \n", 1209 | " \n", 1210 | " \n", 1211 | " \n", 1212 | " \n", 1213 | " \n", 1214 | " \n", 1215 | " \n", 1216 | " \n", 1217 | " \n", 1218 | " \n", 1219 | " \n", 1220 | " \n", 1221 | " \n", 1222 | " \n", 1223 | " \n", 1224 | " \n", 1225 | " \n", 1226 | " \n", 1227 | " \n", 1228 | " \n", 1229 | " \n", 1230 | " \n", 1231 | " \n", 1232 | " \n", 1233 | " \n", 1234 | " \n", 1235 | " \n", 1236 | " \n", 1237 | " \n", 1238 | " \n", 1239 | " \n", 1240 | " \n", 1241 | " \n", 1242 | " \n", 1243 | " \n", 1244 | " \n", 1245 | " \n", 1246 | " \n", 1247 | " \n", 1248 | " \n", 1249 | " \n", 1250 | " \n", 1251 | " \n", 1252 | " \n", 1253 | " \n", 1254 | "
labeldomainrootrootclasslenshanyuan_ratio
00facebook.comcom0123.0220550.454545
10youtube.comcom0113.0957950.500000
20yahoo.comcom092.6416040.500000
30baidu.comcom093.1699250.500000
40wikipedia.orgorg0133.3346790.500000
\n", 1255 | "
" 1256 | ], 1257 | "text/plain": [ 1258 | " label domain root rootclass len shan yuan_ratio\n", 1259 | "0 0 facebook.com com 0 12 3.022055 0.454545\n", 1260 | "1 0 youtube.com com 0 11 3.095795 0.500000\n", 1261 | "2 0 yahoo.com com 0 9 2.641604 0.500000\n", 1262 | "3 0 baidu.com com 0 9 3.169925 0.500000\n", 1263 | "4 0 wikipedia.org org 0 13 3.334679 0.500000" 1264 | ] 1265 | }, 1266 | "execution_count": 21, 1267 | "metadata": {}, 1268 | "output_type": "execute_result" 1269 | } 1270 | ], 1271 | "source": [ 1272 | "train_data.head(5)" 1273 | ] 1274 | }, 1275 | { 1276 | "cell_type": "code", 1277 | "execution_count": 22, 1278 | "metadata": {}, 1279 | "outputs": [ 1280 | { 1281 | "data": { 1282 | "text/html": [ 1283 | "
\n", 1284 | "\n", 1297 | "\n", 1298 | " \n", 1299 | " \n", 1300 | " \n", 1301 | " \n", 1302 | " \n", 1303 | " \n", 1304 | " \n", 1305 | " \n", 1306 | " \n", 1307 | " \n", 1308 | " \n", 1309 | " \n", 1310 | " \n", 1311 | " \n", 1312 | " \n", 1313 | " \n", 1314 | " \n", 1315 | " \n", 1316 | " \n", 1317 | " \n", 1318 | " \n", 1319 | " \n", 1320 | " \n", 1321 | " \n", 1322 | " \n", 1323 | " \n", 1324 | " \n", 1325 | " \n", 1326 | " \n", 1327 | " \n", 1328 | " \n", 1329 | " \n", 1330 | " \n", 1331 | " \n", 1332 | " \n", 1333 | " \n", 1334 | " \n", 1335 | " \n", 1336 | " \n", 1337 | " \n", 1338 | " \n", 1339 | " \n", 1340 | " \n", 1341 | " \n", 1342 | " \n", 1343 | " \n", 1344 | " \n", 1345 | " \n", 1346 | " \n", 1347 | " \n", 1348 | " \n", 1349 | " \n", 1350 | " \n", 1351 | " \n", 1352 | " \n", 1353 | " \n", 1354 | " \n", 1355 | " \n", 1356 | " \n", 1357 | " \n", 1358 | " \n", 1359 | " \n", 1360 | " \n", 1361 | " \n", 1362 | "
labeldomainrootrootclasslenshanyuan_ratio
2499941zzznnx.irir192.4193820.125000
2499951zzztqrq.htht1102.4464390.000000
2499961zzzvr.susu182.4056390.142857
2499971zzzwtef.com.papa1143.3248630.250000
2499981zzzzuvfbt.co.ukuk1153.1068910.230769
\n", 1363 | "
" 1364 | ], 1365 | "text/plain": [ 1366 | " label domain root rootclass len shan yuan_ratio\n", 1367 | "249994 1 zzznnx.ir ir 1 9 2.419382 0.125000\n", 1368 | "249995 1 zzztqrq.ht ht 1 10 2.446439 0.000000\n", 1369 | "249996 1 zzzvr.su su 1 8 2.405639 0.142857\n", 1370 | "249997 1 zzzwtef.com.pa pa 1 14 3.324863 0.250000\n", 1371 | "249998 1 zzzzuvfbt.co.uk uk 1 15 3.106891 0.230769" 1372 | ] 1373 | }, 1374 | "execution_count": 22, 1375 | "metadata": {}, 1376 | "output_type": "execute_result" 1377 | } 1378 | ], 1379 | "source": [ 1380 | "train_data.tail(5)" 1381 | ] 1382 | }, 1383 | { 1384 | "cell_type": "markdown", 1385 | "metadata": {}, 1386 | "source": [ 1387 | "结果显而易见 正常域名中元音所占的比率远远大于非正常域名!\n", 1388 | "\n", 1389 | "OK,暂时想不到其他的什么特征了,就用这几个建立一个demo版本吧\n", 1390 | "\n", 1391 | "特征有了,下一步干啥呢\n", 1392 | "\n", 1393 | "归一化咯,所谓归一化,就是不数据的范围放缩至一个相同的范围以避免数据跨度或量级的巨大差别而导致训练上的困难或者结果上的偏差\n", 1394 | "sklearn给出了丰富强大的接口来帮你" 1395 | ] 1396 | }, 1397 | { 1398 | "cell_type": "code", 1399 | "execution_count": 23, 1400 | "metadata": {}, 1401 | "outputs": [ 1402 | { 1403 | "name": "stderr", 1404 | "output_type": "stream", 1405 | "text": [ 1406 | "c:\\program files\\python36\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int32 was converted to float64 by StandardScaler.\n", 1407 | " warnings.warn(msg, DataConversionWarning)\n" 1408 | ] 1409 | } 1410 | ], 1411 | "source": [ 1412 | "scaler = preprocessing.StandardScaler()\n", 1413 | "len_scale_param = scaler.fit(train_data['len'].values.reshape(-1,1))\n", 1414 | "train_data['len_scaled'] = scaler.fit_transform(train_data['len'].values.reshape(-1,1),len_scale_param)\n", 1415 | "shan_scale_param = scaler.fit(train_data['shan'].values.reshape(-1,1))\n", 1416 | "train_data['shan_sclaed'] = scaler.fit_transform(train_data['shan'].values.reshape(-1,1),shan_scale_param)" 1417 | ] 1418 | }, 1419 | { 1420 | "cell_type": "markdown", 1421 | "metadata": {}, 1422 | "source": [ 1423 | "ok 现在看一下我们在经过特征工程和数据预处理以后的数据长啥样吧" 1424 | ] 1425 | }, 1426 | { 1427 | "cell_type": "code", 1428 | "execution_count": 24, 1429 | "metadata": {}, 1430 | "outputs": [ 1431 | { 1432 | "data": { 1433 | "text/html": [ 1434 | "
\n", 1435 | "\n", 1448 | "\n", 1449 | " \n", 1450 | " \n", 1451 | " \n", 1452 | " \n", 1453 | " \n", 1454 | " \n", 1455 | " \n", 1456 | " \n", 1457 | " \n", 1458 | " \n", 1459 | " \n", 1460 | " \n", 1461 | " \n", 1462 | " \n", 1463 | " \n", 1464 | " \n", 1465 | " \n", 1466 | " \n", 1467 | " \n", 1468 | " \n", 1469 | " \n", 1470 | " \n", 1471 | " \n", 1472 | " \n", 1473 | " \n", 1474 | " \n", 1475 | " \n", 1476 | " \n", 1477 | " \n", 1478 | " \n", 1479 | " \n", 1480 | " \n", 1481 | " \n", 1482 | " \n", 1483 | " \n", 1484 | " \n", 1485 | " \n", 1486 | " \n", 1487 | " \n", 1488 | " \n", 1489 | " \n", 1490 | " \n", 1491 | " \n", 1492 | " \n", 1493 | " \n", 1494 | " \n", 1495 | " \n", 1496 | " \n", 1497 | " \n", 1498 | " \n", 1499 | " \n", 1500 | " \n", 1501 | " \n", 1502 | " \n", 1503 | " \n", 1504 | " \n", 1505 | " \n", 1506 | " \n", 1507 | " \n", 1508 | " \n", 1509 | " \n", 1510 | " \n", 1511 | " \n", 1512 | " \n", 1513 | " \n", 1514 | " \n", 1515 | " \n", 1516 | " \n", 1517 | " \n", 1518 | " \n", 1519 | " \n", 1520 | " \n", 1521 | " \n", 1522 | " \n", 1523 | " \n", 1524 | " \n", 1525 | "
labeldomainrootrootclasslenshanyuan_ratiolen_scaledshan_sclaed
00facebook.comcom0123.0220550.4545450.043608-0.341005
10youtube.comcom0113.0957950.500000-0.237871-0.113708
20yahoo.comcom092.6416040.500000-0.800828-1.513712
30baidu.comcom093.1699250.500000-0.8008280.114791
40wikipedia.orgorg0133.3346790.5000000.3250870.622631
\n", 1526 | "
" 1527 | ], 1528 | "text/plain": [ 1529 | " label domain root rootclass len shan yuan_ratio len_scaled \\\n", 1530 | "0 0 facebook.com com 0 12 3.022055 0.454545 0.043608 \n", 1531 | "1 0 youtube.com com 0 11 3.095795 0.500000 -0.237871 \n", 1532 | "2 0 yahoo.com com 0 9 2.641604 0.500000 -0.800828 \n", 1533 | "3 0 baidu.com com 0 9 3.169925 0.500000 -0.800828 \n", 1534 | "4 0 wikipedia.org org 0 13 3.334679 0.500000 0.325087 \n", 1535 | "\n", 1536 | " shan_sclaed \n", 1537 | "0 -0.341005 \n", 1538 | "1 -0.113708 \n", 1539 | "2 -1.513712 \n", 1540 | "3 0.114791 \n", 1541 | "4 0.622631 " 1542 | ] 1543 | }, 1544 | "execution_count": 24, 1545 | "metadata": {}, 1546 | "output_type": "execute_result" 1547 | } 1548 | ], 1549 | "source": [ 1550 | "train_data.head(5)" 1551 | ] 1552 | }, 1553 | { 1554 | "cell_type": "markdown", 1555 | "metadata": {}, 1556 | "source": [ 1557 | "看上去是一些靠谱的特征了,那么最后一步,把我们需要的特征都拿出来,带入模型训练\n", 1558 | "\n", 1559 | "首先,我们需要的列:rootclass,yuan_ratio,len_scaled,shan_scaled是我们所需要的,把他们拿出来,转化成numpy矩阵的格式" 1560 | ] 1561 | }, 1562 | { 1563 | "cell_type": "code", 1564 | "execution_count": 25, 1565 | "metadata": {}, 1566 | "outputs": [], 1567 | "source": [ 1568 | "train_pre = train_data.filter(regex = 'label|yuan_ratio|len_scaled|shan_scale_param|rootclass')\n", 1569 | "train_pre = shuffle(train_pre)" 1570 | ] 1571 | }, 1572 | { 1573 | "cell_type": "markdown", 1574 | "metadata": {}, 1575 | "source": [ 1576 | "shuffle()是一个很好用的函数,他将帮你把你的数据集打乱顺序,避免相同label的数据都堆积在一起\n", 1577 | "\n", 1578 | "好啦!接下来,我们把数据转化成矩阵,并且切分成训练集和测试集(正常来说还应该有一个数据集叫做验证集,本例只作简单演示,就去掉啦)" 1579 | ] 1580 | }, 1581 | { 1582 | "cell_type": "code", 1583 | "execution_count": 26, 1584 | "metadata": {}, 1585 | "outputs": [ 1586 | { 1587 | "name": "stderr", 1588 | "output_type": "stream", 1589 | "text": [ 1590 | "C:\\Users\\aldin\\AppData\\Roaming\\Python\\Python36\\site-packages\\ipykernel_launcher.py:1: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n", 1591 | " \"\"\"Entry point for launching an IPython kernel.\n" 1592 | ] 1593 | } 1594 | ], 1595 | "source": [ 1596 | "train_pre =train_pre.as_matrix()\n", 1597 | "y_train = train_pre[0:200000,0]\n", 1598 | "x_train = train_pre[0:200000,1:]\n", 1599 | "y_test = train_pre[200000:201000,0]\n", 1600 | "x_test = train_pre[200000:201000,1:]" 1601 | ] 1602 | }, 1603 | { 1604 | "cell_type": "markdown", 1605 | "metadata": {}, 1606 | "source": [ 1607 | "OK 数据处理的过程到这里就已经全部结束了,接下来要做的,就是选择一个合适的模型进行训练了\n", 1608 | "\n", 1609 | "本次我们选择经典的SVM函数,并选择RBF作为核方法" 1610 | ] 1611 | }, 1612 | { 1613 | "cell_type": "code", 1614 | "execution_count": 28, 1615 | "metadata": {}, 1616 | "outputs": [ 1617 | { 1618 | "name": "stdout", 1619 | "output_type": "stream", 1620 | "text": [ 1621 | "training finished\n" 1622 | ] 1623 | } 1624 | ], 1625 | "source": [ 1626 | "model = SVC(kernel='rbf',C=0.4).fit(x_train,y_train)\n", 1627 | "print ('training finished')" 1628 | ] 1629 | }, 1630 | { 1631 | "cell_type": "code", 1632 | "execution_count": 30, 1633 | "metadata": {}, 1634 | "outputs": [ 1635 | { 1636 | "name": "stdout", 1637 | "output_type": "stream", 1638 | "text": [ 1639 | "[0.88059701 0.87 0.865 0.9 0.89447236]\n" 1640 | ] 1641 | } 1642 | ], 1643 | "source": [ 1644 | "pre = cross_validation.cross_val_score(model,x_test,y_test,cv = 5)\n", 1645 | "print (pre)" 1646 | ] 1647 | }, 1648 | { 1649 | "cell_type": "markdown", 1650 | "metadata": {}, 1651 | "source": [ 1652 | "使用测试机集做了一哈验证,平均准确率在88%上下,emmmm 效果差强人意,毕竟只是一个小样例,要求不能太高哈23333\n", 1653 | "\n", 1654 | "本篇over 如果想了解关机器学习算法 可以参考 李航博士的 《统计学习方法》 和周志华教授的 《机器学习》\n", 1655 | "\n", 1656 | "下一篇将会尝试使用深度学习的方法完成这一任务并大大提升准确率" 1657 | ] 1658 | }, 1659 | { 1660 | "cell_type": "code", 1661 | "execution_count": null, 1662 | "metadata": {}, 1663 | "outputs": [], 1664 | "source": [] 1665 | } 1666 | ], 1667 | "metadata": { 1668 | "kernelspec": { 1669 | "display_name": "Python 3", 1670 | "language": "python", 1671 | "name": "python3" 1672 | }, 1673 | "language_info": { 1674 | "codemirror_mode": { 1675 | "name": "ipython", 1676 | "version": 3 1677 | }, 1678 | "file_extension": ".py", 1679 | "mimetype": "text/x-python", 1680 | "name": "python", 1681 | "nbconvert_exporter": "python", 1682 | "pygments_lexer": "ipython3", 1683 | "version": "3.6.6" 1684 | } 1685 | }, 1686 | "nbformat": 4, 1687 | "nbformat_minor": 2 1688 | } 1689 | -------------------------------------------------------------------------------- /dga/word2vec.txt: -------------------------------------------------------------------------------- 1 | 37 100 2 | e 0.22894579 0.018125884 -0.047007907 0.026391089 -0.08410629 0.042102605 0.19332448 0.04419649 0.22332841 0.12207879 0.20176673 0.2137046 0.144299 0.1077951 0.17956123 0.11858179 -0.33023158 -0.23130865 0.079242095 -0.1778481 0.18652116 0.20735946 -0.09724756 -0.29475522 -0.040154807 -0.0527085 0.08248274 0.028697744 0.20734191 0.1434786 -0.18361384 0.2517993 0.22861674 -0.018833853 -0.12170067 -0.24051236 0.14046186 0.18904021 -0.052375365 -0.019918216 -0.00026703495 0.065446615 0.01539892 0.17162453 0.23800771 0.17657512 0.12586145 -0.34606647 -0.5106507 0.0014673104 -0.11829126 -0.15732902 0.00059355557 -0.117669284 0.16796382 -0.22589684 0.18324699 -0.1432052 -0.10824973 -0.056051962 -0.03304817 -0.19836514 0.043790042 -0.07902638 -0.38936022 -0.053455934 -0.06137043 0.010520164 0.06788945 -0.09357034 0.08171352 0.037035745 0.23434442 -0.066095695 -0.15416895 -0.09993183 -0.06499494 0.29420602 0.3641291 0.077296965 -0.58880377 0.28161004 0.26197237 -0.09671587 0.07037314 -0.027387964 0.022457862 0.33194247 0.23548254 -0.15657422 -0.36731052 -0.14385466 -0.30986518 -0.01667506 -0.013026664 -0.04292883 -0.14403225 0.41363692 0.18245754 -0.30445033 3 | a 0.21127716 0.14811696 -0.03003102 0.05515453 0.06496612 -0.03163473 0.0717927 0.17556895 0.1534142 0.047990672 -0.11152343 0.3526315 0.05873441 0.07725593 -0.031657092 0.27710766 -0.18533958 -0.27010047 0.038175747 -0.08855002 0.15211913 0.06758541 -0.19029911 -0.031179864 -0.102941684 -0.21563244 -0.16258068 -0.021262076 0.29576904 0.25551277 -0.19412133 0.32796228 0.12475944 -0.06434012 -0.20379956 -0.1262172 -0.07483858 0.028510088 0.0040211985 -0.08000011 -0.12535138 -0.003330886 0.1633749 0.0709195 0.23351166 0.26572466 0.38097504 -0.33184552 -0.5133895 -0.04694748 -0.090785466 -0.07870579 -0.00729043 0.1079951 0.031106982 -0.42863268 -0.033870514 -0.009291893 0.07710043 0.0560411 0.067954846 -0.16432801 0.06393452 -0.2838682 -0.14935917 -0.11627777 -0.19536492 0.13162853 0.05711524 -0.33464226 -0.19463703 0.115609266 0.3494651 -0.04769006 -0.22387631 -0.13531409 -0.08333421 0.08529311 0.1341444 0.106381 -0.55082947 0.24773557 0.15607637 -0.043889586 0.07568372 0.0297078 0.07108098 0.39598778 0.26912645 -0.11612211 -0.0066814744 -0.09194973 -0.1752576 -0.1068538 -0.15394345 0.033124976 -0.30770463 0.28185263 0.1125245 -0.21409176 4 | o 0.17241064 -0.11035399 -0.19319221 0.08719776 0.012665477 0.063720874 0.14657238 0.108920276 0.17844374 0.18124618 0.09626339 0.24243796 0.12515062 0.17865439 0.03858434 0.19961677 -0.18180715 -0.12171747 0.022241244 0.058635764 0.21420005 0.19200677 -0.15092774 -0.02963157 -0.1997332 -0.1686099 -0.15107721 -0.01915387 0.22809373 0.06808437 -0.2673725 0.14992628 0.1084274 -0.14297077 -0.06197483 -0.19030072 0.020712152 0.1066805 -0.032178707 0.025710855 -0.08665498 0.031103078 0.048560753 0.14175373 0.27104673 0.14172524 0.19032608 -0.25986394 -0.28857085 0.09405997 -0.014304649 -0.10768316 0.019913027 -0.004183936 0.061272252 -0.29369318 0.04766315 0.02754595 -0.11497659 -0.09197872 0.036736388 -0.22072764 -0.030539906 -0.27466974 -0.088670015 -0.11645919 -0.03442033 0.048364207 0.052036628 -0.2041584 -0.0890612 0.082437105 0.22399682 0.023273056 -0.17331229 -0.08684524 -0.12465624 0.18048517 0.15067668 0.21664228 -0.45735112 0.2692619 0.2516533 -0.079208806 0.11983368 0.049332608 0.13919015 0.3201688 0.1102203 -0.1598032 -0.15656872 0.06059257 -0.27595767 -0.05109261 -0.12955804 0.0150232455 -0.20562074 0.31906363 0.21484847 -0.1636679 5 | i 0.08579124 -0.15353522 0.14532387 0.17162168 0.030491048 0.21689677 0.09850071 -0.03441859 0.12754868 0.07854485 -0.063718274 0.26944476 0.13883087 0.16292652 0.12092153 0.049513735 -0.35713485 -0.07380078 0.013431112 -0.07059379 0.20382492 0.0149470605 -0.24065535 0.06838101 -0.376426 0.38805887 0.26093885 -0.40312588 0.12572451 0.22894636 -0.34405655 0.02117287 0.011127326 -0.2525314 -0.20267929 -0.37499923 0.085586764 0.072025575 -0.028773377 -0.09175217 -0.14791872 -0.054004148 0.20766218 0.15477945 -0.08297017 -0.00020648059 0.1284345 -0.0743652 -0.339893 -0.06824735 0.072790354 -0.147597 -0.09827369 -0.114853315 0.005115119 -0.14271489 0.24529772 -0.015054964 -0.08862493 -0.22117288 -0.078903824 -0.15407997 -0.037262432 -0.13225567 -0.18591478 -0.0069512017 -0.0482997 0.04666416 0.06428531 -0.1747329 -0.18825261 0.1530093 0.25019535 0.13215926 -0.015347618 -0.018832192 -0.19106537 0.012065393 0.0810764 -0.12915671 -0.45243868 0.07409338 0.27199277 -0.15171236 0.16402017 0.060268417 0.19184433 0.26624554 0.20890296 -0.028436264 -0.19546644 0.029902337 -0.17480354 0.07310163 -0.08564797 0.021542743 -0.0030476353 0.25609583 0.053997647 -0.0931804 6 | s -0.038906075 -0.19186044 0.058106318 0.034708466 0.115723334 -0.05148212 0.19656909 -0.036778096 0.2144819 -0.031298615 0.10551325 0.07181609 0.1356639 0.06627228 0.095314175 0.2233329 -0.06858552 0.03285247 -0.030802274 0.12340899 0.14025427 0.15989256 -0.089216724 0.038588263 -0.14061545 0.18755326 0.095213935 0.0013497722 0.082043424 -0.023433786 -0.2122101 -0.01430143 -0.08398005 -0.013458209 -0.009350313 -0.11256453 0.12198539 -0.008325632 -0.017762495 0.23063074 -0.03340255 -0.005555744 -0.075714335 0.19716592 0.21898748 0.06973767 0.2705313 -0.14624457 -0.16610841 0.09301039 0.13343658 -0.09647653 0.15495495 -0.23481649 0.12357538 -0.2015125 0.18966414 -0.06488622 -0.04613218 -0.031202234 0.007159134 0.005381707 -0.14700487 -0.19526857 -0.17941949 -0.09576967 0.076152846 0.08654619 -0.15737411 0.03609946 0.021728737 0.06443218 0.056605686 0.05138919 -0.12325241 -0.19474089 0.056729276 0.12273643 0.12193133 0.055633757 -0.20060377 0.08457941 0.21545549 0.10326889 0.010303045 -0.018707287 0.119305335 0.36140934 -0.03586475 -0.40713573 -0.2681094 -0.07707229 -0.15150537 -0.09441615 0.010284476 0.03640932 -0.29858735 0.30975756 0.2780172 0.05371121 7 | r -0.20327458 -0.23636568 0.09384572 0.031158773 0.2289692 0.0303982 0.16613124 -0.10020323 0.31345224 -0.14411947 0.10943919 0.0010986998 0.11934069 0.0040077274 0.055554245 0.15027158 0.024243388 0.0668375 -0.27703223 0.22066317 0.23936762 -0.14624953 -0.11353286 0.29784188 -0.30960435 0.41315463 0.076330535 -0.21461122 -0.2324101 0.15791667 -0.33390176 -0.071163915 -0.18273494 -0.3676166 0.055333722 -0.16521733 0.06673048 0.073422216 0.13395134 0.26863196 0.16332804 0.03315188 -0.109662294 0.18849386 -0.11014484 0.25272954 0.2304268 0.104182936 -0.067244954 0.022285644 0.3289033 -0.22867307 0.08606067 -0.35269985 0.0996878 -0.07968207 0.2624428 0.14367388 -0.11171791 -0.24831973 0.09861369 0.11365819 -0.30176517 -0.17232881 0.026358908 -0.03730847 0.20284083 0.008373554 -0.22996326 0.0010437907 -0.23413369 0.07686755 -0.036691856 0.14172187 0.23351674 0.01841283 -0.07065376 -0.10166102 -0.057834752 0.00158888 -0.06887049 -0.099017456 0.20875743 0.16159712 0.040514786 0.16780278 0.18985543 0.29391092 0.0068786386 -0.28702593 -0.19144356 0.20293295 -0.0945797 -0.14578435 -0.019351669 0.21579725 -0.20739892 0.26606876 0.24787079 0.23119392 8 | t 0.051571563 -0.044262588 0.19267252 -0.071697436 0.02582553 -0.09823833 0.29404947 -0.12359169 0.08968029 -0.037464995 0.15589008 0.22228947 0.13961896 0.16822383 0.083594844 0.119774796 -0.122996986 0.021110581 -0.2280308 0.085657895 0.19839115 0.13722587 -0.025366398 -0.08281521 -0.04566757 0.18459238 0.046905044 0.07509397 -0.118559904 0.1488687 -0.27900502 0.08711708 -0.035022885 -0.09289099 -0.012177606 -0.14905247 0.1327146 -0.07145163 -0.11523198 0.02790688 0.04719339 0.1168076 -0.11890315 0.06262999 0.0504405 0.30570874 0.020443667 -0.0321049 -0.045151446 0.22021271 -0.040174533 -0.13789885 0.15037419 -0.09608593 0.24317545 -0.108704746 0.38741362 -0.2926996 0.18834542 -0.08676612 -0.060467556 0.04454685 -0.10190365 -0.0539734 -0.17071685 0.038140904 0.1986577 0.19001889 -0.08690834 0.030704757 0.19136818 0.003452501 0.02443334 -0.23380738 -0.18563004 -0.2318813 0.20030041 0.15944844 0.155246 0.16214003 -0.3249658 0.16820632 0.016981067 0.17361481 0.016795741 -0.051644772 0.016251558 0.28947088 -0.25431404 -0.16662377 -0.3515427 0.041902866 -0.11543044 -0.0009131393 -0.0049342373 -0.14659387 -0.18363301 0.2578201 0.13474533 0.043137334 9 | n -0.15715796 -0.03269516 0.19859166 0.1088939 0.15357296 -0.3610224 0.21020764 0.10423414 0.12183934 -0.19091098 0.29871312 0.26966166 0.0021514257 0.02403689 0.13967694 0.3098722 0.017385919 0.05639457 -0.08953687 0.16507633 0.23461512 -0.09380742 0.06877612 0.1392994 -0.0985702 0.2680957 -0.06640008 0.10189534 -0.041834775 0.07114711 -0.14174774 -0.035780665 -0.02987549 -0.16890872 0.18154193 -0.19957766 -0.06486757 0.12269939 0.020898655 0.16835368 0.15734853 -0.031830646 -0.17632274 0.02092848 -0.024912698 0.3019352 0.17609532 0.0895882 -0.2176814 -0.013572483 0.31280953 -0.0025129502 0.048557546 -0.31267792 0.15243411 -0.17912088 0.10530732 -0.1536216 -0.042834997 -0.07519403 0.21967317 0.12131074 -0.044528674 -0.09535464 -0.28027046 0.10899969 0.090873145 0.27388793 -0.043249074 0.073419765 0.05525186 0.04717896 -0.1870437 -0.15909097 -0.10631558 -0.15548371 -0.012766979 0.2547215 -0.010949443 -0.0011207255 -0.061634373 0.031083426 -0.028094629 0.0808704 0.06582945 -0.10414855 -0.16068223 0.17076033 0.01232191 -0.3292273 -0.17298225 0.1287373 -0.07234306 -0.13679287 -0.05272441 0.14064497 -0.2483139 0.33431894 0.26566845 0.18120767 10 | l -0.048551634 -0.19914386 0.08222875 0.051749595 0.025738852 -0.10973121 0.23748897 0.0019035722 0.03639035 -0.047182072 0.32025215 0.18143576 0.11012035 0.18656953 0.08596237 0.107006304 0.011547315 0.11148613 -0.06996193 0.16087556 0.20308693 -0.06203771 0.014369187 0.029327983 -0.05201956 0.24572338 0.048274938 0.019238722 -0.11653762 0.08461819 -0.086142786 0.00086884294 -0.096784584 -0.042108785 0.14708292 -0.17394486 0.06557134 0.10651491 -0.041283846 0.18441342 0.18713129 0.11261896 -0.09630408 -0.0010789753 -0.0053827087 0.23745346 0.14494638 0.16481566 -0.035824053 -0.032790285 0.1491452 -0.1259114 0.06675228 -0.36129922 0.12302404 -0.10279252 0.14231992 0.09799287 -0.26159072 0.05925392 0.10463807 0.23049992 -0.096925534 -0.1846797 -0.15399337 0.03013857 0.20515685 0.07961617 -0.12642978 0.10915804 0.01608021 0.10146244 -0.024828238 -0.028264046 -0.1647261 -0.077488504 0.11618961 0.08667462 0.019568583 0.05047856 -0.08995657 0.0225545 -0.029513646 0.027166415 0.0334521 -0.07422752 0.05197258 0.19981116 -0.019706763 -0.2139917 -0.27181867 0.10430023 -0.01795804 -0.058455013 -0.13021705 0.08123328 -0.052179098 0.27725515 0.053214464 0.22276893 11 | c 0.08000457 -0.08330582 0.2453407 -0.2931559 0.028822 -0.30987367 0.062729925 -0.083584264 0.10434201 0.020334028 -0.01850615 0.15778394 0.1939753 0.13978748 0.15650219 0.09595791 -0.062376272 -0.035523467 -0.07557824 0.10982105 0.22416735 0.076135226 0.02041246 0.104193695 -0.0072231013 0.12848441 0.12529355 0.01109697 0.13087094 -0.00732543 -0.28233492 -0.072510764 -0.0037715344 -0.071858674 -0.09532995 -0.13438103 0.15744628 -0.050115816 -0.037386745 0.109830126 -0.007858402 0.14937218 -0.02855836 0.12448153 0.29072925 0.06363767 0.1306279 -0.122644186 -0.02280697 0.09380472 0.009748608 -0.00087719946 0.046217233 -0.071330614 0.105685316 -0.23214665 0.23194784 -0.03208675 0.18516053 -0.09387045 -0.053946797 -0.062960155 -0.12759787 -0.14678265 -0.15690675 -0.13926685 0.12854733 0.02502689 0.01951735 -0.059447367 0.017551314 0.10849616 0.06442824 -0.1638584 -0.18980858 -0.043902557 0.09503061 0.042790785 0.11453516 0.13607611 -0.21599218 0.080438614 0.20710008 0.23613109 -0.19927496 -0.09485832 0.13768028 0.20073548 0.047885954 -0.26737127 -0.15453348 -0.15976828 -0.1515766 -0.013798511 -0.13175327 0.022583863 -0.17367665 0.3059841 0.08350704 -0.03470979 12 | m 0.044085637 -0.15230167 0.13428076 -0.01328807 -0.012635109 -0.15117355 0.20662898 -0.050564382 0.04522055 0.008407537 0.21055092 0.14035371 0.1614966 0.18903442 0.19000924 -0.0060392763 -0.014484248 0.06842681 0.015658347 0.035436638 0.265111 -0.07612328 0.03803459 0.11329411 -0.11816754 0.36420166 0.2793012 0.008441783 -0.15503058 0.06341103 -0.11931916 -0.10939805 -0.00893742 -0.108218364 -0.037419055 -0.1944905 0.12317719 0.14205419 -0.03279027 0.21149494 0.11442936 0.19663261 -0.096492596 0.08218529 -0.027971566 0.07933011 0.014139461 0.16922581 0.021938158 -0.007847776 0.13709748 -0.12844145 0.024598267 -0.3352289 0.10471103 -0.10531424 0.21474554 0.09260015 -0.1821319 0.02180027 -0.040729176 0.19193923 -0.054027162 -0.04968127 -0.24506718 -0.0049960897 0.2707473 0.036457825 -0.023052951 0.10886628 0.05585261 0.09242132 -0.102869816 -0.014259061 -0.23200555 -0.0034001905 0.1429071 0.08826313 0.07309256 -0.045844533 -0.16386724 -0.0034340834 0.01733052 0.05073898 -0.017130718 -0.15897289 0.069454804 0.08487128 0.01977906 -0.106472515 -0.2629216 0.05996235 -0.1428506 -0.012611174 -0.25503466 0.04196877 0.054529205 0.28759983 0.05229882 0.1815697 13 | d 0.017383365 -0.13716057 0.2949029 -0.06199102 -0.08093327 -0.18764783 0.18196931 -0.07593696 0.0760895 -0.1295881 0.24118142 0.2014097 0.19134977 0.1678178 0.09810296 0.18012947 -0.10538177 0.046037067 0.0015852929 0.04068107 0.2313376 -0.048293427 2.8288754e-05 -0.05518404 0.009440827 0.23652285 0.14618093 0.047574192 -0.009265087 -0.021858027 -0.13267243 0.013915686 -0.13707317 -0.034453746 0.0815704 -0.19007906 0.12735792 0.054074932 -0.02511241 0.15683855 0.07042538 0.08108197 -0.027077124 0.08774708 0.025747458 0.09877187 0.13808525 -0.015637197 -0.0667053 0.06207111 0.09061058 -0.0707796 0.06739539 -0.10915792 0.13443996 -0.1593033 0.24231735 -0.10487516 -0.062210716 0.09420475 -0.061529275 0.20280473 0.07039333 -0.18639512 -0.32782438 -0.04117493 0.13286397 0.07464029 0.041200798 0.08440293 0.20271082 -0.010833351 -0.06288818 -0.14645678 -0.2694866 -0.14088172 0.1660197 0.13049613 0.045604825 0.0490851 -0.16395184 0.045036666 0.09743542 -0.02892811 0.0551652 -0.039587248 0.026036907 0.063418694 -0.08332066 -0.2575671 -0.21684201 -0.036762215 -0.0073884944 0.019529132 -0.14741892 0.06451546 0.10173043 0.27500647 0.105756894 0.15968797 14 | u -0.0073406594 -0.028009437 -0.17585872 -0.107637174 0.01027438 -0.023028746 0.1269347 0.111341774 -0.070842884 0.17183873 0.032443807 0.2068273 0.10692973 0.23336956 -0.08387705 0.18644425 -0.13910075 -0.09687045 -0.04263326 0.0030651574 0.22196819 -0.055053424 -0.15223096 0.06929536 -0.06537478 0.0436268 0.08306868 0.07537791 0.010320458 0.21634068 -0.1347581 0.10239488 0.1128446 -0.1567407 -0.007041023 -0.07048346 0.03133988 0.007886676 0.027175495 -0.06903642 -0.08509622 0.0583257 0.22452044 -0.0018463854 0.08749768 0.27111855 0.04505391 -0.18933856 -0.009482135 0.1466052 0.051436044 -0.15379842 0.20748207 0.009357561 0.011487865 -0.25649017 0.07785343 0.022872359 0.0094504235 0.05409313 -0.020444114 -0.06928668 0.098536044 -0.06860429 -0.13906056 -0.046036597 0.13984309 -0.087815635 -0.020382917 -0.20997903 -0.06458964 0.018012868 0.30056703 -0.11324126 -0.29543832 -0.03672114 -0.0069154273 0.11037812 0.08863553 0.20385626 -0.41320607 0.28151765 0.17076047 -0.010347054 0.028610142 -0.11256742 0.12744789 0.15663426 0.14239341 -0.0073220045 -0.18215615 0.06915716 -0.14931116 -0.1470049 -0.35397407 -0.0033556526 -0.21471384 0.28188688 0.057611402 -0.24946018 15 | p 0.07161328 -0.18414274 0.124919794 -0.2135404 -0.014137368 -0.24078125 0.23159668 -0.15286137 0.01840469 0.12833591 0.11921622 0.1747227 0.26824084 0.21670537 0.28430748 0.03754729 -0.11138533 -0.038502723 0.057748184 -0.031249322 0.28353658 0.14727202 0.08045136 0.085289866 0.05558851 0.2784051 0.30122817 0.14110534 0.040095095 -0.0065152207 -0.09707669 -0.097474515 0.13208471 -0.06749392 0.0009859109 -0.21851803 0.12911223 0.086672634 -0.081714064 0.0845177 0.029532766 0.08595427 -0.09070171 0.15308212 0.18268627 0.09285502 -0.11547787 0.027929712 0.04343557 0.020659618 0.065448344 -0.07095329 0.089826666 -0.23045984 0.1349074 -0.031824708 0.18186863 -0.052882556 -0.05481395 -0.028017564 -0.04275991 -0.10879742 -0.031883456 0.091686316 -0.2179221 -0.036103304 0.22455652 0.060402837 0.09004586 0.04117303 0.051705968 0.0116814235 0.062016785 0.06862172 -0.261973 -0.053262074 0.053808287 0.20308614 0.3252411 0.05030674 -0.25896332 0.05991141 0.115146324 0.23390774 -0.12036977 -0.25397167 0.086755626 0.13543075 0.06880622 -0.10234195 -0.26424524 -0.0261892 -0.23767613 0.016381156 -0.21006028 -0.06903735 -0.05201222 0.28107873 0.1360687 -0.16828234 16 | b -0.104696065 -0.07081813 0.19224901 -0.20937015 0.05933781 -0.25705627 0.21469428 -0.18465026 -0.06288924 -0.0029247876 -0.15480913 0.23668596 0.2778858 0.11907464 -0.012278035 0.33900526 -0.01676178 -0.17450097 -0.12535073 -0.029635707 0.36625585 0.1223491 -0.14504716 0.22621936 0.022769647 0.15206039 -0.008880497 0.113687225 0.21841896 0.07502701 -0.11102672 0.065996744 -0.11003207 -0.18173969 0.103972204 -0.18277985 0.016486302 0.07203452 -0.012486204 -0.03755638 -0.02173766 -0.063362524 0.02049098 0.06001514 0.10021142 0.13000533 0.010651847 -0.025989538 0.018391406 -0.04659886 0.117142454 -0.0346855 -0.03494893 0.11306936 -0.038175322 -0.29995254 -0.03789865 0.10137964 -0.08394757 0.26574087 -0.020555396 0.040980563 0.06782771 -0.015778868 -0.19354145 -0.12546737 0.0937983 0.17950109 0.075521976 -0.19649467 -0.16502936 -0.16004442 0.20488039 0.17871623 -0.15691493 -0.18356697 -0.089240305 0.063799255 0.09714829 0.1172592 -0.22972311 -0.053596426 0.20857319 0.2280078 0.11659212 -0.09508251 0.09388824 0.011119666 0.1373837 -0.15320948 0.144054 0.08480063 -0.08527917 0.04873432 -0.20346624 -0.079291925 0.20172316 0.16906442 0.15233266 -0.16405763 17 | g 0.08890391 -0.25260854 0.26048005 -0.07638261 -0.003951663 -0.15013239 0.14083925 -0.007170578 0.03958312 0.074520186 0.1114248 0.27694714 0.2345191 0.27585545 0.09477804 0.11210592 -0.1670766 0.07934381 0.019158963 0.16975617 0.17504759 -0.045596484 0.0031231304 -0.0157248 -0.088738255 0.32086805 0.134235 -0.0036868881 0.11323218 -0.04317198 -0.20103405 -0.051753093 -0.031027427 0.007400271 0.034389198 -0.16018811 0.1913402 -0.1699395 -0.06616845 0.110246144 -0.02580875 0.0273535 0.16841222 0.04019162 0.22346082 0.023787402 0.12806514 0.0035551253 0.05098447 0.14723533 0.030489128 0.06401364 0.07712204 -0.13949172 0.057822578 -0.17066292 0.20283782 -0.05250878 -0.080606714 -0.057363413 -0.0042529893 0.035941854 -0.023998281 -0.22075866 -0.09693966 -0.062186863 0.0851893 0.0710045 0.025248092 0.060380198 0.033611633 0.17308885 0.10703289 -0.11702216 -0.25705183 -0.09604693 0.1314916 0.09430825 0.021011824 0.054558106 -0.20141174 0.06540118 0.11449064 0.06259666 -0.058402438 -0.17886415 0.18739349 0.094575256 -0.012264629 -0.13857798 -0.19965805 0.037693426 -0.09540148 0.016736949 -0.11653018 -0.11143459 -0.0803067 0.12832536 -0.027294705 0.028843135 18 | h -0.08521921 -0.43004262 -0.0021144233 -0.13937066 0.005849196 -0.08581845 0.13572668 -0.032554295 -0.06381067 0.047157533 0.25402844 0.1734149 0.09236836 0.2269508 0.13458976 0.20560902 -0.13976839 0.07258417 0.059327792 0.25786886 0.18601635 -0.030350339 -0.05299338 0.14910506 -0.058754727 0.31133848 0.20966767 -0.004724338 0.028380662 0.035884004 -0.09118581 -0.18648262 0.00580773 -0.13068683 0.19442606 -0.20906436 -0.07478274 0.11055508 0.0381673 0.03384025 -0.06269051 -0.022189246 -0.04817212 0.055856902 0.014001538 0.19950208 0.01544642 0.036800805 0.090606295 -0.025884375 0.1979778 -0.13444613 0.21743447 -0.21799368 0.059929416 -0.04718893 0.15091193 -0.0012309143 -0.18942167 -0.02376919 0.14182714 -0.08343895 -0.062540546 -0.085126966 -0.06445169 0.11243091 0.20191188 -0.02417418 -0.08138987 0.06261451 -0.02344868 0.09126904 0.08156025 0.15367097 -0.16060902 -0.08620386 -0.07366721 0.17839305 0.07410673 0.049605362 -0.108898334 -0.0040154723 0.108226225 0.05885973 -0.0034900478 -0.095353805 0.14464733 0.19016711 0.05588286 -0.22560573 -0.2297222 0.041668776 0.041907966 -0.09816554 -0.13897483 0.13410582 -0.25734228 0.15941775 0.12405148 -0.06881953 19 | k -0.09215546 -0.24799444 0.023569463 -0.07086082 0.035207786 -0.06996515 0.15231064 0.011192847 -0.08132726 0.08835065 0.12605287 0.18704653 0.169136 0.22775751 0.03709306 0.1858321 -0.06178588 0.07635303 -0.020812545 0.15504664 0.16563979 -0.004367251 -0.042248104 0.05405794 -0.0071436176 0.3036857 0.08139407 0.049530808 0.07760046 -0.013812358 -0.07118335 -0.051371977 -0.050560176 0.0016788488 0.17559248 -0.14872405 0.066718094 -0.041319244 -0.030021295 0.039744146 0.023707373 -0.030719196 0.09004138 -0.0082294755 0.12048634 0.1302152 0.10688799 0.025753187 0.052864775 0.034978934 0.12825412 -0.015645921 0.13837712 -0.19301565 0.022279933 -0.14168285 0.051956333 0.039628316 -0.16015643 0.07203872 0.0875609 0.036005765 -0.027894925 -0.1381202 -0.08372142 0.0018328312 0.14934878 0.07644203 -0.076377496 0.016239043 -0.050764423 0.08129476 0.18336894 0.05499936 -0.21597047 -0.14055434 0.0052526584 0.13710757 0.030599942 0.064412616 -0.12328008 0.09640631 0.063444495 0.08447667 0.03470835 -0.14717673 0.12075886 0.15262917 0.031789325 -0.19177091 -0.15516984 0.088593245 -0.06020588 -0.06793137 -0.12204909 -0.0470094 -0.155208 0.17068525 0.059937343 -0.019082757 20 | y -0.03304683 -0.24198124 0.10167503 -0.13710599 0.04410612 -0.08346686 0.11977929 -0.068828836 -0.082509235 0.14051656 0.09369337 0.22345321 0.20914675 0.27898887 0.044384174 0.10451268 -0.13117087 0.040781535 -0.15194896 0.21966021 0.21917139 0.18355171 -0.15484741 0.049834482 -0.090931945 0.18305424 -0.024018737 -0.10375332 0.24082468 0.024596108 -0.26619908 -0.064383775 -0.11641643 -0.115010984 0.1428091 -0.20327704 0.11970474 -0.0404396 -0.14467633 -0.028246716 -0.05099949 -0.01716773 0.08336503 -0.055336736 0.18651785 0.02662152 0.013132311 0.0017866433 0.029918425 0.064123385 0.012834428 -0.0156074185 -0.022298945 -0.13634722 -0.03345883 -0.19295157 0.051964726 0.064791106 -0.11086943 0.036432005 0.009650755 -0.016004488 -0.10274735 -0.14189826 -0.09968405 -0.060301706 0.13413294 0.07714425 -0.07793404 -0.11132174 -0.086361594 0.11761092 0.21430156 -0.029785164 -0.18466778 -0.11574724 -0.032593075 0.068989605 -0.0028003578 0.17539974 -0.17489694 0.06118515 0.20741248 0.12677209 0.016121365 -0.074178405 0.16773063 0.19094107 0.069364324 -0.23906209 -0.15187147 0.0029179696 -0.020240748 0.08374939 -0.060633272 -0.08256757 -0.001965709 0.26923022 -0.0027070218 -0.039023764 21 | f 0.014668905 -0.107221834 0.16447137 -0.26872578 0.017281312 -0.299774 0.10093116 -0.057283532 -0.08774917 0.12902893 0.12182817 0.23479006 0.2242874 0.24042939 0.18308444 0.075035445 -0.01800861 0.1616582 -0.05378137 -0.046837535 0.22277457 0.10698119 -0.03475638 0.1396006 0.16319972 0.19215883 0.07374807 0.027177125 0.05407101 -0.023786176 -0.083753444 0.039258666 0.09059716 -0.0067064073 0.043450657 -0.18125819 0.08067583 -0.06522509 -0.094865985 0.067238435 0.01954378 0.028229948 0.089013405 0.031953923 0.0092187105 0.12823088 0.03614065 0.044994846 0.007025591 -0.021992633 0.14171796 -0.02309716 0.18528858 -0.20936075 0.13768436 -0.07939527 0.15905213 -0.015559245 -0.058800597 0.04461056 0.07462226 0.04248818 -0.049244817 -0.026953027 -0.21038863 0.017589383 0.17225964 0.052272584 -0.009062194 -0.10318616 0.040749926 -0.00905727 0.14774683 -0.058274984 -0.3124769 -0.12755331 0.04914195 0.16960758 0.15783292 0.07482018 -0.2075715 0.16547477 0.060000326 0.1114354 0.017000498 -0.1389587 0.015033586 0.21574683 -0.01623313 -0.21697626 -0.25328428 0.032935794 -0.17343922 -0.020569284 -0.24502872 -0.032603648 -0.08584067 0.282617 0.14275417 -0.004787791 22 | w -0.032410894 -0.22031659 0.031349532 -0.069770545 0.040971268 -0.0416638 0.27467644 -0.024408266 0.00839984 0.06603507 0.06471432 0.16886689 0.1117572 0.23479089 0.03883411 0.052291762 -0.10167857 -0.022046534 -0.08103379 0.25402072 0.26447392 -0.1496173 -0.011135708 0.11832451 -0.24274136 0.3273302 0.19808583 0.0500611 -0.02722104 0.17388767 -0.27209273 -0.11162222 -0.058076236 -0.1652996 -0.041349445 -0.15083158 0.10840928 -0.021151204 0.0009584433 0.008162052 -0.024023416 0.11074994 0.063289516 0.011398587 0.1524441 0.22021641 0.011773423 0.04346426 0.1301035 0.22987771 0.033823915 -0.03388422 0.08163596 -0.045810744 0.046392746 -0.20378843 0.26473555 -0.035665125 0.050475992 -0.06917049 -0.081634745 -0.017139712 -0.049723003 -0.14858711 0.005105913 -0.06717927 0.23580621 0.1280029 -0.019613322 0.032897525 -0.10110632 0.20694834 0.0799768 -0.051035676 -0.22436418 -0.08272468 0.108925454 0.013583037 -0.0075046574 0.08920874 -0.20445602 0.018522073 0.03331418 0.18777837 -0.10154185 -0.20173359 0.23025793 0.06616148 -0.04055833 -0.011391936 -0.08417345 0.06425156 -0.10467157 -0.061598323 -0.20367981 -0.10008356 -0.10821719 0.0958135 -0.03779756 0.023209685 23 | v -0.08403122 -0.16335614 0.08348566 -0.19038562 0.04106152 -0.32183415 0.18678573 0.029350026 -0.042176303 -0.017399698 0.19469562 0.22517149 0.094950974 0.24112675 0.11056021 0.11713126 -0.04177587 0.114533246 -0.03556987 0.16446503 0.34059963 -0.24100105 -0.04950593 0.26012352 -0.012684174 0.3080495 0.15489182 0.068389244 -0.01437787 0.15035848 -0.1740834 -0.06955549 -0.018047847 -0.15902206 0.042318694 -0.1373041 0.064717636 0.028410342 0.07732284 0.07361216 0.0446535 0.070599206 0.115606144 -0.039243985 -0.0059865364 0.37689275 0.09760193 0.108329736 0.07596615 0.094623886 0.23176576 -0.06295208 0.24806896 -0.15328482 0.15757313 -0.12515256 0.31348795 -0.03184009 0.024533885 -0.021165079 0.032174032 0.084867835 -0.028839177 -0.11145576 -0.095508486 -0.012098987 0.2173698 0.010073884 -0.053183615 -0.0449915 -0.027361298 0.10048844 -0.025326002 -0.15006424 -0.27550948 -0.036014616 0.09190896 0.023400182 -0.011278867 0.09508371 -0.07554621 0.008000784 0.003185623 0.0996707 -0.08002428 -0.19750333 0.10825231 0.026937768 -0.0031855034 -0.13091448 -0.14388014 0.06288034 -0.10000085 -0.12880467 -0.3304057 0.0855 -0.12943777 0.16789454 0.10248381 0.13539939 24 | z 0.04188836 -0.25111985 0.1850754 -0.12807718 -0.02802349 -0.21350771 0.18805392 -0.029564725 -0.08257791 -0.00015464751 0.19024524 0.2679126 0.12381543 0.23373671 0.0101947505 0.19389139 -0.14537172 0.006021071 -0.080028825 0.24746802 0.24905951 -0.040212262 -0.19987018 0.058766637 -0.080590755 0.2596077 0.04789264 -0.0037278347 0.14630868 0.1496338 -0.13641201 -0.046185575 -0.09200375 -0.09024734 0.13797255 -0.09111029 0.060843553 0.025527883 -0.028364537 0.019342938 -0.054642387 0.042264167 0.04133608 -0.15996055 0.07232787 0.20200618 0.029764902 0.107544094 0.06997305 -0.004130755 0.00482789 -0.07609163 0.04558279 -0.10975031 0.008419858 -0.24843715 0.1489674 0.11128129 -0.28686857 0.18100539 0.06082298 0.17388417 -0.060372423 -0.10895816 -0.08935944 0.026322888 0.12919392 -0.017875263 -0.1479803 -0.024543645 -0.02115278 0.09387045 0.087826714 -0.02891458 -0.16351114 -0.09143618 0.07506968 0.03647387 -0.055852633 0.10994188 -0.17940353 -0.10731756 0.11150333 0.034309812 0.024537541 -0.15771544 0.17959473 0.061527524 0.12555854 -0.1380637 -0.15631582 0.056146108 0.096366204 0.060364068 -0.114323206 -0.0599136 0.020379739 0.10167063 -0.082642525 0.018131457 25 | x -0.07195969 -0.10384891 0.042889006 -0.18151927 0.058367416 -0.15749595 0.18476525 0.0072446307 -0.13384558 0.099668965 0.07753233 0.1848738 0.018788917 0.16755322 -0.020258257 0.10696196 -0.027385132 0.056112878 -0.24158946 0.19012064 0.19634788 -0.040901687 -0.19519567 0.15179941 -0.13403729 0.31337887 0.032950733 0.015265252 -0.0333566 0.2214465 -0.15526561 -0.025386147 -0.009238737 -0.13649464 0.034074273 -0.04941042 -0.024661332 -0.060978446 -0.041046545 -0.018040199 -0.11073333 0.070340194 0.0476421 -0.16103448 -0.070560925 0.22872673 -0.047350116 0.094769955 0.13895798 0.069424845 0.053643215 -0.07156436 0.1256253 -0.07155963 0.021339232 -0.30526027 0.15205444 0.04749555 -0.114309244 0.1608413 0.1001255 0.18149936 -0.098815694 -0.009411489 -0.060829867 0.08313096 0.25675836 0.080985606 -0.22605076 -0.08516066 -0.08880107 0.09695035 0.14704269 -0.0479482 -0.21674848 -0.18541498 0.07627307 0.086630195 -0.090367906 0.07555553 -0.26950395 0.0037829576 0.0062968684 0.16311868 0.046255223 -0.18305984 0.12323938 0.17274247 0.022727482 -0.14139862 -0.11391154 0.14688766 0.020521311 -0.052950837 -0.23878042 -0.14168318 -0.16787106 0.114123955 -0.06992749 0.0010571572 26 | j -0.11344891 -0.18714751 0.07144669 -0.15941001 -0.030485662 -0.053612985 0.122495055 -0.05351344 -0.16589901 0.13324116 -0.029648086 0.17084533 0.17010163 0.17602259 0.09005554 0.11342317 -0.12043303 0.14998966 -0.19111405 0.08457623 0.23994367 0.13032182 -0.25174272 0.2295933 -0.13076717 0.52357566 0.107177734 -0.21178748 0.12441281 0.080550276 -0.19739726 -0.09788506 -0.09045887 -0.1540241 0.05031309 -0.22327968 0.044423066 -0.08468933 -0.0853702 -0.10075579 -0.14919342 -0.075450525 0.096049815 -0.07740641 -0.09985836 0.044179592 -0.022841303 0.07250386 0.10696339 -0.040484484 0.11261889 -0.063154705 0.049994186 -0.070493095 -0.02597128 -0.16760316 0.19162714 -0.0047643785 -0.07365538 0.018324474 -0.017169995 0.019090423 -0.0963545 -0.039931536 -0.10197194 0.06765312 0.18561673 0.08432698 -0.097390726 -0.14222638 -0.06651065 -0.0027934965 0.21004462 0.12962951 -0.14926945 -0.18246944 -0.063895136 0.074719615 -0.021651028 -0.019405955 -0.2441432 0.028069695 0.15518633 0.08285815 0.15891278 -0.09701887 0.17385258 0.13913815 0.04025835 -0.13942638 -0.12102695 0.16578546 -0.06316902 0.09375757 -0.13349275 -0.15166284 -0.0199566 0.16333106 0.024514064 -0.047834076 27 | q 0.08517465 -0.18712334 0.1849958 -0.47358313 -0.07627318 -0.39042506 0.117762946 -0.18213409 -0.098908044 0.11216427 0.080832936 0.16040829 0.1665408 0.14162172 0.16428104 0.10678668 -0.11821475 0.064479135 -0.19709395 0.07359679 0.31345415 0.16939752 -0.34538767 0.20504838 0.12362731 0.29442075 0.03173975 -0.035841852 0.25504336 0.08791239 -0.15142202 -0.010957913 0.048224624 -0.09918974 0.007594991 -0.07608966 0.057423815 -0.012034671 -0.015818508 -0.030550223 -0.16893914 0.022423409 0.004079535 -0.11861544 -0.0067758868 0.21070537 -0.08492238 0.05501255 0.10049278 -0.080453895 -0.0008096878 -0.08249105 0.16347167 0.026842758 0.13851844 -0.22064017 0.34080777 0.054017182 -0.20052475 0.15195817 0.06476622 0.069980755 -0.19358444 0.06422441 -0.056049485 0.039506163 0.18571527 -0.10324722 -0.17132294 -0.19490315 0.016792819 -0.07952712 0.15284674 0.09837393 -0.113749884 -0.15974198 -0.014858386 0.07640661 0.09495512 0.12663317 -0.28643838 -0.1061391 0.18800278 0.15553932 0.05046154 -0.1310227 0.21158104 0.12388787 0.088728495 -0.2424983 -0.14745952 0.06996265 -0.07326424 0.12150764 -0.15159217 -0.15829095 -0.009338701 0.06766454 0.06282346 -0.101689786 28 | - -0.11717634 -0.1511274 -0.06912113 0.110410266 0.21339259 -0.19827528 0.222841 0.27835524 -0.071811914 0.3743894 -0.07306852 0.41545373 -0.09557201 0.09840342 0.07054609 0.35558453 -0.041078966 0.36687267 -0.28313217 -0.007988353 0.24761288 0.27538925 -0.4406256 0.43250605 -0.63512784 0.5778142 -0.01618778 -0.2395711 -0.12694097 0.28449214 -0.19538042 -0.027429234 0.18842965 -0.29880726 -0.19393098 -0.051112987 -0.085430816 -0.29605362 -0.07441005 0.30162883 -0.45688003 -0.0719094 0.13268863 -0.025598688 -0.2654899 -0.022221206 0.06752689 -0.0013421029 0.078556836 -0.028370688 0.48761392 -0.16265678 0.1966587 -0.30011684 0.009538995 -0.55096006 0.2632322 0.0041703377 -0.45863858 0.0184351 0.27998433 0.28525308 -0.15600659 0.019671477 -0.38906148 0.19986287 0.18396893 0.0697025 -0.38594452 -0.16953602 -0.08621148 0.003648659 -0.001522291 -0.019719683 -0.24366117 -0.2920398 0.017696729 0.31041032 -0.15943745 -0.12703171 -0.61213446 -0.06025422 0.37902242 -0.038015876 0.3569995 -0.28402287 0.11751555 0.2463137 0.21479304 -0.36196494 -0.3637389 0.5037049 -0.19460398 -0.05049795 -0.50023526 -0.12637198 -0.39716318 0.29907042 0.18811636 -0.014217993 29 | 1 -0.10578755 -0.79974693 1.559121 -0.2144091 1.060053 -0.16257158 0.17087193 -1.1313504 -0.26788226 -0.12751733 -1.6388621 1.5777588 0.04599483 0.9014916 -0.20720752 1.2500955 0.11656526 -0.62581056 0.23003334 -0.18279476 -0.011284278 0.8369775 0.47037265 0.29919824 -0.9729427 -0.70086855 0.9217705 -0.2889931 -0.668005 0.6214847 0.007966269 -0.25697592 -0.28041705 0.102639906 -0.29690814 -0.60025036 0.09799304 0.6236977 -0.59013313 0.19110909 -0.1142138 0.7525327 -0.7196503 0.852028 0.39560872 -0.50143874 0.34653726 -0.35126776 0.20730746 -0.67594475 0.45674738 -0.8853343 -0.5178775 -0.553561 -0.37661672 -0.881321 -0.7450074 0.7587129 -0.0968869 1.0821803 -0.14401203 0.39256543 0.12500045 -0.034077596 -1.4817541 -0.28491715 0.0375107 0.6038841 -0.24854523 0.4059825 -0.7501047 0.18315165 0.059982356 -0.28362542 -0.92431307 -0.19872396 0.51872116 -0.07960054 0.34360674 -0.11446986 -0.508664 -0.31784967 0.6231811 0.57192177 -0.62342876 -0.4277829 -0.44520327 0.84439784 0.45644072 -0.50048 -0.23198098 -1.2178423 0.96614736 -0.3221664 -0.93311435 1.0341275 0.033835806 0.9761267 -0.39482442 -0.57526934 30 | 2 -0.2119582 -0.5973319 0.691543 -0.1126316 0.9476311 0.42381942 0.42022592 -1.0399522 -0.5305956 0.19444431 -1.1866939 0.9496192 0.43689403 1.1287516 -0.47035024 0.54501605 0.27803057 -0.39775372 0.01168412 -0.2989614 0.17850615 0.8408311 0.14007647 0.18836303 -0.46075502 -0.91193557 0.90066636 -0.16927077 -0.7027362 0.846808 -0.05345008 0.1645284 -0.53604585 0.13150117 -0.2524094 -0.34147793 0.46316516 0.37626457 -0.6525121 0.24587427 0.2505632 0.7811102 -0.14881226 0.6237348 0.40854985 -0.1101658 0.27478778 -0.11403407 0.31892878 -0.32594323 0.1511594 -1.1061523 -0.13929796 -0.84624654 -0.332029 -0.37457997 -0.6753213 1.0793401 -0.11087725 1.2135605 -0.4985108 0.564934 0.09151458 -0.0075201932 -1.068123 -0.60166216 0.3580061 0.14513935 -0.45512918 0.049329467 -0.8236405 0.16156751 0.55231977 -0.16450316 -0.89239633 0.04749353 0.7303606 -0.6431723 0.48771316 0.34656194 -0.3058962 -0.063466854 0.5117423 0.6061756 -0.553581 -0.21688451 -0.015675532 0.82723856 0.3247579 -0.18717809 -0.4916446 -1.1227667 0.6335212 -0.23666503 -0.89298034 0.7245715 0.48824292 1.0768734 -0.34752417 -0.2766324 31 | 0 -0.18527375 -0.8670408 1.6205827 -0.18734664 1.2826948 -0.22097297 0.13478945 -1.106813 -0.24750154 -0.15805838 -1.995448 1.7905121 -0.08404253 1.0178026 -0.22427627 1.4397779 0.14725792 -0.6481898 0.26091656 -0.1556429 0.03553785 0.8309699 0.5262068 0.6023852 -1.377152 -0.5866043 1.0382582 -0.40093744 -0.84557486 0.7472878 -0.05261586 -0.4544033 -0.29529428 -0.031994455 -0.44514507 -0.55628115 0.15283474 0.6404921 -0.5768324 0.22272944 -0.25326023 0.80527467 -0.77449626 0.8885105 0.3703965 -0.5545779 0.4389142 -0.382733 0.36354133 -0.6903851 0.7231771 -1.0087689 -0.5564704 -0.615143 -0.478802 -1.0259113 -0.77030504 0.80119437 0.09451197 1.103789 -0.2975916 0.4148677 0.12933245 -0.024785155 -1.6952379 -0.36185893 0.07150217 0.6909213 -0.39120224 0.45117205 -0.91021466 0.20190828 -0.13610604 -0.49261656 -1.0866657 -0.13018823 0.64359486 -0.15528797 0.23335019 -0.23228072 -0.4674538 -0.46080324 0.7446005 0.6683394 -0.8222074 -0.6140208 -0.5443572 0.79438955 0.5253872 -0.4667565 -0.22347988 -1.3115349 1.0814224 -0.4537901 -1.2065952 1.245113 -0.102546416 1.0353687 -0.42008886 -0.6167847 32 | 3 0.062847674 -0.84112215 1.3454363 0.14378679 0.90019566 0.08388339 0.10082598 -0.7911489 -0.2739435 -0.017696038 -1.1061938 1.5360744 -0.08778637 0.95053583 -0.2798377 1.0097679 0.04561945 -0.48954812 0.23978157 0.20211041 -0.08889525 0.59537923 0.54449475 -0.0024111732 -1.1060934 -0.8095228 0.6695251 -0.26606962 -0.6658734 0.5257598 -0.17803638 -0.33210376 -0.33385703 -0.02369803 -0.11986225 -0.5787453 -0.036332157 0.5480639 -0.5612368 0.2449682 -0.06208074 0.77734745 -0.6516375 0.6626688 0.44793725 -0.5225205 0.26436916 -0.2544453 0.15684128 -0.39837372 0.2264045 -0.6934933 -0.631495 -0.5207933 -0.3889559 -0.78397036 -0.77215785 0.62013745 -0.11695783 0.723455 0.013630283 0.336641 0.16599578 -0.2533914 -1.1231133 -0.1711439 0.041626543 0.5505953 -0.08258548 0.48348165 -0.5360852 0.48903716 -0.12527129 -0.4869888 -0.8330187 -0.052322492 0.48560733 -0.026142318 0.039476298 0.061190367 -0.36688527 -0.18523495 0.41112128 0.294946 -0.50734186 -0.26942933 -0.37223637 0.6686348 0.31825653 -0.40790707 -0.21185242 -0.9285066 0.97913027 -0.22532257 -0.72771454 0.9804896 -0.042439267 0.89283705 -0.51591766 -0.25512812 33 | 4 0.00468706 -1.0366284 1.2883334 -0.4798393 0.4383445 0.13344511 -0.028325299 -1.0928019 -0.26281327 0.3106049 -0.71297044 1.2307802 0.29020584 0.98492116 -0.1635529 0.56921816 0.16802558 -0.16155148 -0.27380836 0.15147895 -0.018917507 0.5108951 0.8168674 -0.23355083 -0.4986309 -0.905729 0.42783597 -0.37056005 -1.0829473 0.2864259 -0.1976177 -0.07908319 -0.10199122 -0.04355054 0.056332745 -0.720148 -0.0594648 0.35440856 -0.58174866 0.4277542 0.42070016 1.1244248 -0.5810994 0.9974493 0.21742354 -0.5391329 -0.060008522 -0.27107915 0.68256146 -0.3986535 0.1617751 -0.773057 -0.5722275 -0.39685985 -0.027803674 -0.60980535 -0.40361875 0.79063207 -0.39847037 0.332445 0.3368173 0.44571272 -0.0075224885 -0.55091435 -0.85924476 -0.07796531 0.45671955 0.11916632 0.24308507 0.52268827 -0.38877058 0.27384362 0.13443767 -0.40788114 -0.45745534 0.16501386 0.36642653 0.0901955 0.13025373 0.2774515 -0.62307096 0.023438789 0.5302661 0.30725887 -0.42780307 0.19273157 -0.12761152 0.6025221 0.079928465 -0.45667216 -0.3463965 -0.4816256 0.86562353 -0.14449407 -0.92035246 0.9734452 0.45318875 0.9554819 -0.73955345 -0.20014778 34 | 5 -0.005032818 -0.7781706 1.4226191 0.06405355 1.1067717 0.10779251 0.21539834 -1.0204651 -0.48189715 -0.07491173 -1.4666692 1.5709033 -0.14816223 1.0187638 -0.3603628 1.0310539 0.087484054 -0.74374855 0.33237508 0.09817871 -0.07967052 0.6104667 0.49548024 0.13625494 -1.1690906 -0.77182686 1.0388092 -0.13282073 -0.70297956 0.7754905 -0.092928186 -0.42058605 -0.33529508 0.020570952 -0.28775483 -0.5469688 -0.018758215 0.6932561 -0.60522246 0.023756873 -0.1779853 0.8395464 -0.6669379 0.62055516 0.44010413 -0.4444806 0.12259648 -0.19491188 0.22355281 -0.41482475 0.16077879 -0.8051566 -0.5869736 -0.51294285 -0.4892163 -0.8434315 -0.859976 0.7076145 0.0440562 1.085674 -0.1903859 0.33440152 0.24055889 0.07401071 -1.2608249 -0.21133333 0.13056475 0.69625086 -0.20974842 0.4509427 -0.74159163 0.51521146 0.019427033 -0.40685734 -1.0376592 -0.13387787 0.57423323 -0.13206597 0.15672483 -0.026370829 -0.3772253 -0.28300375 0.29117596 0.53216404 -0.645979 -0.53478175 -0.42702666 0.7083997 0.3765964 -0.2341346 -0.11925427 -1.2300587 1.045041 -0.303245 -0.84494776 0.9000159 -0.02968162 0.82049495 -0.58474034 -0.45008466 35 | 8 -0.11772376 -0.5146414 1.4955081 0.04355441 1.2883295 0.026199475 0.23120478 -1.2118528 -0.5272542 -0.27237874 -1.7301478 1.520999 -0.34002015 0.81796956 -0.5026194 1.1326714 0.15935992 -1.0122119 0.19612251 0.058093335 -0.23888437 0.75305307 0.3992287 0.10506654 -1.0875624 -0.83064264 0.78108793 0.0738999 -0.5010049 0.7562395 -0.006979045 -0.3423749 -0.27438608 0.1415028 -0.23825347 -0.47866672 -0.12753329 0.78758276 -0.6618211 -0.41830954 -0.3052862 0.6261187 -0.7985945 0.42728058 0.35282427 -0.3339027 -0.088733666 -0.14766943 0.14878711 -0.3660214 0.019439582 -0.5818568 -0.63112086 -0.11184055 -0.54370004 -0.93436843 -1.0174274 0.5462382 0.1945454 1.3505502 -0.21495982 0.23158312 0.19583423 0.38498375 -1.1587154 -0.11429195 0.039105777 1.1361954 -0.33168572 0.3843917 -0.83810264 0.3423863 0.21759064 -0.282915 -0.98912877 -0.5207382 0.41913113 0.02419232 0.17478113 -0.044722807 -0.39086026 -0.16546845 -0.039121136 0.7039395 -0.51655895 -0.64217424 -0.69311446 0.8524855 0.10851195 -0.15787767 0.16233203 -1.2057325 1.0458709 -0.3452589 -0.56027067 0.5204993 -0.1731191 0.5285086 -0.50803804 -0.68300027 36 | 6 0.17245592 -0.7199714 1.6009655 0.15690728 1.2253128 0.021912763 0.20462431 -1.1564372 -0.50963986 -0.19317782 -1.5705637 1.6547011 -0.28627658 1.016359 -0.3310901 0.97582567 0.09487652 -0.87657994 0.5553576 0.0018962288 -0.25903538 0.8220062 0.433533 0.023524612 -1.1668776 -0.95637566 1.0939369 -0.066335954 -0.508871 0.7290709 0.035139903 -0.45055026 -0.4079707 0.20629144 -0.34372455 -0.52988285 0.039947726 0.8729469 -0.7124255 -0.10298069 -0.31452507 0.7904807 -0.82943606 0.46017474 0.5262078 -0.51821834 0.079301685 -0.07488236 -0.008229525 -0.49097675 -0.013020426 -0.7009903 -0.695532 -0.4711951 -0.5739869 -0.77941895 -1.0186204 0.7256061 -0.034765556 1.3786511 -0.31296852 0.35135293 0.24635518 0.2988869 -1.2838235 -0.26282957 -0.01470941 0.8816571 -0.28509644 0.50407404 -0.70612615 0.57151276 -0.021951443 -0.33143616 -1.2777596 -0.27859822 0.638587 -0.15704577 0.26393893 -0.017465644 -0.32295647 -0.2729996 0.08112599 0.50081843 -0.6731042 -0.6599375 -0.5343704 0.8533517 0.30609488 -0.23363757 -0.07598908 -1.4460158 1.1007018 -0.19235013 -0.74753904 0.80143493 -0.06346256 0.7562959 -0.60821736 -0.46561015 37 | 9 0.05661885 -0.5062355 1.6503258 0.2005339 1.275088 0.079824075 0.2472423 -1.1692607 -0.51271623 -0.34454554 -1.5294156 1.5498766 -0.2816564 0.9140771 -0.40763146 1.0401801 0.017245593 -1.1274711 0.4713442 0.15678748 -0.18688859 0.44345793 0.6224141 -0.047491662 -1.0093501 -0.94634724 1.0673369 0.2145874 -0.54511803 0.7770872 -0.05160536 -0.4648128 -0.2783119 0.06906855 -0.16311786 -0.52054477 -0.12935816 1.0162395 -0.5736352 -0.3069493 -0.06148502 0.76896125 -0.8847129 0.46152678 0.51252526 -0.26402187 -0.09567986 -0.10584917 -0.05996748 -0.33022857 -0.1609085 -0.62264407 -0.6926096 -0.34317094 -0.51221687 -0.82318157 -1.1225966 0.5147303 0.32921666 1.240932 -0.20747437 0.13436456 0.3337363 0.39129224 -1.0788952 -0.104668885 0.060663465 1.0127969 -0.07769072 0.44601035 -0.7086737 0.58602536 0.018301127 -0.3658797 -1.074878 -0.2630878 0.4259342 0.022973524 0.25972196 -0.023578119 -0.2987108 -0.097568884 -0.14100713 0.68171376 -0.6408449 -0.61703795 -0.7200228 0.74578357 0.24280709 -0.063050464 0.13178428 -1.3898183 1.0034199 -0.34892216 -0.4854974 0.6592025 -0.11598933 0.6701115 -0.524995 -0.58901393 38 | 7 -0.001357535 -0.70570815 1.3918632 -0.05598001 1.1051824 0.15009719 0.13817857 -1.0679485 -0.49593243 -0.059180796 -1.3596262 1.5565625 -0.1243726 1.0269536 -0.3840184 0.8593582 0.11610363 -0.82093424 0.17629775 0.07351425 -0.1068838 0.6766813 0.579601 -0.016796844 -0.94547176 -0.90848094 0.7461384 -0.06185071 -0.6749005 0.73682475 -0.05872918 -0.2867745 -0.2419598 0.002631954 -0.106298536 -0.5555586 -0.070898615 0.70616484 -0.63972837 -0.13670534 -0.0021926344 0.8390174 -0.6339976 0.4940183 0.37186047 -0.31405008 -0.0036604763 -0.09196432 0.16012383 -0.4613792 0.040675342 -0.69383705 -0.6871208 -0.4222366 -0.4728121 -0.76215607 -1.0156205 0.81852 -0.072944306 1.1687529 -0.033617277 0.33075568 0.21260236 0.076672666 -1.1232945 -0.20462091 0.23087479 0.7885465 -0.10128734 0.35012114 -0.7988299 0.45895463 0.26459086 -0.34275994 -0.9913349 -0.15678576 0.39356905 0.020381063 0.21201086 0.06981004 -0.49053597 -0.11826196 0.14861524 0.6000743 -0.5789016 -0.37677523 -0.50228566 0.8074118 0.3415648 -0.21900114 -0.055723283 -1.0253109 0.9882148 -0.20394799 -0.791333 0.7683678 0.08031362 0.8333682 -0.6310874 -0.53310263 39 | --------------------------------------------------------------------------------