1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

この記事は、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_IDYOUR_SECRET_KEYYOUR_MODEL_ID はご自身のもので埋めてください。
      • ラウンド番号とvalidationSharpeのみ取得。
    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

  • curlコマンドでデータ取得可能ですが、プログラムから実行する場合は numerapi などのAPIクライアントライブラリを使うと便利です。GraphQLクエリをラップした便利なメソッド群が用意されています。

  • リーダーボードデータ取得の例

    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)
    

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?