import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.model_selection import train_test_split
# 列名
cols = ['duration', 'protocol_type', 'service', 'flag', 'src_bytes', 'dst_bytes', 'land', 'wrong_fragment', 'urgent',
'hot', 'num_failed_logins', 'logged_in', 'num_compromised', 'root_shell', 'su_attempted', 'num_root',
'num_file_creations', 'num_shells', 'num_access_files', 'num_outbound_cmds', 'is_host_login', 'is_guest_login',
'count', 'srv_count', 'serror_rate', 'srv_serror_rate', 'rerror_rate', 'srv_rerror_rate', 'same_srv_rate',
'diff_srv_rate', 'srv_diff_host_rate', 'dst_host_count', 'dst_host_srv_count', 'dst_host_same_srv_rate',
'dst_host_diff_srv_rate', 'dst_host_same_src_port_rate', 'dst_host_srv_diff_host_rate', 'dst_host_serror_rate',
'dst_host_srv_serror_rate', 'dst_host_rerror_rate', 'dst_host_srv_rerror_rate', 'target']
# 标签以及标签所对应的类别 其中正常数据为 normal 网络攻击共有四大类(39小类): dos, u2r, r2l, probe
attacks_types = {
'normal': 'normal',
'back': 'dos',
'buffer_overflow': 'u2r',
'ftp_write': 'r2l',
'guess_passwd': 'r2l',
'imap': 'r2l',
'ipsweep': 'probe',
'land': 'dos',
'loadmodule': 'u2r',
'multihop': 'r2l',
'neptune': 'dos',
'nmap': 'probe',
'perl': 'u2r',
'phf': 'r2l',
'pod': 'dos',
'portsweep': 'probe',
'rootkit': 'u2r',
'satan': 'probe',
'smurf': 'dos',
'spy': 'r2l',
'teardrop': 'dos',
'warezclient': 'r2l',
'warezmaster': 'r2l',
}
path = 'data/kddcup.data_10_percent.gz'
df = pd.read_csv(path, names=cols)
# Adding Attack Type column
df['attack_types'] = df.target.apply(lambda r: attacks_types[r[:-1]])
# 数据可视化
def bar_graph(feature):
df[feature].value_counts().plot(kind="bar")
# 保存图片
plt.savefig(f'picture/{feature}.jpg')
bar_graph('protocol_type')
plt.figure(figsize=(15, 6))
bar_graph('service')
bar_graph('flag')
# 找到除 target 和 Attack Type 以外的非数值的标签
num_cols = df._get_numeric_data().columns
cate_cols = list(set(df.columns) - set(num_cols))
cate_cols.remove('target')
cate_cols.remove('attack_types')
print(cate_cols)
"""
['flag', 'protocol_type', 'service']
"""
# 将非数值标签编码
print(df['protocol_type'].value_counts())
pmap = {
'icmp': 0,
'tcp': 1,
'udp': 2,
}
df['protocol_type'] = df['protocol_type'].map(pmap)
# 将非数值标签编码
print(df['flag'].value_counts())
fmap = {
'SF': 0,
'S0': 1,
'REJ': 2,
'RSTR': 3,
'RSTO': 4,
'SH': 5,
'S1': 6,
'S2': 7,
'RSTOS0': 8,
'S3': 9,
'OTH': 10,
}
df['flag'] = df['flag'].map(fmap)
# 将非数值标签编码
print(df['attack_types'].value_counts())
amap = {
'normal': 1,
'dos': 2,
'probe': 3,
'u2r': 4,
'r2l': 5,
}
df['attack_types'] = df['attack_types'].map(amap)
# service 种类分布过于广泛 直接舍弃
df.drop('service', axis=1, inplace=True)
# 去 NA
df = df.dropna('columns')
# 去特殊值
df = df[[col for col in df if df[col].nunique() > 1]]
# 计算相关度并绘图
corr = df.corr()
figure = plt.figure(figsize=(15, 12))
sns.heatmap(corr)
plt.show()
# 保存图片
figure.savefig(f'picture/correlation.jpg')
# 计算 l1 和 l2 的相关度并输出
def cal_cor(l1, l2):
print(l1, l2, df[l1].corr(df[l2]))
cal_cor('num_root', 'num_compromised')
cal_cor('srv_serror_rate', 'serror_rate')
cal_cor('srv_rerror_rate', 'rerror_rate')
cal_cor('dst_host_srv_serror_rate', 'srv_serror_rate')
cal_cor('dst_host_serror_rate', 'rerror_rate')
cal_cor('dst_host_rerror_rate', 'srv_rerror_rate')
cal_cor('dst_host_srv_rerror_rate', 'rerror_rate')
cal_cor('dst_host_same_srv_rate', 'dst_host_srv_count')
# 与 num_compromised 接近线性相关 Correlation = 0.9938277978750971
df.drop('num_root', axis=1, inplace=True)
# 与 serror_rate 接近线性相关 Correlation = 0.9983615072725553
df.drop('srv_serror_rate', axis=1, inplace=True)
# 与 rerror_rate 接近线性相关 Correlation = 0.9947309539823285
df.drop('srv_rerror_rate', axis=1, inplace=True)
# 与 srv_serror_rate 接近线性相关 Correlation = 0.9993041091845912
df.drop('dst_host_srv_serror_rate', axis=1, inplace=True)
# 与 rerror_rate 接近线性相关 Correlation = 0.9436670688873966
df.drop('dst_host_serror_rate', axis=1, inplace=True)
# 与 srv_rerror_rate 接近线性相关 Correlation = 0.9821663427309738
df.drop('dst_host_rerror_rate', axis=1, inplace=True)
# 与 rerror_rate 接近线性相关 Correlation = 0.9851995540753726
df.drop('dst_host_srv_rerror_rate', axis=1, inplace=True)
# 与 dst_host_srv_count 接近线性相关 Correlation = 0.973685457296524
df.drop('dst_host_same_srv_rate', axis=1, inplace=True)
df.drop('target', axis=1, inplace=True)
# 划分训练集测试集
train_dataset, test_dataset = train_test_split(df, test_size=0.25)
# 保存
df.to_csv("data/df.csv", index=False)
train_dataset.to_csv("data/train_dataset.csv", index=False)
test_dataset.to_csv("data/test_dataset.csv", index=False)

