接触大数据比赛,必然要接触大数据(<—好吧废话)所以第一道门槛是如何读取大数据文件。有时比赛提供的dataset是带有标签的csv格式文件,有时也会提供不带标签的普通txt文件,此文主要写写对读取此种txt文件的一些小方法和处理。
基本的读入
其实python里已经集成了csv模块了,不过使用起来不那么方便。一般而言,使用pandas库可以把数据读入成dataframe形式方便操作。
读入csv文件
以kaggle的titanic数据集为例
用pandas读入的代码如下:
这样就能把数据集读进来了,如下:
几道’\’是可能因为屏幕小(,,ԾㅂԾ,,)而产生的换行提示。显示出来的有5行(0~5),每行的上面都有对应的列名。
读入txt文件
以IJCAI-17比赛数据集中的user_view.txt为例notepad++打开如下:
用pandas读入的代码如下:
注意代码应该是 read_table .结果如下
可以看到读入后,pandas把txt文件的第一行当做了列名,很明显这是错误的:) 这个我们下面来进行修正。
针对无列名文件第一行的读入处理
上面提到的 read_csv 、read_table 等,其实他们的参数不仅仅只有一个。为了让无列名的数据读入正确,我们可以在读入的时候多指定一个参数header=None。以user_view.txt为例。
读入结果如下:
可以看到读入后,原txt文件中的第一行有了Index(即 0),不再被识别为列名。
对txt数据集读入处理为正常的dataframe形式
在指定header=None读入txt文件后,pandas自动给添了个列名 0,这表明读入的每一行其实都是读入了一字符串,总共只有 1 列!对数据的操作很不方便
所以我们在遇到这种情况时,我们还要继续指定参数sep,告诉pandas以什么为分隔符。以user_view.txt为例,从上图可知每行的数据有三个部分,用逗号(,)相隔开。所以在读入时,如下:
可以发现每列(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 .对照上述说明和基于前面的操作(),代码如下:
结果如下:
法三:在用pandas读入后再制定列名
在完成如前面基本的读入和处理后,此时 user_view_db 应该是 列名为[0,1,2] 的datframe了。此时我们再通过指定其属性columns来指定列名。
如下: