用Python下载Kaggle数据

今天贡献一个小的技巧, 就是如何用Python下载Kaggle数据.

为什么要用Python下载Kaggle数据呢? 对于一些数据量比较小的比赛, 当然可以直接打开浏览器, 然后在Kaggle的比赛主页上直接点击链接下载数据. 但是对于某些数据很大的比赛, 我希望能通过命令行或者Python直接下载数据. 另外, 有的时候我希望直接在服务器上通过命令行下载数据 (服务器上没有浏览器).

如果你熟悉Linux的话, 你可能会想, 直接鼠标右键复制链接地址, 然后用wget下载链接不就行了. 如果你直接用这种方式下载Kaggle数据, 你会发现wget得到的是网页, 而不是数据. 我发现原来下载Kaggle数据需要先用自己的账户登录. 下面这段Python代码就是通过 Python登录Kaggle然后下载数据.

使用的时候, 先修改data_urls, 也就是把需要下载的Kaggle数据连接添加到这个数组里面, 可以通过在Kaggle比赛的主页上右键点击下载链接获得. 另外, 我个人习惯是在我自己的电脑上, 每个Kaggle比赛下面有0_Data和1_Code文件夹, 第一个用来存数据, 第二个用来放程序, 所以这个Python程序在1_Code里面运行的时候自动把数据存放到0_Data里面. 如果你的习惯和我不一样的话, 可以更改 f = open(‘../0_Data/’+local_filename, ‘w’) 这一句里面的文件路径.

假设你把这个程序存为download.py, 然后直接在命令行运行python download.py, 然后根据提示输入你Kaggle的用户名和密码, 然后就可以愉快的下载Kaggle数据啦.

import requests
import getpass


def download_and_unzip_data():
    username = raw_input("Enter Kaggle username: ")
    pwd = getpass.getpass("Enter Kaggle password: ")

    # The direct link to the Kaggle data set
    data_urls = ['https://www.kaggle.com/c/allstate-claims-severity/download/sample_submission.csv.zip',
                 'https://www.kaggle.com/c/allstate-claims-severity/download/train.csv.zip',
                 'https://www.kaggle.com/c/allstate-claims-severity/download/test.csv.zip'
                 ]
    
    for data_url in data_urls:
        print 'Download %s' % data_url
        # The local path where the data set is saved.
        local_filename = data_url.split('/')[-1]

        # Kaggle Username and Password
        kaggle_info = {'UserName': username, 'Password': pwd}

        # Attempts to download the CSV file. Gets rejected because we are not logged in.
        r = requests.get(data_url)

        # Login to Kaggle and retrieve the data.
        r = requests.post(r.url, data = kaggle_info)

        # Writes the data to a local file one chunk at a time.
        f = open('../0_Data/'+local_filename, 'w')
        for chunk in r.iter_content(chunk_size = 512 * 1024): # Reads 512KB at a time into memory
            if chunk: # filter out keep-alive new chunks
                f.write(chunk)
        f.close()
        print 'Done'


if __name__ == '__main__':
    download_and_unzip_data()
    原文作者:张三
    原文地址: https://zhuanlan.zhihu.com/p/25259948
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