{ "cells": [ { "cell_type": "markdown", "id": "3086278c", "metadata": {}, "source": [ "[Home](Home.ipynb)\n", "\n", "# Tabular Python (numpy + pandas)\n", "\n", "Although numpy's n-dimensional arrays may have as many axes as we like, we're typically working with rows and columns, like a spreadsheet. We call this a two dimensional array.\n", "\n", "Numpy does the number crunching with respect to these arrays. Pandas provides a DataFrame much like a picture frame around a canvas. You get to label and reorder rows and columns, will mixing columns (called Series type objects) of different types." ] }, { "cell_type": "code", "execution_count": 4, "id": "98053d4d", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 20, "id": "d6e81f25", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'numpy ver: 1.17.3; pandas ver: 1.2.3'" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"numpy ver: {}; pandas ver: {}\".format(np.__version__, pd.__version__)" ] }, { "cell_type": "markdown", "id": "567d1d32", "metadata": {}, "source": [ "Python's native range type is all fine and good when you want consecutive integers. Thanks to list comprehension syntax, defining floating point inputs at some constant interval is likewise doable." ] }, { "cell_type": "code", "execution_count": 3, "id": "37e0b024", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[i/10 for i in range(1, 11)] # range has no native floating point ability" ] }, { "cell_type": "markdown", "id": "cbc8af22", "metadata": {}, "source": [ "However, numpy introduces two new domain-makers that make life easier yet, in that both return np.ndarray type objects, equipped with all manner of methods.\n", "\n", "```arange``` gets a start and up-to-but-not-including argument, followed by the discrete interval between adjacent values. " ] }, { "cell_type": "code", "execution_count": 4, "id": "d4199b3e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.arange(0.1, 1.1, 0.1) # start, up to, interval" ] }, { "cell_type": "markdown", "id": "03b1cb3a", "metadata": {}, "source": [ "```linspace``` is similar, but a third argument specifies how many points should appear between start and stop values. The stop value is inclusive in this case." ] }, { "cell_type": "code", "execution_count": 5, "id": "dafab421", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0.1, 1.0, 10) # start, stop, how many" ] }, { "cell_type": "markdown", "id": "1e9cb2b0", "metadata": {}, "source": [ "### Parabolas\n", "\n", "The cells below may be used as a worksheet. Try different polynomials with varied domains, tabulating and plotting the results." ] }, { "cell_type": "code", "execution_count": 21, "id": "c6561651", "metadata": {}, "outputs": [], "source": [ "x = np.arange(-3, 3.1, 0.1)" ] }, { "cell_type": "code", "execution_count": 22, "id": "e46c5b58", "metadata": {}, "outputs": [], "source": [ "y = x**2 - 1" ] }, { "cell_type": "markdown", "id": "8c6d8cbc", "metadata": {}, "source": [ "A DataFrame may be initialized in several ways, the most straightforward being a shown below, with a dict. The dict keys are column headers, whereas the values should be numpy arrays with the corresponding column data." ] }, { "cell_type": "code", "execution_count": 23, "id": "166c1b40", "metadata": {}, "outputs": [], "source": [ "points = pd.DataFrame({\"X\":x, \"Y\":y})" ] }, { "cell_type": "markdown", "id": "1a5051a1", "metadata": {}, "source": [ "Notice how pretty the formatting, with middle rows left out." ] }, { "cell_type": "code", "execution_count": 24, "id": "9a68fccb", "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", "
XY
0-3.08.00
1-2.97.41
2-2.86.84
3-2.76.29
4-2.65.76
.........
562.65.76
572.76.29
582.86.84
592.97.41
603.08.00
\n", "

61 rows × 2 columns

\n", "
" ], "text/plain": [ " X Y\n", "0 -3.0 8.00\n", "1 -2.9 7.41\n", "2 -2.8 6.84\n", "3 -2.7 6.29\n", "4 -2.6 5.76\n", ".. ... ...\n", "56 2.6 5.76\n", "57 2.7 6.29\n", "58 2.8 6.84\n", "59 2.9 7.41\n", "60 3.0 8.00\n", "\n", "[61 rows x 2 columns]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "points" ] }, { "cell_type": "code", "execution_count": 27, "id": "81f3f8a1", "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", "
XY
512.13.41
522.23.84
532.34.29
542.44.76
552.55.25
562.65.76
572.76.29
582.86.84
592.97.41
603.08.00
\n", "
" ], "text/plain": [ " X Y\n", "51 2.1 3.41\n", "52 2.2 3.84\n", "53 2.3 4.29\n", "54 2.4 4.76\n", "55 2.5 5.25\n", "56 2.6 5.76\n", "57 2.7 6.29\n", "58 2.8 6.84\n", "59 2.9 7.41\n", "60 3.0 8.00" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "points.tail(10)" ] }, { "cell_type": "markdown", "id": "735bdf7a", "metadata": {}, "source": [ "Once we have a DataFrame, we may invoke its plot method directly, with axis labels and title for named arguments." ] }, { "cell_type": "code", "execution_count": 11, "id": "4e650f34", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "points.plot(x=\"x\", y=\"y\", title=\"Parabola\");" ] }, { "cell_type": "markdown", "id": "f67e8060", "metadata": {}, "source": [ "# pandas & SQL\n", "\n", "Where else have we seen tabular data? In spreadsheets, certainly. And in SQL databases, where we have CRUD powers (Create, Retrieve, Update, Delete). We want all these powers, and many more, over our DataFrames as well.\n", "\n", "Remember [our context manager studies](DatabaseFun.ipynb)? That's where [context1](context1.py) gets more context." ] }, { "cell_type": "code", "execution_count": 2, "id": "798013e9", "metadata": {}, "outputs": [], "source": [ "from context1 import DB" ] }, { "cell_type": "code", "execution_count": 7, "id": "fbde4a7f", "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", "
NameParkState
0Superman The EscapeSix Flags Magic MountainCalifornia
1GoliathSix Flags Magic MountainCalifornia
2XceleratorKnott's Berry FarmCalifornia
3Tower of TerrorDreamworldCoomera
4FujiyamaFuji-Q HighlandsFujiYoshida-shi
5Steel Dragon 2000Nagashima Spa LandNagashima
6DesperadoBuffalo Bill's Resort & CasinoNevada
7NitroSix Flags Great AdventureNew Jersey
8Top Thrill DragsterCedar PointOhio
9Millennium ForceCedar PointOhio
10Phantom's RevengeKennywood ParkPennsylvania
11Thunder DolphinLaQuaTokyo
12HyperSonic XLCParamount's Kings DominionVirginia
\n", "
" ], "text/plain": [ " Name Park State\n", "0 Superman The Escape Six Flags Magic Mountain California\n", "1 Goliath Six Flags Magic Mountain California\n", "2 Xcelerator Knott's Berry Farm California\n", "3 Tower of Terror Dreamworld Coomera\n", "4 Fujiyama Fuji-Q Highlands FujiYoshida-shi\n", "5 Steel Dragon 2000 Nagashima Spa Land Nagashima\n", "6 Desperado Buffalo Bill's Resort & Casino Nevada\n", "7 Nitro Six Flags Great Adventure New Jersey\n", "8 Top Thrill Dragster Cedar Point Ohio\n", "9 Millennium Force Cedar Point Ohio\n", "10 Phantom's Revenge Kennywood Park Pennsylvania\n", "11 Thunder Dolphin LaQua Tokyo\n", "12 HyperSonic XLC Paramount's Kings Dominion Virginia" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with DB(\"roller_coasters.db\") as db:\n", " sql_query = pd.read_sql_query(\"SELECT Name, Park, State FROM Coasters WHERE speed >= 80 ORDER BY State\", db.conn)\n", " coasters = pd.DataFrame(sql_query)\n", " \n", "coasters.head(20)" ] }, { "cell_type": "code", "execution_count": 17, "id": "6d2ae092", "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", "
iataisonamecontinenttypelatlonsizestatus
0UTKMHUtirik AirportOCairport11.233333169.86667small1
1FIVUSFive Finger CG HeliportNAheliportNaNNaNNone1
2FAKUSFalse Island Seaplane BaseNAseaplanesNaNNaNNone1
3BWSUSBlaine Municipal AirportNAclosedNaNNaNNone0
4WKKUSAleknagik / New AirportNAairport59.277780-158.61111medium1
\n", "
" ], "text/plain": [ " iata iso name continent type lat \\\n", "0 UTK MH Utirik Airport OC airport 11.233333 \n", "1 FIV US Five Finger CG Heliport NA heliport NaN \n", "2 FAK US False Island Seaplane Base NA seaplanes NaN \n", "3 BWS US Blaine Municipal Airport NA closed NaN \n", "4 WKK US Aleknagik / New Airport NA airport 59.277780 \n", "\n", " lon size status \n", "0 169.86667 small 1 \n", "1 NaN None 1 \n", "2 NaN None 1 \n", "3 NaN None 0 \n", "4 -158.61111 medium 1 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with DB(\"airports.db\") as db:\n", " sql_query = pd.read_sql_query(\"SELECT * FROM Airports\", db.conn)\n", " airports = pd.DataFrame(sql_query)\n", " \n", "airports.head()" ] }, { "cell_type": "markdown", "id": "fca2ed94", "metadata": {}, "source": [ "For further reading:\n", "\n", "* [Help with DELETE on Quora](https://qr.ae/pGNaYy)" ] } ], "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.9" } }, "nbformat": 4, "nbformat_minor": 5 }