diff --git a/tutorials/FundingMetrics.ipynb b/tutorials/FundingMetrics.ipynb new file mode 100644 index 00000000..4966c6b3 --- /dev/null +++ b/tutorials/FundingMetrics.ipynb @@ -0,0 +1,1217 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "41b714c9-c749-4d0d-ad59-71e0c035d325", + "metadata": {}, + "outputs": [], + "source": [ + "# ! pip install pyoso" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "988cd219-8b29-469d-9e7a-46f7a965ddc7", + "metadata": {}, + "outputs": [], + "source": [ + "from dotenv import load_dotenv\n", + "import os\n", + "import pandas as pd\n", + "from pyoso import Client\n", + "\n", + "load_dotenv()\n", + "\n", + "OSO_API_KEY = os.environ['OSO_API_KEY']\n", + "client = Client(api_key=OSO_API_KEY)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "77fe6763-7d49-47a5-b5c6-68264034ab0c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
metric_name
0GITCOIN_DONATIONS_funding_awarded_biannually
1GITCOIN_DONATIONS_funding_awarded_daily
2GITCOIN_DONATIONS_funding_awarded_monthly
3GITCOIN_DONATIONS_funding_awarded_over_all_time
4GITCOIN_DONATIONS_funding_awarded_quarterly
5GITCOIN_DONATIONS_funding_awarded_weekly
6GITCOIN_DONATIONS_funding_awarded_yearly
7GITCOIN_MATCHING_funding_awarded_biannually
8GITCOIN_MATCHING_funding_awarded_daily
9GITCOIN_MATCHING_funding_awarded_monthly
10GITCOIN_MATCHING_funding_awarded_over_all_time
11GITCOIN_MATCHING_funding_awarded_quarterly
12GITCOIN_MATCHING_funding_awarded_weekly
13GITCOIN_MATCHING_funding_awarded_yearly
14OPEN_COLLECTIVE_funding_received_biannually
15OPEN_COLLECTIVE_funding_received_daily
16OPEN_COLLECTIVE_funding_received_monthly
17OPEN_COLLECTIVE_funding_received_over_all_time
18OPEN_COLLECTIVE_funding_received_quarterly
19OPEN_COLLECTIVE_funding_received_weekly
20OPEN_COLLECTIVE_funding_received_yearly
21OSS_FUNDING_funding_awarded_biannually
22OSS_FUNDING_funding_awarded_daily
23OSS_FUNDING_funding_awarded_monthly
24OSS_FUNDING_funding_awarded_over_all_time
25OSS_FUNDING_funding_awarded_quarterly
26OSS_FUNDING_funding_awarded_weekly
27OSS_FUNDING_funding_awarded_yearly
\n", + "
" + ], + "text/plain": [ + " metric_name\n", + "0 GITCOIN_DONATIONS_funding_awarded_biannually\n", + "1 GITCOIN_DONATIONS_funding_awarded_daily\n", + "2 GITCOIN_DONATIONS_funding_awarded_monthly\n", + "3 GITCOIN_DONATIONS_funding_awarded_over_all_time\n", + "4 GITCOIN_DONATIONS_funding_awarded_quarterly\n", + "5 GITCOIN_DONATIONS_funding_awarded_weekly\n", + "6 GITCOIN_DONATIONS_funding_awarded_yearly\n", + "7 GITCOIN_MATCHING_funding_awarded_biannually\n", + "8 GITCOIN_MATCHING_funding_awarded_daily\n", + "9 GITCOIN_MATCHING_funding_awarded_monthly\n", + "10 GITCOIN_MATCHING_funding_awarded_over_all_time\n", + "11 GITCOIN_MATCHING_funding_awarded_quarterly\n", + "12 GITCOIN_MATCHING_funding_awarded_weekly\n", + "13 GITCOIN_MATCHING_funding_awarded_yearly\n", + "14 OPEN_COLLECTIVE_funding_received_biannually\n", + "15 OPEN_COLLECTIVE_funding_received_daily\n", + "16 OPEN_COLLECTIVE_funding_received_monthly\n", + "17 OPEN_COLLECTIVE_funding_received_over_all_time\n", + "18 OPEN_COLLECTIVE_funding_received_quarterly\n", + "19 OPEN_COLLECTIVE_funding_received_weekly\n", + "20 OPEN_COLLECTIVE_funding_received_yearly\n", + "21 OSS_FUNDING_funding_awarded_biannually\n", + "22 OSS_FUNDING_funding_awarded_daily\n", + "23 OSS_FUNDING_funding_awarded_monthly\n", + "24 OSS_FUNDING_funding_awarded_over_all_time\n", + "25 OSS_FUNDING_funding_awarded_quarterly\n", + "26 OSS_FUNDING_funding_awarded_weekly\n", + "27 OSS_FUNDING_funding_awarded_yearly" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client.to_pandas(\"\"\"\n", + "SELECT metric_name\n", + "FROM metrics_v0\n", + "WHERE metric_name LIKE '%_funding_%'\n", + "ORDER BY 1\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "aa31b0d1-2117-4fb0-8b6e-f206500602d2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
metric_nametotal_amount_in_usd
0OSS_FUNDING_funding_awarded_over_all_time364887873.600968
1GITCOIN_MATCHING_funding_awarded_over_all_time13305117.158144
2GITCOIN_DONATIONS_funding_awarded_over_all_time11666103.711711
\n", + "
" + ], + "text/plain": [ + " metric_name total_amount_in_usd\n", + "0 OSS_FUNDING_funding_awarded_over_all_time 364887873.600968\n", + "1 GITCOIN_MATCHING_funding_awarded_over_all_time 13305117.158144\n", + "2 GITCOIN_DONATIONS_funding_awarded_over_all_time 11666103.711711" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client.to_pandas(\"\"\"\n", + "SELECT\n", + " m.metric_name,\n", + " SUM(km.amount) AS total_amount_in_usd\n", + "FROM key_metrics_by_project_v0 AS km\n", + "JOIN metrics_v0 AS m ON km.metric_id = m.metric_id\n", + "WHERE m.metric_name LIKE '%_funding_%'\n", + "GROUP BY 1\n", + "ORDER BY 2 DESC\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c9edc7a4-19d1-443c-bc01-ced2c6ffda65", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
project_display_nametotal_amount_in_usd
0GMX21000000.0
1MUX Protocol10876479.0
2Synthetix10022628.074157
3Perpetual Protocol9287212.140718
4Gains Network7898396.135
5Velodrome7895037.76024
6Camelot5407500.0
7Stargate Finance5289458.865658
8Vertex Protocol5250000.0
9Radiant4991077.0
\n", + "
" + ], + "text/plain": [ + " project_display_name total_amount_in_usd\n", + "0 GMX 21000000.0\n", + "1 MUX Protocol 10876479.0\n", + "2 Synthetix 10022628.074157\n", + "3 Perpetual Protocol 9287212.140718\n", + "4 Gains Network 7898396.135\n", + "5 Velodrome 7895037.76024\n", + "6 Camelot 5407500.0\n", + "7 Stargate Finance 5289458.865658\n", + "8 Vertex Protocol 5250000.0\n", + "9 Radiant 4991077.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client.to_pandas(\"\"\"\n", + "SELECT\n", + " p.display_name AS project_display_name,\n", + " SUM(km.amount) AS total_amount_in_usd\n", + "FROM key_metrics_by_project_v0 AS km\n", + "JOIN metrics_v0 AS m ON km.metric_id = m.metric_id\n", + "JOIN projects_v1 AS p ON km.project_id = p.project_id\n", + "WHERE m.metric_name LIKE '%_funding_awarded_over_all_time'\n", + "GROUP BY 1\n", + "ORDER BY 2 DESC\n", + "LIMIT 10\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9783c7e0-c2e0-4f1c-9dda-42d458cb39ce", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
project_display_nametotal_amount_in_usd
0Gitcoin1204537.005379
1Revoke839092.066154
2DefiLlama688150.252758
3rotki612202.655884
4Safe559315.966614
5ethers.js553467.398145
6Hey483399.257399
7Dark Forest440813.42016
8JediSwap415608.378052
9Electronic Frontier Foundation396257.698586
\n", + "
" + ], + "text/plain": [ + " project_display_name total_amount_in_usd\n", + "0 Gitcoin 1204537.005379\n", + "1 Revoke 839092.066154\n", + "2 DefiLlama 688150.252758\n", + "3 rotki 612202.655884\n", + "4 Safe 559315.966614\n", + "5 ethers.js 553467.398145\n", + "6 Hey 483399.257399\n", + "7 Dark Forest 440813.42016\n", + "8 JediSwap 415608.378052\n", + "9 Electronic Frontier Foundation 396257.698586" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client.to_pandas(\"\"\"\n", + "SELECT\n", + " p.display_name AS project_display_name,\n", + " SUM(km.amount) AS total_amount_in_usd\n", + "FROM key_metrics_by_project_v0 AS km\n", + "JOIN metrics_v0 AS m ON km.metric_id = m.metric_id\n", + "JOIN projects_v1 AS p ON km.project_id = p.project_id\n", + "WHERE m.metric_name LIKE '%_funding_awarded_over_all_time' AND m.metric_name LIKE 'GITCOIN_%'\n", + "GROUP BY 1\n", + "ORDER BY 2 DESC\n", + "LIMIT 10\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "69f8d8ff-f902-4cce-bc3f-d23182f84de3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
project_display_nametotal_amount_in_usd
0Gitcoin797206.330376
1Dark Forest297517.115925
2ZigZag Exchange199746.433382
3ethers.js129500.966707
4Prysm Ethereum Client128522.705766
5rotki122666.927997
6ZeroPool116795.642612
7Lighthouse by Sigma Prime114759.839844
8The Tor Project110669.738113
9Hardhat110539.758225
\n", + "
" + ], + "text/plain": [ + " project_display_name total_amount_in_usd\n", + "0 Gitcoin 797206.330376\n", + "1 Dark Forest 297517.115925\n", + "2 ZigZag Exchange 199746.433382\n", + "3 ethers.js 129500.966707\n", + "4 Prysm Ethereum Client 128522.705766\n", + "5 rotki 122666.927997\n", + "6 ZeroPool 116795.642612\n", + "7 Lighthouse by Sigma Prime 114759.839844\n", + "8 The Tor Project 110669.738113\n", + "9 Hardhat 110539.758225" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client.to_pandas(\"\"\"\n", + "SELECT\n", + " p.display_name AS project_display_name,\n", + " SUM(tm.amount) AS total_amount_in_usd\n", + "FROM timeseries_metrics_by_project_v0 AS tm\n", + "JOIN metrics_v0 AS m ON tm.metric_id = m.metric_id\n", + "JOIN projects_v1 AS p ON tm.project_id = p.project_id\n", + "WHERE m.metric_name = 'GITCOIN_DONATIONS_funding_awarded_yearly'\n", + "AND tm.sample_date < DATE '2022-01-01'\n", + "GROUP BY 1\n", + "ORDER BY 2 DESC\n", + "LIMIT 10\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "60aa05c7-098f-4e6f-8183-a01fc5ed9652", + "metadata": {}, + "outputs": [ + { + "ename": "OsoHTTPError", + "evalue": "400 Client Error: Bad Request for url: https://www.opensource.observer/api/v1/sql - COLUMN_NOT_FOUND: line 3:7: Column 'project_id' cannot be resolved", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mOsoHTTPError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[23], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m client\u001b[38;5;241m.\u001b[39mto_pandas(\u001b[38;5;124m\"\"\"\u001b[39m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;124mSELECT * FROM int_events_daily__funding\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;124mWHERE project_id = \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgBq7Wl0q0X+/hAl3qY/vtLirLXpwMoCndZ8i/B/6wd0=\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 4\u001b[0m \n\u001b[1;32m 5\u001b[0m \u001b[38;5;124m\"\"\"\u001b[39m)\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.11/site-packages/pyoso/client.py:69\u001b[0m, in \u001b[0;36mClient.to_pandas\u001b[0;34m(self, query)\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mto_pandas\u001b[39m(\u001b[38;5;28mself\u001b[39m, query: \u001b[38;5;28mstr\u001b[39m):\n\u001b[0;32m---> 69\u001b[0m query_data \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m__query(query)\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m pd\u001b[38;5;241m.\u001b[39mDataFrame(\n\u001b[1;32m 71\u001b[0m query_data\u001b[38;5;241m.\u001b[39mdata, columns\u001b[38;5;241m=\u001b[39mquery_data\u001b[38;5;241m.\u001b[39mcolumns\n\u001b[1;32m 72\u001b[0m )\u001b[38;5;241m.\u001b[39mconvert_dtypes()\n", + "File \u001b[0;32m/opt/anaconda3/lib/python3.11/site-packages/pyoso/client.py:66\u001b[0m, in \u001b[0;36mClient.__query\u001b[0;34m(self, query)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m QueryData(columns\u001b[38;5;241m=\u001b[39mcolumns, data\u001b[38;5;241m=\u001b[39mdata)\n\u001b[1;32m 65\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m requests\u001b[38;5;241m.\u001b[39mHTTPError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m---> 66\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m OsoHTTPError(e, response\u001b[38;5;241m=\u001b[39me\u001b[38;5;241m.\u001b[39mresponse) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "\u001b[0;31mOsoHTTPError\u001b[0m: 400 Client Error: Bad Request for url: https://www.opensource.observer/api/v1/sql - COLUMN_NOT_FOUND: line 3:7: Column 'project_id' cannot be resolved" + ] + } + ], + "source": [ + "client.to_pandas(\"\"\"\n", + "\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fa50c103-7c3c-4fb2-bcb1-ff754a8b53f6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
_col0
04354602
\n", + "
" + ], + "text/plain": [ + " _col0\n", + "0 4354602" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "client.to_pandas(\"\"\"\n", + "SELECT COUNT(*) FROM stg_open_collective__deposits\n", + "LIMIT 5\n", + "\"\"\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1bd3a7a8-8cac-420e-9e7b-5259ff0e3b2d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
project_idproject_namegithub_ownergithub_repo
87pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ=uniswapuniswapfoundationuniswap-wormhole-bridge
88pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ=uniswapuniswapsmart-order-router
89pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ=uniswapuniswapfoundationrouter-rebates
90pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ=uniswapuniswapsybil-list
91pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ=uniswapuniswapfoundationknown-uniswap-forks
\n", + "
" + ], + "text/plain": [ + " project_id project_name \\\n", + "87 pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ= uniswap \n", + "88 pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ= uniswap \n", + "89 pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ= uniswap \n", + "90 pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ= uniswap \n", + "91 pWEQHj4IsxU8lx2EDLJpphYaGAvw/yRps3vgTbVCXjQ= uniswap \n", + "\n", + " github_owner github_repo \n", + "87 uniswapfoundation uniswap-wormhole-bridge \n", + "88 uniswap smart-order-router \n", + "89 uniswapfoundation router-rebates \n", + "90 uniswap sybil-list \n", + "91 uniswapfoundation known-uniswap-forks " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query = \"\"\"\n", + "SELECT\n", + " project_id,\n", + " project_name,\n", + " artifact_namespace as github_owner,\n", + " artifact_name as github_repo\n", + "FROM artifacts_by_project_v1\n", + "WHERE\n", + " artifact_source = 'GITHUB'\n", + " AND artifact_namespace LIKE '%uniswap%'\n", + "\"\"\"\n", + "df = client.to_pandas(query)\n", + "df.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "9a2cbcee-11be-47d0-8ece-ae927178bcbb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
metric_name
0GITHUB_active_developers_daily
1GITHUB_closed_issues_daily
2GITHUB_comments_daily
3GITHUB_commits_daily
4GITHUB_contributors_daily
5GITHUB_forks_daily
6GITHUB_merged_pull_requests_daily
7GITHUB_opened_issues_daily
8GITHUB_opened_pull_requests_daily
9GITHUB_releases_daily
10GITHUB_repositories_daily
11GITHUB_stars_daily
\n", + "
" + ], + "text/plain": [ + " metric_name\n", + "0 GITHUB_active_developers_daily\n", + "1 GITHUB_closed_issues_daily\n", + "2 GITHUB_comments_daily\n", + "3 GITHUB_commits_daily\n", + "4 GITHUB_contributors_daily\n", + "5 GITHUB_forks_daily\n", + "6 GITHUB_merged_pull_requests_daily\n", + "7 GITHUB_opened_issues_daily\n", + "8 GITHUB_opened_pull_requests_daily\n", + "9 GITHUB_releases_daily\n", + "10 GITHUB_repositories_daily\n", + "11 GITHUB_stars_daily" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query = \"\"\"\n", + "SELECT metric_name\n", + "FROM metrics_v0\n", + "WHERE\n", + " metric_name LIKE '%GITHUB%'\n", + " AND metric_name LIKE '%daily%'\n", + "ORDER BY 1\n", + "\"\"\"\n", + "client.to_pandas(query)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "551ab7cd-08e2-4148-8ab2-db201394a816", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sample_datemetric_nameamount
02025-03-30GITHUB_contributors_daily2
12025-03-30GITHUB_commits_daily9
22025-03-29GITHUB_stars_daily1
32025-03-29GITHUB_commits_daily3
42025-03-29GITHUB_contributors_daily2
\n", + "
" + ], + "text/plain": [ + " sample_date metric_name amount\n", + "0 2025-03-30 GITHUB_contributors_daily 2\n", + "1 2025-03-30 GITHUB_commits_daily 9\n", + "2 2025-03-29 GITHUB_stars_daily 1\n", + "3 2025-03-29 GITHUB_commits_daily 3\n", + "4 2025-03-29 GITHUB_contributors_daily 2" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query = \"\"\"\n", + "SELECT\n", + " tm.sample_date,\n", + " m.metric_name,\n", + " tm.amount\n", + "FROM timeseries_metrics_by_project_v0 AS tm\n", + "JOIN metrics_v0 AS m\n", + " ON tm.metric_id = m.metric_id\n", + "JOIN projects_v1 AS p\n", + " ON tm.project_id = p.project_id\n", + "WHERE \n", + " p.project_name = 'opensource-observer'\n", + " AND m.metric_name IN (\n", + " 'GITHUB_stars_daily',\n", + " 'GITHUB_forks_daily',\n", + " 'GITHUB_commits_daily',\n", + " 'GITHUB_contributors_daily'\n", + " )\n", + "ORDER BY tm.sample_date DESC\n", + "\"\"\"\n", + "df = client.to_pandas(query)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "944ee1bd-98d1-40cf-9626-a46e052e3050", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sample_datemetric_nameamount
02025-03-31GITHUB_opened_issues_over_all_time914.0
12025-03-31GITHUB_merged_pull_requests_over_all_time2018.0
22025-03-31GITHUB_releases_over_all_time950.0
32025-03-31GITHUB_opened_pull_requests_over_all_time2433.0
42025-03-31GITHUB_stars_over_all_time5228.0
\n", + "
" + ], + "text/plain": [ + " sample_date metric_name amount\n", + "0 2025-03-31 GITHUB_opened_issues_over_all_time 914.0\n", + "1 2025-03-31 GITHUB_merged_pull_requests_over_all_time 2018.0\n", + "2 2025-03-31 GITHUB_releases_over_all_time 950.0\n", + "3 2025-03-31 GITHUB_opened_pull_requests_over_all_time 2433.0\n", + "4 2025-03-31 GITHUB_stars_over_all_time 5228.0" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "query = \"\"\"\n", + "SELECT\n", + " tm.sample_date,\n", + " m.metric_name,\n", + " tm.amount\n", + "FROM timeseries_metrics_by_project_v0 AS tm\n", + "JOIN metrics_v0 AS m\n", + " ON tm.metric_id = m.metric_id\n", + "JOIN projects_v1 AS p\n", + " ON tm.project_id = p.project_id\n", + "WHERE p.project_name = 'wevm'\n", + "ORDER BY sample_date DESC\n", + "\"\"\"\n", + "df = client.to_pandas(query)\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "2b9d04d6-9f46-4a4f-9183-4bd0aeebfa8d", + "metadata": {}, + "outputs": [], + "source": [ + "query = \"\"\"\n", + "SELECT * FROM int_artifacts_by_project_in_ossd\n", + "WHERE artifact_type = 'OPEN_COLLECTIVE'\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bf7bb020-c3f9-44e3-a60a-11668a2fb5a2", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}