Skip to content
Permalink
bf79d3d7ab
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
executable file 1535 lines (1535 sloc) 98.5 KB
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Computational Mechanics Project #02 - Create specifications for a projectile robot\n",
"\n",
"On the first day of class, we threw $2\"\\times~2\"$ dampened paper (spitballs) at a target on the whiteboard. Now, we are going to analyze the accuracy of the class with some cool Python tools and design a robot that has the same accuracy and precision as the class, but we will have the robot move farther away from the target and use a simpler projectile i.e. a tennis ball so we don't need to worry about knuckle-ball physics. \n",
"\n",
"The goal of this project is to determine the precision of necessary components for a robot that can reproduce the class throwing distibution. We have generated pseudo random numbers using `numpy.random`, but the class target practice is an example of truly random distributions. If we repeated the exercise, there is a vanishingly small probability that we would hit the same points on the target, and there are no deterministic models that could take into account all of the factors that affected each hit on the board. \n",
"\n",
"<img src=\"../images/robot_design.png\" style=\"height: 250px;\"/>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we ask ourselves some questions:\n",
"\n",
"1. How do we quantify the class accuracy and precision?\n",
"\n",
"2. If we design a robot, what design components can we control?\n",
"\n",
"3. How can we relate the controlled components to the class accuracy, and specify the component precision?\n",
"\n",
"The first question, we have some experience from our work in [02_Seeing_Stats](../notebooks/02_Seeing_Stats.ipynb). We can define the mean, standard deviation, measure the first, second, and third quartiles, etc. \n",
"\n",
"The second question is a physical question. We cannot control the placement of the robot or the target those are chosen for us. We cannot control temperature, mechanical vibrations, etc. We *can* control the desired initial velocity. The initial velocity will have some speed and direction, and both will be subject to random noise. Once the speed and direction are set, the location on the target is determined by kinematic equations for an object in freefall, as such\n",
"\n",
"$x_{impact} = \\frac{v_x}{v_y}d + x(0)~~~~~~~~~~~~~~~~~~~~(1.a)$\n",
"\n",
"$z_{impact} = d\\left(\\frac{v_z(0)}{v_y}-\\frac{g}{2v_y^2}d\\right)+ z(0)~~~~~(1.b)$.\n",
"\n",
"Where the location of impact is at a $y$-distance of $d$ at a point on the target with coordinates $(x_{impact},~z_{impact})$, and the initial velocity is $\\bar{v}=v_x\\hat{i}+v_y\\hat{j}+v_z(0)\\hat{k}$, the object is released at an initial location $\\bar{r}(0)=x(0)\\hat{i}+0\\hat{j}+z(0)\\hat{k}$, and the only acceleration is due to gravity, $\\bar{a}=-g\\hat{k}$. Equation (1) becomes much easier to evaluate if we assume that $v_x=0$, resulting in an evalution of the accuracy of the height of the impact, $z_{impact}$, as such\n",
"\n",
"$x_{impact} = x(0)~~~~~~~~~~~~~~~~~~~~(2.a)$\n",
"\n",
"$z_{impact} = \\frac{d}{\\cos{\\theta}}\\left(\\sin{\\theta}-\\frac{g}{2v_0^2\\cos{\\theta}}d\\right)+ z(0)~~~~~(2.b)$.\n",
"\n",
"Where $\\theta$ is the angle of the initial velocity and $v_0$ is the initial speed. Equation (2) restricts the analysis to height accuracy. You can incorporate the 2D impact analysis if you finish the 1D analysis. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The third question, is how we can relate equation (2) to the measured points of impact? For this, we can use Monte Carlo methods *(There are other methods, but Monte Carlo is one of the most straight-forward)*. Our Monte Carlo approach is as such, if we have a desired initial speed, $v_0$, and desired angle, $\\theta$, we can propagate the uncertainty of our actual speeds and angles into the $z_{impact}$ locations. Then, we can choose distributions in speed and angles that match the distributions in $z_{impact}$ locations. Here are the steps:\n",
"\n",
"1. Generate random $\\theta_i$ and $v_{0~i}$ variables\n",
"\n",
"2. Plug into eqn 2 for random $z_{impact~i}$ locations\n",
"\n",
"3. Compare to our measured $z_{impact}$ location statistics\n",
"\n",
"4. Repeat 1-3 until the predicted uncertainty matches the desired uncertainty, we can use a number of comparison metrics:\n",
" \n",
" - standard deviation\n",
" \n",
" - first, second, and third quartiles\n",
" \n",
" - visually, with box plots and histograms"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Project Deliverables\n",
"\n",
"1. Statistical analysis of class accuracy and precision (x- and z-locations) data is in the csv file [../data/target_data.csv](../data/target_data.csv) _Note: if you want to see how I turned the images into data check out the jupyter notebook [process_target_practice](./process_target_practice.ipynb)\n",
"\n",
"2. A Monte Carlo model to generate impact heights based upon uncertainty in $\\theta_0$ and $v_0$. \n",
"\n",
"3. The precision required to recreate the class accuracy and precision with a robot. \n",
"**You must show some validation of your work**\n",
"\n",
"4. [BONUS] Repeat 2-3 taking into account the variation in $x_{impact}$ due to misalignment. \n",
"\n",
"Given constants and constraints:\n",
"\n",
"- $d=$3 m, distance to target\n",
"\n",
"- $g=$9.81 m/s$^2$, acceleration due to gravity\n",
"\n",
"- $z(0)=$0.3 m, the initial height is 0.3 m above the bull's eye\n",
"\n",
"- 4 m/s$<v_0<$12 m/s, the initial velocity is always higher than 9 mph and less than 27 mph"
]
},
{
"cell_type": "code",
"execution_count": 245,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"#Import rcParams to set font styles\n",
"from matplotlib import rcParams\n",
"\n",
"#Set font style and size \n",
"rcParams['font.family'] = 'sans'\n",
"rcParams['font.size'] = 16\n",
"rcParams['lines.linewidth'] = 3"
]
},
{
"cell_type": "code",
"execution_count": 246,
"metadata": {},
"outputs": [],
"source": [
"#Import Data\n",
"%matplotlib inline\n",
"target_data = pd.read_csv('../data/target_data.csv')"
]
},
{
"cell_type": "code",
"execution_count": 247,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.frame.DataFrame"
]
},
"execution_count": 247,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type (target_data)"
]
},
{
"cell_type": "code",
"execution_count": 248,
"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>throw #</th>\n",
" <th>x position (m)</th>\n",
" <th>y position (m)</th>\n",
" <th>picture x position (pixel)</th>\n",
" <th>picture y position (pixel)</th>\n",
" <th>target x position (pixel)</th>\n",
" <th>target y position (pixel)</th>\n",
" <th>image #</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>-0.466403</td>\n",
" <td>-0.304000</td>\n",
" <td>1260.855114</td>\n",
" <td>990.599432</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>-0.206978</td>\n",
" <td>-0.448126</td>\n",
" <td>1702.673295</td>\n",
" <td>745.144886</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>-0.091677</td>\n",
" <td>-0.457734</td>\n",
" <td>1899.036932</td>\n",
" <td>728.781250</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>0.153336</td>\n",
" <td>-0.510580</td>\n",
" <td>2316.309659</td>\n",
" <td>638.781250</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>0.364720</td>\n",
" <td>-0.597055</td>\n",
" <td>2676.309659</td>\n",
" <td>491.508523</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5</td>\n",
" <td>-0.120502</td>\n",
" <td>-0.227133</td>\n",
" <td>1849.946023</td>\n",
" <td>1121.508523</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>6</td>\n",
" <td>-0.091677</td>\n",
" <td>-0.255959</td>\n",
" <td>1899.036932</td>\n",
" <td>1072.417614</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>7</td>\n",
" <td>-0.096482</td>\n",
" <td>-0.179092</td>\n",
" <td>1890.855114</td>\n",
" <td>1203.326705</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>8</td>\n",
" <td>-0.192565</td>\n",
" <td>-0.044575</td>\n",
" <td>1727.218750</td>\n",
" <td>1432.417614</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>9</td>\n",
" <td>-0.082069</td>\n",
" <td>-0.025358</td>\n",
" <td>1915.400568</td>\n",
" <td>1465.144886</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>10</td>\n",
" <td>0.162944</td>\n",
" <td>-0.313609</td>\n",
" <td>2332.673295</td>\n",
" <td>974.235795</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>11</td>\n",
" <td>0.249419</td>\n",
" <td>-0.332825</td>\n",
" <td>2479.946023</td>\n",
" <td>941.508523</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>12</td>\n",
" <td>0.441586</td>\n",
" <td>-0.371259</td>\n",
" <td>2807.218750</td>\n",
" <td>876.053977</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>13</td>\n",
" <td>0.038035</td>\n",
" <td>-0.006141</td>\n",
" <td>2119.946023</td>\n",
" <td>1497.872159</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>14</td>\n",
" <td>0.076469</td>\n",
" <td>-0.058987</td>\n",
" <td>2185.400568</td>\n",
" <td>1407.872159</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>15</td>\n",
" <td>0.134119</td>\n",
" <td>-0.073400</td>\n",
" <td>2283.582386</td>\n",
" <td>1383.326705</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>16</td>\n",
" <td>0.134119</td>\n",
" <td>-0.159875</td>\n",
" <td>2283.582386</td>\n",
" <td>1236.053977</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>17</td>\n",
" <td>0.162944</td>\n",
" <td>-0.020554</td>\n",
" <td>2332.673295</td>\n",
" <td>1473.326705</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>18</td>\n",
" <td>0.278244</td>\n",
" <td>-0.073400</td>\n",
" <td>2529.036932</td>\n",
" <td>1383.326705</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>19</td>\n",
" <td>0.302265</td>\n",
" <td>-0.097421</td>\n",
" <td>2569.946023</td>\n",
" <td>1342.417614</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>20</td>\n",
" <td>0.210986</td>\n",
" <td>0.094747</td>\n",
" <td>2414.491477</td>\n",
" <td>1669.690341</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>21</td>\n",
" <td>0.331090</td>\n",
" <td>0.157201</td>\n",
" <td>2619.036932</td>\n",
" <td>1776.053977</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>22</td>\n",
" <td>0.114902</td>\n",
" <td>0.224459</td>\n",
" <td>2250.855114</td>\n",
" <td>1890.599432</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>23</td>\n",
" <td>0.134119</td>\n",
" <td>0.339760</td>\n",
" <td>2283.582386</td>\n",
" <td>2086.963068</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>24</td>\n",
" <td>-0.154132</td>\n",
" <td>0.186026</td>\n",
" <td>1792.673295</td>\n",
" <td>1825.144886</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>25</td>\n",
" <td>-0.173348</td>\n",
" <td>0.157201</td>\n",
" <td>1759.946023</td>\n",
" <td>1776.053977</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>26</td>\n",
" <td>-0.307865</td>\n",
" <td>0.142788</td>\n",
" <td>1530.855114</td>\n",
" <td>1751.508523</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>27</td>\n",
" <td>-0.312670</td>\n",
" <td>0.373389</td>\n",
" <td>1522.673295</td>\n",
" <td>2144.235795</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>28</td>\n",
" <td>-0.490424</td>\n",
" <td>0.397410</td>\n",
" <td>1219.946023</td>\n",
" <td>2185.144886</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>29</td>\n",
" <td>-0.711416</td>\n",
" <td>0.334955</td>\n",
" <td>843.582386</td>\n",
" <td>2078.781250</td>\n",
" <td>2055.169256</td>\n",
" <td>1508.331047</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>30</td>\n",
" <td>-0.291312</td>\n",
" <td>-0.127198</td>\n",
" <td>1412.218750</td>\n",
" <td>1254.974432</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>31</td>\n",
" <td>-0.126406</td>\n",
" <td>-0.303884</td>\n",
" <td>1755.855114</td>\n",
" <td>886.792614</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>32</td>\n",
" <td>-0.197080</td>\n",
" <td>-0.158609</td>\n",
" <td>1608.582386</td>\n",
" <td>1189.519886</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>33</td>\n",
" <td>-0.232417</td>\n",
" <td>-0.076155</td>\n",
" <td>1534.946023</td>\n",
" <td>1361.338068</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>34</td>\n",
" <td>-0.118553</td>\n",
" <td>-0.044744</td>\n",
" <td>1772.218750</td>\n",
" <td>1426.792614</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>35</td>\n",
" <td>-0.071437</td>\n",
" <td>-0.107566</td>\n",
" <td>1870.400568</td>\n",
" <td>1295.883523</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>36</td>\n",
" <td>-0.043952</td>\n",
" <td>-0.190020</td>\n",
" <td>1927.673295</td>\n",
" <td>1124.065341</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>37</td>\n",
" <td>0.011017</td>\n",
" <td>-0.146830</td>\n",
" <td>2042.218750</td>\n",
" <td>1214.065341</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>38</td>\n",
" <td>0.038501</td>\n",
" <td>-0.315663</td>\n",
" <td>2099.491477</td>\n",
" <td>862.247159</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>39</td>\n",
" <td>0.093470</td>\n",
" <td>-0.131124</td>\n",
" <td>2214.036932</td>\n",
" <td>1246.792614</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>40</td>\n",
" <td>0.168071</td>\n",
" <td>-0.170388</td>\n",
" <td>2369.491477</td>\n",
" <td>1164.974432</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>41</td>\n",
" <td>0.226966</td>\n",
" <td>-0.244988</td>\n",
" <td>2492.218750</td>\n",
" <td>1009.519886</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>42</td>\n",
" <td>0.603896</td>\n",
" <td>-0.319589</td>\n",
" <td>3277.673295</td>\n",
" <td>854.065341</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>43</td>\n",
" <td>0.305493</td>\n",
" <td>-0.013334</td>\n",
" <td>2655.855114</td>\n",
" <td>1492.247159</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>44</td>\n",
" <td>0.195556</td>\n",
" <td>-0.068303</td>\n",
" <td>2426.764205</td>\n",
" <td>1377.701705</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>45</td>\n",
" <td>0.117028</td>\n",
" <td>-0.036892</td>\n",
" <td>2263.127841</td>\n",
" <td>1443.156250</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>46</td>\n",
" <td>0.018870</td>\n",
" <td>0.088752</td>\n",
" <td>2058.582386</td>\n",
" <td>1704.974432</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>47</td>\n",
" <td>0.164145</td>\n",
" <td>0.100531</td>\n",
" <td>2361.309659</td>\n",
" <td>1729.519886</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>48</td>\n",
" <td>0.289788</td>\n",
" <td>0.167279</td>\n",
" <td>2623.127841</td>\n",
" <td>1868.610795</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>49</td>\n",
" <td>0.525369</td>\n",
" <td>0.069120</td>\n",
" <td>3114.036932</td>\n",
" <td>1664.065341</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50</th>\n",
" <td>50</td>\n",
" <td>-0.126406</td>\n",
" <td>0.363596</td>\n",
" <td>1755.855114</td>\n",
" <td>2277.701705</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>51</th>\n",
" <td>51</td>\n",
" <td>-0.244196</td>\n",
" <td>0.402860</td>\n",
" <td>1510.400568</td>\n",
" <td>2359.519886</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>52</th>\n",
" <td>52</td>\n",
" <td>-0.212785</td>\n",
" <td>0.563840</td>\n",
" <td>1575.855114</td>\n",
" <td>2694.974432</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>53</th>\n",
" <td>53</td>\n",
" <td>-0.232417</td>\n",
" <td>0.288996</td>\n",
" <td>1534.946023</td>\n",
" <td>2122.247159</td>\n",
" <td>2019.261556</td>\n",
" <td>1520.031972</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" throw # x position (m) y position (m) picture x position (pixel) \\\n",
"0 0 -0.466403 -0.304000 1260.855114 \n",
"1 1 -0.206978 -0.448126 1702.673295 \n",
"2 2 -0.091677 -0.457734 1899.036932 \n",
"3 3 0.153336 -0.510580 2316.309659 \n",
"4 4 0.364720 -0.597055 2676.309659 \n",
"5 5 -0.120502 -0.227133 1849.946023 \n",
"6 6 -0.091677 -0.255959 1899.036932 \n",
"7 7 -0.096482 -0.179092 1890.855114 \n",
"8 8 -0.192565 -0.044575 1727.218750 \n",
"9 9 -0.082069 -0.025358 1915.400568 \n",
"10 10 0.162944 -0.313609 2332.673295 \n",
"11 11 0.249419 -0.332825 2479.946023 \n",
"12 12 0.441586 -0.371259 2807.218750 \n",
"13 13 0.038035 -0.006141 2119.946023 \n",
"14 14 0.076469 -0.058987 2185.400568 \n",
"15 15 0.134119 -0.073400 2283.582386 \n",
"16 16 0.134119 -0.159875 2283.582386 \n",
"17 17 0.162944 -0.020554 2332.673295 \n",
"18 18 0.278244 -0.073400 2529.036932 \n",
"19 19 0.302265 -0.097421 2569.946023 \n",
"20 20 0.210986 0.094747 2414.491477 \n",
"21 21 0.331090 0.157201 2619.036932 \n",
"22 22 0.114902 0.224459 2250.855114 \n",
"23 23 0.134119 0.339760 2283.582386 \n",
"24 24 -0.154132 0.186026 1792.673295 \n",
"25 25 -0.173348 0.157201 1759.946023 \n",
"26 26 -0.307865 0.142788 1530.855114 \n",
"27 27 -0.312670 0.373389 1522.673295 \n",
"28 28 -0.490424 0.397410 1219.946023 \n",
"29 29 -0.711416 0.334955 843.582386 \n",
"30 30 -0.291312 -0.127198 1412.218750 \n",
"31 31 -0.126406 -0.303884 1755.855114 \n",
"32 32 -0.197080 -0.158609 1608.582386 \n",
"33 33 -0.232417 -0.076155 1534.946023 \n",
"34 34 -0.118553 -0.044744 1772.218750 \n",
"35 35 -0.071437 -0.107566 1870.400568 \n",
"36 36 -0.043952 -0.190020 1927.673295 \n",
"37 37 0.011017 -0.146830 2042.218750 \n",
"38 38 0.038501 -0.315663 2099.491477 \n",
"39 39 0.093470 -0.131124 2214.036932 \n",
"40 40 0.168071 -0.170388 2369.491477 \n",
"41 41 0.226966 -0.244988 2492.218750 \n",
"42 42 0.603896 -0.319589 3277.673295 \n",
"43 43 0.305493 -0.013334 2655.855114 \n",
"44 44 0.195556 -0.068303 2426.764205 \n",
"45 45 0.117028 -0.036892 2263.127841 \n",
"46 46 0.018870 0.088752 2058.582386 \n",
"47 47 0.164145 0.100531 2361.309659 \n",
"48 48 0.289788 0.167279 2623.127841 \n",
"49 49 0.525369 0.069120 3114.036932 \n",
"50 50 -0.126406 0.363596 1755.855114 \n",
"51 51 -0.244196 0.402860 1510.400568 \n",
"52 52 -0.212785 0.563840 1575.855114 \n",
"53 53 -0.232417 0.288996 1534.946023 \n",
"\n",
" picture y position (pixel) target x position (pixel) \\\n",
"0 990.599432 2055.169256 \n",
"1 745.144886 2055.169256 \n",
"2 728.781250 2055.169256 \n",
"3 638.781250 2055.169256 \n",
"4 491.508523 2055.169256 \n",
"5 1121.508523 2055.169256 \n",
"6 1072.417614 2055.169256 \n",
"7 1203.326705 2055.169256 \n",
"8 1432.417614 2055.169256 \n",
"9 1465.144886 2055.169256 \n",
"10 974.235795 2055.169256 \n",
"11 941.508523 2055.169256 \n",
"12 876.053977 2055.169256 \n",
"13 1497.872159 2055.169256 \n",
"14 1407.872159 2055.169256 \n",
"15 1383.326705 2055.169256 \n",
"16 1236.053977 2055.169256 \n",
"17 1473.326705 2055.169256 \n",
"18 1383.326705 2055.169256 \n",
"19 1342.417614 2055.169256 \n",
"20 1669.690341 2055.169256 \n",
"21 1776.053977 2055.169256 \n",
"22 1890.599432 2055.169256 \n",
"23 2086.963068 2055.169256 \n",
"24 1825.144886 2055.169256 \n",
"25 1776.053977 2055.169256 \n",
"26 1751.508523 2055.169256 \n",
"27 2144.235795 2055.169256 \n",
"28 2185.144886 2055.169256 \n",
"29 2078.781250 2055.169256 \n",
"30 1254.974432 2019.261556 \n",
"31 886.792614 2019.261556 \n",
"32 1189.519886 2019.261556 \n",
"33 1361.338068 2019.261556 \n",
"34 1426.792614 2019.261556 \n",
"35 1295.883523 2019.261556 \n",
"36 1124.065341 2019.261556 \n",
"37 1214.065341 2019.261556 \n",
"38 862.247159 2019.261556 \n",
"39 1246.792614 2019.261556 \n",
"40 1164.974432 2019.261556 \n",
"41 1009.519886 2019.261556 \n",
"42 854.065341 2019.261556 \n",
"43 1492.247159 2019.261556 \n",
"44 1377.701705 2019.261556 \n",
"45 1443.156250 2019.261556 \n",
"46 1704.974432 2019.261556 \n",
"47 1729.519886 2019.261556 \n",
"48 1868.610795 2019.261556 \n",
"49 1664.065341 2019.261556 \n",
"50 2277.701705 2019.261556 \n",
"51 2359.519886 2019.261556 \n",
"52 2694.974432 2019.261556 \n",
"53 2122.247159 2019.261556 \n",
"\n",
" target y position (pixel) image # \n",
"0 1508.331047 1 \n",
"1 1508.331047 1 \n",
"2 1508.331047 1 \n",
"3 1508.331047 1 \n",
"4 1508.331047 1 \n",
"5 1508.331047 1 \n",
"6 1508.331047 1 \n",
"7 1508.331047 1 \n",
"8 1508.331047 1 \n",
"9 1508.331047 1 \n",
"10 1508.331047 1 \n",
"11 1508.331047 1 \n",
"12 1508.331047 1 \n",
"13 1508.331047 1 \n",
"14 1508.331047 1 \n",
"15 1508.331047 1 \n",
"16 1508.331047 1 \n",
"17 1508.331047 1 \n",
"18 1508.331047 1 \n",
"19 1508.331047 1 \n",
"20 1508.331047 1 \n",
"21 1508.331047 1 \n",
"22 1508.331047 1 \n",
"23 1508.331047 1 \n",
"24 1508.331047 1 \n",
"25 1508.331047 1 \n",
"26 1508.331047 1 \n",
"27 1508.331047 1 \n",
"28 1508.331047 1 \n",
"29 1508.331047 1 \n",
"30 1520.031972 2 \n",
"31 1520.031972 2 \n",
"32 1520.031972 2 \n",
"33 1520.031972 2 \n",
"34 1520.031972 2 \n",
"35 1520.031972 2 \n",
"36 1520.031972 2 \n",
"37 1520.031972 2 \n",
"38 1520.031972 2 \n",
"39 1520.031972 2 \n",
"40 1520.031972 2 \n",
"41 1520.031972 2 \n",
"42 1520.031972 2 \n",
"43 1520.031972 2 \n",
"44 1520.031972 2 \n",
"45 1520.031972 2 \n",
"46 1520.031972 2 \n",
"47 1520.031972 2 \n",
"48 1520.031972 2 \n",
"49 1520.031972 2 \n",
"50 1520.031972 2 \n",
"51 1520.031972 2 \n",
"52 1520.031972 2 \n",
"53 1520.031972 2 "
]
},
"execution_count": 248,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Print a table of the data\n",
"target_data"
]
},
{
"cell_type": "code",
"execution_count": 249,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"pandas.core.series.Series"
]
},
"execution_count": 249,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"type(target_data[' x position (m)'])"
]
},
{
"cell_type": "code",
"execution_count": 250,
"metadata": {},
"outputs": [],
"source": [
"#Arrange the x and y data into arrays\n",
"# z is listed as y in the table so the code will be written as y\n",
"\n",
"x = target_data[' x position (m)']\n",
"\n",
"y = target_data[' y position (m)']"
]
},
{
"cell_type": "code",
"execution_count": 251,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0673809499696575\n",
"X position standard deviation = 0.2595784081345317\n"
]
}
],
"source": [
"#variance and standard deviation of x\n",
"var_x = np.var(x, ddof=1)\n",
"print(var_x)\n",
"\n",
"std_x = np.sqrt(var_x)\n",
"print('X position standard deviation =',std_x)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 252,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.06617973806033156\n",
"Y position standard deviation = 0.2572542284595757\n"
]
}
],
"source": [
"#variance and standard deviation of x\n",
"var_y = np.var(y, ddof=1)\n",
"print(var_y)\n",
"\n",
"std_y = np.sqrt(var_y)\n",
"print('Y position standard deviation =',std_y)"
]
},
{
"cell_type": "code",
"execution_count": 253,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X position median = 0.028452517775170515\n",
"X position mean = 0.01207963411779779\n"
]
}
],
"source": [
"#X position median and mean\n",
"\n",
"X_median = np.median(x)\n",
"print('X position median =', X_median)\n",
"X_mean = np.mean(x)\n",
"print ('X position mean =', X_mean)"
]
},
{
"cell_type": "code",
"execution_count": 254,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Y position median = -0.070851135369002\n",
"Y position mean = -0.047397370492807414\n"
]
}
],
"source": [
"#Y position median and mean\n",
"\n",
"Y_median = np.median(y)\n",
"print('Y position median =', Y_median)\n",
"Y_mean = np.mean(y)\n",
"print ('Y position mean =', Y_mean)"
]
},
{
"cell_type": "code",
"execution_count": 255,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.boxplot(x, labels=['X position (m)']);"
]
},
{
"cell_type": "code",
"execution_count": 256,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.boxplot(y, labels=['Y position (m)']);"
]
},
{
"cell_type": "code",
"execution_count": 257,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The first quartile for x position is -0.16854422326722185\n",
"The second quartile for x position is 0.028452517775170515\n",
"The third quartile for x position is 0.1670894539891312\n"
]
}
],
"source": [
"#Quartilies for x position\n",
"\n",
"Q1_x = np.percentile(x, q=25)\n",
"Q2_x = np.percentile(x, q=50)\n",
"Q3_x = np.percentile(x, q=75)\n",
"\n",
"print('The first quartile for x position is {}'.format(Q1_x))\n",
"print('The second quartile for x position is {}'.format(Q2_x))\n",
"print('The third quartile for x position is {}'.format(Q3_x))"
]
},
{
"cell_type": "code",
"execution_count": 258,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The first quartile for y position is -0.21785495681409592\n",
"The second quartile for y position is -0.070851135369002\n",
"The third quartile for y position is 0.13222390283592378\n"
]
}
],
"source": [
"#Quartilies for y position\n",
"\n",
"Q1_y = np.percentile(y, q=25)\n",
"Q2_y = np.percentile(y, q=50)\n",
"Q3_y = np.percentile(y, q=75)\n",
"\n",
"print('The first quartile for y position is {}'.format(Q1_y))\n",
"print('The second quartile for y position is {}'.format(Q2_y))\n",
"print('The third quartile for y position is {}'.format(Q3_y))"
]
},
{
"cell_type": "code",
"execution_count": 259,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8,8))\n",
"plt.scatter(x, y, color='#3498db') \n",
"plt.title('Scatter plot of x position vs y position \\n')\n",
"plt.xlabel(' x position (m)')\n",
"plt.ylabel(' y position (m)');"
]
},
{
"cell_type": "code",
"execution_count": 457,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random initial velocity values = [[ 8.5024077 11.76561528 10.78517622 6.62541212 8.64073223 11.60687134\n",
" 12.35792352 6.53556343 7.71639368 9.22165353]]\n",
"Random throwing angle values = [[40.86756441 40.65875401 41.01849469 45.00635081 43.3785593 42.94104658\n",
" 36.64662043 47.23936796 47.08990831 44.45908248]]\n"
]
}
],
"source": [
"import random\n",
"import math\n",
"v_random=np.random.uniform(4,13,size = (1,10));\n",
"theta_random=np.random.uniform (35,50,size = (1,10));\n",
"print('Random initial velocity values =', v_random)\n",
"\n",
"print ('Random throwing angle values =', theta_random)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 458,
"metadata": {},
"outputs": [],
"source": [
"def montecarlopi(N):\n",
" '''Create random 𝜃0 and 𝑣0 to use in the impact formula\n",
" Where 𝜃 is the angle of the initial velocity and 𝑣0 is the initial velocity\n",
" \n",
" Arguments\n",
" ---------\n",
" N: number of random points to produce for 𝜃0 and 𝑣0 \n",
" \n",
" Returns\n",
" -------\n",
" y_impact: the best prediction of the projectile impact based on N points\n",
" \n",
" '''\n",
" \n",
" \n",
" d=3 #m, distance to target\n",
" g=9.81 #m/s**2 , acceleration due to gravity\n",
" z=0.3 #m, the initial height is 0.3 m above the bull's eye\n",
" \n",
"\n",
" sin=np.sin(theta_random)\n",
" cos=np.cos(theta_random)\n",
" \n",
" a=d/cos\n",
" b=2*(v_random**2)*cos\n",
" y_impact=a*(sin-(g/b)*d)+z \n",
" \n",
" return y_impact\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 459,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.23049911 -0.58164918 0.4472955 1.50856463 -2.64138231 -6.10969373\n",
" -6.13804627 -0.39943473 -0.54424085 1.19197711]]\n"
]
}
],
"source": [
"random_heights=montecarlopi(10)\n",
"print(random_heights)"
]
},
{
"cell_type": "code",
"execution_count": 460,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-1.3497108938661837\n"
]
}
],
"source": [
"random_mean=np.mean(random_heights)\n",
"print(random_mean)"
]
},
{
"cell_type": "code",
"execution_count": 461,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"7.611946307326767\n",
"Random Heights standard deviation = 2.758975590201328\n"
]
}
],
"source": [
"#variance and standard deviation of random heights\n",
"var_random_heights = np.var(random_heights, ddof=1)\n",
"print(var_random_heights)\n",
"\n",
"std_random_heights = np.sqrt(var_random_heights)\n",
"print('Random Heights standard deviation =',std_random_heights)"
]
},
{
"cell_type": "code",
"execution_count": 462,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random heights median = -0.4718377909434732\n",
"Random heights mean = -1.3497108938661837\n"
]
}
],
"source": [
"#Random heights median and mean\n",
"\n",
"random_heights_median = np.median(random_heights)\n",
"print('Random heights median =', random_heights_median)\n",
"random_heights_mean = np.mean(random_heights)\n",
"print ('Random heights mean =', random_heights_mean)"
]
},
{
"cell_type": "code",
"execution_count": 463,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.boxplot(random_heights);"
]
},
{
"cell_type": "code",
"execution_count": 464,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8,8))\n",
"plt.scatter(v_random, theta_random, color='#3498db') \n",
"plt.title('Scatter plot of random velocities vs random theta values \\n')\n",
"plt.xlabel(' velocities (m/s)')\n",
"plt.ylabel(' thetas (degrees)');"
]
},
{
"cell_type": "code",
"execution_count": 465,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random initial velocity values = [[ 8.5024077 11.76561528 10.78517622 6.62541212 8.64073223 11.60687134\n",
" 12.35792352 6.53556343 7.71639368 9.22165353]]\n",
"Random throwing angle values = [[40.86756441 40.65875401 41.01849469 45.00635081 43.3785593 42.94104658\n",
" 36.64662043 47.23936796 47.08990831 44.45908248]]\n"
]
}
],
"source": [
"# Increase N to test a greater sample size\n",
"\n",
"v_random2=np.random.uniform(4,13,size = (1,100));\n",
"theta_random2=np.random.uniform (35,50,size = (1,100));\n",
"print('Random initial velocity values =', v_random)\n",
"\n",
"print ('Random throwing angle values =', theta_random)"
]
},
{
"cell_type": "code",
"execution_count": 466,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.23049911 -0.58164918 0.4472955 1.50856463 -2.64138231 -6.10969373\n",
" -6.13804627 -0.39943473 -0.54424085 1.19197711]]\n"
]
}
],
"source": [
"random_heights2=montecarlopi(100)\n",
"print(random_heights2)"
]
},
{
"cell_type": "code",
"execution_count": 467,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-1.3497108938661837\n"
]
}
],
"source": [
"random_mean2=np.mean(random_heights2)\n",
"print(random_mean2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Answer:__ = As N goes up, the mean values is much further away from the mean calculated from the original x and y positions."
]
},
{
"cell_type": "code",
"execution_count": 469,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"7.611946307326767\n",
"Random Heights 2 standard deviation = 2.758975590201328\n"
]
}
],
"source": [
"#variance and standard deviation of x\n",
"var_random_heights2 = np.var(random_heights2, ddof=1)\n",
"print(var_random_heights2)\n",
"\n",
"std_random_heights2 = np.sqrt(var_random_heights2)\n",
"print('Random Heights 2 standard deviation =',std_random_heights2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}