\n",
"\n",
"
Learning Objectives
\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- introduce you to Python\n",
"- explain why you need Python in your life\n",
"- help you install Python on your own laptop\n",
"- get you *writing* Python- introduce you to Python\n",
"- explain why you need Python in your life\n",
"- help you install Python on your own laptop\n",
"- get you *writing* Python"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Structure\n",
"\n",
"- two sessions, Wed 13:00-16:00\n",
"- broken into 1-hour modules or 15 minute mini-segments\n",
"- tea breaks after each module\n",
"\n",
"What is Python?\n",
"==================================\n",
"\n",
"Python is a modern computing language that is designed to be simple and easy to use. It is excellent for writing functional code *quickly*, and supports modules (libraries) that make achieving complicated tasks relatively simple. It was created in the early 90's by the Benevolent Dictator For Life (BDFL), Guido van Rossum. \n",
"\n",
"### Python - History\n",
"\n",
"You need to be aware that there are two versions of the Python language around at the moment. Python 2 was first released in 2000, and the latest version is 2.7. Python 3 is a slightly different language, and the one we will use for this course. It was released in 2008 and is rapidly becoming the standard version. Python 3 is **not** backwards compatible with Python 2.\n",
"\n",
"-------------------------------\n",
"# Why should you learn Python?\n",
"\n",
"- Python is free and highly portable (Linux, Mac OSX, Windows, etc.) \n",
"- Python is easy to understand and learn\n",
"- Python has *great* documentation\n",
"- Python has a large library of useful scientific modules\n",
"- Python has a useful *exception* system, which will tell you when you're going wrong\n",
"\n",
"These points mean that Python can be installed by anyone, anywhere. The simple syntax means Python is easy to learn. Most importantly however, the third party modules that exist for Python allow us to do **very complex tasks** with **very little code**. Let's look at an example - we'll use a third party module to quickly analyse survival statistics from the Titanic:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n1WpVUlKSKitPfRLV8nKzF70EgHPt8OFzdwkW4LjDhx2ciDwInSqI/RZfffr00QcffKDs7GxJxw6w\nLyoqUlVVlYYMGaJbb71V2dnZioyMVHp6um699VZ/jQIAABA0/BZfFotFEyZMaHRfRkaG9/add96p\nO++8018vDwAAEJQ4ySoAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcA\nAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBB\nxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcA\nAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBB\nxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcA\nAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBB\nxBcAAIBBxBcAAIBBxBcAAIBBxBcAAIBBYf7asNvtVl5enrZt26bw8HBNmjRJaWlp3vVbtmzRlClT\n5PF41KpVK02ZMkURERH+GgcAACAo+Iwvh8OhdevWqbS0VFarVenp6brmmmsUGRl5yuetWrVKLpdL\nCxYs0ObNm1VQUKAXX3xRkuTxeJSbm6vp06crNTVVixYt0ldffaU2bdqcm3cFAAAQpE4aX1VVVZox\nY4aKi4uVmZmp1q1bKywsTBs3btTkyZPVt29f3X///YqNjf3B52/YsEHdu3eXJHXq1Elbt271rtu1\na5datGihOXPmaPv27erRowfhBQAAmoWTxtfjjz+uwYMH65FHHpHNZmu0rqGhQSUlJRozZoxeeuml\nH3y+w+GQ3W73LttsNrndblmtVpWXl2vjxo3Kzc1VWlqa7r33XnXs2FFdu3Y9R28LAAAgOJ00vqZP\nny6LxfKD62w2m3r37q1evXqddMN2u11Op9O7fDy8JKlFixZKS0vz7u3q3r27tm7desr4SkyMUViY\n7aTrASDYlZfbfT8I+JGSkuxKTo4L9Bj4EU4aXzNmzDjlEx944AFvTP2QrKwslZSUqF+/ftq0aZMy\n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\nBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAA\nYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDx\nBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDxBQAAYBDx1RRYbN9d+N4yAABoSoivJsBqC1d08mWSpOjk\n9rLawgM8EQAAOFNhgR4Apyc+rZvi07oFegwAAHCW2PMFAABgEPEFAABgEPEFAABgEPEFAABgEPEF\nAABgEPEFAABgEPEFAABgEPEFAABgEPEFAABgEPEFAABgEPEFAABgEPGFkDN79kxlZw/Q7NkzAz0K\nAAAnIL4QUmpqqlVc/I4kqbh4hWpqqgM8EQAAjRFfCCkul0sej0eS5PG45XK5AjwRAACNEV8AAAAG\nEV8AAAAGEV8AAAAGEV8AAAAGEV8AAAAGEV8AAAAGEV8AAAAGEV8AAAAGhflrw263W3l5edq2bZvC\nw8M1adIkpaWledcXFRVp3rx5stlsateunfLy8mSxWPw1DgAAQFDw256vVatWyeVyacGCBRozZowK\nCgq862pqavT888+rsLBQ8+fPl8PhUElJib9GAQAACBp+i68NGzaoe/fukqROnTpp69at3nWRkZFa\nuHChIiMjJUn19fWKiory1ygAAABBw2/x5XA4ZLfbvcs2m01ut1uSZLFYlJSUJEkqLCxUdXW1rrnm\nGn+NAgAAEDT8dsyX3W6X0+n0Lrvdblmt1kbLU6dOVWlpqaZPn+5ze4mJMQoLs/ll1u8rL7f7fhC8\nkpLsSk6OC/QYkqSICHej5fPOsyshIThmA/hsAQInmP6s8lt8ZWVlqaSkRP369dOmTZuUmZnZaH1u\nbq4iIyM1Y8aM0zrQvry8yl+jnuDwYYex1woFhw87dPBgZaDHkCRVVjb+/+7QIYfq6vhRL4IDny1A\n4Jj+s+pUoee3+OrTp48++OADZWdnS5Ly8/NVVFSkqqoqdezYUUuWLNFPf/pTjRgxQpJ0xx13qHfv\n3v4aBwAAICj4Lb4sFosmTJjQ6L6MjAzv7c8++8xfLw0AABC0+D4GAADAIOILAADAIOILAADAIOIL\nAADAIOILaKZmz56p7OwBmj17ZqBHAYBmhfgCmqGammoVF78jSSouXqGamuoATwQAzQfxBTRDLpdL\nHo9HkuTxuOVyuQI8EQA0H8QXAACAQcQXAACAQX47wz2aB3dDvfbsKQ30GF5VVc5Gy7t371RMTGyA\npmksNTUcb3UfAAAJD0lEQVRdERERgR4DABBgxBfOSpWjXLPWvSL7jvhAjyJJctc1NFp+/r0/yxph\nC9A0/+H49qieHZyrtm0vDfQoAIAAI75w1uznxyshJTHQY0iSGmrr5dB+73J8qxayRfKfOQAgeHDM\nFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEEciQwY4K5v4JQcp4lTcgAIdcQXYEDVEae+mPmSKuz2QI8i\nSar1uBst/+v5aYq0BH5H+H6HQ30mFnBKDgAhjfgCDEmx23VhfEKgx5AkVTc0SI5K7/IF9nhF2wJ/\nPjQAaA4C/1ddAACAZoT4AgAAMIj4AgAAMIj4AgAAMIj4AgAAMIj4AgAAMIj4AgAAMIj4AgAAMIj4\nAgAAMIj4AgAAMIj4Apohm8XivW353jIAwL+IL6AZirBadWXssYt8d4q1K8LKRwEAmMKFtYFm6voW\nSbq+RVKgxwCAZoe/7iKkWKzf+frM8r1lAACCAPGFkGINt8ne7tjeHPulSbKG2wI8EQAAjfG1I0JO\n4tWtlXh160CPAQDAD2LPFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHE\nFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAA\ngEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEHEFwAAgEF+iy+3263c3FxlZ2cr\nJydHe/bsabR+9erVGjRokLKzs7V48WJ/jQEAABBU/BZfq1atksvl0oIFCzRmzBgVFBR417lcLhUU\nFGjOnDkqLCzUwoULdejQIX+NAgAAEDT8Fl8bNmxQ9+7dJUmdOnXS1q1bvet27NihtLQ0xcXFKTw8\nXJ07d9b69ev9NQoAAEDQCPPXhh0Oh+x2u3fZZrPJ7XbLarXK4XAoLi7Ouy42NlaVlZX+GuWMOCsO\nBnqEJqG68rDCvz0a6DGCnrPcof0ODrH0Zb/DocsDPYSf8dlyevhsOT18tpyeYPts8Vt82e12OZ1O\n7/Lx8JKkuLi4RuucTqcSEhJOub3k5LhTrj+XkpOzVLI4y9jrAWge+GwBIPnxa8esrCytXbtWkrRp\n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\nvXm3AAAAAElFTkSuQmCC\n",
"text/plain": [
"