今天贡献一个小的技巧, 就是如何用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()