{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Python for STEM Teachers [Oregon Curriculum Network](http://4dsolutions.net/ocn/)\n",
"\n",
"\n",
"# BUILDING A PANDAS DATAFRAME\n",
"\n",
"Welcome everyone.\n",
"\n",
"In this very simple demo, I start with a listing of Polyhedrons with [volumes](https://codepen.io/pdx4d/pen/qjwORr) in increasing order."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"shapes = ['Tetrahedron', 'Cube', 'Octahedron', 'Rhombic Dodecahedron', 'Cuboctahedron']\n",
"table = pd.DataFrame([1,3,4,6,20], index = shapes)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 0 \n",
" \n",
" \n",
" \n",
" \n",
" Tetrahedron \n",
" 1 \n",
" \n",
" \n",
" Cube \n",
" 3 \n",
" \n",
" \n",
" Octahedron \n",
" 4 \n",
" \n",
" \n",
" Rhombic Dodecahedron \n",
" 6 \n",
" \n",
" \n",
" Cuboctahedron \n",
" 20 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 0\n",
"Tetrahedron 1\n",
"Cube 3\n",
"Octahedron 4\n",
"Rhombic Dodecahedron 6\n",
"Cuboctahedron 20"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Unlike a numpy array, which is of uniform data type (example: all floating point), a pandas Dataframe is expected to have labels for both columns and rows. The data columns themselves by be of varying type. A Dataframe consists as an arrangement, left to right, of instances of the [pandas Series type](https://www.tutorialspoint.com/python_pandas/python_pandas_series.htm), i.e. the columns."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"table.columns = [\"Volume\",] # relabel the one column"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Volume \n",
" \n",
" \n",
" \n",
" \n",
" Tetrahedron \n",
" 1 \n",
" \n",
" \n",
" Cube \n",
" 3 \n",
" \n",
" \n",
" Octahedron \n",
" 4 \n",
" \n",
" \n",
" Rhombic Dodecahedron \n",
" 6 \n",
" \n",
" \n",
" Cuboctahedron \n",
" 20 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Volume\n",
"Tetrahedron 1\n",
"Cube 3\n",
"Octahedron 4\n",
"Rhombic Dodecahedron 6\n",
"Cuboctahedron 20"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$\\phi = (1 + \\sqrt{5})/2$"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"phi = (1 + np.sqrt(5))/2 # a constant aka \"golden ratio\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now comes our common need to add another row to our table. \n",
"\n",
"However the Icosahedron's volume is smaller than the Cuboctahedron's. \n",
"\n",
"How shall we maintain Volume order?"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"table.loc[\"Icosahedron\",\"Volume\"] = 5 * np.sqrt(2) * phi ** 2\n",
"shapes.append(\"Icosahedron\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Volume \n",
" \n",
" \n",
" \n",
" \n",
" Tetrahedron \n",
" 1.000000 \n",
" \n",
" \n",
" Cube \n",
" 3.000000 \n",
" \n",
" \n",
" Octahedron \n",
" 4.000000 \n",
" \n",
" \n",
" Rhombic Dodecahedron \n",
" 6.000000 \n",
" \n",
" \n",
" Cuboctahedron \n",
" 20.000000 \n",
" \n",
" \n",
" Icosahedron \n",
" 18.512296 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Volume\n",
"Tetrahedron 1.000000\n",
"Cube 3.000000\n",
"Octahedron 4.000000\n",
"Rhombic Dodecahedron 6.000000\n",
"Cuboctahedron 20.000000\n",
"Icosahedron 18.512296"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"table"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lets add one of a few interesting RTs (RT = rhombic triacontahedron). The original Icosahedron, just added, has a dual with crossing edges that we'll also be adding. Together, the Icosahedron and its intersecting Dual, the Pentagonal Dodecahedron, define an RT of tetravolume "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"table.loc[\"RT5\",\"Volume\"] = 5\n",
"shapes.append(\"RT5\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"byvolume = table.sort_values(by=\"Volume\")"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Volume \n",
" \n",
" \n",
" \n",
" \n",
" Tetrahedron \n",
" 1.000000 \n",
" \n",
" \n",
" Cube \n",
" 3.000000 \n",
" \n",
" \n",
" Octahedron \n",
" 4.000000 \n",
" \n",
" \n",
" RT5 \n",
" 5.000000 \n",
" \n",
" \n",
" Rhombic Dodecahedron \n",
" 6.000000 \n",
" \n",
" \n",
" Icosahedron \n",
" 18.512296 \n",
" \n",
" \n",
" Cuboctahedron \n",
" 20.000000 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Volume\n",
"Tetrahedron 1.000000\n",
"Cube 3.000000\n",
"Octahedron 4.000000\n",
"RT5 5.000000\n",
"Rhombic Dodecahedron 6.000000\n",
"Icosahedron 18.512296\n",
"Cuboctahedron 20.000000"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"byvolume"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The concentric hierarchy icosahedron, obtained by jitterbugging the Cuboctahedron of volume 20, has a volume of:\n",
"\n",
"$$ 5 \\sqrt{2}\\phi^{2} $$"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"byvolume[\"Avols\"] = byvolume[\"Volume\"] * 24 # A = B = T = 1/24"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Volume \n",
" Avols \n",
" \n",
" \n",
" \n",
" \n",
" Tetrahedron \n",
" 1.000000 \n",
" 24.000000 \n",
" \n",
" \n",
" Cube \n",
" 3.000000 \n",
" 72.000000 \n",
" \n",
" \n",
" Octahedron \n",
" 4.000000 \n",
" 96.000000 \n",
" \n",
" \n",
" RT5 \n",
" 5.000000 \n",
" 120.000000 \n",
" \n",
" \n",
" Rhombic Dodecahedron \n",
" 6.000000 \n",
" 144.000000 \n",
" \n",
" \n",
" Icosahedron \n",
" 18.512296 \n",
" 444.295101 \n",
" \n",
" \n",
" Cuboctahedron \n",
" 20.000000 \n",
" 480.000000 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Volume Avols\n",
"Tetrahedron 1.000000 24.000000\n",
"Cube 3.000000 72.000000\n",
"Octahedron 4.000000 96.000000\n",
"RT5 5.000000 120.000000\n",
"Rhombic Dodecahedron 6.000000 144.000000\n",
"Icosahedron 18.512296 444.295101\n",
"Cuboctahedron 20.000000 480.000000"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"byvolume"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"15.350018208050784"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"penta_dodeca = 3 * np.sqrt(2) * (phi**2 + 1)\n",
"shapes.append(\"Pentagonal Dodeca\")\n",
"penta_dodeca"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"byvolume.loc[\"Pentagonal Dodeca\",\"Volume\"] = penta_dodeca\n",
"byvolume.loc[\"Pentagonal Dodeca\",\"Avols\"] = penta_dodeca * 24"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"SuperRT = 20 * np.sqrt(9/8) # S3"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"21.213203435596423"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"SuperRT"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"byvolume.loc[\"SuperRT\", \"Volume\"] = SuperRT\n",
"byvolume.loc[\"SuperRT\", \"Avols\"] = SuperRT *24\n",
"shapes.append(\"SuperRT\")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Volume \n",
" Avols \n",
" \n",
" \n",
" \n",
" \n",
" Tetrahedron \n",
" 1.000000 \n",
" 24.000000 \n",
" \n",
" \n",
" Cube \n",
" 3.000000 \n",
" 72.000000 \n",
" \n",
" \n",
" Octahedron \n",
" 4.000000 \n",
" 96.000000 \n",
" \n",
" \n",
" RT5 \n",
" 5.000000 \n",
" 120.000000 \n",
" \n",
" \n",
" Rhombic Dodecahedron \n",
" 6.000000 \n",
" 144.000000 \n",
" \n",
" \n",
" Icosahedron \n",
" 18.512296 \n",
" 444.295101 \n",
" \n",
" \n",
" Cuboctahedron \n",
" 20.000000 \n",
" 480.000000 \n",
" \n",
" \n",
" Pentagonal Dodeca \n",
" 15.350018 \n",
" 368.400437 \n",
" \n",
" \n",
" SuperRT \n",
" 21.213203 \n",
" 509.116882 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Volume Avols\n",
"Tetrahedron 1.000000 24.000000\n",
"Cube 3.000000 72.000000\n",
"Octahedron 4.000000 96.000000\n",
"RT5 5.000000 120.000000\n",
"Rhombic Dodecahedron 6.000000 144.000000\n",
"Icosahedron 18.512296 444.295101\n",
"Cuboctahedron 20.000000 480.000000\n",
"Pentagonal Dodeca 15.350018 368.400437\n",
"SuperRT 21.213203 509.116882"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"byvolume"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What other RTs might we want to add? The RT of exactly 5 tetravolumes is not the SuperRT scaled down by phi in its linear dimensions, (1/phi) to the 3rd power by volume. The latter has a volume of 5+ and a radius of 1 exactly, whereas the RT of 5 has a radius of 0.9994... that of the RT of 5+."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"byvolume.loc[\"RTe\", \"Volume\"] = byvolume.loc[\"SuperRT\",\"Volume\"] * phi**-3"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"byvolume.loc[\"RTe\", \"Avols\"] = byvolume.loc[\"RTe\", \"Volume\"] * 24"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"shapes.append(\"RTe\") # RT of 120 E modules"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"byvolume.sort_values(by=\"Volume\", inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"\n",
"3D Print Me!
"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Volume \n",
" Avols \n",
" \n",
" \n",
" \n",
" \n",
" Tetrahedron \n",
" 1.000000 \n",
" 24.000000 \n",
" \n",
" \n",
" Cube \n",
" 3.000000 \n",
" 72.000000 \n",
" \n",
" \n",
" Octahedron \n",
" 4.000000 \n",
" 96.000000 \n",
" \n",
" \n",
" RT5 \n",
" 5.000000 \n",
" 120.000000 \n",
" \n",
" \n",
" RTe \n",
" 5.007758 \n",
" 120.186193 \n",
" \n",
" \n",
" Rhombic Dodecahedron \n",
" 6.000000 \n",
" 144.000000 \n",
" \n",
" \n",
" Pentagonal Dodeca \n",
" 15.350018 \n",
" 368.400437 \n",
" \n",
" \n",
" Icosahedron \n",
" 18.512296 \n",
" 444.295101 \n",
" \n",
" \n",
" Cuboctahedron \n",
" 20.000000 \n",
" 480.000000 \n",
" \n",
" \n",
" SuperRT \n",
" 21.213203 \n",
" 509.116882 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Volume Avols\n",
"Tetrahedron 1.000000 24.000000\n",
"Cube 3.000000 72.000000\n",
"Octahedron 4.000000 96.000000\n",
"RT5 5.000000 120.000000\n",
"RTe 5.007758 120.186193\n",
"Rhombic Dodecahedron 6.000000 144.000000\n",
"Pentagonal Dodeca 15.350018 368.400437\n",
"Icosahedron 18.512296 444.295101\n",
"Cuboctahedron 20.000000 480.000000\n",
"SuperRT 21.213203 509.116882"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"byvolume"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"comments = pd.Series(index=shapes, dtype=str)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"comments.loc[\"Tetrahedron\"] = \"unit of volume, self dual\"\n",
"comments.loc[\"Cube\"] = \"intersected tetrahedron duals\"\n",
"comments.loc[\"Octahedron\"] = \"cube dual\"\n",
"comments.loc[\"Rhombic Dodecahedron\"] = \"space-filler, sphere container\"\n",
"comments.loc[\"Cuboctahedron\"] = \"RD's dual\"\n",
"comments.loc[\"Icosahedron\"] = \"Platonic, pent. dodeca's dual\"\n",
"comments.loc[\"RT5\"] = \"120 T modules, radius 0.9994\"\n",
"comments.loc[\"Pentagonal Dodeca\"] = \"Platonic, Icosa's dual\"\n",
"comments.loc[\"RTe\"] = \"120 E modules, radius 1.0000\"\n",
"comments.loc[\"SuperRT\"] = \"RTe scaled up to Phi radius\""
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(10,)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"comments.shape"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Tetrahedron unit of volume, self dual\n",
"Cube intersected tetrahedron duals\n",
"Octahedron cube dual\n",
"Rhombic Dodecahedron space-filler, sphere container\n",
"Cuboctahedron RD's dual\n",
"Icosahedron Platonic, pent. dodeca's dual\n",
"RT5 120 T modules, radius 0.9994\n",
"Pentagonal Dodeca Platonic, Icosa's dual\n",
"SuperRT RTe scaled up to Phi radius\n",
"RTe 120 E modules, radius 1.0000\n",
"dtype: object"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"comments"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"byvolume[\"Comments\"] = comments"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Volume \n",
" Avols \n",
" Comments \n",
" \n",
" \n",
" \n",
" \n",
" Tetrahedron \n",
" 1.000000 \n",
" 24.000000 \n",
" unit of volume, self dual \n",
" \n",
" \n",
" Cube \n",
" 3.000000 \n",
" 72.000000 \n",
" intersected tetrahedron duals \n",
" \n",
" \n",
" Octahedron \n",
" 4.000000 \n",
" 96.000000 \n",
" cube dual \n",
" \n",
" \n",
" RT5 \n",
" 5.000000 \n",
" 120.000000 \n",
" 120 T modules, radius 0.9994 \n",
" \n",
" \n",
" RTe \n",
" 5.007758 \n",
" 120.186193 \n",
" 120 E modules, radius 1.0000 \n",
" \n",
" \n",
" Rhombic Dodecahedron \n",
" 6.000000 \n",
" 144.000000 \n",
" space-filler, sphere container \n",
" \n",
" \n",
" Pentagonal Dodeca \n",
" 15.350018 \n",
" 368.400437 \n",
" Platonic, Icosa's dual \n",
" \n",
" \n",
" Icosahedron \n",
" 18.512296 \n",
" 444.295101 \n",
" Platonic, pent. dodeca's dual \n",
" \n",
" \n",
" Cuboctahedron \n",
" 20.000000 \n",
" 480.000000 \n",
" RD's dual \n",
" \n",
" \n",
" SuperRT \n",
" 21.213203 \n",
" 509.116882 \n",
" RTe scaled up to Phi radius \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Volume Avols Comments\n",
"Tetrahedron 1.000000 24.000000 unit of volume, self dual\n",
"Cube 3.000000 72.000000 intersected tetrahedron duals\n",
"Octahedron 4.000000 96.000000 cube dual\n",
"RT5 5.000000 120.000000 120 T modules, radius 0.9994\n",
"RTe 5.007758 120.186193 120 E modules, radius 1.0000\n",
"Rhombic Dodecahedron 6.000000 144.000000 space-filler, sphere container\n",
"Pentagonal Dodeca 15.350018 368.400437 Platonic, Icosa's dual\n",
"Icosahedron 18.512296 444.295101 Platonic, pent. dodeca's dual\n",
"Cuboctahedron 20.000000 480.000000 RD's dual\n",
"SuperRT 21.213203 509.116882 RTe scaled up to Phi radius"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"byvolume"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/jpeg": "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c4Ui17wqqLhOMS6462ePESuekNKm9KpLJroU6UeHWP1WXl9zhIK+J/mlo9c/3io/Ma/rqnvFYeZ9scFss/R8SviI0raPXP4qDpS0euf7xQfdEXwk6Rrn+dU99yfmFf11X33eaD7jXoXwMS0gyC2JBiNveq40YwHpOuwRdkQZbdJymYXxb8wr+uq++7zUt0laB/Oqe85KWMph9rZZS00zeLgy8OdEwR2RuWLrDzKoDiXVMy6O7YAviw0naJnXVPeKz/N7T65/FKXdL7c2iBUc+TJAEYRhPmti+GjS9pH85/FSdM2k5138UZfcUXw785tPrn8U/ObT65/FB9xRfDvzm1evfxUjTVqx/bvx7UH3BF8LfpS0HOtU94hY/mFf11X33eaD7si+FDSdo9dU94qDpGv66r77vNB92RfCfzCv66r77vNS3SVcfzqnvFB91RfDm6ZtIECs/ioOl7Sf5z+KD7ki+FHSVoP86p77lH5hX9dV993mg+7IvhP5jXy11X33KRpKuP51T33IPuqL4WdKWg/zqnvFDpO0RGuqe8UH3RF8J/Ma/rqvvuWX5naPXVPeKD7oi+GDSto9dU94oNK2j11T3ig+5ovhR0laPXVPfcg0naPX1Pfcg+6ovhX5naPXVPeKj8wr+uq++7zQfdkXwn8wr+uq++7zT8wr+uq++7zQfdkXwn8xr+uq++5S3SdoH86p7xKD7qi+GDS1pH86p7xUjS9p9c/ig+hf4k/u1D+t/Y5fO3OhY19IVqgAqVHOAMid60F5K6Y5xEU1GVQzc+VgVEqJSc7ZSt1m6V7qgn4LQsmvIBAOYgqbiOJQihJTcNtKoWGWmFutdZzsCcM4CqSpLiVd8VSUmUWMqZTeqUUSkpuhEqSsZSVd8UIREXJRERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQf//Z\n",
"text/html": [
"\n",
" VIDEO \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import YouTubeVideo\n",
"YouTubeVideo(\"RGH8m0LdaTM\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"My video narrative could be a little more clear on how we're inserting rows in the same way we insert columns, but with ```.loc``` for adding the new labeling. In general, consider embedding videos in your Notebooks if you think these could be helpful to those making use of it down the road.\n",
"\n",
"Want to see the embedded Youtube?\n",
"\n",
"Here's [the NBVIEWER view](http://nbviewer.jupyter.org/github/4dsolutions/Python5/blob/master/Polyvolumes.ipynb)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 4
}