数据挖掘比赛常用数据处理函数
文章目录
- 写在前面
- 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 采样 可以对数据进行下采样,然后使用不同的子集进行特征抽取和 ...
- python数据处理常用函数_Python常用数据处理函数
java多线程处理 package com.copyFile; import java.io.BufferedReader;import java.io.File;import java.io.Fil ...
- pythonsave函数_Python常用功能函数
Python常用功能函数汇总 1.按行写字符串到文件中 import sys, os, time, json def saveContext(filename,*name): format = '^' ...
- spark 数据框 删除列_pandas 常用的数据处理函数
在数据分析过程中,首先就是对数据进行清洗和处理,而使用 python 进行处理的朋友们,对 pandas 包肯定是熟悉不过的了.pandas 的功能很强大,基本的数据处理操作都可以找到对应函数去使用, ...
- 【干货】Kaggle 数据挖掘比赛经验分享(mark 专业的数据建模过程)
简介 Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台.笔者从 2013 年开始,陆续参加了多场 Kaggle上面举办的比赛,相继获得了 C ...
- Kaggle 数据挖掘比赛经验分享 (转载)
[干货]Kaggle 数据挖掘比赛经验分享 (转载) 标签: 数据挖掘数据科学家机器学习kaggle 2017-05-21 19:25 99人阅读 评论(0) 收藏 举报 本文章已收录于: 分类 ...
- cfile read 最大读取限制_pandas读取表格后的常用数据处理操作
作者丨Sp4rkW来源丨凹凸数据大家好,我是Sp4rkW今天给大家讲讲pandas读取表格后的一些常用数据处理操作.这篇文章其实来源于自己的数据挖掘课程作业,通过完成老师布置的作业,感觉对于使用pyt ...
- kl散度度量分布_数据挖掘比赛技巧——确定数据同分布
在数据挖掘比赛中,很重要的一个技巧就是要确定训练集与测试集特征是否同分布,这也是机器学习的一个很重要的假设[1].但很多时候我们知道这个道理,却很难有方法来保证数据同分布,这篇文章就分享一下我所了解的 ...
- kaggle账号_Kaggle 数据挖掘比赛经验分享
文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 腾讯广告算法大赛 作者 | 陈成龙 Kaggle 于 2010 年创立,专注数据科学,机器学 ...
最新文章
- Android Developers:按钮
- 用纯CSS实现3D立方体效果
- 挖矿为什么要用显卡_Conflux显卡挖矿收益很高吗?挖矿指南与核算手册
- LeetCode第45场双周赛-解题报告
- 飞行计算机人机工程,人机工程学版
- Java进阶之路——从初级程序员到架构师,从小工到专家必会的技能
- 7,7显示选中的目标信息
- 初学者python笔记(模块篇)
- Reflexer Labs将于4月15日进行首次FLX代币分配
- POJ2115 C Looooops 扩展欧几里德
- halcon深度学习
- EPLAN p8 安装失败解决办法
- python不用模块随机列表_python不用库实现随机 如何用python实现随机抽取
- PI系统在DCS中的应用
- 【Love2d从青铜到王者】第十四篇:Love2d之分享你的游戏(Distributing your game)
- 商品详情页面html,div+css+JQuery仿京东商品详情界面
- H5端input标签通过手机软键盘进行搜索,并关闭软键盘
- PyQt5快速开发与实战 5.1 表格与树
- PyTorch-09 循环神经网络RNNLSTM (时间序列表示、RNN循环神经网络、RNN Layer使用、时间序列预测案例、RNN训练难题、解决梯度离散LSTM、LSTM使用、情感分类问题实战)
- (01)ORB-SLAM2源码无死角解析-(55) 闭环线程→计算Sim3:总体流程讲解ComputeSim3()
热门文章
- 解决在ros catkin_make编译时出现“make[2]:*** 没有规则可制作目标“的问题
- discuz论坛首页默认显示单个特定的版块,及自定义论坛首页固定标题
- 盖塔机器人好_盖塔机器人的十大谜团
- Python库下载安装教程
- git stash 部分文件
- 第0课 课前必读(未完成)
- 2020 - 04 - 18 个人笔记
- Java中的数组Array
- 【Redis】Info Stats - 监控使用情况
- 临床试验中edc录入_临床试验中使用EDC的情况?