【问题标题】:Using Kaggle Datasets in Google Colab在 Google Colab 中使用 Kaggle 数据集
【发布时间】:2018-08-24 21:56:45
【问题描述】:

是否可以通过 Google Colab 中的 kaggle API 使用任何可用的数据集?我看到this Colab notebook 中使用了 Kaggle API,但我有点不清楚它提供了对哪些数据集的访问。

【问题讨论】:

    标签: dataset kaggle google-colaboratory


    【解决方案1】:

    一步一步--

    1. 在 Kaggle 中创建一个 API 密钥。

      为此,请访问 kaggle.com/ 并打开您的用户设置页面。

    2. 接下来,向下滚动到 API 访问部分并单击生成 下载 API 密钥。 这会将名为kaggle.json 的文件下载到您的计算机。 您将在 Colab 中使用此文件来访问 Kaggle 数据集和 比赛。

    3. 导航到 https://colab.research.google.com/。

    4. 使用以下 sn-p 上传您的 kaggle.json 文件 一个代码单元:

      from google.colab import files files.upload()

    5. 使用!pip install -q kaggle安装kaggle API

    6. kaggle.json 文件移动到~/.kaggle,这是 API 客户端希望您的令牌位于:

      !mkdir -p ~/.kaggle !cp kaggle.json ~/.kaggle/

    7. 现在您可以使用客户端访问数据集,例如,!kaggle datasets list

    以下是此过程的 Colab 部分的完整示例笔记本: https://colab.research.google.com/drive/1DofKEdQYaXmDWBzuResXWWvxhLgDeVyl

    此示例显示上传 kaggle.json 文件、Kaggle API 客户端以及使用 Kaggle 客户端下载数据集。

    【讨论】:

    • 这太棒了@bob-smith,我刚刚为 colab 上的代码做了一个快速的单行代码:!if [ ! -f ~/.kaggle/kaggle.json ]; then python "from google.colab import files \n files.upload()" && mkdir -p ~/.kaggle && cp kaggle.json ~/.kaggle/ && chmod 600 ~/.kaggle/kaggle.json; fi
    • 最后两部分对我来说不能正常工作。最后第二部分(下载)得到这个:下载stack-overflow-2018-developer-survey.zip到/content 最后一部分得到这个:head:无法打开'/root/.kaggle/datasets/*/stack- overflow-2018-developer-survey/survey_results_public.csv' 供阅读:没有这样的文件或目录
    • 谢谢你,我非常需要这个答案
    【解决方案2】:

    您应该能够通过 API 访问 Kaggle 上的任何数据集。在此示例中,仅列出了比赛的数据集。您可以看到可以使用此命令访问的数据集:

    kaggle datasets list
    

    您还可以通过添加 -s 标签和您感兴趣的搜索词来搜索数据集。因此,这将为您提供有关狗的数据集列表:

    kaggle datasets list -s dogs
    

    您可以在documentation here 中找到有关 API 以及如何使用它的更多信息。

    希望对您有所帮助! :)

    【讨论】:

    • 非常感谢,很有帮助!
    • 还有一个问题:如果 colab 笔记本断开连接或任何其他原因发生,例如笔记本的虚拟机死机时间到了,在这种情况下,我是否应该重新下载数据集?
    • 您必须在每次 VM 重新启动时重新下载数据(就像重新安装软件包一样)。因此,如果它非常快速地断开连接并重新连接,则您不需要重新下载数据。但是,如果您有一个新的虚拟机,比如在 90 分钟不活动之后,那么您需要重新下载该数据。
    • 它的大小是否与实际数据集一样大,或者谷歌只是下载特定的东西以使用该数据集?
    • @hdiz:您可以使用!df -h 找出磁盘上有多少可用空间。
    【解决方案3】:

    详细做法:

    1. 在您的个人资料中转到我的帐户

    1. 向下滚动,直到找到一个选项Create new Api Token,这将下载一个名为 kaggle.json 的文件

    1. 去 Colab 上传文件 kaggle.json

    1. pip install kaggle

    1. 新建一个名为 kaggle 的文件夹,将 kaggle.json 复制到 kaggle 文件夹中,并为您(用户)设置读写权限。

    6.转到Kaggle网站。例如,您要下载任何数据,请单击屏幕右侧的三个点。然后点击复制 API 命令

    1. 转到 colab,粘贴 API 命令

    8.当您执行!ls 时,您会看到我们下载的是一个 zip 文件。

    1. 要解压缩文件,请使用以下命令

    1. 现在,当您执行!ls 时,您会发现我们的 csv 文件是从 zip 文件中提取出来的。

    1. 要读取文件,请执行简单的pd.read_csv,导入 pandas

    12.如您所见,我们已成功将文件读入 colab。

    这会将 kaggle 数据集下载到 google colab 中,您可以在其中执行分析并构建出色的机器学习模型或训练神经网络。

    分析愉快!!!

    【讨论】:

    • 这应该是正确的答案。我不知道如何执行第 7 步,并且 kaggle 仅使用 list 命令列出了几个数据集。在 kaggle 网站上找到数据集后,我不知道如何下载数据集,因为“数据集列表”命令几乎没有列出所有数据集。谢谢。
    【解决方案4】:

    合并了对此Github gist as Colab Implementation 的最高响应。可以直接复制代码使用。

    How to Import a Dataset from Kaggle in Colab

    方法:

    首先你必须做的几件事:

    1. 注册 Kaggle
    2. 报名参加您想从中访问数据的比赛(例如LANL-Earthquake-Prediction competition)。
    3. kaggle.json 的身份下载您的凭据以访问 Kaggle API
    # Install kaggle packages
    !pip install -q kaggle
    !pip install -q kaggle-cli
    
    # Colab's file access feature
    from google.colab import files
    
    # Upload `kaggle.json` file
    uploaded = files.upload()
    
    # Retrieve uploaded file
    # print results
    for fn in uploaded.keys():
      print('User uploaded file "{name}" with length {length} bytes'.format(
          name=fn, length=len(uploaded[fn])))
    
    # Then copy kaggle.json into the folder where the API expects to find it.
    !mkdir -p ~/.kaggle
    !cp kaggle.json ~/.kaggle/
    !chmod 600 ~/.kaggle/kaggle.json
    !ls ~/.kaggle
    

    现在检查它是否有效!

    #list competitions
    !kaggle competitions list -s LANL-Earthquake-Prediction
    

    【讨论】:

      【解决方案5】:

      看看this

      它在后台使用官方的 kaggle api,但会自动执行该过程,因此您不必在每次移除 VM 时都手动重新下载。此外,我在 Colab 上直接使用 Kaggle API 时遇到的另一个问题是通过 Google Drive 传输 Kaggle API 令牌的麻烦。上面的方法也可以自动完成。

      免责声明:我是 Clouderizer 的创建者之一。

      【讨论】:

        【解决方案6】:

        首先,运行这个命令来找出这个colab文件存在的地方,它是如何执行的。 !ls -d $PWD/* 它将显示/content/data /content/gdrive /content/models 换句话说,您的当前目录是 root/content/。您的工作目录(密码)是 /content/。所以当你做!ls时,它会显示data gdrive models。 供参考, !允许您在 colab 中运行 linux 命令。

        Google 云端硬盘会不断清理 /content 文件夹。因此,您使用 colab 的每个会话、下载的数据集、kaggle json 文件都将消失。这就是自动化流程很重要的原因,这样您就可以专注于编写代码,而不是每次都设置环境。

        以 colab 代码块为例,使用您自己的 api 密钥运行它。打开 kaggle.json 文件。你会发现他们的。

        # Info on how to get your api key (kaggle.json) here: https://github.com/Kaggle/kaggle-api#api-credentials
        !pip install kaggle
        {"username":"seunghunsunmoonlee","key":""}
        import json
        import zipfile
        import os
        with open('/content/.kaggle/kaggle.json', 'w') as file:
            json.dump(api_token, file)
        !chmod 600 /content/.kaggle/kaggle.json
        !kaggle config path -p /content
        !kaggle competitions download -c dog-breed-identification
        os.chdir('/content/competitions/dog-breed-identification')
        for file in os.listdir():
            zip_ref = zipfile.ZipFile(file, 'r')
            zip_ref.extractall()
            zip_ref.close()
        

        然后再次运行!ls。您将看到您需要的所有数据。 希望对您有所帮助!

        【讨论】:

          【解决方案7】:

          从 kaggle 下载 google colab 的竞争数据。 我正在研究 google colab,我遇到了同样的问题。但我做了两次。

          首先,您必须注册您的手机号码以及您的国家/地区代码。 其次,您必须单击 kaggle 数据集页面上的最后一次提交 然后从 google colab 上的 kaggle.upload kaggle.json 下载 kaggle.json 文件 之后在 google colab 上运行这些代码如下。

          !pip install -q kaggle
          !mkdir -p ~/.kaggle
          !cp kaggle.json ~/.kaggle/ 
          !chmod 600 ~/.kaggle/kaggle.json 
          !kaggle competitions download -c web-traffic-time-series-forecasting
          

          【讨论】:

            【解决方案8】:

            after the steps (1-6) above,使用来自 colab 中特定比赛的数据集, 你可以使用命令:

            !kaggle competitions download -c elo-merchant-category-recommendation
            

            这里,elo-merchant-category-recommendation 是比赛的名称。

            【讨论】:

              【解决方案9】:

              使用 Kaggle API 在 Google Colab 中使用 Kaggle 数据集的快速指南

              (1) 下载 Kaggle API 令牌。

              • 转到“帐户”,向下页面,找到“API”部分。
              • 单击“创建新 API 令牌”按钮。
              • “kaggle.json”文件将被下载。

              (2) 将 Google 驱动器挂载到 Colab 笔记本。

              • 这意味着将访问您的 google 驱动器中的文件的权限授予 Colab 笔记本。
              from google.colab import drive
              drive.mount("/content/gdrive", force_remount=True)
              
              

              (3) 将“kaggle.json”文件上传到谷歌驱动器中您要下载 Kaggle 数据集的文件夹中。

              (4) 安装 Kaggle API。

              !pip install kaggle
              
              

              (5) 将当前工作目录更改为您要下载 Kaggle 数据集的位置。

              %cd /content/gdrive/MyDrive/DataSets/house_price_data/
              
              

              (6) 运行以下代码配置“kaggle.json”的路径。

              import os
              os.environ['KAGGLE_CONFIG_DIR'] = "/content/gdrive/MyDrive/DataSets/house_price_data/"
              
              

              (7) 下载数据集。

              !kaggle competitions download -c house-prices-advanced-regression-techniques
              
              

              【讨论】:

                【解决方案10】:

                最重要的部分是在下载文件之前:

                在 Kaggle 网页的竞赛部分,您必须点击:

                迟交或参加比赛

                接受 KAGGLE 竞赛网页上的规则和条件

                如果没有,复制api文件后,开始下载数据集后,结果显示403错误。

                【讨论】:

                  【解决方案11】:

                  一个hacky方式:

                  1. 登录后进入数据集页面
                  2. 打开 Chrome 开发者工具,然后转到网络窗格
                  3. 点击 Kaggle 上的下载按钮
                  4. 点击后你会在网络窗格中看到很多请求,找到以archive.zip开头的请求
                  5. 右键单击该请求,然后复制 -> 复制为 cURL (bash)。现在你复制了命令
                  6. 在 Colab 上,粘贴命令并将 ! 附加到命令的开头,然后运行它

                  这绝对是一种不如 API 可靠的方法,但仍然是一种选择。

                  【讨论】:

                    【解决方案12】:

                    我发现接受的答案非常全面,但想补充一点:

                    !kaggle competitions download -c dogs-vs-cats
                    

                    或大多数其他下载仍然无法正常工作。您可能会收到以下错误:

                    403 - 禁止

                    这不是很冗长。它想说:“请访问 kaggle.com 并接受规则(例如,针对该比赛)。您不能通过 API 接受!文档中明确说明(参见 Public API documentation | Kaggle):

                    就像通过用户界面正常参加比赛一样,您必须阅读并接受规则才能下载数据或提交内容。您不能通过 API 接受竞赛规则。你必须通过访问 Kaggle 网站并接受那里的规则来做到这一点。

                    是的,这可能是一条评论,但我缺少足够的声誉来发表评论。

                    【讨论】:

                      【解决方案13】:
                      
                      import os
                      os.makedirs("/content/.kaggle/")
                      
                      import json
                      token = {"username":"your_username_here","key":"your_kaggle_key_here"}
                      with open('/content/.kaggle/kaggle.json', 'a+') as file:
                          json.dump(token, file)
                      
                      import shutil
                      os.makedirs("/.kaggle/")
                      src="/content/.kaggle/kaggle.json"
                      des="/.kaggle/kaggle.json"
                      shutil.copy(src,des)
                      
                      
                      os.makedirs("/root/.kaggle/")
                      !cp /content/.kaggle/kaggle.json ~/.kaggle/kaggle.json
                      
                      !kaggle config set -n path -v /content
                      
                      #https://towardsdatascience.com/setting-up-kaggle-in-google-colab-ebb281b61463
                      
                      !kaggle datasets download -d xhlulu/siim-covid19-resized-to-512px-png
                      

                      截至 21 年 5 月 29 日,我在 Colab 上为我工作!

                      【讨论】: