{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2.2 Integration with pandas DataFrames"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import signac\n",
"\n",
"project = signac.init_project(\"projects/dataframe-example\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We create a project with some sample data."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"funcs = {\n",
" \"abs\": abs,\n",
" \"square\": lambda x: x**2,\n",
"}\n",
"\n",
"for x in range(-5, 6):\n",
" job = project.open_job({\"x\": x})\n",
" for name, func in funcs.items():\n",
" job.document[name] = func(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's first create a basic DataFrame from our project:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" sp.x | \n",
" doc.abs | \n",
" doc.square | \n",
"
\n",
" \n",
" \n",
" \n",
" | 3c5a15f6f26125f2902f38ff28a94072 | \n",
" -5 | \n",
" 5 | \n",
" 25 | \n",
"
\n",
" \n",
" | 22749661e1ac649551a29953c93c9e92 | \n",
" -4 | \n",
" 4 | \n",
" 16 | \n",
"
\n",
" \n",
" | 9e892a750ef4bf5ca73069c249088d40 | \n",
" -3 | \n",
" 3 | \n",
" 9 | \n",
"
\n",
" \n",
" | 46049d7a2b36731d20af67766aadfeea | \n",
" -2 | \n",
" 2 | \n",
" 4 | \n",
"
\n",
" \n",
" | c887a273c9a550e883f09187b0e28eb7 | \n",
" -1 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" | eff8ca15e7ca8ae5c09f011f997b34df | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" | 27958648a9e57fcd66ae5e31ff3359e9 | \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" | 46c24d61c4220f8b62d2ae73d686ec18 | \n",
" 2 | \n",
" 2 | \n",
" 4 | \n",
"
\n",
" \n",
" | d832cd5075866a4973a78377f49f58a5 | \n",
" 3 | \n",
" 3 | \n",
" 9 | \n",
"
\n",
" \n",
" | 9cdfeafe274b4f1762f0bf885ca055b7 | \n",
" 4 | \n",
" 4 | \n",
" 16 | \n",
"
\n",
" \n",
" | 7e1046a94a75679fe7ac259e068afdb5 | \n",
" 5 | \n",
" 5 | \n",
" 25 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" sp.x doc.abs doc.square\n",
"3c5a15f6f26125f2902f38ff28a94072 -5 5 25\n",
"22749661e1ac649551a29953c93c9e92 -4 4 16\n",
"9e892a750ef4bf5ca73069c249088d40 -3 3 9\n",
"46049d7a2b36731d20af67766aadfeea -2 2 4\n",
"c887a273c9a550e883f09187b0e28eb7 -1 1 1\n",
"eff8ca15e7ca8ae5c09f011f997b34df 0 0 0\n",
"27958648a9e57fcd66ae5e31ff3359e9 1 1 1\n",
"46c24d61c4220f8b62d2ae73d686ec18 2 2 4\n",
"d832cd5075866a4973a78377f49f58a5 3 3 9\n",
"9cdfeafe274b4f1762f0bf885ca055b7 4 4 16\n",
"7e1046a94a75679fe7ac259e068afdb5 5 5 25"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = project.to_dataframe()\n",
"df = df.sort_values(\"sp.x\")\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can select specific data subsets, for example jobs with $x=2$ or $x^2 > 10$:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" sp.x | \n",
" doc.abs | \n",
" doc.square | \n",
"
\n",
" \n",
" \n",
" \n",
" | 3c5a15f6f26125f2902f38ff28a94072 | \n",
" -5 | \n",
" 5 | \n",
" 25 | \n",
"
\n",
" \n",
" | 22749661e1ac649551a29953c93c9e92 | \n",
" -4 | \n",
" 4 | \n",
" 16 | \n",
"
\n",
" \n",
" | 46c24d61c4220f8b62d2ae73d686ec18 | \n",
" 2 | \n",
" 2 | \n",
" 4 | \n",
"
\n",
" \n",
" | 9cdfeafe274b4f1762f0bf885ca055b7 | \n",
" 4 | \n",
" 4 | \n",
" 16 | \n",
"
\n",
" \n",
" | 7e1046a94a75679fe7ac259e068afdb5 | \n",
" 5 | \n",
" 5 | \n",
" 25 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" sp.x doc.abs doc.square\n",
"3c5a15f6f26125f2902f38ff28a94072 -5 5 25\n",
"22749661e1ac649551a29953c93c9e92 -4 4 16\n",
"46c24d61c4220f8b62d2ae73d686ec18 2 2 4\n",
"9cdfeafe274b4f1762f0bf885ca055b7 4 4 16\n",
"7e1046a94a75679fe7ac259e068afdb5 5 5 25"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[(df[\"sp.x\"] == 2) | (df[\"doc.square\"] > 10)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can plot a graph from our pretend data using matplotlib:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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e/1acth5EQ19eI9TEakbVe2lPHIkdPbs2YSFhTFx4sSTXn/LLbcwefJkfv75ZwYNGmQpnYjI6bVo37X09KXHyUxPY/PyuRQnzCcmfTmNS08d6lS0HfZth33/Inl2BLsjhhDU5XI6D7yS4JBQdm5aQcqaueWnPUWWffDS0c5Clz/bSk97annBeNrEdKN6Y6siIrXLI5vQzZs3ExcXR0DAyfF79OhR/nY1oSLizho0iqDPZbfAZbdQXFREwrrFHFv/Zfn56wBO0nCmfQE/fUHe0kBSHaHEcJyYUz7WMRqS2Ggg/rGXETPwKrqFN6nzz0dEpKo8sglNTU2lffv2lV4fERFR/vazSU5OJiUl5aTXJSYm1lxAEZEq8A8IILb/aOg/GoAj+3awd8XnBO/+ntjc9QQ5Cgl2FBLM8fL32e3XliPNhtO411g69h5O/wCP/HEuIj7MY39qORyOar0NYObMmUybNq2mI4mI1IimrTvStPXDwMPkZKWzfsVXFMR/TUB+OoWth9B6wHjatelcsfBIRMQDeWQT2qRJk9OOdqalpQEVI6Jncuedd1a6nzQxMZHx48fXWEYRkZpQP6wRvS6eDBdr1w8R8S4e2YR2796dWbNmUVRUdNJ9oZs2bQKgW7duZ31/p9OJ0+ms1YwiIiIicmYeuTPx1VdfTVZWFp999tlJr//3v/9N8+bNufDCCy0lExEREZFz4ZEjoZdddhkXX3wxd9xxBxkZGcTExDBr1izmz5/Pe++9V+U9QkVERESkbnlkEwrw+eef89hjj/Hkk0+WH9s5a9YsHdspIiIi4gE8tgkNCwtjxowZzJgxw3YUEREREakij7wnVEREREQ8m5pQEREREalzakJFREREpM6pCRURERGROqcmVERERETqnJpQEREREalzakJFREREpM6pCRURERGROqcmVERERETqnJpQEREREalzakJFREREpM6pCRURERGROhdgO4C7yM/PByAxMdFyEhERERHPU9ZDlfVUv0ZNaKn9+/cDMH78eLtBRERERDzY/v376dOnz69e53C5XK46yOP2jh8/zpIlS2jVqhVBQUG243ikxMRExo8fz5w5c4iJibEdR36Fvl6eRV8vz6Kvl+fR1+z85efns3//fi666CLCw8N/9XqNhJYKDw9n3LhxtmN4hZiYGLp27Wo7hpwjfb08i75enkVfL8+jr9n5OZcR0DJamCQiIiIidU5NqIiIiIjUOTWhIiIiIlLn1IRKjYmKiuJPf/oTUVFRtqPIOdDXy7Po6+VZ9PXyPPqa1T2tjhcRERGROqeRUBERERGpc2pCRURERKTOqQkVERERkTqnJlRERERE6pyaUKkTb775Jg6Hg7CwMNtR5DQWLVrElClTiI2NJTQ0lBYtWjBu3DjWrFljO5rPy8rK4v7776d58+YEBwfTq1cvPvzwQ9ux5DT0feT59Luqbml1vNS6gwcP0rVrV0JDQ0lPTycrK8t2JDnFxIkTSU1NZeLEiXTp0oWUlBSmT5/O6tWr+fbbbxk5cqTtiD7rkksuYdWqVTz//PN06tSJDz74gDfffJP333+fyZMn244nJ9D3kWfT76q6pyZUat3YsWNxOBxERETw6aef6hvbDSUnJ+N0Ok96XVZWFjExMXTr1o0FCxZYSubbvv76a6644go++OADbrjhhvLXX3LJJWzZsoV9+/bh7+9vMaGcSN9Hnk2/q+qepuOlVr333nssWbKEmTNn2o4iZ3HqL06AsLAwunTpwv79+y0kEoDZs2cTFhbGxIkTT3r9LbfcwqFDh/j5558tJZPT0feR59LvKjvUhEqtSU5O5v777+f555+nZcuWtuNIFaWnp7N27Vq6du1qO4rP2rx5M3FxcQQEBJz0+h49epS/Xdybvo/cn35X2aMmVGrNnXfeSefOnbnjjjtsR5FquOuuu8jOzuaxxx6zHcVnpaamEhERUen1Za9LTU2t60hSRfo+cn/6XWWPmlD5VYsXL8bhcJzTy/r16wH47LPP+PLLL3njjTdwOBx2PwEfU52v16meeOIJ3n//fV566SX69u1bt5+AnORs3z/63nJv+j5yf/pdZVfAr18ivq5z58688cYb53Rt69atycrK4q677uKee+6hefPmHD9+HICCggIAjh8/TmBgIKGhobUV2adV9et1qmnTpvH000/zzDPPcPfdd9d0PKmCJk2anHa0My0tDeC0o6TiHvR95P70u8oNuERq2O7du13AWV/GjRtnO6acxtSpU12Aa+rUqbajiMvluv32211hYWGuwsLCk14/a9YsF+BatmyZpWRyNvo+8gz6XWWftmiSGpeXl8fKlSsrvf75559nyZIlfPPNN0RGRtKtWzcL6eRMnnrqKZ588kkef/xxnnrqKdtxBPjmm2+4/PLL+fDDD7n++uvLX3/ZZZexceNGbdHkhvR95Dn0u8o+NaFSZ26++Wbtveampk+fzkMPPcSYMWP405/+VOntAwYMsJBKwOwJunr1al544QViYmKYNWsWb7zxBu+99x433nij7XhyAn0feQf9rqo7uidURPjyyy8BmD9/PvPnz6/0dj1Xtefzzz/nscce48knnyQtLY3Y2FhmzZrFpEmTbEeTU+j7SKRqNBIqIiIiInVOWzSJiIiISJ1TEyoiIiIidU5NqIiIiIjUOTWhIiIiIlLn1ISKiIiISJ1TEyoiIiIidU5NqIiIiIjUOTWhIiIiIlLn1ISKiIiISJ1TEyoiIiIidU5NqIiIiIjUOTWhIiIiIlLn1ISKiLipvLw8evfuTUxMDOnp6eWvP3LkCE2bNmX48OEUFxdbTCgiUn1qQkVE3FRwcDAff/wxycnJTJkyBYCSkhJuvPFGXC4Xs2bNwt/f33JKEZHqCbAdQEREzqxjx468+eabXH/99cyYMYO0tDQWL17M/Pnzadasme14IiLV5nC5XC7bIURE5OzuvPNO3nzzTYqLi3n00Ud56qmnbEcSETkvakJFRDzA6tWr6d+/P/Xq1ePAgQNERUXZjiQicl7UhIqIuLns7Gz69etHSUkJSUlJXHTRRcydO9d2LBGR86KFSSIibu7//u//2LdvH59//jlvvfUWX3zxBS+99JLtWCIi50VNqIiIG3vzzTd57733ePXVV+natSvXXHMNd999Nw8//DC//PKL7XgiItWm6XgRETe1adMmLrzwQq677jrefffd8tfn5+czePBgUlNTWbduHeHh4dYyiohUl5pQEREREalzmo4XERERkTqnJlRERERE6pyaUBERERGpc2pCRURERKTOqQkVERERkTqnJlRERERE6pyaUBERERGpc2pCRURERKTOqQkVERERkTqnJlRERERE6pyaUBERERGpc2pCRURERKTOqQkVERERkTr3/wFcxHHOUPsZGQAAAABJRU5ErkJggg==",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(dpi=120)\n",
"df.plot(\"sp.x\", \"doc.abs\", ax=ax, label=\"$f(x)=|x|$\")\n",
"df.plot(\"sp.x\", \"doc.square\", ax=ax, label=\"$f(x)=x^2$\")\n",
"ax.set_xlabel(\"x\")\n",
"ax.set_ylabel(\"f(x)\")\n",
"plt.show()"
]
}
],
"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.12.0"
}
},
"nbformat": 4,
"nbformat_minor": 4
}