4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Numerai APIとnumerapiライブラリのraw_queryメソッド

Last updated at Posted at 2020-12-12

この記事は、Numerai Advent Calendar 2020 12月12日の記事です。

内容

  • Numerai APIの概要説明
  • numerapiに備わっている各種メソッドがNumerai APIの最新仕様に追いついてない場合は、numerapiのraw_queryメソッドでGraphQLクエリを実行することで、最新APIを実行できます。

Numerai GraphQL API

  • Getting Started

  • 基本的にはNumeraiのWebサイト https://numer.ai は、Numerai GraphQL APIで構築されているので、サイトで表示されているデータはAPIで取得できます。

    • リーダーボードページのデータ取得でAPIが実行されている様子
      • リクエスト
        numerai_site_request.png
      • レスポンス
        numerai_site_response.png
    • Numeraiは、サイト構築で開発したAPIをユーザにも公開してくれています。
  • Numerai GraphQL APIのエンドポイントURL

  • GraphiQL Workspace

    • 上記URLをブラウザで開いて、ここでクエリを書いてデータを取得することもできます。
      numerai_graphiql.png
  • curlコマンド

    • リーダーボードデータを取得する例
      • パラメータはrankusernameのみ取得。100個に限定。

curl -X POST -H 'Content-Type: application/json' https://api-tournament.numer.ai -d '{ "query": "{ v2Leaderboard(limit: 100) { rank username } } }" }'
```

* 診断データを取得する例
    * 対象モデルの所有者のみが取得できるプライベートなデータは認証情報が必要です。
    * `YOUR_PUBLIC_ID`、`YOUR_SECRET_KEY`、`YOUR_MODEL_ID` はご自身のもので埋めてください。
        * 認証情報は https://numer.ai/submit 、もしくは、https://numer.ai/account の「VIEW API KEYS」で確認できます。
        * モデルIDは https://numer.ai/models のモデル名の下に記載されたIDです。
        * `YOUR_PUBLIC_ID`と`YOUR_SECRET_KEY`の間に`$`が入るので、抜けにご注意ください。
    * ラウンド番号と`validationSharpe`のみ取得。

```shell

curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Token YOUR_PUBLIC_ID$YOUR_SECRET_KEY' https://api-tournament.numer.ai -d '{ "query": "{ model(modelId: "YOUR_MODEL_ID") { submissions { round { number } validationSharpe } } }" }'
```

numerapi

import numerapi
api = numerapi.NumerAPI()
response = api.get_leaderboard(100)
```

  • 診断データ取得の例

    import numerapi
    api = numerapi.NumerAPI('YOUR_PUBLIC_ID', 'YOUR_SECRET_KEY')
    model_id = api.get_models()['YOUR_MODEL_NAME']
    status = api.submission_status(model_id)
    

numerapiに備わっているメソッド以外のクエリを実行したい場合

  • 例えば、最近リーダーボードに導入された3ヶ月リターン、1年リターンのデータは return_13Weeksreturn_52Weeks のパラメータで取得できます。

    • 余談だが、return_13Weeksreturn_52Weeksだけスネークケースなのはなぜだろう?
    curl -X POST -H 'Content-Type: application/json' https://api-tournament.numer.ai -d '{ "query": "{ v2Leaderboard(limit: 100) { rank username return_13Weeks return_52Weeks } } }" }'
    
  • しかし、numerapiのget_leaderboardメソッドが最新APIのパラメータ仕様に追いついてない場合があります。

  • そんな時は、raw_queryメソッドで直接GraphQLクエリを実行することで、最新パラメータを実行できます。

    api = numerapi.NumerAPI()
    query = '''
        query {
            v2Leaderboard(limit: 100) {
                rank
                username
                return_13Weeks
                return_52Weeks
        }
    }'''
    response = api.raw_query(query)
    

以上です。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?