{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# JNB LAB: After-School Program Demo"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
":::{note}\n",
"One way to wrap-up an after-school program is to have the students do a combined presentation showing several things they learned throughout the program. It is a good idea to practice the presentations at least once or twice in advance.\n",
":::"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Today our class will demonstrate several things which can be done with Jupyter Notebooks.\n",
"\n",
"First we load standard libraries for analyzing and plotting data.\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np \n",
"import pandas as pd \n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```{index} City of Chicago budget\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DEMO 1: City of Chicago Budget\n",
"We will make a piechart of the City of Chicago budget."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1) First let's look at the 2022 City of Chicago revenue details."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2) Next let's read an Excel sheet with the summary of the 2023 budget."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
EXPENSE
\n",
"
2023 BUDGET
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
Finance and Administration
\n",
"
688251735
\n",
"
\n",
"
\n",
"
1
\n",
"
Infrastructure
\n",
"
1544641397
\n",
"
\n",
"
\n",
"
2
\n",
"
Public Safety
\n",
"
2711251614
\n",
"
\n",
"
\n",
"
3
\n",
"
Community Services
\n",
"
293957760
\n",
"
\n",
"
\n",
"
4
\n",
"
City Development
\n",
"
174766005
\n",
"
\n",
"
\n",
"
5
\n",
"
Regulatory
\n",
"
74509317
\n",
"
\n",
"
\n",
"
6
\n",
"
Legislative and Elections
\n",
"
92114035
\n",
"
\n",
"
\n",
"
7
\n",
"
General Financing
\n",
"
7761542137
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" EXPENSE 2023 BUDGET\n",
"0 Finance and Administration 688251735\n",
"1 Infrastructure 1544641397\n",
"2 Public Safety 2711251614\n",
"3 Community Services 293957760\n",
"4 City Development 174766005\n",
"5 Regulatory 74509317\n",
"6 Legislative and Elections 92114035\n",
"7 General Financing 7761542137"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"budget=pd.read_excel('ChicagoBudget.xlsx')\n",
"budget"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3) A pie chart will show us the proportions."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(3,3)) #you can adjust the figsize (5,5)=(length,width)\n",
"plt.rcParams['font.size'] = 3 #fontsize\n",
"budget_items = budget[\"EXPENSE\"] #categories\n",
"budget_amounts = budget[\"2023 BUDGET\"] #amounts\n",
"total=sum(budget_amounts)\n",
"ax=plt.pie(budget_amounts,labels=budget_items,autopct=lambda p: '${:.0f}'.format(p * total / 100)) #make pie chart autopct='%1.0f%%'\n",
"plt.gca().set_title('Budget Breakdown $'+str(total)+' (13+ billion) in Expenses',size=5) #add a title\n",
"fig.savefig('Budget.png') #save the piechart to a file Budget.png"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
":::{admonition} Exercise\n",
"\n",
"Enlarge the size of the piechart so it is easier to read. Make sure you enlarge the fontsize as well as the chart size.\n",
":::"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```{index} pixel images\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Demo 2 Pixel Images\n",
"We can increase the resolution of images by increasing the number of pixels."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"# PACKAGE: DO NOT EDIT THIS CELL\n",
"%matplotlib inline\n",
"from ipywidgets import interact\n",
"import cv2, os"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"def makepixelimage(folder, N):\n",
"\n",
" directory = folder\n",
"\n",
" # A data structure called a dictionary is used to store the image data and the dataframes we'll make from them.\n",
" imgs = {}\n",
" dfs = {}\n",
"\n",
" # Specify the pixel image size \n",
" dsize = (N, N)\n",
"\n",
" # This will iterate over every image in the directory given, read it into data, and create a \n",
" # dataframe for it. Both the image data and its corresponding dataframe are stored.\n",
" # Note that when being read into data, we interpret the image as grayscale. \n",
" pos = 0\n",
" for filename in os.listdir(directory):\n",
" f = os.path.join(directory, filename)\n",
" # checking if it is a file\n",
" if os.path.isfile(f):\n",
" imgs[pos] = cv2.imread(f, 0) # image data\n",
" imgs[pos] = cv2.resize(imgs[pos], dsize)\n",
" dfs[pos] = pd.DataFrame(imgs[pos]) # dataframe\n",
" pos += 1\n",
" return plt.imshow(imgs[0], cmap=\"gray\")\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZEAAAGTCAYAAADp6S9cAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAN7UlEQVR4nO3dz4vUdeDH8feuGx9b0ukSkjUiFEIQRGgEBl2qP6Ag6da1oCgvwZw6dNhTYBkIHYKOJd06BJ26bNRCP6yIIpIaWwLTbcY0P667+718W76ybs28vjN+ZurxgM9heQ+zL3TtyWfGnJmNjY2NAgCB2aYHADC9RASAmIgAEBMRAGIiAkBMRACIiQgAMREBIDY3jiddX18vy8vLZdeuXWVmZmYc3wKAMdrY2CgXLlwoe/fuLbOz299vjCUiy8vLpd1uj+OpAbiBut1uufPOO7c9H0tEdu3aVUop5ZlnnilVVY3jW4zNzTff3PSEyI4dO5qeEKvruukJkatXrzY9ITI3N5Y/9vyNafzzWdd1OXbs2OZ/z7czlp+mv17Cqqpq6iKyc+fOpidEpvGHdNpN66+5iNx40/qzUkr5x7ckvLEOQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIiQgAsYE/bPmdd94ply9fLg899FC5++67rzmr67rUdb35db/fH91CACbWwHciFy9eLEeOHClLS0tbzhYWFkqr1dq82u32SEcCMJkGjsj8/Hx59913y6FDh7acdTqd0uv1Nq9utzvSkQBMpoFfznrqqae2PauqqlRVNZJBAEwPb6wDEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJAbODPWP+v+PPPP5ueEJmbm97fyvX19aYnRH788cemJ0See+65pidEzp492/SE2Mcff9z0hKHVdT3Q49yJABATEQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgNnBEFhcXy7Fjx657Vtd16ff711wA/PsNHJHDhw+XW2655bpnCwsLpdVqbV7tdntkAwGYXANH5Ntvvy2nTp267l1Gp9MpvV5v8+p2uyMdCcBkmhv0gffcc095/fXXr3tWVVWpqmpkowCYDt5YByAmIgDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgNjAn7Ge2NjYKBsbG+P8FiO3Y8eOpidE1tfXm54QW1tba3pCZGlpqekJkYcffrjpCZHXXnut6QmxDz74oOkJQxv0z6U7EQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxOYGfeDi4mL57LPPyuOPP17uuOOOa87qui51XW9+3e/3R7cQgIk18J3I4cOHy8zMTGm1WlvOFhYWSqvV2rza7fZIRwIwmQaOyPHjx0sppayurm4563Q6pdfrbV7dbnd0CwGYWAO/nPX8889ve1ZVVamqaiSDAJge3lgHICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEJsb65PPzZW5ubF+C/4F3nrrraYnRL766qumJ0SeffbZpidEVlZWmp4Qu/nmm5ueMLS1tbWBHudOBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIzQ36wK+//rosLi6WBx98sNx3333XnNV1Xeq63vy63++PbiEAE2vgO5EDBw6UlZWVMj8/v+VsYWGhtFqtzavdbo90JACTaeCIfPPNN2XPnj3l/PnzW846nU7p9XqbV7fbHelIACbTwC9n3X///eX++++/7llVVaWqqpGNAmA6eGMdgJiIABATEQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQGxunE++trZW1tbWxvkt+F87duxoekLst99+a3pC5Pvvv296QuSFF15oekJkcXGx6Qmx7777rukJQ6vrunz++ef/+Dh3IgDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJAbKiIPPnkk+Xq1avj2gLAlJkb9IEffvhhOXjw4HXP6roudV1vft3v9///ywCYeAPfiZw7d66cPXu2/PTTT1vOFhYWSqvV2rza7fZIRwIwmQaOyFNPPVVeffXVctddd20563Q6pdfrbV7dbnekIwGYTAO/nPV3qqoqVVWN4qkAmCL+dhYAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJATEQAiIkIADERASAmIgDERvIZ69uZxs9eX19fb3pC5Jlnnml6QuzZZ59tekLko48+anpC5NSpU01PiDz66KNNT4h99tlnTU8Y2pUrVwZ6nDsRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJATEQAiIkIADERASAmIgDE5gZ94IkTJ0q73S6PPfZYqarqmrO6rktd15tf9/v90S0EYGINfCfSbrfL6upquXjx4pazhYWF0mq1Nq92uz3SkQBMpoEjcvvtt5eVlZVy5syZLWedTqf0er3Nq9vtjnQkAJNp4JezDh48WA4ePHjds6qqtrzEBcC/nzfWAYiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBIDbwZ6wn/vjjj7K6ujrObzFyL730UtMTIjfddFPTE2Ivvvhi0xMiR48ebXpC5Isvvmh6QuTs2bNNT4h98sknTU8Y2tra2kCPcycCQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBIDY3KAPPHnyZJmdnS2PPPJIufXWW685q+u61HW9+XW/3x/ZQAAm18B3Ip9++mmZnZ0tly5d2nK2sLBQWq3W5tVut0c6EoDJNHBE7r333nLlypVy+vTpLWedTqf0er3Nq9vtjnQkAJNp4Jeznn766W3PqqoqVVWNZBAA08Mb6wDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiMxsbGxujftJ+v19arVbpdDpl586do376sbrpppuanhDZtWtX0xP+c3799demJ0Ruu+22pidE1tfXm54Q+/PPP5ueMLTLly+XV155pfR6vbJ79+5tH+dOBICYiAAQExEAYiICQExEAIiJCAAxEQEgJiIAxEQEgJiIABATEQBiIgJATEQAiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIDRyRpaWlcvTo0fLzzz9vOavruvT7/WsuAP79Bo7IAw88UPbv31/27du35WxhYaG0Wq3Nq91uj3QkAJNp4IgsLy9vG4dOp1N6vd7m1e12RzYQgMk1N+gD9+7dW5544onrnlVVVaqqGtkoAKaDN9YBiIkIADERASAmIgDERASAmIgAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQExEAYiICQExEAIiJCAAxEQEgNvBnrA9jY2OjlFJKXdfjePqxWltba3pCZG5uLL+V/I1p/PkupZTLly83PSGyvr7e9ITYNP6a//Xz/dd/z7czs/FPjwicOXOmtNvtUT8tADdYt9std95557bnY4nI+vp6WV5eLrt27SozMzMjfe5+v1/a7Xbpdrtl9+7dI33ucZvW7XbfWHbfeNO6fZy7NzY2yoULF8revXvL7Oz273yM5TWQ2dnZvy3XKOzevXuqfrP/r2ndbveNZfeNN63bx7W71Wr942O8sQ5ATEQAiE1dRKqqKi+//HKpqqrpKUOb1u1231h233jTun0Sdo/ljXUA/hum7k4EgMkhIgDERASA2NRF5J133ilvv/12+eGHH5qeMrTFxcVy7NixpmcMbXFxsbzxxhvll19+aXrKUL7++uvy5ptvli+//LLpKUN78skny9WrV5ueMbQTJ06U999/f+r+SZiTJ0+W9957r/z+++9NTxnK0tJSOXr0aPn5558b2zB1Ebl48WI5cuRIWVpaanrK0A4fPlxuueWWpmcM7fDhw2VmZmag//Fokhw4cKCsrKyU+fn5pqcM5cMPPywHDx5sekak3W6X1dXVcvHixaanDOXTTz8ts7Oz5dKlS01PGcoDDzxQ9u/fX/bt29fYhqmLyPz8fHn33XfLoUOHmp4ytG+//bacOnWq9Pv9pqcM5fjx46WUUlZXVxteMpxvvvmm7Nmzp5w/f77pKUM5d+5cOXv2bPnpp5+anjK022+/vaysrJQzZ840PWUo9957b7ly5Uo5ffp001OGsry83Pi/U+iv+AIQm7o7EQAmh4gAEBMRAGIiAkBMRACIiQgAMREBICYiAMREBICYiAAQ+x/VG+SD+HMDIgAAAABJRU5ErkJggg==",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"makepixelimage(\"images\", 8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
":::{admonition}Exercise\n",
"Increase the image resolution to 16x16 and then 32x32 so the image will become much clearer.\n",
":::\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```{index} NFL player positions\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DEMO 3: Track NFL Player Positions\n",
"We will plot the movement of two players step by step in a given play\n",
"Dataset: NFL_play.xlsx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1) Import special libraries."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"import matplotlib.animation as animation\n",
"from matplotlib.animation import FuncAnimation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2) Read the Player Tracking Data"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Unnamed: 0
\n",
"
game_play
\n",
"
game_key
\n",
"
play_id
\n",
"
nfl_player_id
\n",
"
datetime
\n",
"
step
\n",
"
team
\n",
"
position
\n",
"
jersey_number
\n",
"
x_position
\n",
"
y_position
\n",
"
speed
\n",
"
distance
\n",
"
direction
\n",
"
orientation
\n",
"
acceleration
\n",
"
sa
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
0
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
44830
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
CB
\n",
"
22
\n",
"
61.59
\n",
"
42.60
\n",
"
1.11
\n",
"
0.11
\n",
"
320.33
\n",
"
263.93
\n",
"
0.71
\n",
"
-0.64
\n",
"
\n",
"
\n",
"
1
\n",
"
1
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
42355
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
NT
\n",
"
75
\n",
"
59.63
\n",
"
24.33
\n",
"
0.10
\n",
"
0.01
\n",
"
7.98
\n",
"
227.03
\n",
"
0.41
\n",
"
0.27
\n",
"
\n",
"
\n",
"
2
\n",
"
2
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
43330
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
ILB
\n",
"
55
\n",
"
60.67
\n",
"
30.89
\n",
"
3.19
\n",
"
0.32
\n",
"
334.89
\n",
"
303.31
\n",
"
1.95
\n",
"
-1.73
\n",
"
\n",
"
\n",
"
3
\n",
"
3
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
52425
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
WR
\n",
"
88
\n",
"
56.59
\n",
"
42.86
\n",
"
0.13
\n",
"
0.01
\n",
"
158.78
\n",
"
98.31
\n",
"
0.32
\n",
"
0.02
\n",
"
\n",
"
\n",
"
4
\n",
"
4
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
43293
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
RB
\n",
"
21
\n",
"
51.11
\n",
"
26.42
\n",
"
0.14
\n",
"
0.01
\n",
"
144.58
\n",
"
78.52
\n",
"
0.52
\n",
"
0.51
\n",
"
\n",
"
\n",
"
5
\n",
"
5
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
40031
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
FS
\n",
"
23
\n",
"
70.53
\n",
"
22.03
\n",
"
0.32
\n",
"
0.03
\n",
"
285.68
\n",
"
287.44
\n",
"
0.28
\n",
"
0.27
\n",
"
\n",
"
\n",
"
6
\n",
"
6
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
41242
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
G
\n",
"
70
\n",
"
57.33
\n",
"
24.80
\n",
"
0.03
\n",
"
0.01
\n",
"
328.04
\n",
"
57.38
\n",
"
0.07
\n",
"
0.07
\n",
"
\n",
"
\n",
"
7
\n",
"
7
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
52938
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
T
\n",
"
78
\n",
"
57.27
\n",
"
23.47
\n",
"
0.19
\n",
"
0.02
\n",
"
356.50
\n",
"
87.29
\n",
"
0.10
\n",
"
-0.10
\n",
"
\n",
"
\n",
"
8
\n",
"
8
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
42347
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
WR
\n",
"
19
\n",
"
56.23
\n",
"
10.68
\n",
"
0.07
\n",
"
0.01
\n",
"
132.91
\n",
"
123.39
\n",
"
0.19
\n",
"
-0.14
\n",
"
\n",
"
\n",
"
9
\n",
"
9
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
46135
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
OLB
\n",
"
59
\n",
"
59.90
\n",
"
21.14
\n",
"
1.58
\n",
"
0.16
\n",
"
218.10
\n",
"
278.39
\n",
"
0.48
\n",
"
0.22
\n",
"
\n",
"
\n",
"
10
\n",
"
10
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
43424
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
QB
\n",
"
4
\n",
"
57.31
\n",
"
26.27
\n",
"
0.07
\n",
"
0.01
\n",
"
207.25
\n",
"
93.25
\n",
"
0.11
\n",
"
0.07
\n",
"
\n",
"
\n",
"
11
\n",
"
11
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
43351
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
CB
\n",
"
24
\n",
"
64.39
\n",
"
10.89
\n",
"
0.80
\n",
"
0.08
\n",
"
130.49
\n",
"
309.04
\n",
"
0.44
\n",
"
-0.44
\n",
"
\n",
"
\n",
"
12
\n",
"
12
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
45532
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
TE
\n",
"
89
\n",
"
57.16
\n",
"
30.99
\n",
"
0.07
\n",
"
0.01
\n",
"
39.61
\n",
"
100.73
\n",
"
0.51
\n",
"
-0.14
\n",
"
\n",
"
\n",
"
13
\n",
"
13
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
46119
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
G
\n",
"
52
\n",
"
57.36
\n",
"
28.02
\n",
"
0.08
\n",
"
0.01
\n",
"
127.21
\n",
"
241.42
\n",
"
0.05
\n",
"
0.04
\n",
"
\n",
"
\n",
"
14
\n",
"
14
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
37082
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
T
\n",
"
77
\n",
"
57.16
\n",
"
29.54
\n",
"
0.12
\n",
"
0.01
\n",
"
145.27
\n",
"
85.16
\n",
"
0.07
\n",
"
0.01
\n",
"
\n",
"
\n",
"
15
\n",
"
15
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
53876
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
DE
\n",
"
91
\n",
"
59.65
\n",
"
22.71
\n",
"
0.23
\n",
"
0.02
\n",
"
268.69
\n",
"
271.27
\n",
"
0.23
\n",
"
-0.23
\n",
"
\n",
"
\n",
"
16
\n",
"
16
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
53479
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
OLB
\n",
"
51
\n",
"
59.47
\n",
"
29.52
\n",
"
0.24
\n",
"
0.02
\n",
"
296.78
\n",
"
257.94
\n",
"
1.12
\n",
"
0.26
\n",
"
\n",
"
\n",
"
17
\n",
"
17
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
52663
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
ILB
\n",
"
48
\n",
"
63.25
\n",
"
27.50
\n",
"
0.51
\n",
"
0.05
\n",
"
183.62
\n",
"
253.71
\n",
"
0.31
\n",
"
0.31
\n",
"
\n",
"
\n",
"
18
\n",
"
18
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
46206
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
TE
\n",
"
86
\n",
"
57.37
\n",
"
22.12
\n",
"
0.37
\n",
"
0.04
\n",
"
127.85
\n",
"
63.63
\n",
"
0.69
\n",
"
0.62
\n",
"
\n",
"
\n",
"
19
\n",
"
19
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
52444
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
FS
\n",
"
29
\n",
"
72.19
\n",
"
31.46
\n",
"
0.61
\n",
"
0.06
\n",
"
11.77
\n",
"
247.69
\n",
"
0.63
\n",
"
-0.33
\n",
"
\n",
"
\n",
"
20
\n",
"
20
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
47800
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
away
\n",
"
DE
\n",
"
97
\n",
"
59.48
\n",
"
26.81
\n",
"
0.23
\n",
"
0.01
\n",
"
346.84
\n",
"
247.16
\n",
"
1.29
\n",
"
0.90
\n",
"
\n",
"
\n",
"
21
\n",
"
21
\n",
"
58580_001136
\n",
"
58580
\n",
"
1136
\n",
"
52554
\n",
"
2021-10-10T21:08:20.900Z
\n",
"
-108
\n",
"
home
\n",
"
C
\n",
"
63
\n",
"
58.18
\n",
"
26.52
\n",
"
0.16
\n",
"
0.02
\n",
"
357.62
\n",
"
102.55
\n",
"
0.60
\n",
"
0.58
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unnamed: 0 game_play game_key play_id nfl_player_id \\\n",
"0 0 58580_001136 58580 1136 44830 \n",
"1 1 58580_001136 58580 1136 42355 \n",
"2 2 58580_001136 58580 1136 43330 \n",
"3 3 58580_001136 58580 1136 52425 \n",
"4 4 58580_001136 58580 1136 43293 \n",
"5 5 58580_001136 58580 1136 40031 \n",
"6 6 58580_001136 58580 1136 41242 \n",
"7 7 58580_001136 58580 1136 52938 \n",
"8 8 58580_001136 58580 1136 42347 \n",
"9 9 58580_001136 58580 1136 46135 \n",
"10 10 58580_001136 58580 1136 43424 \n",
"11 11 58580_001136 58580 1136 43351 \n",
"12 12 58580_001136 58580 1136 45532 \n",
"13 13 58580_001136 58580 1136 46119 \n",
"14 14 58580_001136 58580 1136 37082 \n",
"15 15 58580_001136 58580 1136 53876 \n",
"16 16 58580_001136 58580 1136 53479 \n",
"17 17 58580_001136 58580 1136 52663 \n",
"18 18 58580_001136 58580 1136 46206 \n",
"19 19 58580_001136 58580 1136 52444 \n",
"20 20 58580_001136 58580 1136 47800 \n",
"21 21 58580_001136 58580 1136 52554 \n",
"\n",
" datetime step team position jersey_number x_position \\\n",
"0 2021-10-10T21:08:20.900Z -108 away CB 22 61.59 \n",
"1 2021-10-10T21:08:20.900Z -108 away NT 75 59.63 \n",
"2 2021-10-10T21:08:20.900Z -108 away ILB 55 60.67 \n",
"3 2021-10-10T21:08:20.900Z -108 home WR 88 56.59 \n",
"4 2021-10-10T21:08:20.900Z -108 home RB 21 51.11 \n",
"5 2021-10-10T21:08:20.900Z -108 away FS 23 70.53 \n",
"6 2021-10-10T21:08:20.900Z -108 home G 70 57.33 \n",
"7 2021-10-10T21:08:20.900Z -108 home T 78 57.27 \n",
"8 2021-10-10T21:08:20.900Z -108 home WR 19 56.23 \n",
"9 2021-10-10T21:08:20.900Z -108 away OLB 59 59.90 \n",
"10 2021-10-10T21:08:20.900Z -108 home QB 4 57.31 \n",
"11 2021-10-10T21:08:20.900Z -108 away CB 24 64.39 \n",
"12 2021-10-10T21:08:20.900Z -108 home TE 89 57.16 \n",
"13 2021-10-10T21:08:20.900Z -108 home G 52 57.36 \n",
"14 2021-10-10T21:08:20.900Z -108 home T 77 57.16 \n",
"15 2021-10-10T21:08:20.900Z -108 away DE 91 59.65 \n",
"16 2021-10-10T21:08:20.900Z -108 away OLB 51 59.47 \n",
"17 2021-10-10T21:08:20.900Z -108 away ILB 48 63.25 \n",
"18 2021-10-10T21:08:20.900Z -108 home TE 86 57.37 \n",
"19 2021-10-10T21:08:20.900Z -108 away FS 29 72.19 \n",
"20 2021-10-10T21:08:20.900Z -108 away DE 97 59.48 \n",
"21 2021-10-10T21:08:20.900Z -108 home C 63 58.18 \n",
"\n",
" y_position speed distance direction orientation acceleration sa \n",
"0 42.60 1.11 0.11 320.33 263.93 0.71 -0.64 \n",
"1 24.33 0.10 0.01 7.98 227.03 0.41 0.27 \n",
"2 30.89 3.19 0.32 334.89 303.31 1.95 -1.73 \n",
"3 42.86 0.13 0.01 158.78 98.31 0.32 0.02 \n",
"4 26.42 0.14 0.01 144.58 78.52 0.52 0.51 \n",
"5 22.03 0.32 0.03 285.68 287.44 0.28 0.27 \n",
"6 24.80 0.03 0.01 328.04 57.38 0.07 0.07 \n",
"7 23.47 0.19 0.02 356.50 87.29 0.10 -0.10 \n",
"8 10.68 0.07 0.01 132.91 123.39 0.19 -0.14 \n",
"9 21.14 1.58 0.16 218.10 278.39 0.48 0.22 \n",
"10 26.27 0.07 0.01 207.25 93.25 0.11 0.07 \n",
"11 10.89 0.80 0.08 130.49 309.04 0.44 -0.44 \n",
"12 30.99 0.07 0.01 39.61 100.73 0.51 -0.14 \n",
"13 28.02 0.08 0.01 127.21 241.42 0.05 0.04 \n",
"14 29.54 0.12 0.01 145.27 85.16 0.07 0.01 \n",
"15 22.71 0.23 0.02 268.69 271.27 0.23 -0.23 \n",
"16 29.52 0.24 0.02 296.78 257.94 1.12 0.26 \n",
"17 27.50 0.51 0.05 183.62 253.71 0.31 0.31 \n",
"18 22.12 0.37 0.04 127.85 63.63 0.69 0.62 \n",
"19 31.46 0.61 0.06 11.77 247.69 0.63 -0.33 \n",
"20 26.81 0.23 0.01 346.84 247.16 1.29 0.90 \n",
"21 26.52 0.16 0.02 357.62 102.55 0.60 0.58 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"track_play=pd.read_excel('NFL_play.xlsx')\n",
"track_play.head(22)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3) Plot the positions of the players at step -108 (before the snap) of play 1136."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAApQAAAFpCAYAAAAiK7hmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1JElEQVR4nO3df3zP9f7/8fvWbMbYIsxYJCnhhKLvnJNyEP04JGGH8puWQiG1qNTn+C2/Rsmv0acQRR9J5aScxA4pK+ZHvzib3zE2jPew1/ePx3lvhBqv/d7term8L3u/Xq/n+/V+vTaz+/v508dxHEcAAADAVfLN7wsAAABA4UagBAAAgCsESgAAALhCoAQAAIArBEoAAAC4QqAEAACAKwRKAAAAuEKgBAAAgCsESgAAALhCoASQp9asWSMfHx8dO3Ysvy8FAJBDCJQAclT37t3l4+MjHx8flShRQjVq1NCQIUN08uTJPL2OkSNHqkmTJipVqpRCQkIuWWbgwIG6/fbbFRAQoPr16190fOfOnWrWrJkqVaqkkiVLqkaNGho+fLjOnDlzQTmPx6Nhw4apWrVqCggI0I033qi5c+f+7vW9//77uvPOOxUcHKwyZcqoTp06Gjx4cObxESNGXPKacktiYqL+9re/qXTp0rruuus0YMAApaen59n7Ayjc/PL7AgAUPa1bt1ZsbKzOnDmjtWvXqnfv3jp58qTeeOONPLuG9PR0dejQQREREZozZ84lyziOo549e2rDhg36/vvvLzpeokQJde3aVQ0bNlRISIi+++479enTRxkZGRo1alRmuY4dO+rgwYOaM2eOatasqUOHDuns2bOXvbbPPvtMkZGRGjVqlNq0aSMfHx9t27ZNq1evdn/jV+HcuXN64IEHVKFCBX311Vc6cuSIunXrJsdxFBMTky/XBKCQcQAgB3Xr1s1p27btBft69+7thIaGOo7jOF988YUjyTl69KjjOI5z+PBhJzIy0qlSpYoTGBjo1K1b11mwYEHma+fPn++UK1fOOX369AXnfPjhh53HHnvsD68nNjbWCQ4O/t0yL7/8snPbbbf94bkcx3GeeeYZ5y9/+Uvm9scff+wEBwc7R44cydbrHcdxBg4c6Nxzzz2XPR4bG+tIuuARGxvrOI7jHDt2zOnTp49ToUIFp0yZMk6zZs2c+Pj4i+5lxowZTtWqVZ3AwEDnkUceyfx+X8rKlSsdX19fZ+/evZn7Fi5c6AQEBDgpKSnZvi8AxRdN3gByXWBg4EXNxF6nT5/W7bffrhUrVmjr1q3q27evHnvsMW3YsEGS1KFDB507d07Lly/PfM3hw4e1YsUK9ejRI0+u3+unn37SJ598orvvvjtz3/Lly3XHHXdo3LhxqlKlimrVqqUhQ4bo1KlTlz1PaGioEhIStHXr1kse79SpkwYPHqw6depo//792r9/vzp16iTHcfTAAw/owIEDWrlypb755hs1bNhQzZs3V3Jy8gXXuXjxYn344Yf65JNPFB8fryeffPKy1xMXF6e6desqLCwsc1+rVq3k8Xj0zTffXMm3CEAxRaAEkKs2btyoBQsWqHnz5pc8XqVKFQ0ZMkT169dXjRo11L9/f7Vq1UpLliyRZGG0c+fOio2NzXzNO++8o6pVq+qee+7Ji1tQkyZNVLJkSd10002666679Oqrr2Ye++WXX/TVV19p69atWrZsmSZPnqz33nvvdwNc//791ahRI9WrV0/Vq1dXZGSk5s6dK4/HI8nuOSgoSH5+fgoNDVVoaKgCAwP1xRdfaMuWLVqyZInuuOMO3XTTTZowYYJCQkL03nvvZZ7/9OnTmj9/vurXr6+mTZsqJiZGixYt0oEDBy55PQcOHFClSpUu2HfttdfK39//sq8BgPMRKAHkuBUrVigoKEglS5ZUREREZqi5lHPnzmnkyJH605/+pPLlyysoKEirVq1SYmJiZpk+ffpo1apV2rt3ryQpNjY2c/BPXnj33Xf17bffasGCBfroo480YcKEzGMZGRny8fHRO++8o8aNG+v+++/XxIkTNW/evMvWUpYuXVofffSRfvrpJw0fPlxBQUEaPHiwGjdurLS0tMtexzfffKMTJ05kfp+8j127dunnn3/OLHf99deratWqmdsRERHKyMjQzp07L3vuS30vHcfJs+8xgMKNQTkAclyzZs30xhtvqESJEgoLC1OJEiUuW/a1117TpEmTNHnyZNWrV0+lS5fW008/fcEI4wYNGui2227TW2+9pVatWmnLli368MMP8+JWJEnh4eGSpFtvvVXnzp1T3759NXjwYF1zzTWqXLmyqlSpouDg4MzytWvXluM42rNnj2666abLnvfGG2/UjTfeqN69e2vYsGGqVauW3n333cs25WdkZKhy5cpas2bNRccuN5JdygqLlwuHoaGhmV0MvI4ePaozZ85cVHMJAJdCoASQ40qXLq2aNWtmq+zatWvVtm1bPfroo5IsNP3444+qXbv2BeV69+6tSZMmae/evWrRokVmyMtrjuPozJkzchxHkvTnP/9ZS5Ys0YkTJxQUFCRJ+uGHH+Tr63tBLeEfqV69ukqVKpU5vZK/v7/OnTt3QZmGDRvqwIED8vPzU/Xq1S97rsTERO3bty+zT2RcXJx8fX1Vq1atS5aPiIjQyJEjtX//flWuXFmStGrVKgUEBOj222/P9j0AKL5o8gaQr2rWrKl//vOfWr9+vbZv367HH3/8kv32unTpor1792rWrFnq2bPnH543MTFR8fHxSkxM1Llz5xQfH6/4+HidOHEis8xPP/2k+Ph4HThwQKdOncos460dfeedd7R48WJt375dv/zyi5YsWaLo6Gh16tRJfn72ebxz584qX768evTooW3btunLL7/Us88+q549eyowMPCS1zZixAgNHTpUa9as0a5du7R582b17NlTZ86cUcuWLSVZwNy1a5fi4+N1+PBheTwetWjRQhEREXrooYf06aefavfu3Vq/fr2GDx+uTZs2ZZ6/ZMmS6tatm7777jutXbtWAwYMUMeOHRUaGnrJ67n33nt166236rHHHtPmzZu1evVqDRkyRH369FHZsmX/8HsNAEwbBCBHXWraoPP9dtqgI0eOOG3btnWCgoKcihUrOsOHD3e6du16yXM89thjl5xC6HLXod9MvSPJ+eKLLzLL3H333Zcss2vXLsdxHGfRokVOw4YNnaCgIKd06dLOrbfe6owaNco5derUBe+1fft2p0WLFk5gYKBTtWpVZ9CgQU5aWtplr+3zzz932rdv74SHhzv+/v5OpUqVnNatWztr167NLHP69Gmnffv2TkhIyAXTBqWmpjr9+/d3wsLCnBIlSjjh4eFOly5dnMTERMdxsqYNev31152wsDCnZMmSzsMPP+wkJyf/7vfrP//5j/PAAw84gYGBTrly5ZynnnoqW99nAHAcx/FxnP+22wBAAdeyZUvVrl1bU6dOze9LKbBGjBihDz74QPHx8fl9KQCKEfpQAijwkpOTtWrVKn3++eeaNm1afl8OAOA3CJQACryGDRvq6NGjGjt2rG6++eb8vhwAwG/Q5A0AAABXGOUNAAAAVwiUAAAAcIVACQAAAFdy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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig= plt.figure(figsize=(8,4))\n",
"temp=track_play[track_play[\"step\"]==0]\n",
"xmin=temp[\"x_position\"].min()\n",
"xmax=temp[\"x_position\"].max()\n",
"ymin=temp[\"y_position\"].min()\n",
"ymax=temp[\"y_position\"].max()\n",
"plt.xlim(xmin-1,xmax+1)\n",
"plt.ylim(ymin-1,ymax+1)\n",
"for i in temp.index:\n",
" x=temp.loc[i,\"x_position\"]\n",
" y=temp.loc[i,\"y_position\"]\n",
" n=temp.loc[i,\"nfl_player_id\"]\n",
" p=temp.loc[i,\"position\"]\n",
" if temp.loc[i,\"team\"]=='home':\n",
" plt.text(x, y, p+str(n),color='b',size=5)\n",
" else:\n",
" plt.text(x, y, p+str(n),color='r',size=5)\n",
"plt.title(\"Play 1136 Step 0\",size=10)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"4) Let's define a function which creates a snapshot of the position of the players at any step of a given play."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"def teampositions(data,play,step):\n",
" playdf=data[data[\"play_id\"]==play]\n",
" playdf = playdf.sort_values(by = 'step')\n",
" playdf=playdf.reset_index(drop=True)\n",
" stepdf=playdf[playdf[\"step\"]==step]\n",
" xmin=stepdf[\"x_position\"].min()\n",
" xmax=stepdf[\"x_position\"].max()\n",
" ymin=stepdf[\"y_position\"].min()\n",
" ymax=stepdf[\"y_position\"].max()\n",
" fig= plt.figure(figsize=(8,4))\n",
" plt.xlim(xmin-1,xmax+1)\n",
" plt.ylim(ymin-1,ymax+1)\n",
" for i in stepdf.index:\n",
" x=stepdf.loc[i,\"x_position\"]\n",
" y=stepdf.loc[i,\"y_position\"]\n",
" n=stepdf.loc[i,\"nfl_player_id\"]\n",
" p=stepdf.loc[i,\"position\"]\n",
" if stepdf.loc[i,\"team\"]=='home':\n",
" plt.text(x, y, p,color='b',size=5)\n",
" else:\n",
" plt.text(x, y, p,color='r',size=5)\n",
" plt.title(\"Play\"+str(play)+ \" Step\"+str(step),size=10)\n",
" plt.savefig(str(step)+'.png')\n",
" return"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"5. Let's use this function to create snapshots of player positions for the first 50 steps after the snap of play 1136."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"frames=50\n",
"for step in np.arange(0,frames,1):\n",
" teampositions(track_play,1136,step)\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"6. Let's combine these snapshots into an animation. Can you figure out what happened on this play?"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"from PIL import Image\n",
"images = []\n",
"for n in range(frames):\n",
" exec('a'+str(n)+'=Image.open(\"'+str(n)+'.png\")')\n",
" images.append(eval('a'+str(n)))\n",
"images[0].save('play.gif',\n",
" save_all=True,\n",
" append_images=images[1:],\n",
" duration=5,\n",
" loop=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
":::{admonition} Exercise\n",
"Create a video which isolates the movement of just two players: the wide receiver (52425) and cornerback (44830) at the top of the screen.\n",
":::"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```{index} word clouds\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Demo 4 Word Clouds\n",
"Let's make a word cloud Christmas card using the song \"Twelve Days of Christmas.\""
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"import wordcloud"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"#Define a function which counts the interesting words\n",
"def calculate_frequencies(textfile):\n",
" #list of punctuations\n",
" punctuations = '''!()-[]{};:'\"\\,<>./?@#$%^&*_~'''\n",
" #list of uninteresting words \n",
" uninteresting_words = [\"AND\",\"BY\",\"IT\",\"THE\",\"THAT\",\"A\",\"IS\",\"HAD\",\"TO\",\"NOT\",\"BUT\",\"FOR\",\"OF\",\"WHICH\",\"IF\",\"IN\",\"ON\",\"WERE\",\"YE\",\"THOU\"]\n",
" \n",
" # removes punctuation and uninteresting words\n",
" import re\n",
" fc1=str(textfile)\n",
" fc2= fc1.split(' ')\n",
" for i in range(len(fc2)): \n",
" fc2[i] = fc2[i].upper()\n",
" #Remove punctuations\n",
" fc3 = []\n",
" for s in fc2:\n",
" if not any([o in s for o in punctuations]):\n",
" fc3.append(s)\n",
" #Remove uninteresting words\n",
" fc4=[]\n",
" for s in fc3:\n",
" if not any([o in s for o in uninteresting_words]):\n",
" fc4.append(s)\n",
" fc5=[]\n",
" for s in fc4:\n",
" if not any([o.lower() in s for o in uninteresting_words]):\n",
" fc5.append(s)\n",
" \n",
" while('' in fc5) : \n",
" fc5.remove('') \n",
" \n",
" import collections\n",
" fc6 = collections.Counter(fc5)\n",
"\n",
" #wordcloud\n",
" cloud = wordcloud.WordCloud( max_words = 12) #can adjust the number of words\n",
" cloud.generate_from_frequencies(fc6)\n",
" return cloud.to_array()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Open the text file with the words to be plotted.\n",
"with open('twelvedays.txt','r') as file: \n",
" carol = file.readlines()\n",
" \n",
"#make the wordcloud \n",
"carol = calculate_frequencies(carol)\n",
"plt.imshow(carol, interpolation = 'nearest')\n",
"plt.axis('off')\n",
"plt.savefig('card.png', bbox_inches='tight') "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exercise"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
":::{admonition} Exercise\n",
"Add the words \"Merry Christmas!\" in red onto the middle of the wordcloud.\n",
":::"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"