onnx
- 粉丝: 1w+
最新资源
- Python期末大作业,基于selenium的51job网站爬虫与数据可视化分析.zip
- Python实现基于协程的异步爬虫.zip
- python实现基于字典的多线程web目录扫描器.zip
- Python实现基于DeepFM模型的音乐推荐.zip
- qtppy(全称Quality testing platform-python) 是基于python语言开发的自动化测试平台.zip
- QQ机器人,用于远程执行命令,运行于Windows,基于Python,使用WebQQ协议 ..zip
- python语言基于CTP接口的二次开发,具体参照https___github.com_nicai0609_Python-CTPAPI.zip
- s60平台上基于Python的网易云音乐客户端.zip
- MyBatisDao是一个基于MyBatis框架的轻量级ORM扩展组件_支持Java类与数据库表的自动映射_提供一对一_一对多_多对多关联关系处理_支持懒加载与立即加载模式_集成动.zip
- web前端演示项目集合_包含Vue框架示例JavaScript原生代码HTML5页面布局CSS3样式设计响应式网页开发DOM操作实践Ajax异步请求处理前端组件化开发单页面应用SP.zip
- 海上风力发电与水下压缩空气储能互补系统建模仿真及经济效益分析_海上风力发电_水下压缩空气储能_系统建模_仿真分析_经济效益评估_互补系统设计_能源存储技术_可再生能源集成_电力系统.zip
- PasswordNote密码管理工具_支持一键生成多种格式密码_提供在线和离线存储模式_客户端加密确保服务器仅存储主密码哈希值和加密后笔记_实现用户密码和数据完全私有化_支持免费一.zip
- 基于模块化多电平技术和电动汽车集群的分布式电能存储控制系统_电动汽车停车场模拟_MMC仿真_impressjs演示_分布式储能控制与仿真平台_用于研究电动汽车集群作为分布式储能单.zip
- 日常实用工具集_漫画打包器_番剧重命名_硬件信息查看_自动化处理工具_Python脚本_图像压缩_文件重命名_系统信息检测_用于自动将散装漫画图片按数量分类打包为ZIP格式供Kom.zip
- 基于百度智能云对象存储服务的PHP软件开发工具包_提供文件上传下载删除管理及CDN加速功能集成_适用于Web应用和移动应用后端实现云端数据存储与分发_支持PHP72至74运行环.zip
- MYearODA_C_Net_数据库通用ORM组件_支持Oracle_DB2_MySql_SqlServer_SQLite_MariaDB_Informix_Sybase_Ac.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
前往页