Skip to content

Instantly share code, notes, and snippets.

@ivirshup
Last active March 1, 2024 11:15
Show Gist options
  • Save ivirshup/ac9474574b9306dca79d0a31fea75e28 to your computer and use it in GitHub Desktop.
Save ivirshup/ac9474574b9306dca79d0a31fea75e28 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "81396303-8753-4cb2-80d9-af786413be3c",
"metadata": {},
"source": [
"# PYPI downloads historical"
]
},
{
"cell_type": "markdown",
"id": "65d7ef54-f110-4f36-b31e-99b017e09c77",
"metadata": {},
"source": [
"Using the query:\n",
"\n",
"\n",
"```sql\n",
"#standardSQL\n",
"SELECT\n",
" COUNT(*) AS num_downloads,\n",
" DATE_TRUNC(DATE(timestamp), DAY) AS `day`,\n",
" -- DATE_TRUNC(DATE(timestamp), MONTH) AS `month`,\n",
" file.project\n",
"FROM `bigquery-public-data.pypi.file_downloads`\n",
"WHERE\n",
" file.project IN ('anndata', 'scanpy', 'scvi-tools', 'squidpy', 'scirpy', 'mudata', 'muon')\n",
" AND DATE(timestamp)\n",
" -- BETWEEN DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK), DAY)\n",
" BETWEEN DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 8 YEAR), DAY)\n",
" AND CURRENT_DATE()\n",
"GROUP BY `day`, file.project\n",
"ORDER BY `day` DESC\n",
"-- GROUP BY `month`, file.project\n",
"-- ORDER BY `month` DESC\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "7d9be52d-1ebb-436a-a236-4fdb5fea35c6",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "e0a696cc-9441-4d43-b79e-76d327ce07ee",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>num_downloads</th>\n",
" <th>day</th>\n",
" <th>project</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>3920</td>\n",
" <td>2023-09-21</td>\n",
" <td>anndata</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2510</td>\n",
" <td>2023-09-21</td>\n",
" <td>scanpy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>94</td>\n",
" <td>2023-09-21</td>\n",
" <td>squidpy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>928</td>\n",
" <td>2023-09-21</td>\n",
" <td>mudata</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>51</td>\n",
" <td>2023-09-21</td>\n",
" <td>scirpy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10188</th>\n",
" <td>543</td>\n",
" <td>2016-05-27</td>\n",
" <td>muon</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10189</th>\n",
" <td>275</td>\n",
" <td>2016-05-26</td>\n",
" <td>muon</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10190</th>\n",
" <td>416</td>\n",
" <td>2016-05-25</td>\n",
" <td>muon</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10191</th>\n",
" <td>20</td>\n",
" <td>2016-05-24</td>\n",
" <td>muon</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10192</th>\n",
" <td>227</td>\n",
" <td>2016-05-23</td>\n",
" <td>muon</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10193 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" num_downloads day project\n",
"0 3920 2023-09-21 anndata\n",
"1 2510 2023-09-21 scanpy\n",
"2 94 2023-09-21 squidpy\n",
"3 928 2023-09-21 mudata\n",
"4 51 2023-09-21 scirpy\n",
"... ... ... ...\n",
"10188 543 2016-05-27 muon\n",
"10189 275 2016-05-26 muon\n",
"10190 416 2016-05-25 muon\n",
"10191 20 2016-05-24 muon\n",
"10192 227 2016-05-23 muon\n",
"\n",
"[10193 rows x 3 columns]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv(\"2023-09-21-pypi-downloads.csv\", dtype={\"project\": pd.CategoricalDtype()}, parse_dates=[\"day\"])\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "43be8da3-92e8-4942-abd6-b0b26aeef43f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>num_downloads</th>\n",
" <th>day</th>\n",
" <th>project</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>3920</td>\n",
" <td>2023-09-21</td>\n",
" <td>anndata</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7764</th>\n",
" <td>578</td>\n",
" <td>2020-03-23</td>\n",
" <td>anndata</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7762</th>\n",
" <td>549</td>\n",
" <td>2020-03-24</td>\n",
" <td>anndata</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7760</th>\n",
" <td>659</td>\n",
" <td>2020-03-25</td>\n",
" <td>anndata</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7756</th>\n",
" <td>847</td>\n",
" <td>2020-03-26</td>\n",
" <td>anndata</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2270</th>\n",
" <td>86</td>\n",
" <td>2022-11-01</td>\n",
" <td>squidpy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5445</th>\n",
" <td>25</td>\n",
" <td>2021-08-02</td>\n",
" <td>squidpy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3225</th>\n",
" <td>17</td>\n",
" <td>2022-06-18</td>\n",
" <td>squidpy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5433</th>\n",
" <td>34</td>\n",
" <td>2021-08-04</td>\n",
" <td>squidpy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2767</th>\n",
" <td>61</td>\n",
" <td>2022-08-22</td>\n",
" <td>squidpy</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10193 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" num_downloads day project\n",
"0 3920 2023-09-21 anndata\n",
"7764 578 2020-03-23 anndata\n",
"7762 549 2020-03-24 anndata\n",
"7760 659 2020-03-25 anndata\n",
"7756 847 2020-03-26 anndata\n",
"... ... ... ...\n",
"2270 86 2022-11-01 squidpy\n",
"5445 25 2021-08-02 squidpy\n",
"3225 17 2022-06-18 squidpy\n",
"5433 34 2021-08-04 squidpy\n",
"2767 61 2022-08-22 squidpy\n",
"\n",
"[10193 rows x 3 columns]"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sort_values(\"project\")"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "f9739d55-f5fc-4f16-a52e-1a4526f35c67",
"metadata": {},
"outputs": [],
"source": [
"anndata_df = df[df[\"project\"] == \"anndata\"]"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "47261031-8279-444b-a58e-3b71910bc0c5",
"metadata": {},
"outputs": [],
"source": [
"anndata_df = anndata_df.sort_values(\"day\")\n",
"anndata_df[\"total_downloads\"] = anndata_df[\"num_downloads\"].cumsum()"
]
},
{
"cell_type": "markdown",
"id": "a3f705dc-8957-4803-a19d-743e81423c81",
"metadata": {},
"source": [
"Plot after removing outlier"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "9c858876-f4f4-4268-b86a-30ef9df82825",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3187"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"anndata_df[\"num_downloads\"].idxmax()"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "c1a6cff8-9d30-4fe4-8855-df99a5960b81",
"metadata": {},
"outputs": [],
"source": [
"anndata_df_filtered = anndata_df[anndata_df[\"num_downloads\"] < 100_000]"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "eefc2d9a-4482-48f0-9e40-f5e00fe9fb70",
"metadata": {},
"outputs": [],
"source": [
"anndata_df_filtered = anndata_df_filtered.set_index(\"day\")\n",
"anndata_df_filtered[\"total_downloads\"] = anndata_df_filtered[\"num_downloads\"].cumsum()"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "95b5792a-0e63-418a-b56f-e8c244a21704",
"metadata": {},
"outputs": [],
"source": [
"import altair as alt"
]
},
{
"cell_type": "code",
"execution_count": 75,
"id": "1d34b4d7-59e6-4131-be9d-7ecb23256366",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"<style>\n",
" #altair-viz-be2015e7b2894debb4b3df45680caad8.vega-embed {\n",
" width: 100%;\n",
" display: flex;\n",
" }\n",
"\n",
" #altair-viz-be2015e7b2894debb4b3df45680caad8.vega-embed details,\n",
" #altair-viz-be2015e7b2894debb4b3df45680caad8.vega-embed details summary {\n",
" position: relative;\n",
" }\n",
"</style>\n",
"<div id=\"altair-viz-be2015e7b2894debb4b3df45680caad8\"></div>\n",
"<script type=\"text/javascript\">\n",
" var VEGA_DEBUG = (typeof VEGA_DEBUG == \"undefined\") ? {} : VEGA_DEBUG;\n",
" (function(spec, embedOpt){\n",
" let outputDiv = document.currentScript.previousElementSibling;\n",
" if (outputDiv.id !== \"altair-viz-be2015e7b2894debb4b3df45680caad8\") {\n",
" outputDiv = document.getElementById(\"altair-viz-be2015e7b2894debb4b3df45680caad8\");\n",
" }\n",
" const paths = {\n",
" \"vega\": \"https://cdn.jsdelivr.net/npm/vega@5?noext\",\n",
" \"vega-lib\": \"https://cdn.jsdelivr.net/npm/vega-lib?noext\",\n",
" \"vega-lite\": \"https://cdn.jsdelivr.net/npm/vega-lite@5.14.1?noext\",\n",
" \"vega-embed\": \"https://cdn.jsdelivr.net/npm/vega-embed@6?noext\",\n",
" };\n",
"\n",
" function maybeLoadScript(lib, version) {\n",
" var key = `${lib.replace(\"-\", \"\")}_version`;\n",
" return (VEGA_DEBUG[key] == version) ?\n",
" Promise.resolve(paths[lib]) :\n",
" new Promise(function(resolve, reject) {\n",
" var s = document.createElement('script');\n",
" document.getElementsByTagName(\"head\")[0].appendChild(s);\n",
" s.async = true;\n",
" s.onload = () => {\n",
" VEGA_DEBUG[key] = version;\n",
" return resolve(paths[lib]);\n",
" };\n",
" s.onerror = () => reject(`Error loading script: ${paths[lib]}`);\n",
" s.src = paths[lib];\n",
" });\n",
" }\n",
"\n",
" function showError(err) {\n",
" outputDiv.innerHTML = `<div class=\"error\" style=\"color:red;\">${err}</div>`;\n",
" throw err;\n",
" }\n",
"\n",
" function displayChart(vegaEmbed) {\n",
" vegaEmbed(outputDiv, spec, embedOpt)\n",
" .catch(err => showError(`Javascript Error: ${err.message}<br>This usually means there's a typo in your chart specification. See the javascript console for the full traceback.`));\n",
" }\n",
"\n",
" if(typeof define === \"function\" && define.amd) {\n",
" requirejs.config({paths});\n",
" require([\"vega-embed\"], displayChart, err => showError(`Error loading script: ${err.message}`));\n",
" } else {\n",
" maybeLoadScript(\"vega\", \"5\")\n",
" .then(() => maybeLoadScript(\"vega-lite\", \"5.14.1\"))\n",
" .then(() => maybeLoadScript(\"vega-embed\", \"6\"))\n",
" .catch(showError)\n",
" .then(() => displayChart(vegaEmbed));\n",
" }\n",
" })({\"config\": {\"view\": {\"continuousWidth\": 300, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-393ddfb041ce4bac4869808d4a23d514\"}, \"mark\": {\"type\": \"line\"}, \"encoding\": {\"x\": {\"field\": \"Time\", \"type\": \"temporal\"}, \"y\": {\"field\": \"Weekly Downloads\", \"type\": \"quantitative\"}}, \"height\": 150, \"width\": 300, \"$schema\": \"https://vega.github.io/schema/vega-lite/v5.14.1.json\", \"datasets\": {\"data-393ddfb041ce4bac4869808d4a23d514\": [{\"Time\": \"2017-11-12T00:00:00\", \"Weekly Downloads\": 559}, {\"Time\": \"2017-11-19T00:00:00\", \"Weekly Downloads\": 924}, {\"Time\": \"2017-11-26T00:00:00\", \"Weekly Downloads\": 206}, {\"Time\": \"2017-12-03T00:00:00\", \"Weekly Downloads\": 463}, {\"Time\": \"2017-12-10T00:00:00\", \"Weekly Downloads\": 310}, {\"Time\": \"2017-12-17T00:00:00\", \"Weekly Downloads\": 229}, {\"Time\": \"2017-12-24T00:00:00\", \"Weekly Downloads\": 547}, {\"Time\": \"2017-12-31T00:00:00\", \"Weekly Downloads\": 1073}, {\"Time\": \"2018-01-07T00:00:00\", \"Weekly Downloads\": 1080}, {\"Time\": \"2018-01-14T00:00:00\", \"Weekly Downloads\": 384}, {\"Time\": \"2018-01-21T00:00:00\", \"Weekly Downloads\": 400}, {\"Time\": \"2018-01-28T00:00:00\", \"Weekly Downloads\": 463}, {\"Time\": \"2018-02-04T00:00:00\", \"Weekly Downloads\": 270}, {\"Time\": \"2018-02-11T00:00:00\", \"Weekly Downloads\": 981}, {\"Time\": \"2018-02-18T00:00:00\", \"Weekly Downloads\": 741}, {\"Time\": \"2018-02-25T00:00:00\", \"Weekly Downloads\": 422}, {\"Time\": \"2018-03-04T00:00:00\", \"Weekly Downloads\": 610}, {\"Time\": \"2018-03-11T00:00:00\", \"Weekly Downloads\": 381}, {\"Time\": \"2018-03-18T00:00:00\", \"Weekly Downloads\": 245}, {\"Time\": \"2018-03-25T00:00:00\", \"Weekly Downloads\": 586}, {\"Time\": \"2018-04-01T00:00:00\", \"Weekly Downloads\": 559}, {\"Time\": \"2018-04-08T00:00:00\", \"Weekly Downloads\": 591}, {\"Time\": \"2018-04-15T00:00:00\", \"Weekly Downloads\": 427}, {\"Time\": \"2018-04-22T00:00:00\", \"Weekly Downloads\": 370}, {\"Time\": \"2018-04-29T00:00:00\", \"Weekly Downloads\": 637}, {\"Time\": \"2018-05-06T00:00:00\", \"Weekly Downloads\": 377}, {\"Time\": \"2018-05-13T00:00:00\", \"Weekly Downloads\": 348}, {\"Time\": \"2018-05-20T00:00:00\", \"Weekly Downloads\": 450}, {\"Time\": \"2018-05-27T00:00:00\", \"Weekly Downloads\": 775}, {\"Time\": \"2018-06-03T00:00:00\", \"Weekly Downloads\": 652}, {\"Time\": \"2018-06-10T00:00:00\", \"Weekly Downloads\": 485}, {\"Time\": \"2018-06-17T00:00:00\", \"Weekly Downloads\": 623}, {\"Time\": \"2018-06-24T00:00:00\", \"Weekly Downloads\": 270}, {\"Time\": \"2018-07-01T00:00:00\", \"Weekly Downloads\": 465}, {\"Time\": \"2018-07-08T00:00:00\", \"Weekly Downloads\": 388}, {\"Time\": \"2018-07-15T00:00:00\", \"Weekly Downloads\": 351}, {\"Time\": \"2018-07-22T00:00:00\", \"Weekly Downloads\": 93}, {\"Time\": \"2018-07-29T00:00:00\", \"Weekly Downloads\": 458}, {\"Time\": \"2018-08-05T00:00:00\", \"Weekly Downloads\": 1840}, {\"Time\": \"2018-08-12T00:00:00\", \"Weekly Downloads\": 1668}, {\"Time\": \"2018-08-19T00:00:00\", \"Weekly Downloads\": 1630}, {\"Time\": \"2018-08-26T00:00:00\", \"Weekly Downloads\": 1327}, {\"Time\": \"2018-09-02T00:00:00\", \"Weekly Downloads\": 1266}, {\"Time\": \"2018-09-09T00:00:00\", \"Weekly Downloads\": 1730}, {\"Time\": \"2018-09-16T00:00:00\", \"Weekly Downloads\": 1549}, {\"Time\": \"2018-09-23T00:00:00\", \"Weekly Downloads\": 2040}, {\"Time\": \"2018-09-30T00:00:00\", \"Weekly Downloads\": 1547}, {\"Time\": \"2018-10-07T00:00:00\", \"Weekly Downloads\": 2042}, {\"Time\": \"2018-10-14T00:00:00\", \"Weekly Downloads\": 5593}, {\"Time\": \"2018-10-21T00:00:00\", \"Weekly Downloads\": 1473}, {\"Time\": \"2018-10-28T00:00:00\", \"Weekly Downloads\": 1667}, {\"Time\": \"2018-11-04T00:00:00\", \"Weekly Downloads\": 2066}, {\"Time\": \"2018-11-11T00:00:00\", \"Weekly Downloads\": 1522}, {\"Time\": \"2018-11-18T00:00:00\", \"Weekly Downloads\": 1754}, {\"Time\": \"2018-11-25T00:00:00\", \"Weekly Downloads\": 1233}, {\"Time\": \"2018-12-02T00:00:00\", \"Weekly Downloads\": 1742}, {\"Time\": \"2018-12-09T00:00:00\", \"Weekly Downloads\": 1694}, {\"Time\": \"2018-12-16T00:00:00\", \"Weekly Downloads\": 2991}, {\"Time\": \"2018-12-23T00:00:00\", \"Weekly Downloads\": 1620}, {\"Time\": \"2018-12-30T00:00:00\", \"Weekly Downloads\": 584}, {\"Time\": \"2019-01-06T00:00:00\", \"Weekly Downloads\": 1473}, {\"Time\": \"2019-01-13T00:00:00\", \"Weekly Downloads\": 1647}, {\"Time\": \"2019-01-20T00:00:00\", \"Weekly Downloads\": 1310}, {\"Time\": \"2019-01-27T00:00:00\", \"Weekly Downloads\": 2251}, {\"Time\": \"2019-02-03T00:00:00\", \"Weekly Downloads\": 3149}, {\"Time\": \"2019-02-10T00:00:00\", \"Weekly Downloads\": 1954}, {\"Time\": \"2019-02-17T00:00:00\", \"Weekly Downloads\": 1750}, {\"Time\": \"2019-02-24T00:00:00\", \"Weekly Downloads\": 1372}, {\"Time\": \"2019-03-03T00:00:00\", \"Weekly Downloads\": 2327}, {\"Time\": \"2019-03-10T00:00:00\", \"Weekly Downloads\": 2219}, {\"Time\": \"2019-03-17T00:00:00\", \"Weekly Downloads\": 2314}, {\"Time\": \"2019-03-24T00:00:00\", \"Weekly Downloads\": 1944}, {\"Time\": \"2019-03-31T00:00:00\", \"Weekly Downloads\": 2369}, {\"Time\": \"2019-04-07T00:00:00\", \"Weekly Downloads\": 2154}, {\"Time\": \"2019-04-14T00:00:00\", \"Weekly Downloads\": 2194}, {\"Time\": \"2019-04-21T00:00:00\", \"Weekly Downloads\": 1505}, {\"Time\": \"2019-04-28T00:00:00\", \"Weekly Downloads\": 1283}, {\"Time\": \"2019-05-05T00:00:00\", \"Weekly Downloads\": 2064}, {\"Time\": \"2019-05-12T00:00:00\", \"Weekly Downloads\": 2719}, {\"Time\": \"2019-05-19T00:00:00\", \"Weekly Downloads\": 2683}, {\"Time\": \"2019-05-26T00:00:00\", \"Weekly Downloads\": 2060}, {\"Time\": \"2019-06-02T00:00:00\", \"Weekly Downloads\": 2949}, {\"Time\": \"2019-06-09T00:00:00\", \"Weekly Downloads\": 2548}, {\"Time\": \"2019-06-16T00:00:00\", \"Weekly Downloads\": 3232}, {\"Time\": \"2019-06-23T00:00:00\", \"Weekly Downloads\": 2859}, {\"Time\": \"2019-06-30T00:00:00\", \"Weekly Downloads\": 1907}, {\"Time\": \"2019-07-07T00:00:00\", \"Weekly Downloads\": 2569}, {\"Time\": \"2019-07-14T00:00:00\", \"Weekly Downloads\": 3275}, {\"Time\": \"2019-07-21T00:00:00\", \"Weekly Downloads\": 2342}, {\"Time\": \"2019-07-28T00:00:00\", \"Weekly Downloads\": 2443}, {\"Time\": \"2019-08-04T00:00:00\", \"Weekly Downloads\": 2977}, {\"Time\": \"2019-08-11T00:00:00\", \"Weekly Downloads\": 2479}, {\"Time\": \"2019-08-18T00:00:00\", \"Weekly Downloads\": 1914}, {\"Time\": \"2019-08-25T00:00:00\", \"Weekly Downloads\": 2048}, {\"Time\": \"2019-09-01T00:00:00\", \"Weekly Downloads\": 1842}, {\"Time\": \"2019-09-08T00:00:00\", \"Weekly Downloads\": 2529}, {\"Time\": \"2019-09-15T00:00:00\", \"Weekly Downloads\": 2649}, {\"Time\": \"2019-09-22T00:00:00\", \"Weekly Downloads\": 2297}, {\"Time\": \"2019-09-29T00:00:00\", \"Weekly Downloads\": 1782}, {\"Time\": \"2019-10-06T00:00:00\", \"Weekly Downloads\": 2783}, {\"Time\": \"2019-10-13T00:00:00\", \"Weekly Downloads\": 1754}, {\"Time\": \"2019-10-20T00:00:00\", \"Weekly Downloads\": 2371}, {\"Time\": \"2019-10-27T00:00:00\", \"Weekly Downloads\": 2519}, {\"Time\": \"2019-11-03T00:00:00\", \"Weekly Downloads\": 2439}, {\"Time\": \"2019-11-10T00:00:00\", \"Weekly Downloads\": 2577}, {\"Time\": \"2019-11-17T00:00:00\", \"Weekly Downloads\": 2118}, {\"Time\": \"2019-11-24T00:00:00\", \"Weekly Downloads\": 2551}, {\"Time\": \"2019-12-01T00:00:00\", \"Weekly Downloads\": 1951}, {\"Time\": \"2019-12-08T00:00:00\", \"Weekly Downloads\": 1971}, {\"Time\": \"2019-12-15T00:00:00\", \"Weekly Downloads\": 2456}, {\"Time\": \"2019-12-22T00:00:00\", \"Weekly Downloads\": 2345}, {\"Time\": \"2019-12-29T00:00:00\", \"Weekly Downloads\": 2524}, {\"Time\": \"2020-01-05T00:00:00\", \"Weekly Downloads\": 1402}, {\"Time\": \"2020-01-12T00:00:00\", \"Weekly Downloads\": 3351}, {\"Time\": \"2020-01-19T00:00:00\", \"Weekly Downloads\": 2521}, {\"Time\": \"2020-01-26T00:00:00\", \"Weekly Downloads\": 4035}, {\"Time\": \"2020-02-02T00:00:00\", \"Weekly Downloads\": 3006}, {\"Time\": \"2020-02-09T00:00:00\", \"Weekly Downloads\": 3056}, {\"Time\": \"2020-02-16T00:00:00\", \"Weekly Downloads\": 2546}, {\"Time\": \"2020-02-23T00:00:00\", \"Weekly Downloads\": 3016}, {\"Time\": \"2020-03-01T00:00:00\", \"Weekly Downloads\": 2694}, {\"Time\": \"2020-03-08T00:00:00\", \"Weekly Downloads\": 3051}, {\"Time\": \"2020-03-15T00:00:00\", \"Weekly Downloads\": 3281}, {\"Time\": \"2020-03-22T00:00:00\", \"Weekly Downloads\": 3663}, {\"Time\": \"2020-03-29T00:00:00\", \"Weekly Downloads\": 3724}, {\"Time\": \"2020-04-05T00:00:00\", \"Weekly Downloads\": 3635}, {\"Time\": \"2020-04-12T00:00:00\", \"Weekly Downloads\": 3130}, {\"Time\": \"2020-04-19T00:00:00\", \"Weekly Downloads\": 3788}, {\"Time\": \"2020-04-26T00:00:00\", \"Weekly Downloads\": 3431}, {\"Time\": \"2020-05-03T00:00:00\", \"Weekly Downloads\": 3129}, {\"Time\": \"2020-05-10T00:00:00\", \"Weekly Downloads\": 3538}, {\"Time\": \"2020-05-17T00:00:00\", \"Weekly Downloads\": 4136}, {\"Time\": \"2020-05-24T00:00:00\", \"Weekly Downloads\": 7752}, {\"Time\": \"2020-05-31T00:00:00\", \"Weekly Downloads\": 4194}, {\"Time\": \"2020-06-07T00:00:00\", \"Weekly Downloads\": 6276}, {\"Time\": \"2020-06-14T00:00:00\", \"Weekly Downloads\": 4288}, {\"Time\": \"2020-06-21T00:00:00\", \"Weekly Downloads\": 4166}, {\"Time\": \"2020-06-28T00:00:00\", \"Weekly Downloads\": 4885}, {\"Time\": \"2020-07-05T00:00:00\", \"Weekly Downloads\": 4270}, {\"Time\": \"2020-07-12T00:00:00\", \"Weekly Downloads\": 4395}, {\"Time\": \"2020-07-19T00:00:00\", \"Weekly Downloads\": 3965}, {\"Time\": \"2020-07-26T00:00:00\", \"Weekly Downloads\": 4139}, {\"Time\": \"2020-08-02T00:00:00\", \"Weekly Downloads\": 4892}, {\"Time\": \"2020-08-09T00:00:00\", \"Weekly Downloads\": 4347}, {\"Time\": \"2020-08-16T00:00:00\", \"Weekly Downloads\": 4454}, {\"Time\": \"2020-08-23T00:00:00\", \"Weekly Downloads\": 4661}, {\"Time\": \"2020-08-30T00:00:00\", \"Weekly Downloads\": 5280}, {\"Time\": \"2020-09-06T00:00:00\", \"Weekly Downloads\": 3906}, {\"Time\": \"2020-09-13T00:00:00\", \"Weekly Downloads\": 3929}, {\"Time\": \"2020-09-20T00:00:00\", \"Weekly Downloads\": 5093}, {\"Time\": \"2020-09-27T00:00:00\", \"Weekly Downloads\": 3900}, {\"Time\": \"2020-10-04T00:00:00\", \"Weekly Downloads\": 4894}, {\"Time\": \"2020-10-11T00:00:00\", \"Weekly Downloads\": 4340}, {\"Time\": \"2020-10-18T00:00:00\", \"Weekly Downloads\": 5790}, {\"Time\": \"2020-10-25T00:00:00\", \"Weekly Downloads\": 4712}, {\"Time\": \"2020-11-01T00:00:00\", \"Weekly Downloads\": 6135}, {\"Time\": \"2020-11-08T00:00:00\", \"Weekly Downloads\": 4421}, {\"Time\": \"2020-11-15T00:00:00\", \"Weekly Downloads\": 5448}, {\"Time\": \"2020-11-22T00:00:00\", \"Weekly Downloads\": 5747}, {\"Time\": \"2020-11-29T00:00:00\", \"Weekly Downloads\": 4008}, {\"Time\": \"2020-12-06T00:00:00\", \"Weekly Downloads\": 4825}, {\"Time\": \"2020-12-13T00:00:00\", \"Weekly Downloads\": 4979}, {\"Time\": \"2020-12-20T00:00:00\", \"Weekly Downloads\": 4107}, {\"Time\": \"2020-12-27T00:00:00\", \"Weekly Downloads\": 2969}, {\"Time\": \"2021-01-03T00:00:00\", \"Weekly Downloads\": 2432}, {\"Time\": \"2021-01-10T00:00:00\", \"Weekly Downloads\": 4745}, {\"Time\": \"2021-01-17T00:00:00\", \"Weekly Downloads\": 5765}, {\"Time\": \"2021-01-24T00:00:00\", \"Weekly Downloads\": 5727}, {\"Time\": \"2021-01-31T00:00:00\", \"Weekly Downloads\": 14105}, {\"Time\": \"2021-02-07T00:00:00\", \"Weekly Downloads\": 7858}, {\"Time\": \"2021-02-14T00:00:00\", \"Weekly Downloads\": 6973}, {\"Time\": \"2021-02-21T00:00:00\", \"Weekly Downloads\": 6123}, {\"Time\": \"2021-02-28T00:00:00\", \"Weekly Downloads\": 6657}, {\"Time\": \"2021-03-07T00:00:00\", \"Weekly Downloads\": 7453}, {\"Time\": \"2021-03-14T00:00:00\", \"Weekly Downloads\": 6807}, {\"Time\": \"2021-03-21T00:00:00\", \"Weekly Downloads\": 7588}, {\"Time\": \"2021-03-28T00:00:00\", \"Weekly Downloads\": 8090}, {\"Time\": \"2021-04-04T00:00:00\", \"Weekly Downloads\": 7931}, {\"Time\": \"2021-04-11T00:00:00\", \"Weekly Downloads\": 6876}, {\"Time\": \"2021-04-18T00:00:00\", \"Weekly Downloads\": 6705}, {\"Time\": \"2021-04-25T00:00:00\", \"Weekly Downloads\": 7438}, {\"Time\": \"2021-05-02T00:00:00\", \"Weekly Downloads\": 9161}, {\"Time\": \"2021-05-09T00:00:00\", \"Weekly Downloads\": 7250}, {\"Time\": \"2021-05-16T00:00:00\", \"Weekly Downloads\": 7594}, {\"Time\": \"2021-05-23T00:00:00\", \"Weekly Downloads\": 7539}, {\"Time\": \"2021-05-30T00:00:00\", \"Weekly Downloads\": 7214}, {\"Time\": \"2021-06-06T00:00:00\", \"Weekly Downloads\": 6572}, {\"Time\": \"2021-06-13T00:00:00\", \"Weekly Downloads\": 7454}, {\"Time\": \"2021-06-20T00:00:00\", \"Weekly Downloads\": 8697}, {\"Time\": \"2021-06-27T00:00:00\", \"Weekly Downloads\": 7070}, {\"Time\": \"2021-07-04T00:00:00\", \"Weekly Downloads\": 7461}, {\"Time\": \"2021-07-11T00:00:00\", \"Weekly Downloads\": 7142}, {\"Time\": \"2021-07-18T00:00:00\", \"Weekly Downloads\": 8363}, {\"Time\": \"2021-07-25T00:00:00\", \"Weekly Downloads\": 7682}, {\"Time\": \"2021-08-01T00:00:00\", \"Weekly Downloads\": 7688}, {\"Time\": \"2021-08-08T00:00:00\", \"Weekly Downloads\": 6992}, {\"Time\": \"2021-08-15T00:00:00\", \"Weekly Downloads\": 7268}, {\"Time\": \"2021-08-22T00:00:00\", \"Weekly Downloads\": 6722}, {\"Time\": \"2021-08-29T00:00:00\", \"Weekly Downloads\": 6862}, {\"Time\": \"2021-09-05T00:00:00\", \"Weekly Downloads\": 5997}, {\"Time\": \"2021-09-12T00:00:00\", \"Weekly Downloads\": 7013}, {\"Time\": \"2021-09-19T00:00:00\", \"Weekly Downloads\": 8976}, {\"Time\": \"2021-09-26T00:00:00\", \"Weekly Downloads\": 6991}, {\"Time\": \"2021-10-03T00:00:00\", \"Weekly Downloads\": 6245}, {\"Time\": \"2021-10-10T00:00:00\", \"Weekly Downloads\": 7453}, {\"Time\": \"2021-10-17T00:00:00\", \"Weekly Downloads\": 7205}, {\"Time\": \"2021-10-24T00:00:00\", \"Weekly Downloads\": 6772}, {\"Time\": \"2021-10-31T00:00:00\", \"Weekly Downloads\": 7287}, {\"Time\": \"2021-11-07T00:00:00\", \"Weekly Downloads\": 7344}, {\"Time\": \"2021-11-14T00:00:00\", \"Weekly Downloads\": 7520}, {\"Time\": \"2021-11-21T00:00:00\", \"Weekly Downloads\": 8799}, {\"Time\": \"2021-11-28T00:00:00\", \"Weekly Downloads\": 8041}, {\"Time\": \"2021-12-05T00:00:00\", \"Weekly Downloads\": 8575}, {\"Time\": \"2021-12-12T00:00:00\", \"Weekly Downloads\": 9563}, {\"Time\": \"2021-12-19T00:00:00\", \"Weekly Downloads\": 7752}, {\"Time\": \"2021-12-26T00:00:00\", \"Weekly Downloads\": 5814}, {\"Time\": \"2022-01-02T00:00:00\", \"Weekly Downloads\": 4513}, {\"Time\": \"2022-01-09T00:00:00\", \"Weekly Downloads\": 7157}, {\"Time\": \"2022-01-16T00:00:00\", \"Weekly Downloads\": 8366}, {\"Time\": \"2022-01-23T00:00:00\", \"Weekly Downloads\": 9424}, {\"Time\": \"2022-01-30T00:00:00\", \"Weekly Downloads\": 7553}, {\"Time\": \"2022-02-06T00:00:00\", \"Weekly Downloads\": 10263}, {\"Time\": \"2022-02-13T00:00:00\", \"Weekly Downloads\": 10756}, {\"Time\": \"2022-02-20T00:00:00\", \"Weekly Downloads\": 9998}, {\"Time\": \"2022-02-27T00:00:00\", \"Weekly Downloads\": 10215}, {\"Time\": \"2022-03-06T00:00:00\", \"Weekly Downloads\": 13896}, {\"Time\": \"2022-03-13T00:00:00\", \"Weekly Downloads\": 12162}, {\"Time\": \"2022-03-20T00:00:00\", \"Weekly Downloads\": 11788}, {\"Time\": \"2022-03-27T00:00:00\", \"Weekly Downloads\": 10712}, {\"Time\": \"2022-04-03T00:00:00\", \"Weekly Downloads\": 10896}, {\"Time\": \"2022-04-10T00:00:00\", \"Weekly Downloads\": 12203}, {\"Time\": \"2022-04-17T00:00:00\", \"Weekly Downloads\": 9111}, {\"Time\": \"2022-04-24T00:00:00\", \"Weekly Downloads\": 9887}, {\"Time\": \"2022-05-01T00:00:00\", \"Weekly Downloads\": 10031}, {\"Time\": \"2022-05-08T00:00:00\", \"Weekly Downloads\": 10408}, {\"Time\": \"2022-05-15T00:00:00\", \"Weekly Downloads\": 9631}, {\"Time\": \"2022-05-22T00:00:00\", \"Weekly Downloads\": 10551}, {\"Time\": \"2022-05-29T00:00:00\", \"Weekly Downloads\": 10324}, {\"Time\": \"2022-06-05T00:00:00\", \"Weekly Downloads\": 10424}, {\"Time\": \"2022-06-12T00:00:00\", \"Weekly Downloads\": 10059}, {\"Time\": \"2022-06-19T00:00:00\", \"Weekly Downloads\": 11124}, {\"Time\": \"2022-06-26T00:00:00\", \"Weekly Downloads\": 9802}, {\"Time\": \"2022-07-03T00:00:00\", \"Weekly Downloads\": 10573}, {\"Time\": \"2022-07-10T00:00:00\", \"Weekly Downloads\": 9636}, {\"Time\": \"2022-07-17T00:00:00\", \"Weekly Downloads\": 9666}, {\"Time\": \"2022-07-24T00:00:00\", \"Weekly Downloads\": 9221}, {\"Time\": \"2022-07-31T00:00:00\", \"Weekly Downloads\": 9170}, {\"Time\": \"2022-08-07T00:00:00\", \"Weekly Downloads\": 9987}, {\"Time\": \"2022-08-14T00:00:00\", \"Weekly Downloads\": 11584}, {\"Time\": \"2022-08-21T00:00:00\", \"Weekly Downloads\": 8821}, {\"Time\": \"2022-08-28T00:00:00\", \"Weekly Downloads\": 11153}, {\"Time\": \"2022-09-04T00:00:00\", \"Weekly Downloads\": 10651}, {\"Time\": \"2022-09-11T00:00:00\", \"Weekly Downloads\": 10265}, {\"Time\": \"2022-09-18T00:00:00\", \"Weekly Downloads\": 15179}, {\"Time\": \"2022-09-25T00:00:00\", \"Weekly Downloads\": 11884}, {\"Time\": \"2022-10-02T00:00:00\", \"Weekly Downloads\": 12366}, {\"Time\": \"2022-10-09T00:00:00\", \"Weekly Downloads\": 13484}, {\"Time\": \"2022-10-16T00:00:00\", \"Weekly Downloads\": 12373}, {\"Time\": \"2022-10-23T00:00:00\", \"Weekly Downloads\": 11822}, {\"Time\": \"2022-10-30T00:00:00\", \"Weekly Downloads\": 10830}, {\"Time\": \"2022-11-06T00:00:00\", \"Weekly Downloads\": 12358}, {\"Time\": \"2022-11-13T00:00:00\", \"Weekly Downloads\": 13362}, {\"Time\": \"2022-11-20T00:00:00\", \"Weekly Downloads\": 16985}, {\"Time\": \"2022-11-27T00:00:00\", \"Weekly Downloads\": 12308}, {\"Time\": \"2022-12-04T00:00:00\", \"Weekly Downloads\": 13362}, {\"Time\": \"2022-12-11T00:00:00\", \"Weekly Downloads\": 12713}, {\"Time\": \"2022-12-18T00:00:00\", \"Weekly Downloads\": 13958}, {\"Time\": \"2022-12-25T00:00:00\", \"Weekly Downloads\": 11078}, {\"Time\": \"2023-01-01T00:00:00\", \"Weekly Downloads\": 5871}, {\"Time\": \"2023-01-08T00:00:00\", \"Weekly Downloads\": 11883}, {\"Time\": \"2023-01-15T00:00:00\", \"Weekly Downloads\": 18682}, {\"Time\": \"2023-01-22T00:00:00\", \"Weekly Downloads\": 16855}, {\"Time\": \"2023-01-29T00:00:00\", \"Weekly Downloads\": 15867}, {\"Time\": \"2023-02-05T00:00:00\", \"Weekly Downloads\": 16765}, {\"Time\": \"2023-02-12T00:00:00\", \"Weekly Downloads\": 16318}, {\"Time\": \"2023-02-19T00:00:00\", \"Weekly Downloads\": 18957}, {\"Time\": \"2023-02-26T00:00:00\", \"Weekly Downloads\": 18156}, {\"Time\": \"2023-03-05T00:00:00\", \"Weekly Downloads\": 14680}, {\"Time\": \"2023-03-12T00:00:00\", \"Weekly Downloads\": 18623}, {\"Time\": \"2023-03-19T00:00:00\", \"Weekly Downloads\": 17443}, {\"Time\": \"2023-03-26T00:00:00\", \"Weekly Downloads\": 17067}, {\"Time\": \"2023-04-02T00:00:00\", \"Weekly Downloads\": 14985}, {\"Time\": \"2023-04-09T00:00:00\", \"Weekly Downloads\": 16479}, {\"Time\": \"2023-04-16T00:00:00\", \"Weekly Downloads\": 18721}, {\"Time\": \"2023-04-23T00:00:00\", \"Weekly Downloads\": 19186}, {\"Time\": \"2023-04-30T00:00:00\", \"Weekly Downloads\": 18173}, {\"Time\": \"2023-05-07T00:00:00\", \"Weekly Downloads\": 15336}, {\"Time\": \"2023-05-14T00:00:00\", \"Weekly Downloads\": 18879}, {\"Time\": \"2023-05-21T00:00:00\", \"Weekly Downloads\": 16927}, {\"Time\": \"2023-05-28T00:00:00\", \"Weekly Downloads\": 18583}, {\"Time\": \"2023-06-04T00:00:00\", \"Weekly Downloads\": 16137}, {\"Time\": \"2023-06-11T00:00:00\", \"Weekly Downloads\": 18142}, {\"Time\": \"2023-06-18T00:00:00\", \"Weekly Downloads\": 21023}, {\"Time\": \"2023-06-25T00:00:00\", \"Weekly Downloads\": 16973}, {\"Time\": \"2023-07-02T00:00:00\", \"Weekly Downloads\": 16132}, {\"Time\": \"2023-07-09T00:00:00\", \"Weekly Downloads\": 17256}, {\"Time\": \"2023-07-16T00:00:00\", \"Weekly Downloads\": 19053}, {\"Time\": \"2023-07-23T00:00:00\", \"Weekly Downloads\": 21099}, {\"Time\": \"2023-07-30T00:00:00\", \"Weekly Downloads\": 28820}, {\"Time\": \"2023-08-06T00:00:00\", \"Weekly Downloads\": 27863}, {\"Time\": \"2023-08-13T00:00:00\", \"Weekly Downloads\": 26169}, {\"Time\": \"2023-08-20T00:00:00\", \"Weekly Downloads\": 24733}, {\"Time\": \"2023-08-27T00:00:00\", \"Weekly Downloads\": 27217}, {\"Time\": \"2023-09-03T00:00:00\", \"Weekly Downloads\": 22154}, {\"Time\": \"2023-09-10T00:00:00\", \"Weekly Downloads\": 24957}, {\"Time\": \"2023-09-17T00:00:00\", \"Weekly Downloads\": 23944}]}}, {\"mode\": \"vega-lite\"});\n",
"</script>"
],
"text/plain": [
"alt.Chart(...)"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(\n",
" alt.Chart(\n",
" (\n",
" anndata_df_filtered\n",
" .groupby(pd.Grouper(freq=\"W\"))\n",
" [[\"num_downloads\"]].sum()\n",
" .iloc[:-1]\n",
" .reset_index()\n",
" .rename(columns={\"num_downloads\": \"Weekly Downloads\", \"day\": \"Time\"})\n",
" )\n",
" )\n",
" .mark_line()\n",
" .encode(x=\"Time\", y=\"Weekly Downloads\")\n",
" .properties(width=300, height=150)\n",
")\n",
" "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python3",
"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.9.18"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
@flying-sheep
Copy link

two alternative data sources (example with scanpy as package)

both have APIs, and I think neither wants money for casual use

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment