Chybeta

数据挖掘比赛(1)对无列名的txt数据集读取方法及处理

接触大数据比赛,必然要接触大数据(<—好吧废话)所以第一道门槛是如何读取大数据文件。有时比赛提供的dataset是带有标签的csv格式文件,有时也会提供不带标签的普通txt文件,此文主要写写对读取此种txt文件的一些小方法和处理。

基本的读入

其实python里已经集成了csv模块了,不过使用起来不那么方便。一般而言,使用pandas库可以把数据读入成dataframe形式方便操作。

读入csv文件

以kaggle的titanic数据集为例
titanic数据集集合
用pandas读入的代码如下:

1
2
import pandas as pd
titanic_db = pd.read_csv('titanic_train.csv')

这样就能把数据集读进来了,如下:
利用pandas读入csv文件
几道’\’是可能因为屏幕小(,,ԾㅂԾ,,)而产生的换行提示。显示出来的有5行(0~5),每行的上面都有对应的列名。

读入txt文件

以IJCAI-17比赛数据集中的user_view.txt为例notepad++打开如下:

用pandas读入的代码如下:

1
2
import pandas as pd
user_view = pd.read_table('user_view.txt')

注意代码应该是 read_table .结果如下
利用pandas读入txt文件
可以看到读入后,pandas把txt文件的第一行当做了列名,很明显这是错误的:) 这个我们下面来进行修正。

针对无列名文件第一行的读入处理

上面提到的 read_csv 、read_table 等,其实他们的参数不仅仅只有一个。为了让无列名的数据读入正确,我们可以在读入的时候多指定一个参数header=None。以user_view.txt为例。

1
user_view = pd.read_table('user_view.txt',header=None)

读入结果如下:
制定header读入user_view.txt

可以看到读入后,原txt文件中的第一行有了Index(即 0),不再被识别为列名。

对txt数据集读入处理为正常的dataframe形式

在指定header=None读入txt文件后,pandas自动给添了个列名 0,这表明读入的每一行其实都是读入了一字符串,总共只有 1 列!对数据的操作很不方便

所以我们在遇到这种情况时,我们还要继续指定参数sep,告诉pandas以什么为分隔符。以user_view.txt为例,从上图可知每行的数据有三个部分,用逗号(,)相隔开。所以在读入时,如下:

1
user_view = pd.read_table('user_view.txt',header=None,sep=',')


可以发现每列(3列)的列名被设置为 0 1 2,这样我们可以很方便地对数据进行操作。

给无列名的数据集添加列名

法一:直接操作

好吧,这个方法当然是最简单的,csv用excel打开,txt用notepad++、sublime打开,然后自己填上列名,再正常读入就行了嘛!

只是通常情况下,所遇到的数据集比较大,用excel或者notepad等难以打开,又或者打开后不好操作,局限性比较大。同时在直接操作添加时还要考虑原数据集的格式和编码,方便后面进一步读入。

法二:在利用pandas读入时指定列名

以user_view.txt数据集为例,阿里天池上的数据说明是

Field Sample Description
user_id 0000000001 用户id
shop_id 000001 商家id,与shop_info对应
time_stamp 2015-10-10 10:00:00 浏览时间

所以在读入时,我们可以再指定一个参数 names .对照上述说明和基于前面的操作(),代码如下:

1
2
3
import pandas as pd
columns = ['user_id','shop_id','time_stamp']
user_view_db = user_view_db = pd.read_table('user_view.txt',header=None,sep=',',names=columns)

结果如下:

法三:在用pandas读入后再制定列名

在完成如前面基本的读入和处理后,此时 user_view_db 应该是 列名为[0,1,2] 的datframe了。此时我们再通过指定其属性columns来指定列名。

1
user_view_db.columns=['user_id','shop_id','time_stamp']

如下:
利用columns属性

微信扫码加入知识星球【漏洞百出】
chybeta WeChat Pay

点击图片放大,扫码知识星球【漏洞百出】

本文标题:数据挖掘比赛(1)对无列名的txt数据集读取方法及处理

文章作者:chybeta

发布时间:2017年01月24日 - 22:01

最后更新:2017年06月20日 - 11:06

原始链接:http://chybeta.github.io/2017/01/24/数据挖掘比赛(1)对无列名的txt数据集读取方法及处理/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。