Created
February 26, 2015 05:50
-
-
Save luw2007/614a245133a59e455773 to your computer and use it in GitHub Desktop.
pandas 简单分析dns日志
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "", | |
"signature": "sha256:dd27a3496ce6d43cdcf1e3625f552845b028ca4c0a8ee9dbd37d5a4ea70c4614" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import pandas as pd\n", | |
"from pandas import Series, DataFrame, Panel" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline " | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"df = DataFrame(pd.read_csv('query.csv'))" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"DataFrame(df.groupby('domain')['domain'].count()).sort([0], ascending=False).head(10)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>0</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>domain</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>viareality.cz</th>\n", | |
" <td> 215295</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>pidarastik.ru</th>\n", | |
" <td> 11670</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>cdnmyhost.com</th>\n", | |
" <td> 9403</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>nutrition.gov</th>\n", | |
" <td> 6890</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>response</th>\n", | |
" <td> 2953</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>a.root-servers.net</th>\n", | |
" <td> 1112</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>www.qq.com</th>\n", | |
" <td> 1064</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>_xmpp-client._tcp.hisense2.igrslink.com</th>\n", | |
" <td> 839</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>tracker.torrent.to</th>\n", | |
" <td> 737</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>bt.51soft.com</th>\n", | |
" <td> 484</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>10 rows \u00d7 1 columns</p>\n", | |
"</div>" | |
], | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 4, | |
"text": [ | |
" 0\n", | |
"domain \n", | |
"viareality.cz 215295\n", | |
"pidarastik.ru 11670\n", | |
"cdnmyhost.com 9403\n", | |
"nutrition.gov 6890\n", | |
"response 2953\n", | |
"a.root-servers.net 1112\n", | |
"www.qq.com 1064\n", | |
"_xmpp-client._tcp.hisense2.igrslink.com 839\n", | |
"tracker.torrent.to 737\n", | |
"bt.51soft.com 484\n", | |
"\n", | |
"[10 rows x 1 columns]" | |
] | |
} | |
], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"DataFrame(df.groupby('ip')['ip'].count()).sort([0], ascending=False).head(300)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>0</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ip</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>113.17.169.58</th>\n", | |
" <td> 14752</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88.198.12.175</th>\n", | |
" <td> 10162</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>179.232.59.50</th>\n", | |
" <td> 8878</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>115.159.0.189</th>\n", | |
" <td> 8838</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>98.168.160.244</th>\n", | |
" <td> 8237</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1.80.95.13</th>\n", | |
" <td> 7863</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>92.94.67.44</th>\n", | |
" <td> 7531</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>37.140.192.72</th>\n", | |
" <td> 7427</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>173.95.137.168</th>\n", | |
" <td> 6995</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>187.65.0.12</th>\n", | |
" <td> 6974</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>81.82.192.245</th>\n", | |
" <td> 6893</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>68.96.50.164</th>\n", | |
" <td> 5765</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>147.133.204.73</th>\n", | |
" <td> 5218</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>49.197.10.220</th>\n", | |
" <td> 4594</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>97.103.240.104</th>\n", | |
" <td> 4529</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>72.5.195.90</th>\n", | |
" <td> 4460</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88.246.19.181</th>\n", | |
" <td> 4435</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>159.118.249.172</th>\n", | |
" <td> 3600</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>206.31.248.81</th>\n", | |
" <td> 3376</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>98.220.15.95</th>\n", | |
" <td> 3313</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>67.168.67.83</th>\n", | |
" <td> 2875</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>68.82.237.79</th>\n", | |
" <td> 2763</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>98.119.3.249</th>\n", | |
" <td> 2693</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>121.56.191.124</th>\n", | |
" <td> 2692</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>173.187.85.94</th>\n", | |
" <td> 2554</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>74.106.228.116</th>\n", | |
" <td> 2353</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>144.80.251.159</th>\n", | |
" <td> 2334</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>71.239.95.34</th>\n", | |
" <td> 2252</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>72.199.145.131</th>\n", | |
" <td> 2198</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>107.161.187.50</th>\n", | |
" <td> 2190</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>190.112.0.30</th>\n", | |
" <td> 2076</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>142.161.66.86</th>\n", | |
" <td> 1769</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>68.96.92.180</th>\n", | |
" <td> 1743</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>108.54.105.14</th>\n", | |
" <td> 1741</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>191.234.241.10</th>\n", | |
" <td> 1611</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>60.11.72.142</th>\n", | |
" <td> 1470</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>203.153.47.251</th>\n", | |
" <td> 1418</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>71.75.234.51</th>\n", | |
" <td> 1371</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50.121.215.160</th>\n", | |
" <td> 1352</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>74.176.28.157</th>\n", | |
" <td> 1344</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>190.0.163.32</th>\n", | |
" <td> 1344</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>216.36.145.243</th>\n", | |
" <td> 1297</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>162.224.188.39</th>\n", | |
" <td> 1277</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>182.254.218.215</th>\n", | |
" <td> 1267</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>222.77.217.50</th>\n", | |
" <td> 1252</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>71.191.51.126</th>\n", | |
" <td> 1240</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>96.18.93.182</th>\n", | |
" <td> 1227</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>86.154.147.83</th>\n", | |
" <td> 1215</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>173.89.218.85</th>\n", | |
" <td> 1211</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>114.218.141.79</th>\n", | |
" <td> 1190</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>59.59.135.61</th>\n", | |
" <td> 1188</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>113.137.141.130</th>\n", | |
" <td> 1164</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>72.47.239.116</th>\n", | |
" <td> 1158</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>97.90.196.181</th>\n", | |
" <td> 1130</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>189.172.242.207</th>\n", | |
" <td> 1129</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>121.205.242.39</th>\n", | |
" <td> 1107</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>117.26.250.137</th>\n", | |
" <td> 1098</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>124.224.54.61</th>\n", | |
" <td> 1098</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>96.40.119.52</th>\n", | |
" <td> 1095</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>124.116.106.12</th>\n", | |
" <td> 1053</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th></th>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>300 rows \u00d7 1 columns</p>\n", | |
"</div>" | |
], | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 5, | |
"text": [ | |
" 0\n", | |
"ip \n", | |
"113.17.169.58 14752\n", | |
"88.198.12.175 10162\n", | |
"179.232.59.50 8878\n", | |
"115.159.0.189 8838\n", | |
"98.168.160.244 8237\n", | |
"1.80.95.13 7863\n", | |
"92.94.67.44 7531\n", | |
"37.140.192.72 7427\n", | |
"173.95.137.168 6995\n", | |
"187.65.0.12 6974\n", | |
"81.82.192.245 6893\n", | |
"68.96.50.164 5765\n", | |
"147.133.204.73 5218\n", | |
"49.197.10.220 4594\n", | |
"97.103.240.104 4529\n", | |
"72.5.195.90 4460\n", | |
"88.246.19.181 4435\n", | |
"159.118.249.172 3600\n", | |
"206.31.248.81 3376\n", | |
"98.220.15.95 3313\n", | |
"67.168.67.83 2875\n", | |
"68.82.237.79 2763\n", | |
"98.119.3.249 2693\n", | |
"121.56.191.124 2692\n", | |
"173.187.85.94 2554\n", | |
"74.106.228.116 2353\n", | |
"144.80.251.159 2334\n", | |
"71.239.95.34 2252\n", | |
"72.199.145.131 2198\n", | |
"107.161.187.50 2190\n", | |
"190.112.0.30 2076\n", | |
"142.161.66.86 1769\n", | |
"68.96.92.180 1743\n", | |
"108.54.105.14 1741\n", | |
"191.234.241.10 1611\n", | |
"60.11.72.142 1470\n", | |
"203.153.47.251 1418\n", | |
"71.75.234.51 1371\n", | |
"50.121.215.160 1352\n", | |
"74.176.28.157 1344\n", | |
"190.0.163.32 1344\n", | |
"216.36.145.243 1297\n", | |
"162.224.188.39 1277\n", | |
"182.254.218.215 1267\n", | |
"222.77.217.50 1252\n", | |
"71.191.51.126 1240\n", | |
"96.18.93.182 1227\n", | |
"86.154.147.83 1215\n", | |
"173.89.218.85 1211\n", | |
"114.218.141.79 1190\n", | |
"59.59.135.61 1188\n", | |
"113.137.141.130 1164\n", | |
"72.47.239.116 1158\n", | |
"97.90.196.181 1130\n", | |
"189.172.242.207 1129\n", | |
"121.205.242.39 1107\n", | |
"117.26.250.137 1098\n", | |
"124.224.54.61 1098\n", | |
"96.40.119.52 1095\n", | |
"124.116.106.12 1053\n", | |
" ...\n", | |
"\n", | |
"[300 rows x 1 columns]" | |
] | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"df.index = pd.to_datetime(df.pop('time'))\n", | |
"#\u6df1\u5c42\u6b21\u5206\u6790(ip\u4f2a\u9020\u7684, \u53ea\u80fd\u4ece\u57df\u540d\u5165\u624b, \u67e5\u627e)\n", | |
"resamp = df.groupby('domain')['domain'].resample('1t', how='count')\n", | |
"# 1\u5206\u949f\u5185\u5927\u4e8e600\u7684\u67e5\u8be2\u53ea\u6709viareality.cz\n", | |
"resamp[resamp.gt(600)].sort_index().plot(rot=30)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 6, | |
"text": [ | |
"<matplotlib.axes.AxesSubplot at 0x7f0280b96610>" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n0cLTdO49n29+U0rnl7+En/9cpYKS16D4fPSRlFjUrFmjm0/r1vp/deig758/X7PfXCkkSaJr18wW\nVCb3HpTHggJ5FubMKb8FtXQpXH453HRT5uzEdu1UPPb5592+dC6+VF6EbBbUNddosuX/r/r3r143\nnymoAsmkoKJMM883BrViRWnaTEQdg8q0SDcMl18uN14mjjkGnnxSrrvvfEf7fNdKMh99JEsruU9P\nKnKRRXJq9LBhag3erVt+nWaLmWaeKUECUqeZp5NFFFUkfPr2lau93Arqscfg4INh551Tvx6UxcEH\nw+TJ7rV0Lr5Upb6yWVDPPKPK/j6moGqYbAoqSgsq1xhU69a6oeRSMb1SyBZ/ysbRR2evwtCtG3z9\n63Dlle7Gm8qC8pX8sGFSUlGSXP1g6FApzXzce6DPWrNGsZBs5JokkU1B5ZKgEZWLDzRxmzOnOC6+\nXBTUokVayxaGgw+GZ5/V8w0b9B1BeeRrQa1fr4lHcDJrCqqG2W239It1y51mDqVz80Udg8qWYh4V\n48fLV+8TzJ7y8RMW9t03nJsvF1kk148bNkwJHvkkSIDiQ127hruppotBpbO483HxpZPFsmVSaFHQ\nt6/S84thQXXooOs4zLqjbF6OoCxGjlTsetkyvW/rrZu25enZU/eFd99tfh1ss40s0OR1fODuE8E4\noSmoGmbgQAW5U90QoopBrV2rkzGfGWK1xqGyJUhERbILMZUF5ad8h1VQuZDKxffpp/lbUBDOzbdl\nS/OFrW3b6saW7maczYLq1k2/J5v1tn69jmnfPvNxYenbV2MrhoKqqwtfMDYXN3ybNoqRPvdc8/iT\n/73bbAMvvtj8OmjdWt+TKlaayiVoCqqGqatTQchUbr6waebZsvj8Ez+feEypFFQxYlClsKCSSRWD\nytWCyjUGFbyxDhumx3wtKAinoFatknWQvIYsk5svU5kjkAWQvPYulSyWL9d5WWiZIx/f9V0MFx+E\nd/NlU1DJsvDdfMkZfD7bbqv7Srp+aKniUKk+yxRUjZNJQUVhQS1alHv8ySdMdYBKpFQWVDKpLChf\nQQ0erJt0qplrviS7+Pr3d31/8iWMgkp27/lkSjXPVOYo1+8utEhsEF8pFMOCgvAKKtfrdMwYJUok\nJ0j4bLutLN1U10G6OFSqz/IVVCmSpaLGFFQEpEuUiEpB5ZPB52MxqNzo10+z0ODF7K9JqquTFfXi\n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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x7f0280b962d0>" | |
] | |
} | |
], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"resamp3 = df.groupby('ip')['ip'].resample('1t', how='count')" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 7 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"DataFrame(resamp3[resamp3.gt(200)]).sort([0], ascending=False).head(300)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": [ | |
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th>0</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ip</th>\n", | |
" <th>time</th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>72.5.195.90</th>\n", | |
" <th>2015-02-26 05:40:00</th>\n", | |
" <td> 4460</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th rowspan=\"10\" valign=\"top\">113.17.169.58</th>\n", | |
" <th>2015-02-26 04:45:00</th>\n", | |
" <td> 772</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:53:00</th>\n", | |
" <td> 772</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:52:00</th>\n", | |
" <td> 769</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:47:00</th>\n", | |
" <td> 768</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:49:00</th>\n", | |
" <td> 768</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:46:00</th>\n", | |
" <td> 767</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:50:00</th>\n", | |
" <td> 765</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:48:00</th>\n", | |
" <td> 765</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:51:00</th>\n", | |
" <td> 761</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:44:00</th>\n", | |
" <td> 516</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1.81.201.59</th>\n", | |
" <th>2015-02-26 05:30:00</th>\n", | |
" <td> 349</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>113.17.169.58</th>\n", | |
" <th>2015-02-26 04:54:00</th>\n", | |
" <td> 268</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th rowspan=\"2\" valign=\"top\">68.96.50.164</th>\n", | |
" <th>2015-02-26 04:54:00</th>\n", | |
" <td> 261</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2015-02-26 04:53:00</th>\n", | |
" <td> 248</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88.198.12.175</th>\n", | |
" <th>2015-02-26 04:35:00</th>\n", | |
" <td> 241</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>121.56.191.124</th>\n", | |
" <th>2015-02-26 04:35:00</th>\n", | |
" <td> 238</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>68.96.50.164</th>\n", | |
" <th>2015-02-26 04:49:00</th>\n", | |
" <td> 238</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>49.197.10.220</th>\n", | |
" <th>2015-02-26 04:36:00</th>\n", | |
" <td> 236</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>68.96.50.164</th>\n", | |
" <th>2015-02-26 04:50:00</th>\n", | |
" <td> 236</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88.198.12.175</th>\n", | |
" <th>2015-02-26 04:44:00</th>\n", | |
" <td> 228</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>68.96.50.164</th>\n", | |
" <th>2015-02-26 04:52:00</th>\n", | |
" <td> 224</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1.80.95.13</th>\n", | |
" <th>2015-02-26 05:39:00</th>\n", | |
" <td> 223</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>68.96.50.164</th>\n", | |
" <th>2015-02-26 04:51:00</th>\n", | |
" <td> 221</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>37.140.192.72</th>\n", | |
" <th>2015-02-26 04:32:00</th>\n", | |
" <td> 220</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88.198.12.175</th>\n", | |
" <th>2015-02-26 04:34:00</th>\n", | |
" <td> 217</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>199.184.205.95</th>\n", | |
" <th>2015-02-26 04:51:00</th>\n", | |
" <td> 213</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1.80.95.13</th>\n", | |
" <th>2015-02-26 05:34:00</th>\n", | |
" <td> 212</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88.198.12.175</th>\n", | |
" <th>2015-02-26 04:39:00</th>\n", | |
" <td> 211</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>68.96.50.164</th>\n", | |
" <th>2015-02-26 04:07:00</th>\n", | |
" <td> 209</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>88.198.12.175</th>\n", | |
" <th>2015-02-26 04:51:00</th>\n", | |
" <td> 209</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>121.56.191.124</th>\n", | |
" <th>2015-02-26 04:36:00</th>\n", | |
" <td> 205</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>37.140.192.72</th>\n", | |
" <th>2015-02-26 04:31:00</th>\n", | |
" <td> 202</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>33 rows \u00d7 1 columns</p>\n", | |
"</div>" | |
], | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 8, | |
"text": [ | |
" 0\n", | |
"ip time \n", | |
"72.5.195.90 2015-02-26 05:40:00 4460\n", | |
"113.17.169.58 2015-02-26 04:45:00 772\n", | |
" 2015-02-26 04:53:00 772\n", | |
" 2015-02-26 04:52:00 769\n", | |
" 2015-02-26 04:47:00 768\n", | |
" 2015-02-26 04:49:00 768\n", | |
" 2015-02-26 04:46:00 767\n", | |
" 2015-02-26 04:50:00 765\n", | |
" 2015-02-26 04:48:00 765\n", | |
" 2015-02-26 04:51:00 761\n", | |
" 2015-02-26 04:44:00 516\n", | |
"1.81.201.59 2015-02-26 05:30:00 349\n", | |
"113.17.169.58 2015-02-26 04:54:00 268\n", | |
"68.96.50.164 2015-02-26 04:54:00 261\n", | |
" 2015-02-26 04:53:00 248\n", | |
"88.198.12.175 2015-02-26 04:35:00 241\n", | |
"121.56.191.124 2015-02-26 04:35:00 238\n", | |
"68.96.50.164 2015-02-26 04:49:00 238\n", | |
"49.197.10.220 2015-02-26 04:36:00 236\n", | |
"68.96.50.164 2015-02-26 04:50:00 236\n", | |
"88.198.12.175 2015-02-26 04:44:00 228\n", | |
"68.96.50.164 2015-02-26 04:52:00 224\n", | |
"1.80.95.13 2015-02-26 05:39:00 223\n", | |
"68.96.50.164 2015-02-26 04:51:00 221\n", | |
"37.140.192.72 2015-02-26 04:32:00 220\n", | |
"88.198.12.175 2015-02-26 04:34:00 217\n", | |
"199.184.205.95 2015-02-26 04:51:00 213\n", | |
"1.80.95.13 2015-02-26 05:34:00 212\n", | |
"88.198.12.175 2015-02-26 04:39:00 211\n", | |
"68.96.50.164 2015-02-26 04:07:00 209\n", | |
"88.198.12.175 2015-02-26 04:51:00 209\n", | |
"121.56.191.124 2015-02-26 04:36:00 205\n", | |
"37.140.192.72 2015-02-26 04:31:00 202\n", | |
"\n", | |
"[33 rows x 1 columns]" | |
] | |
} | |
], | |
"prompt_number": 8 | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment