随着网络数据的爆发式的增长,数据处理工作日益显示出它的重要性,我们的目的是从大量的杂乱无章的数据中找出对我们的工作有益的数据或者发现数据的某种分布特征,预测数据数据的规律。因此我们需要对数据进行可视化展示,特征选择,特征构建等一系列操作。本文的目的是针对像作者一样初步涉及到数据处理工作的读者们提供一个简单、直接的python数据处理基础操作。
一般文本或者入侵检测的数据集都是以逗号分隔符分割的CSV文件。本文用的数据集为公开的入侵检测数据集AWID。此数据集一共有154个特征,同时每行数据都有相应的标签。但是作者目前不知道这些特征和标签类别有什么样的关联,因此我们的挑战就是通过观察此数据集来发现特征和类别之间的某种联系。如果你也和我一样好奇,那让我们开始我们的AWID数据集探索之旅吧。
Pandas是我们得力的助手,它是Python的一个库,同时是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
【导入库】
import pandas as pd
import numpy as np
【读取数据】
train_set=pd.read_csv('1.csv')
【展示数据的前五行】
train_set.head()
因为此数据集没有列名,所以上面操作直接把第一行视为列名。下面我们尝试为数据集添加列名。
【自动添加列索引】
file_name=('1.csv')
train_set=pd.read_csv(file_name,header=None)
需要注意的是,在读取数据时,参数header的值设为None,数据就会被自动添加0-n(列个数)的列索引。如图:
现在是我们需要为每个列添加对应特定的名称(表头),因此需要定义列名:
(列名写到我手残,暂时还不知道有没有更好的方法,所以只能搬砖)
train_set.shape
data=train_set[['列一','列二']]
我从数据集里挑选了21个特征:
查看数据之后发现数据中还是存在“?”,所以接下来查看一下每一列中“?”个数:
def getlistnum(data):#这个函数就是要对列表的每个元素进行计数
data = list(data)
set1 = set(data)
dict1 = {}
for item in set1:
dict1.update({item:data.count(item)})
return dict1
数据清洗时,就是把数据中涵盖的异常值、冗余值、缺失值给处理掉,以便我们后续使用。下面是几个常用的方法。
【剔除特征】
train_set.drop('frame.dlt',axis=1)
data[data['wlan.ra']=='?']