文章目录

  • 写在前面
  • 1.pandas apply applymap map 的使用
  • 2. csr csc 稀疏矩阵
  • 3. pandas 表连接 并显示连接后的NaN值
  • 输出数组中出现次数最多的元素
  • value_counts对Series值进行统计并排序
  • get_dummies() 和 factorize()
  • drop_dumplicates()

写在前面

该篇博客用来记录数据挖掘比赛中常用的pandas 处理技巧 实时更新

1.pandas apply applymap map 的使用

apply表示沿着dataFrame某一个轴执行函数 默认axies=0 即对每一列的所有行进行某一运算
如果axies=1 则对每一行的所有列进行某一运算
例:

In [116]: frame = DataFrame(np.random.randn(4, 3), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])In [117]: frame
Out[117]: b         d         e
Utah   -0.029638  1.081563  1.280300
Ohio    0.647747  0.831136 -1.549481
Texas   0.513416 -0.884417  0.195343
Oregon -0.485454 -0.477388 -0.309548In [118]: f = lambda x: x.max() - x.min()In [119]: frame.apply(f)
Out[119]:
b    1.133201
d    1.965980
e    2.829781
dtype: float64
def change(x):if x.find('iphone')==0:x='apple'return x
traindata['make']=traindata['make'].apply(lambda x: change(x))

applymap是对dataFrame中每一个元素都进行该操作
map是对Series中的每一个元素都进行该操作

2. csr csc 稀疏矩阵

在进行feature engineing 之后会产生很多feature位置为0的数据,这时候使用稠密矩阵存储会浪费很多空间 所以可以转化为稀疏矩阵 这里主要使用csr和csc这两种稀疏矩阵

csr稀疏矩阵 :存储3行数据 第一行数据是row的偏移量 即每一行和其前面所有行非零特征的总和 (总共有行数加1个元素 从第0行开始计算)
第二行数据为 每一个非零数据的列的index
第三行数据为 每一个非零数据的数据值

    indptr = np.array([0, 2, 3, 6])#最后一个元素是总共有多少个数据,这里为6,因为data的数据为1到6,6个数字#前三个元素,分别为每一行第一个有数据的元素在data数据中的索引,比如3,指的是第3行的第一个数字在data中的index为3,值为4indices = np.array([0, 2, 2, 0, 1, 2])#元素意义: 每个数在最终生成的数组数据中,位于每一行中的索引值data = np.array([1, 2, 3, 4, 5, 6])#在矩阵中的所有元素data_array = csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()print('data_array=', data_array)  # [[1 0 2] [0 0 3] [4 5 6]]return

在使用csr 或者csc等压缩格式数据进行处理的时候 可以想象成使用的依旧是这些格式对应的稠密矩阵 这些稀疏矩阵运算对用用户而言是透明的
例如:

cv = CountVectorizer()
cv .fit(data['user_tags'])
train_a = cv .transform(train['user_tags'])
test_a = cv .transform(test['user_tags'])

利用CountVectorizer()进行分词并统计出现频数
返回的数据即为CSR存储的数据
如果对这一类的数据进行像稠密数据一样的concat等操作的时候可以使用

sparse.hstack 相当于稠密矩阵中的pd.concat(axis=1)
sparse.vstack 相当于稠密矩阵中的pd.concat(axis=0)
例如:

>>> from scipy.sparse import coo_matrix, hstack
>>> A = coo_matrix([[1, 2], [3, 4]])
>>> B = coo_matrix([[5], [6]])
>>> hstack([A,B]).toarray()
array([[1, 2, 5],[3, 4, 6]])

hstack可以传入三个参数
1 blocks 即为进行拼接的稀疏矩阵
2 format 返回的稀疏矩阵的类型 可以设置为’csr’
3 dtype 返回数据的数据类型
在这里有一个小trick 在使用CountVectorizer() 进行分词并统计数量之后 如果将数据类型由int64转化为bool可以将每个特征出现的次数转化为是否出现了该特征
同时如果能够确定每一行每一个特征只会出现一次,那么转化之后可以大大降低该特征的存储空间

3. pandas 表连接 并显示连接后的NaN值

