Overview
在数据挖掘(机器学习)领域,python
之所以被广泛应用,与其强大的工具包关系密切。正好最近的项目里频繁地使用python
处理数据,于是记录一下python
的scipy numpy scikits-learn
等几个常用工具包的安装及其常用函数的使用。这里只记录在ubuntu 14.04
下的安装使用,Mac
系统的参考Chris
的另一篇文章:Mac上安装Python机器学习库scikit-learn。Windows
版本的就不做介绍了。
1.安装工具包
相比于mac
,在linux
系统上安装这几个工具包十分快捷方便,分别只需一条命令即可成功。
- 安装
python-scipy
包sudo apt-get install python-scipy
- 安装
python-numpy
包sudo apt-get install python-numpy
- 安装
python-sklearn
包sudo apt-get install python-sklearn
- 安装
python_dev
包sudo apt-get install python-dev
- 安装
python-matplotlib
包sudo apt-get install python-matplotlib
- 安装
python-pandas
包sudo apt-get install python-pandas
其中需要注意的是,最好先安装
python-scipy
,python-numpy
,python_dev
这三个包,因为其他包的安装依赖这几个包。
2.工具包简单使用
我们以对训练集归一化的代码为例,简单认识一下这几个常用包中的常用函数。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#Copyright Chris & Young
def usage():
print "normalize_train.py usage:"
print "python normalize_train.py <options> <source files> "
print "-i,--input: input a training dataset feature file."
print "-o,--ouput: output a normalized training dataset feature file."
print "-H,--header: input 'T' if the input_file contains header row, else input 'F'."
print "-c,--class: input 'T' if the input_file contains class label column, else input 'F'."
print "-h,--help: show the help information."
import re
import pandas as pd
import numpy as np
import fileinput
import sys, getopt
from os import listdir
from os.path import isfile, join
from sklearn import preprocessing
opts, args = getopt.getopt(sys.argv[1:], 'i:o:H:c:h',['input=','output=','header=','class=','help'])
input_file=""
output_file=""
header_input=""
class_input=""
#col_start这个变量,是归一化开始列的index。根据是否有class列而变化。
col_start=0
for opt, arg in opts:
if opt in ('-i','--input'):
input_file = arg
elif opt in ('-o','--output'):
output_file = arg
elif opt in('-H','--header'):
header_input = arg
if header_input == "T":
header_input='infer'
elif header_input == "F":
header_input=None
elif opt in ('-c','--class'):
class_input = arg
if class_input=="T":
col_start+=1
elif opt in ('-h', '--help'):
usage()
sys.exit(2)
else:
usage()
sys.exit(2)
#读取数据到dataframe中
df = pd.read_csv(input_file,header=header_input)
#print df
#df_columns存储读取进来的数据的header,即列头。
df_columns=df.columns
#再进行一次判断,如果没有header,列头为None,矩阵转换回数据框的时候需要用到列头。
if header_input==None:
df_columns=None
#print df_columns
#将数据框分成两部分:class列单独拿出来,其余部分归一化处理
dataframe1 = df.ix[:,range(col_start)]
dataframe2 = df.ix[:,col_start:]
#print dataframe1,dataframe2
#matrix1存储第一个数据框的矩阵形式
matrix1 = np.array(dataframe1)
#print matrix1
#第二个数据框需要转化为float类型
dataframe2 = np.float64(dataframe2)
#下面两行代码是核心归一化代码
data_scaled = preprocessing.MinMaxScaler().fit(dataframe2)
matrix2 = data_scaled.transform(dataframe2)
#将两个矩阵水平连起来
matrix_final=np.hstack((matrix1,matrix2))
#print matrix_final
#矩阵加上列头重新变为数据框
df_final=pd.DataFrame(matrix_final,columns=df_columns)
#print df_final
if header_input==None:
head=False
else:
head=df_columns
#将数据框存储为csv格式的文件
df_final.to_csv(output_file,header=head,index=False)
可以看到,常用的函数有如下几个:
(1). numpy.array
:把数据框变成矩阵
matrix1 = np.array(dataframe1)
(2). numpy.float64
:把数据变成float64
类型
dataframe2 = np.float64(dataframe2)
(3). numpy.hstack
:把两个行数相同的矩阵水平连接起来
matrix_final=np.hstack((matrix1,matrix2))
把列数相同的矩阵垂直拼接是另一个函数:
numpy.vstack
(4). pandas.DataFrame
:把矩阵变成数据框
df_final=pd.DataFrame(matrix_final,columns=df_columns)
(5). preprocessing.MinMaxScaler().fit
和transform
data_scaled = preprocessing.MinMaxScaler().fit(dataframe2)
matrix2 = data_scaled.transform(dataframe2)
preprocessing.MinMaxScaler().fit
这个函数先得到数据的每一列的极值,然后存储起来供下一步transform
进行归一化。
这几个函数只是在我们数据处理过程中经常用到的,其他更丰富的函数请参考官方文档。