blob: 6edbd8f36f9c4c3f341448964bcf7cb758b47d70 [file] [log] [blame]
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"id": "805ab12a",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/elijahbenizzy/.pyenv/versions/3.9.10/envs/hamilton/lib/python3.9/site-packages/pyspark/pandas/__init__.py:50: UserWarning: 'PYARROW_IGNORE_TIMEZONE' environment variable was not set. It is required to set this environment variable to '1' in both driver and executor sides if you use pyarrow>=2.0.0. pandas-on-Spark will set it for you but it does not work if there is a Spark context already launched.\n",
" warnings.warn(\n"
]
}
],
"source": [
"from typing import List, Tuple\n",
"\n",
"import click\n",
"\n",
"from hamilton import driver\n",
"import functions\n",
"from hamilton.execution import executors\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "e0bfff32",
"metadata": {},
"outputs": [],
"source": [
"# TODO -- delete\n",
"github_api_key=\"...\"\n",
"repositories=[\n",
" 'dagworks-inc/hamilton',\n",
" 'stitchfix/hamilton'\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "315c1d32",
"metadata": {},
"outputs": [],
"source": [
"dr = driver.Builder() \\\n",
" .enable_dynamic_execution(allow_experimental_mode=True) \\\n",
" .with_modules(functions) \\\n",
" .with_remote_executor(executors.MultiThreadingExecutor(max_tasks=10)) \\\n",
" .build()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "38d2097c",
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
"<!-- Generated by graphviz version 8.0.5 (20230430.1635)\n",
" -->\n",
"<!-- Pages: 1 -->\n",
"<svg width=\"367pt\" height=\"580pt\"\n",
" viewBox=\"0.00 0.00 367.29 580.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
"<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 576)\">\n",
"<polygon fill=\"white\" stroke=\"none\" points=\"-4,4 -4,-576 363.29,-576 363.29,4 -4,4\"/>\n",
"<!-- stargazer_url -->\n",
"<g id=\"node1\" class=\"node\">\n",
"<title>stargazer_url</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"182.48\" cy=\"-246\" rx=\"59.03\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"182.48\" cy=\"-246\" rx=\"63.03\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"182.48\" y=\"-240.95\" font-family=\"Times,serif\" font-size=\"14.00\">stargazer_url</text>\n",
"</g>\n",
"<!-- stargazers -->\n",
"<g id=\"node6\" class=\"node\">\n",
"<title>stargazers</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"227.48\" cy=\"-170\" rx=\"47.77\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"227.48\" y=\"-164.95\" font-family=\"Times,serif\" font-size=\"14.00\">stargazers</text>\n",
"</g>\n",
"<!-- stargazer_url&#45;&gt;stargazers -->\n",
"<g id=\"edge8\" class=\"edge\">\n",
"<title>stargazer_url&#45;&gt;stargazers</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M195.25,-223.99C200.53,-215.31 206.69,-205.18 212.2,-196.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"212.05,-196.38 221.09,-190.17 214.64,-192.1 217.24,-187.83 217.24,-187.83 217.24,-187.83 214.64,-192.1 213.4,-185.49 212.05,-196.38 212.05,-196.38\"/>\n",
"</g>\n",
"<!-- unique_stargazers -->\n",
"<g id=\"node2\" class=\"node\">\n",
"<title>unique_stargazers</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"227.48\" cy=\"-94\" rx=\"77.45\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"227.48\" cy=\"-94\" rx=\"81.45\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"227.48\" y=\"-88.95\" font-family=\"Times,serif\" font-size=\"14.00\">unique_stargazers</text>\n",
"</g>\n",
"<!-- final_count -->\n",
"<g id=\"node8\" class=\"node\">\n",
"<title>final_count</title>\n",
"<polygon fill=\"none\" stroke=\"black\" points=\"266.23,-36 188.73,-36 188.73,0 266.23,0 266.23,-36\"/>\n",
"<text text-anchor=\"middle\" x=\"227.48\" y=\"-12.95\" font-family=\"Times,serif\" font-size=\"14.00\">final_count</text>\n",
"</g>\n",
"<!-- unique_stargazers&#45;&gt;final_count -->\n",
"<g id=\"edge10\" class=\"edge\">\n",
"<title>unique_stargazers&#45;&gt;final_count</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M227.48,-71.6C227.48,-63.94 227.48,-55.19 227.48,-47.05\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"230.98,-47.13 227.48,-37.13 223.98,-47.13 230.98,-47.13\"/>\n",
"</g>\n",
"<!-- star_count -->\n",
"<g id=\"node3\" class=\"node\">\n",
"<title>star_count</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"78.48\" cy=\"-402\" rx=\"49.3\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"78.48\" y=\"-396.95\" font-family=\"Times,serif\" font-size=\"14.00\">star_count</text>\n",
"</g>\n",
"<!-- stars_by_repo -->\n",
"<g id=\"node4\" class=\"node\">\n",
"<title>stars_by_repo</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"71.48\" cy=\"-326\" rx=\"62.61\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"71.48\" cy=\"-326\" rx=\"66.61\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"71.48\" y=\"-320.95\" font-family=\"Times,serif\" font-size=\"14.00\">stars_by_repo</text>\n",
"</g>\n",
"<!-- star_count&#45;&gt;stars_by_repo -->\n",
"<g id=\"edge6\" class=\"edge\">\n",
"<title>star_count&#45;&gt;stars_by_repo</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M75.92,-374.02C75.46,-369.12 74.97,-363.97 74.5,-358.95\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"75.91,-373.88 72.37,-384.26 76.38,-378.86 76.85,-383.84 76.85,-383.84 76.85,-383.84 76.38,-378.86 81.33,-383.41 75.91,-373.88 75.91,-373.88\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"77.92,-358.93 73.49,-349.3 70.95,-359.59 77.92,-358.93\"/>\n",
"</g>\n",
"<!-- stars_by_repo&#45;&gt;stargazer_url -->\n",
"<g id=\"edge1\" class=\"edge\">\n",
"<title>stars_by_repo&#45;&gt;stargazer_url</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M99.2,-305.52C113.48,-295.48 131.06,-283.13 146.39,-272.36\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"147.94,-274.85 154.11,-266.23 143.91,-269.12 147.94,-274.85\"/>\n",
"</g>\n",
"<!-- starcount_url -->\n",
"<g id=\"node5\" class=\"node\">\n",
"<title>starcount_url</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"78.48\" cy=\"-478\" rx=\"59.54\" ry=\"18\"/>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"78.48\" cy=\"-478\" rx=\"63.54\" ry=\"22\"/>\n",
"<text text-anchor=\"middle\" x=\"78.48\" y=\"-472.95\" font-family=\"Times,serif\" font-size=\"14.00\">starcount_url</text>\n",
"</g>\n",
"<!-- starcount_url&#45;&gt;star_count -->\n",
"<g id=\"edge4\" class=\"edge\">\n",
"<title>starcount_url&#45;&gt;star_count</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M78.48,-455.6C78.48,-447.58 78.48,-438.38 78.48,-429.93\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"78.48,-430.13 82.98,-420.13 78.48,-425.13 78.48,-420.13 78.48,-420.13 78.48,-420.13 78.48,-425.13 73.98,-420.13 78.48,-430.13 78.48,-430.13\"/>\n",
"</g>\n",
"<!-- stargazers&#45;&gt;unique_stargazers -->\n",
"<g id=\"edge3\" class=\"edge\">\n",
"<title>stargazers&#45;&gt;unique_stargazers</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M227.48,-142.02C227.48,-137.12 227.48,-131.97 227.48,-126.95\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"227.48,-141.84 222.98,-151.84 227.48,-146.84 227.48,-151.84 227.48,-151.84 227.48,-151.84 227.48,-146.84 231.98,-151.84 227.48,-141.84 227.48,-141.84\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"230.98,-127.3 227.48,-117.3 223.98,-127.3 230.98,-127.3\"/>\n",
"</g>\n",
"<!-- repositories -->\n",
"<g id=\"node7\" class=\"node\">\n",
"<title>repositories</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"78.48\" cy=\"-554\" rx=\"78.48\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"78.48\" y=\"-548.95\" font-family=\"Times,serif\" font-size=\"14.00\">Input: repositories</text>\n",
"</g>\n",
"<!-- repositories&#45;&gt;starcount_url -->\n",
"<g id=\"edge7\" class=\"edge\">\n",
"<title>repositories&#45;&gt;starcount_url</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M78.48,-535.84C78.48,-528.47 78.48,-519.62 78.48,-511.12\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"81.98,-511.3 78.48,-501.3 74.98,-511.3 81.98,-511.3\"/>\n",
"</g>\n",
"<!-- github_api_key -->\n",
"<g id=\"node9\" class=\"node\">\n",
"<title>github_api_key</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" stroke-dasharray=\"5,2\" cx=\"266.48\" cy=\"-478\" rx=\"92.81\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"266.48\" y=\"-472.95\" font-family=\"Times,serif\" font-size=\"14.00\">Input: github_api_key</text>\n",
"</g>\n",
"<!-- github_api_key&#45;&gt;star_count -->\n",
"<g id=\"edge5\" class=\"edge\">\n",
"<title>github_api_key&#45;&gt;star_count</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M226.61,-461.31C195.58,-449.09 152.62,-432.18 120.95,-419.72\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"122.68,-416.25 112.1,-415.84 120.12,-422.76 122.68,-416.25\"/>\n",
"</g>\n",
"<!-- github_api_key&#45;&gt;stargazers -->\n",
"<g id=\"edge9\" class=\"edge\">\n",
"<title>github_api_key&#45;&gt;stargazers</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M268.12,-459.75C271.53,-418.28 277.31,-310.07 254.48,-224 252.07,-214.92 247.96,-205.59 243.67,-197.35\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"246.35,-195.97 238.44,-188.92 240.22,-199.36 246.35,-195.97\"/>\n",
"</g>\n",
"<!-- per_page -->\n",
"<g id=\"node10\" class=\"node\">\n",
"<title>per_page</title>\n",
"<ellipse fill=\"none\" stroke=\"black\" cx=\"200.48\" cy=\"-326\" rx=\"44.7\" ry=\"18\"/>\n",
"<text text-anchor=\"middle\" x=\"200.48\" y=\"-320.95\" font-family=\"Times,serif\" font-size=\"14.00\">per_page</text>\n",
"</g>\n",
"<!-- per_page&#45;&gt;stargazer_url -->\n",
"<g id=\"edge2\" class=\"edge\">\n",
"<title>per_page&#45;&gt;stargazer_url</title>\n",
"<path fill=\"none\" stroke=\"black\" d=\"M196.48,-307.69C194.5,-299.12 192.05,-288.5 189.76,-278.55\"/>\n",
"<polygon fill=\"black\" stroke=\"black\" points=\"193.02,-278.11 187.36,-269.15 186.2,-279.68 193.02,-278.11\"/>\n",
"</g>\n",
"</g>\n",
"</svg>\n"
],
"text/plain": [
"<graphviz.graphs.Digraph at 0x17501d370>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dr.visualize_execution(\n",
" ['final_count'], None, {}, inputs={\n",
" 'github_api_key': github_api_key,\n",
" 'repositories': list(repositories)})"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "9f0552a7",
"metadata": {},
"outputs": [],
"source": [
"df = dr.execute(['final_count', 'unique_stargazers'], inputs={'github_api_key': github_api_key,\n",
" 'repositories': list(repositories)})['unique_stargazers']"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "0e4a4e7d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: title={'center': 'unique across dagworks-inc/hamilton,stitchfix/hamilton'}, xlabel='starred_at'>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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+Pn5AQC0Wi369euHnTt3YujQoZg8eTKys7MRFRWFM2fOoH79+tJzrlixAgUFBRg7diwUCgXc3NywY8cO9O7dG/Xq1cPs2bORn5+PxYsXo2PHjjh+/LgU4yuvvIJffvkFEyZMQEhICG7fvo39+/cjLi4OLVu2RFFRESIiIlBYWIiJEyfCx8cHN27cwKZNm5CZmQmVSnXPXL/77ju8/PLL6NChA6ZMmYLLly/jySefhJubG/z9/aV+arUa3377LZ577jmMGTMG2dnZ+O677xAREYHDhw+jRYsWAACdTof+/fvj8OHDePXVV9G4cWNs3LgRkZGReq/bqVMnyGQy7N27F82aNQMA7Nu3D3K5HPv375f6paWl4dy5c3oDbkePHo1Vq1ZhyJAhmDZtGqKjozF//nzExcXh999/13ud+Ph4PPfcc3j55ZcxZswYBAUFlfs+vPPOO5g3bx6WLVuGMWPGAAC++eYbTJo0CUOGDMHkyZNRUFCAU6dOITo6Gs8///w939P7qcg2kpSUhLZt2yIzMxNjx45F48aNcePGDfzyyy/Iy8uT/tLXaDTYsWMH5s2bp/caGRkZeOKJJzBo0CA888wz+OWXXzB9+nSEhoaid+/eACr+eZZas2YNioqKMHHiRKSnp2PBggV45pln0KNHD/z999+YPn06Ll68iMWLF+P111/H999/X+H35OWXX0ZSUhKioqKwevVqvWVCCDz55JPYvXs3Ro0ahRYtWmDbtm144403cOPGDXz22WeVfn/LExUVheeeew49e/bERx99BACIi4vDgQMHMHnyZHTp0gWTJk3CokWL8NZbbyE4OBgApH/vFBwcjPfeew8zZ87E2LFj0blzZwBAhw4dpNfq168ffH19MXnyZPj4+CAuLg6bNm3C5MmTpefRarWIiIhAu3bt8Mknn2DHjh349NNPUb9+fbz66qsIDg7G6tWr8dprr6F27dqYNm0aAMDT07PMD6uXlxeWLFmCp59+GosXL8akSZOg0+kwYsQIODs74+uvv9brv23bNshkMvTq1Uuvfe3atcjOzsbLL78MmUyGBQsWYNCgQbh8+TJsbGyk/C5fvoyRI0fCx8cHsbGxWL58OWJjY/HPP/+UKeyfffZZBAcH48MPP8TmzZsxd+5cuLm5YdmyZejRowc++ugjrFmzBq+//jratGmDLl263PNzvNvq1asx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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df['to_sum'] = 1\n",
"df.set_index('starred_at').sort_index().cumsum()['to_sum'].plot(title=f\"unique across {','.join(repositories)}\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "75c01720",
"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>starred_at</th>\n",
" <th>to_sum</th>\n",
" </tr>\n",
" <tr>\n",
" <th>user</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0x26res</th>\n",
" <td>2023-07-26 08:58:25</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0x2b3bfa0</th>\n",
" <td>2023-03-08 10:26:13</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30lm32</th>\n",
" <td>2022-08-13 19:15:56</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3zbumban</th>\n",
" <td>2023-03-26 21:35:57</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>AAbedrabbo</th>\n",
" <td>2023-03-31 12:01:25</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>zkan</th>\n",
" <td>2021-10-19 05:45:01</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>zouhairm</th>\n",
" <td>2022-10-25 19:56:32</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>zpencerguy</th>\n",
" <td>2023-05-31 16:11:07</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>zroger49</th>\n",
" <td>2021-10-26 20:03:28</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>zz2115</th>\n",
" <td>2022-10-13 14:19:48</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>1510 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" starred_at to_sum\n",
"user \n",
"0x26res 2023-07-26 08:58:25 1\n",
"0x2b3bfa0 2023-03-08 10:26:13 1\n",
"30lm32 2022-08-13 19:15:56 1\n",
"3zbumban 2023-03-26 21:35:57 1\n",
"AAbedrabbo 2023-03-31 12:01:25 1\n",
"... ... ...\n",
"zkan 2021-10-19 05:45:01 1\n",
"zouhairm 2022-10-25 19:56:32 1\n",
"zpencerguy 2023-05-31 16:11:07 1\n",
"zroger49 2021-10-26 20:03:28 1\n",
"zz2115 2022-10-13 14:19:48 1\n",
"\n",
"[1510 rows x 2 columns]"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dde64d4b",
"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.9.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}