pandas表连接可以使用 join 以及merge
对于连接之后可能会由于操作不慎出现部分元素为NaN的情况 这时我们需要找出这些情况
df.isnull().any() 会显示各列是否存在为NaN的元素
df.isnull() 输出该DataFrame 只是每个位置上都是true或者false

此时如果想要得到是True的坐标 可使用 df.isnull().values 将其转化为array数组
使用 df[df.isnull().values==True] 获取原始dataFrame中为null的元素
如果想要查看究竟是什么原因导致了连接出现NaN可以搭配unique

df[df.isnull().values==True] [’ label’ ].unique()

输出数组中出现次数最多的元素

可以使用np.bincount() 以及 np.argmax() 组合
对于 np.bincount() 输出的数组比x的最大值大1 输出数组每个位置的输出值 代表该位置的值在原始数组中出现的次数

# 我们可以看到x中最大的数为7,因此bin的数量为8,那么它的索引值为0->7
x = np.array([0, 1, 1, 3, 2, 1, 7])
# 索引0出现了1次,索引1出现了3次......索引5出现了0次......
np.bincount(x)
#因此,输出结果为:array([1, 3, 1, 1, 0, 0, 0, 1])

np.argmax
返回最大值的索引

value_counts对Series值进行统计并排序

使用value_counts 输出Series 对应的出现次数 返回的是一个Series数组 ,如果想要得到各个值在所有值中所占的比重 可以加上 normalize=True 输出的则是一个Series,index是属性名 valus是对应属性值所占的比重

get_dummies() 和 factorize()

get_dummies :
aim: 得到category类型特征的one-hot 编码
arguments:Series or dataFrame
pd.get_dummies(pd.Series(list(“abcaa”)))

>>> pd.get_dummies(pd.Series(list('abcaa')))a  b  c
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0
4  1  0  0
>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
...                    'C': [1, 2, 3]})
>>> pd.get_dummies(df, prefix=['col1', 'col2'])C  col1_a  col1_b  col2_a  col2_b  col2_c
0  1       1       0       0       1       0
1  2       0       1       1       0       0
2  3       1       0       0       0       1

pd.factorize()
相当于label encoding

>>> pd.factorize(pd.Series(list('abcaadedffg')))
(array([0, 1, 2, 0, 0, 3, 4, 3, 5, 5, 6]), Index(['a', 'b', 'c', 'd', 'e', 'f', 'g'], dtype='object'))

对于category特征
for i in trainData.columns[trainData.dtype==‘object’]:
trainData[i]=trainData[i].factorize()[0]
可以简单对trainData进行label encoding

drop_dumplicates()


一般而言我们通常使用drop_dumplicates() 来删除数据中完全重复的数据
但是让我们换一个思路 如果对trainData实施转置操作 即 trainData.T 然后再进行 drop_dumplicates() 操作
相当于把两列取值完全一一对应的特征删除掉一维
在我们删除完全相关的特征的时候一般使用相关系数 但是相关系数对于category类型的数据无法实施
如果使用trainData.T drop_dumplicates 可以解决这个问题

即上述的f2和f3可以通过trainData.T.drop_dumplicates() 删除
但是对于f4和f5 同样的 其实两列也是完全重复的 因为对于不同的category 取值只是一个代指如果我们重新编码 自上到下
f4 : A—>0 B—>1 C---->2 即 0 1 0 2
f5 C---->0 A---->1 B-----2 即 0 1 0 2
所以对于这样的数据也可以
traincopy=trainData
for i in category_columns:
traincopy[i]=traincopy[i].factorize[0]
traincopy.T.drop_dumplicates()

当然上述适用于feature较少的数据 如果feature很多 则需使用
dup_cols = {}

for i, c1 in enumerate(tqdm_notebook(train_enc.columns)):
for c2 in train_enc.columns[i + 1:]:
if c2 not in dup_cols and np.all(train_enc[c1] == train_enc[c2]):
dup_cols[c2] = c1

数据挖掘比赛常用数据处理函数相关推荐

  1. 【干货】数据挖掘比赛大数据处理和建模经验

    有同学反馈,我们决赛的数据比较大,由于机器资源的限制,在处理数据和构建模型的时候,会遇到一些瓶颈.以下来抛一下我们了解的一些处理思路: 1 采样 可以对数据进行下采样,然后使用不同的子集进行特征抽取和 ...

  2. python数据处理常用函数_Python常用数据处理函数

    java多线程处理 package com.copyFile; import java.io.BufferedReader;import java.io.File;import java.io.Fil ...

  3. pythonsave函数_Python常用功能函数

    Python常用功能函数汇总 1.按行写字符串到文件中 import sys, os, time, json def saveContext(filename,*name): format = '^' ...

  4. spark 数据框 删除列_pandas 常用的数据处理函数

    在数据分析过程中,首先就是对数据进行清洗和处理,而使用 python 进行处理的朋友们,对 pandas 包肯定是熟悉不过的了.pandas 的功能很强大,基本的数据处理操作都可以找到对应函数去使用, ...

  5. 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)

    简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...

  6. Kaggle 数据挖掘比赛经验分享 (转载)

     [干货]Kaggle 数据挖掘比赛经验分享 (转载) 标签: 数据挖掘数据科学家机器学习kaggle 2017-05-21 19:25 99人阅读 评论(0) 收藏 举报 本文章已收录于: 分类 ...

  7. cfile read 最大读取限制_pandas读取表格后的常用数据处理操作

    作者丨Sp4rkW来源丨凹凸数据大家好,我是Sp4rkW今天给大家讲讲pandas读取表格后的一些常用数据处理操作.这篇文章其实来源于自己的数据挖掘课程作业,通过完成老师布置的作业,感觉对于使用pyt ...

  8. kl散度度量分布_数据挖掘比赛技巧——确定数据同分布

    在数据挖掘比赛中,很重要的一个技巧就是要确定训练集与测试集特征是否同分布,这也是机器学习的一个很重要的假设[1].但很多时候我们知道这个道理,却很难有方法来保证数据同分布,这篇文章就分享一下我所了解的 ...

  9. kaggle账号_Kaggle 数据挖掘比赛经验分享

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 腾讯广告算法大赛 作者 | 陈成龙 Kaggle 于 2010 年创立,专注数据科学,机器学 ...

最新文章

  1. Android Developers:按钮
  2. 用纯CSS实现3D立方体效果
  3. 挖矿为什么要用显卡_Conflux显卡挖矿收益很高吗?挖矿指南与核算手册
  4. LeetCode第45场双周赛-解题报告
  5. 飞行计算机人机工程,人机工程学版
  6. Java进阶之路——从初级程序员到架构师,从小工到专家必会的技能
  7. 7,7显示选中的目标信息
  8. 初学者python笔记(模块篇)
  9. Reflexer Labs将于4月15日进行首次FLX代币分配
  10. POJ2115 C Looooops 扩展欧几里德
  11. halcon深度学习
  12. EPLAN p8 安装失败解决办法
  13. python不用模块随机列表_python不用库实现随机 如何用python实现随机抽取
  14. PI系统在DCS中的应用
  15. 【Love2d从青铜到王者】第十四篇:Love2d之分享你的游戏(Distributing your game)
  16. 商品详情页面html,div+css+JQuery仿京东商品详情界面
  17. H5端input标签通过手机软键盘进行搜索,并关闭软键盘
  18. PyQt5快速开发与实战 5.1 表格与树
  19. PyTorch-09 循环神经网络RNNLSTM (时间序列表示、RNN循环神经网络、RNN Layer使用、时间序列预测案例、RNN训练难题、解决梯度离散LSTM、LSTM使用、情感分类问题实战)
  20. (01)ORB-SLAM2源码无死角解析-(55) 闭环线程→计算Sim3:总体流程讲解ComputeSim3()

热门文章

  1. 解决在ros catkin_make编译时出现“make[2]:*** 没有规则可制作目标“的问题
  2. discuz论坛首页默认显示单个特定的版块,及自定义论坛首页固定标题
  3. 盖塔机器人好_盖塔机器人的十大谜团
  4. Python库下载安装教程
  5. git stash 部分文件
  6. 第0课 课前必读(未完成)
  7. 2020 - 04 - 18 个人笔记
  8. Java中的数组Array
  9. 【Redis】Info Stats - 监控使用情况
  10. 临床试验中edc录入_临床试验中使用EDC的情况?