用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 requestsnimport getpassnnndef download_and_unzip_data():n username = raw_input("Enter Kaggle username: ")n pwd = getpass.getpass("Enter Kaggle password: ")nn # The direct link to the Kaggle data setn data_urls = [https://www.kaggle.com/c/allstate-claims-severity/download/sample_submission.csv.zip,n https://www.kaggle.com/c/allstate-claims-severity/download/train.csv.zip,n https://www.kaggle.com/c/allstate-claims-severity/download/test.csv.zipn ]n n for data_url in data_urls:n print Download %s % data_urln # The local path where the data set is saved.n local_filename = data_url.split(/)[-1]nn # Kaggle Username and Passwordn kaggle_info = {UserName: username, Password: pwd}nn # Attempts to download the CSV file. Gets rejected because we are not logged in.n r = requests.get(data_url)nn # Login to Kaggle and retrieve the data.n r = requests.post(r.url, data = kaggle_info)nn # Writes the data to a local file one chunk at a time.n f = open(../0_Data/+local_filename, w)n for chunk in r.iter_content(chunk_size = 512 * 1024): # Reads 512KB at a time into memoryn if chunk: # filter out keep-alive new chunksn f.write(chunk)n f.close()n print Donennnif __name__ == __main__:n download_and_unzip_data()n
推薦閱讀:
※Titanic: kaggle入門實踐-top10%(附Python代碼)
※Zillow Prize競賽系列--(一)競賽簡介
※Kaggle求生:亞馬遜熱帶雨林篇
※2016 CCF大數據與計算智能大賽的開源資料整理