如何使用Python工具分析风险数据
发布网友
发布时间:2022-04-26 21:37
我来回答
共1个回答
热心网友
时间:2022-05-05 16:16
1、引入工具–加载数据分析包
启动IPython notebook,加载运行环境:
%matplotlib inline
import pandas as pd
from datetime import timedelta, datetime
import matplotlib.pyplot as plt
import numpy as np
2、数据准备
俗话说: 巧妇难为无米之炊。小安分析的数据主要是用户使用代理IP访问日志记录信息,要分析的原始数据以CSV的形式存储。这里首先要介绍到pandas.read_csv这个常用的方法,它将数据读入DataFrame
analysis_data = pd.read_csv('./honeypot_data.csv')
对的, 一行代码就可以将全部数据读到一个二维的表结构DataFrame变量,感觉很简单有木有啊!!!当然了用Pandas提供的IO工具你也可以将大文件分块读取,再此小安测试了一下性能,完整加载约21530000万条数据也大概只需要90秒左右,性能还是相当不错。
3、数据管窥
一般来讲,分析数据之前我们首先要对数据有一个大体上的了解,比如数据总量有多少,数据有哪些变量,数据变量的分布情况,数据重复情况,数据缺失情况,数据中异常值初步观测等等。下面小安带小伙伴们一起来管窥管窥这些数据。
使用shape方法查看数据行数及列数
analysis_data.shape
Out: (21524530, 22) #这是有22个维度,共计21524530条数据记的DataFrame
使用head()方法默认查看前5行数据,另外还有tail()方法是默认查看后5行,当然可以输入参数来查看自定义行数
analysis_data.head(10)
这里可以了解到我们数据记录有用户使用代理IP日期,代理header信息,代理访问域名,代理方法,源ip以及蜜罐节点信息等等。在此小安一定一定要告诉你,小安每次做数据分析时必定使用的方法–describe方法。pandas的describe()函数能对数据进行快速统计汇总:
对于数值类型数据,它会计算出每个变量: 总个数,平均值,最大值,最小值,标准差,50%分位数等等;
非数值类型数据,该方法会给出变量的: 非空值数量、unique数量(等同于数据库中distinct方法)、最大频数变量和最大频数。
由head()方法我们可以发现数据中包含了数值变量、非数值变量,我们首先可以利用dtypes方法查看DataFrame中各列的数据类型,用select_dtypes方法将数据按数据类型进行分类。然后,利用describe方法返回的统计值对数据有个初步的了解:
df.select_dtypes(include=['O']).describe()
df.select_dtypes(include=['float64']).describe()
简单的观察上面变量每一维度统计结果,我们可以了解到大家获取代理数据的长度平均1670个字节左右。同时,也能发现字段scanossubfp,scanscan_mode等存在空值等等信息。这样我们能对数据整体上有了一个大概了解。
4、数据清洗
由于源数据通常包含一些空值甚至空列,会影响数据分析的时间和效率,在预览了数据摘要后,需要对这些无效数据进行处理。
一般来说,移除一些空值数据可以使用dropna方法, 当你使用该方法后,检查时发现 dropna() 之后几乎移除了所有行的数据,一查Pandas用户手册,原来不加参数的情况下, dropna() 会移除所有包含空值的行。
如果你只想移除全部为空值的列,需要加上 axis 和 how 两个参数:
analysis_data.dropna(axis=1, how='all')
另外,也可以通过dropna的参数subset移除指定列为空的数据,和设置thresh值取移除每非None数据个数小于thresh的行。
analysis_data.dropna(subset=['proxy_host', 'srcip'])
#移除proxy_host字段或srcip字段没有值的行
analysis_data.dropna(thresh=10)
#移除所有行字段中有值属性小于10的行
5、统计分析
再对数据中的一些信息有了初步了解过后,原始数据有22个变量。从分析目的出发,我将从原始数据中挑选出局部变量进行分析。这里就要给大家介绍pandas的数据切片方法loc。
loc([startrowindex:endrowindex,[‘timestampe’, ‘proxy_host’, ‘srcip’]])是pandas重要的切片方法,逗号前面是对行进行切片;逗号后的为列切片,也就是挑选要分析的变量。
如下,我这里选出日期,host和源IP字段——
analysis_data = analysis_data.loc([:, [‘timestampe’,'proxy_host','srcip']])
首先让我们来看看蜜罐代理每日使用数据量,我们将数据按日统计,了解每日数据量PV,并将结果画出趋势图。
daily_proxy_data = analysis_data[analysis_data.mole=='proxy']
daily_proxy_visited_count = daily_proxy_data.timestamp.value_counts().sort_index()
daily_proxy_visited_count.plot()
对数据列的丢弃,除无效值和需求规定之外,一些表自身的冗余列也需要在这个环节清理,比如说DataFrame中的index号、类型描述等,通过对这些数据的丢弃,从而生成新的数据,能使数据容量得到有效的缩减,进而提高计算效率。
由上图分析可知蜜罐代理使用量在6月5号,19-22号和25号这几天呈爆炸式增长。那么这几天数据有情况,不正常,具体是神马情况,不急,后面小安带大家一起来慢慢揪出来到底是那些人(源ip) 干了什么“坏事”。
进一步分析, 数据有异常后,再让我们来看看每天去重IP数据后量及其增长量。可以按天groupby后通过nunique()方法直接算出来每日去重IP数据量。
daily_proxy_data = analysis_data[analysis_data.mole=='proxy']
daily_proxy_visited_count = daily_proxy_data.groupby(['proxy_host']).srcip.nunique()
daily_proxy_visited_count.plot()
究竟大部分人(源ip)在干神马?干神马?干神马?让我们来看看被访问次数最多host的哪些,即同一个host关联的IP个数,为了方便我们只查看前10名热门host。
先选出host和ip字段,能过groupby方法来group 每个域名(host),再对每个域名的ip访问里unique统计。
host_associate_ip = proxy_data.loc[:, ['proxy_host', 'srcip']]
grouped_host_ip = host_associate_ip.groupby(['proxy_host']).srcip.nunique()
print(grouped_host_ip.sort_values(ascending=False).head(10))
再细细去看大家到底做了啥——查看日志数据发现原来在收集像二手车价格,工人招聘等等信息。从热门host来看,总得来说大家使用代理主要还是获取百度,qq,Google,Bing这类妇孺皆知网站的信息。
下面再让我们来看看是谁用代理IP“干事”最多,也就是看看谁的IP访问不同host的个数最多。
host_associate_ip = proxy_data.loc[:, ['proxy_host', 'srcip']]
grouped_host_ip = host_associate_ip.groupby(['srcip'_host']).proxy_host.nunique()
print(grouped_host_ip.sort_values(ascending=False).head(10))
哦,发现目标IP为123..*.155的小伙子有大量访问记录, 进而查看日志,原来他在大量收集酒店信息。 好了,这样我们就大概能知道谁在干什么了,再让我们来看看他们使用proxy持续时长,谁在长时间里使用proxy。 代码如下——
这里不给大家细说代码了,只给出如下伪代码。
date_ip = analysis_data.loc[:,['timestamp','srcip']]
grouped_date_ip = date_ip.groupby(['timestamp', 'srcip'])
#计算每个源ip(srcip)的访问日期
all_srcip_ration_times = ...
#算出最长连续日期天数
ration_date_cnt = count_date(all_srcip_ration_times)
好了,到此我也就初略的知道那些人做什么,谁用代理时长最长等等问题额。取出ip = 80...38的用户使用代理ip访问数据日志,发现原来这个小伙子在长时间获取搜狐images。
蜜罐在全国各地部署多个节点,再让我们来看看每个源ip扫描蜜罐节点总个数,了解IP扫描节点覆盖率。结果见如下:
# 每个IP扫描的IP扫描节点总个数
node = df[df.mole=='scan']
node = node.loc[:,['srcip','origin_details']]
grouped_node_count = node.groupby(['srcip']).count()
print grouped_node_count.sort_values(['origin_details'], ascending=False).head(10)
由上述两表初步可知,一些结论:如源ip为182...205的用户长时间对蜜罐节点进行扫描,mark危险用户等等。
如何利用python进行数据分析
一、明确目标 在进行数据分析之前,首先需要明确分析的目的和目标。这有助于确定所需的数据集和所需的工具。二、获取数据 Python提供了多种库,如pandas,可以从各种来源获取数据。这些来源可以是CSV文件、数据库、API等。使用pandas库可以轻松读取和处理这些数据。例如,使用pandas的read_csv函数可以轻松读...
ZESTRON表界面分析
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸等关键领域,还通过高精度仪器如固体表面Zeta电位分析仪等,确保数据准确可靠。这些分析手段对于优化产品配方、改进生产工艺、预防失效问题等具有重要意义,是我们不断提升产品性能与质量的重要工具。表面污染分析包括评估表面上存在的颗粒、残留物或物质。通过利用显微镜、光谱学和色谱法等技术,分析人员可以识别和表征污染物,以确定其成分和来源。这种分析在电子、制药和制造等各个行业中至关重要,以确保产品质量、性能和安全性。了解表面...
Python数据分析实战,使用箱线图识别学生成绩异常值,做原因分析
1. 箱线图基础使用matplotlib的boxplot函数,通过简单的数据导入即可绘制箱线图,图中包括异常值、上限、上四分位数、中位数、下四分位数和下限,这些点提供了数据分布的重要信息。2. 异常值识别箱线图判断异常值的标准是数据点超出上下限,即Q3+1.5(Q3-Q1)或Q1-1.5(Q3-Q1)之外。在实际案例中...
python如何做数据分析
1、数据获取 可以通过SQL查询语句来获取数据库中想要数据。Python已经具有连接sql server、mysql、orcale等主流数据库的接口包,比如pymssql、pymysql、cx_Oracle等。2、数据存储 企业当中的数据存储,通过通过数据库如Mysql来存储与管理,对于非结构化数据的存储可以使用MongoDB等。对于使用Python进行网络抓取的...
用Python分析指数: 10月18日指数高低Z值表。
使用Python代码实现这个工具时,首先需要初始化基础模块,如Pandas、Numpy、Matplotlib和Seaborn等。在数据导入部分,我从UQer处获取了数据,由于数据源的局限性,我将数据下载到本地进行进一步处理。数据集涵盖了约2800多个指数,实际涉及550只指数,从2004年到2017年10月18日的数据,共计约86万条记录。在具...
python数据分析之环境搭建——小白也能看懂的Jupyter Notebook安装与使 ...
1. 新建文档:点击“New”,可选择创建py、txt、folder或terminal。2. 运行Python程序:选择Python3,进入工作界面。通过工具栏进行代码编辑、Markdown文档编写和文档标题的插入。运行程序时,选中单元格并点击运行按钮。保存文档通过“File—Download as”进行。三、Jupyter Notebook快捷键 使用快捷键可提高...
python怎么分析数据
学习不同的算法最好结合相应的应用场景进行分析,有的场景也需要结合多个算法进行分析。另外,通过场景来学习算法的使用会尽快建立画面感。采用Python进行数据分析还需要掌握一系列库的使用,包括Numpy(矩阵运算库)、Scipy(统计运算库)、Matplotpb(绘图库)、pandas(数据集操作)、Sympy(数值运算库)等...
python怎么做数据分析
Scikit-learnScikit-learn是Python的通用机器学习工具包。它的子模块包括分类、回归、聚类、降维、选型、预处理,对于Python成为高效数据科学编程语言起到了关键作用。只需要学习Python入门的知识以及4个数据分析相关的库,就能上手使用Python进行数据分析了。另外如果需要获取外部网站数据的话,还需要学习爬虫。
如何用python进行数据分析
1、Python数据分析流程及学习路径 数据分析的流程概括起来主要是:读写、处理计算、分析建模和可视化四个部分。在不同的步骤中会用到不同的Python工具。每一步的主题也包含众多内容。根据每个部分需要用到的工具,Python数据分析的学习路径如下:相关推荐:《Python入门教程》2、利用Python读写数据 Python读...
MT5获取市场数据:使用 Python 自动化金融数据分析
这个函数在量化金融编程中扮演着至关重要的角色。它通过Python编程接口,无缝对接MT5,使得获取历史数据变得轻而易举。这些数据包含丰富的市场动态,可用于深入的分析,如趋势研究、策略构建和回测,甚至是风险控制。通过自动化这一获取过程,分析人员能够高效地处理海量数据,从而在瞬息万变的金融市场中做出更...
如何使用pycrypt加密工具测试反病毒产品的检测性能
使用pycrypt加密工具测试反病毒产品的检测性能方法如下。1、确保该工具所有的依赖组件已经安装完毕。2、使用命令运行pycrypt:python3pycrypt.py。3、提供Payload文件路径即可。