Python机器学习之微软恶意代码分类代码解读

1、randomsubset.py 抽取训练子集

import os
from random import *
import pandas as pd
import shutil

rs = Random()
rs.seed(1) #设置随机数种子为1

trainlabels = pd.read_csv('trainLabels.csv') #导入CSV或者xlsx文件
fids = []
opd = pd.DataFrame() #创建列表opd
for clabel in range (1,10):
    mids = trainlabels[trainlabels.Class == clabel]
    mids = mids.reset_index(drop=True)#使下标index连续

    rchoice = [rs.randint(0,len(mids)-1) for i in range(100)]
    print rchoice   
    
#     for i in rchoice:
#         fids.append(mids.loc[i].Id)
#         opd = opd.append(mids.loc[i])

    rids = [mids.loc[i].Id for i in rchoice]
    fids.extend(rids)#在已存在的列表中添加新的列表内容
    opd = opd.append(mids.loc[rchoice])#append() 方法用于在列表末尾添加新的对象
    '''数据提取 :
       主要用到的三个函数:loc,iloc和ix,loc函数按标签值进行提取,iloc按位置进行提取,ix可以同时按标签和位置进行提取。
      loc[]是按索引提取单行的数值
       '''

print len(fids)#输出fids的长度
opd = opd.reset_index(drop=True)
print opd
opd.to_csv('subtrainLabels.csv', encoding='utf-8', index=False)#写入到CSV文件中

sbase = '/home/moon/train/'
tbase = '/home/moon/subtrain/'

for fid in fids:
	fnames = ['{0}.asm'.format(fid),'{0}.bytes'.format(fid)]#format()格式化字符串
	for fname in fnames:
		cspath = sbase + fname
		ctpath = tbase + fname
		shutil.copy(cspath,ctpath)#复制文件前者复制到后者中

代码引用:https://github.com/zty200329/ToyMalwareClassification/blob/master/randomsubset.py

a、OS模块
os 模块提供了非常丰富的方法用来处理文件和目录。

b、 random模块
random用于生成随机数,random() 方法返回随机生成的一个实数,它在[0,1)范围内。
seed()用于生成随机数种子,我们调用 random.random() 生成随机数时,每一次生成的数都是随机的。 但是,当我们预先使用 random.seed(x) 设定好种子之后,其中的 x 可以是任意数字,如10,这个时候,先调用它的情况下,使用 random() 生成的随机数将会是同一个。
random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
语法:

import random
random.random()

c、pandas模块
详细用法:https://blog.csdn.net/liufang0001/article/details/77856255
pandas :pannel data analysis(面板数据分析)。pandas是基于numpy构建的,为时间序列分析提供 了很好的支持。pandas中有两个主要的数据结构,一个是Series,另一个是DataFrame。
DataFrame是一个类似表格的数据结构,索引包括列索引和行索引,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame的每一行和每一列都是一个Series,这个Series的 name属性为当前的行索引名/列索引名。
import pandas as pd是将pandas导入并改名为pd.
reset_index可以还原索引,重新变为默认的整型索引
DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill=”)
level控制了具体要还原的那个等级的索引
drop为False则索引列会被还原为普通列,否则会丢失。

In [318]: data
Out[318]: 
         c    d
a   b          
bar one  z  1.0
    two  y  2.0
foo one  x  3.0
    two  w  4.0
 
In [319]: data.reset_index()
Out[319]: 
     a    b  c    d
0  bar  one  z  1.0
1  bar  two  y  2.0
2  foo  one  x  3.0
3  foo  two  w  4.0

d、shutil模块
shutil模块提供了一些针对文件和目录的高级操作,主要是拷贝、移动。对于单个文件的操作,还可参考os模块.

e、range()函数
range() 函数可创建一个整数列表,一般用在 for 循环中。
语法:

range(start, stop[, step])
#start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
#stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
#step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

你可能感兴趣的:(Python,机器学习,python,安全)