数据读取和处理
pandas读取数据
Python提供了强大的包,直接用于各种数据读取,比如pandas。
import numpy as np
import pandas as pd
pd.set_option('display.width', 200)
data = pd.read_excel('sales.xlsx', sheet_name='sheet1', header=0)
print ('data.head() = \n', data.head())
print ('data.dtypes = \n', data.dtypes)
print ('data.columns = \n', data.columns)
# 运行结果
data.head() =
account name ... Feb Mar
0 211829 Kerluke, Koepp and Hilpert ... 62000 35000
1 320563 Walter-Trantow ... 45000 35000
2 648336 Bashirian, Kunde and Price ... 120000 35000
3 109996 D'Amore, Gleichner and Bode ... 120000 10000
4 121213 Bauch-Goldner ... 120000 35000
[5 rows x 9 columns]
data.dtypes =
account int64
name object
street object
city object
state object
postal-code int64
Jan int64
Feb int64
Mar int64
dtype: object
data.columns =
Index(['account', 'name', 'street', 'city', 'state', 'postal-code', 'Jan', 'Feb', 'Mar'], dtype='object')
模糊查询和替换
Python还提供了Fuzzywuzzy,可用于模糊查询和替换。如果提供对应的字符串库,则通过Fuzzywuzzy用于查找和替换给定文本中错误的字符串。比如直接计算两个字符串的编辑距离:
安装
pip install fuzzywuzzy
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
print (fuzz.ratio('Python Package', 'PythonPackage'))
# 运行结果
96
数据清洗
机器学习的基本流程:数据读取–>数据清理–>特征选择–>模型选择–>模型调优。
数据清理:
- 将时间、日期、数值等转为统一格式
- 去除文本中不需要的特殊字符等
- 去除内容与字段不对应的情况,如:字段为性别,描述为姓名
- 数据去重
- 替换不合理值
- 核验多数据源数据关联时是否正确
例:一般数据中不可避免的有噪声,需要想办法对数据进行清洗,比如下图。
主成分分析PCA
PCA是一种常用的数据分析方法,通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
具体思路:寻找样本的主方向u。将m个样本投影到直线l上,得到m个位于直线l上的点,计算m个投影点的方差,认为方差最大的直线方向就是主方向(若m个样本投影到一个点上,则信息基本全部损失;差距越大,损失越小,越接近原始值)。
降维求解的过程:
- 归一化:也即中心化,处理后的均值为0
- 求出协方差矩阵 A T A A^TA ATA
- 求出协方差矩阵的特征值及对应的特征向量
- 将特征向量按对应特征值从大到小按行排列成矩阵,取前k行组成矩阵P
- Y=PX即为降维到k维后的数据
# 鸢尾花数据集
sepal_length sepal_width petal_length petal_width type
0 5.1 3.5 1.4 0.2 0
1 4.9 3.0 1.4 0.2 0
2 4.7 3.2 1.3 0.2 0
3 4.6 3.1 1.5 0.2 0
4 5.0 3.6 1.4 0.2 0
···
one-hot编码
在机器学习问题中我们经常会遇到分类特征,这些特征值并不是连续的,而是离散的,无序的。通常我们需要对其进行特征数字化。
One-Hot编码,又称为一位有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候只有一位有效。
例:
祖国特征:[“中国”,"美国,“法国”](这里N=3):
中国 => 100
美国 => 010
日本 => 001