lambda表达式
通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数
add = lambda x, y : x + y
add(1,2) # 结果为3
pct_change()函数
这个函数用来计算同column两个相邻的数字之间的变化率,适用于Series、DataFrame、Panel,使用前需要先填空或者删除NAN
corrwith函数
corrwith(Series | list, axis=0):axis=0时计算frame的每列和参数的相关系数
numpy.tile()函数
就是把数组沿各个方向复制
比如 a = np.array([0,1,2]),np.tile(a,(2,1))就是把a先沿x轴(就这样称呼吧)复制1倍,即没有复制,仍然是 [0,1,2]。 再把结果沿y方向复制2倍,即最终得到
array([[0,1,2],
[0,1,2]])
>>> b = np.array([[1, 2], [3, 4]])
>>> np.tile(b, 2) #沿X轴复制2倍
array([[1, 2, 1, 2],
[3, 4, 3, 4]])
>>> np.tile(b, (2, 1)) #沿X轴复制1倍(相当于没有复制),再沿Y轴复制2倍
array([[1, 2],
[3, 4],
[1, 2],
[3, 4]])
python幂指数运算
>>> 2.0 * * 3
8.0
dataframe按照条件选行
在使用dataframe处理数据的时候碰到了按照条件选取行的问题,单个条件时可以使用:
df[df['one'] > 5]
如果多个条件的话需要这么写:
import numpy as np
df[np.logical_and(df['one']> 5, df['two']>5)]
也可以这么写
df[(df['one']> 5) & (df['two']>5)]
random_state函数
from sklearn import model_selection
x_train, x_test, y_train, y_test = model_selection.train_test_split(x, y, test_size=0.2, random_state=0)
这里的random_state就是为了保证程序每次运行都分割一样的训练集合测试集。否则,同样的算法模型在不同的训练集和测试集上的效果不一样。
当你用sklearn分割完测试集和训练集,确定模型和促初始参数以后,你会发现程序每运行一次,都会得到不同的准确率,无法调参。这个时候就是因为没有加random_state。加上以后就可以调参了。
fit_transform与transform的区别
fit_transform()的作用就是先拟合数据,然后转化它将其转化为标准形式
tranform()的作用是通过找中心和缩放等实现标准化
transform函数是一定可以替换为fit_transform函数的
fit_transform函数不能替换为transform函数
为了数据归一化(使特征数据方差为1,均值为0),我们需要计算特征数据的均值μ和方差σ^2,再使用下面的公式进行归一化:

我们在训练集上调用fit_transform(),其实找到了均值μ和方差σ^2,即我们已经找到了转换规则,我们把这个规则利用在训练集上,同样,我们可以直接将其运用到测试集上(甚至交叉验证集),所以在测试集上的处理,我们只需要标准化数据而不需要再次拟合数据。
train_test_split函数示例
>>> import numpy as np
>>> from sklearn.model_selection import train_test_split
>>> X, y = np.arange(10).reshape((5, 2)), range(5)
>>> X
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
>>> list(y)
[0, 1, 2, 3, 4]
>>> X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.33, random_state=42)
>>> X_train
array([[4, 5],
[0, 1],
[6, 7]])
>>> y_train
[2, 0, 3]
>>> X_test
array([[2, 3],
[8, 9]])
>>> y_test
[1, 4]
DataFrame.to_dict(orient='dict')
将DataFrame格式的数据转化成字典形式
参数:当然参数orient可以是字符串{'dict', 'list', 'series', 'split', 'records', 'index'}中的任意一种来决定字典中值的类型
字典dict(默认):类似于{列:{索引:值}}这样格式的字典
列表list:类似于{列:[值]}这种形式的字典
序列series:类似于{列:序列(值)}这种形式的字典
分解split:类似于{索引:[索引],列:[列],数据:[值]}这种形式的字典
记录records:类似于[{列:值},...,{列:值}]这种形式的列表
索引index:类似于{索引:{列:值}}这种形式的字典
在新版本0.17.0中,允许缩写,s表示序列,sp表示分裂
返回:结果:像{列:{索引:值}}这种形式的字典
numpy.logspace用法
- 先来看一个例子,我们让开始点为0,结束点为0,元素个数为10,看看输出结果。为什么是这样子?难道不都是0吗?
>>> a = np.logspace(0,0,10)
>>> a
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
- 因为logspace中,开始点和结束点是10的幂,0代表10的0次方,9代表10的9次方。我们看下面的例子。
>>> a = np.logspace(0,9,10)
>>> a
array([ 1.00000000e+00, 1.00000000e+01, 1.00000000e+02,
1.00000000e+03, 1.00000000e+04, 1.00000000e+05,
1.00000000e+06, 1.00000000e+07, 1.00000000e+08,
1.00000000e+09])
- 假如,我们想要改变基数,不让它以10为底数,我们可以改变base参数,将其设置为2试试。
>>> a = np.logspace(0,9,10,base=2)
>>> a
array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])
sklearn.pipeline
有很多数据转换步骤需要按照正确的步骤执行,sklearn提供了Pipeline类来处理这种顺序的操作步骤
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
num_pipeline = Pipeline([
('imputer', Imputer(strategy="median")),
('attribs_adder', CombinedAttributesAdder()),
('std_scaler', StandardScaler()),
])
housing_num_tr = num_pipeline.fit_transform(housing_num)
Pipeline构造器接受(name, transform) tuple的列表作为参数,按顺序执行列表中的transform
所以 上述代码的处理步骤:
先在housing_num中利用Imputer处理缺失值,然后将返回值传给CombinedAttributesAdder,添加一些特征属性,接下来再将返回值传给StandardScaler,完成标准化,完成数据预处理。
DictVectorizer-特征提升之特征抽取
DictVectorizer的处理对象是符号化(非数字化)的但是具有一定结构的特征数据,如字典等,将符号转成数字0/1表示
#定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)
measurements = [{'city':'Beijing','temperature':33.},{'city':'London','temperature':12.},{'city':'San Fransisco','temperature':18.}]
#从sklearn.feature_extraction导入DictVectorizer
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
#输出转化后的特征矩阵
print vec.fit_transform(measurements).toarray()
#输出各个维度的特征含义
print vec.get_feature_names()
输出结果为:
[[ 1. 0. 0. 33.]
[ 0. 1. 0. 12.]
[ 0. 0. 1. 18.]]
['city=Dubai', 'city=London', 'city=San Fransisco', 'temperature']
我们不难发现,DictVectorizer对非数字化的处理方式是,借助原特征的名称,组合成新的特征,并采用0/1的方式进行量化,而数值型的特征转化比较方便,一般情况维持原值即可。
接下来进一步验证这个结论,决定在每个原来的字典结构中,再增加一个符号化特征,”country”
#定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)
measurements = [{'city':'Beijing','country':'CN','temperature':33.},{'city':'London','country':'UK','temperature':12.},{'city':'San Fransisco','country':'USA','temperature':18.}]
#从sklearn.feature_extraction导入DictVectorizer
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
#输出转化后的特征矩阵
print vec.fit_transform(measurements).toarray()
#输出各个维度的特征含义
print vec.get_feature_names()
输出结果为:
[[ 1. 0. 0. 1. 0. 0. 33.]
[ 0. 1. 0. 0. 1. 0. 12.]
[ 0. 0. 1. 0. 0. 1. 18.]]
['city=Dubai', 'city=London', 'city=San Fransisco', 'country=CN', 'country=UK', 'country=USA', 'temperature']
设置matplotlib图片大小
plt.figure(figsize=(6, 6.5))
git clone
如:git clone https://github.com/wesm/pydata-book.git
快速下载github文件
网友评论