python&数据处理 笔记

机器学习实战笔记

标签(空格分隔): python


切片

A[:2]和A[::2]有区别
假设A = [1, 2, 3, 4, 5]
:一个是[1, 2]
::一个是[1, 3, 5]

A[1:4]和A[1::4]是有区别的
A[1:4] => A[1:4:1]是1到4之间间隔为1,a:b:c表示a到b,间隔c
A[1::4] 表示从1开始间隔4

nonzero用法

其中需要注意的是矩阵一定是二维的,哪怕看起来向数组,下标是(0,i)
还有需要注意的就是numpy中b.A的用法

>>> a = mat([1, 0, 3, 4, 5])
>>> b = a.T
>>> nonzero((b.A>1)*(b.A<5))[0]
array([2, 3])
>>> nonzero((b.A>1)*(b.A<5))
(array([2, 3]), array([0, 0]))
>>> c = a.A>0
>>> c
array([[ True, False,  True,  True,  True]], dtype=bool)

matrix和array区别

numpy matrix和array区别
array中*是元素各自相乘
matrix中则是矩阵乘法,对应位置乘用multiply
zeros((m,n)) return array

有时候会用到嵌套的列表(list),比如
[1, 2, [3, 4, [5, 6]], [“abc”, “def”]]
如果将嵌套的列表拉平(flatten)呢?变成:
[1, 2, 3, 4, 5, 6, “abc”, “def”]
使用flatten()

corrcoef()计算相关系数

数值映射

import pandas as pd  
df = pd.DataFrame([  
            ['green', 'M', 10.1, 'class1'],   
            ['red', 'L', 13.5, 'class2'],   
            ['blue', 'XL', 15.3, 'class1']],columns = ['color', 'size', 'prize', 'class label'])  

size_mapping = {  
           'XL': 3,  
           'L': 2,  
           'M': 1}  
#print(df)
#Series的map函数,将对应的values替代为size_mapping的数值。
df['size'] = df['size'].map(size_mapping) 

数据整合

有时候在merge的时候,会出现merge后的列名出现冲突的情况,这个时候pandas会自动给我们把冲突的列名加上前缀,eg. EID_x
如果我们需要继续x_EID是EID方便使用的话,那么我们就需要单独修改一列的名字

df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# OR
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)

截断SVD

import numpy as np
from scipy.sparse.linalg import svds

matrix = mat(np.random.random((20, 20)))
num_components = 19
u, s, v = svds(matrix, k=num_components)
X = mat(u.dot(np.diag(s))) * mat(v) # output of TruncatedSVD

切换python版本

# 基于 python3.6 创建一个名为test_py3 的环境
conda create --name test_py3 python=3.6 

# 基于 python2.7 创建一个名为test_py2 的环境
conda create --name test_py2 python=2.7

# 激活 test 环境
activate test_py2  # windows
source activate test_py2 # linux/mac

# 切换到python3
activate test_py3

管理工具

# 安装 matplotlib 
conda install matplotlib
# 查看已安装的包
conda list 
# 包更新
conda update matplotlib
# 删除包
conda remove matplotlib

查找第一个符合条件的

参考

def first(the_iterable, condition = lambda x: True):
    for i in the_iterable:
        if condition(i):
            return i

测试

>>> first(range(10))
0
>>> first(range(10), lambda i: i > 3)
4

划分数据集

得到groupby后分组的前n项\前一半

应用场景: 有时候需要根据时间来划分训练集测试集,稍微复杂的情况是需要先分组再根据时间或者其他属性划分
此用法可以获取根据‘col1’分组后获得最大的col2前k项

array = [[1,2],[1,0],[1,5],[2,2],[2,0],[2,5],[2,1]]
data = DataFrame(array, columns = ['col1', 'col2'])
print(data)
data = data.groupby(['col1']).apply(lambda x:(
    x.sort_values('col2', ascending=False)[:int(x.shape[0]*0.5)])).reset_index(drop=True)
print(data)
#   col1  col2
#0     1     2
#1     1     0
#2     1     5
#3     2     2
#4     2     0
#5     2     5
#6     2     1
#   col1  col2
#0     1     5
#1     2     5
#2     2     2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值