281 lines
8.3 KiB
Plaintext
281 lines
8.3 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Obviously, stealing is not OK, also not for programmers. Nevertheless, many software is freely available, typically even opensource. Moreover, Python provides a lot out of the box. Next to software shipped with Python, there is many more on [https://pypi.python.org](pypi.python.org). PyPI stands for Python Package Index. You can install PyPI software with `pip3`, a command shipped with Python.\n",
|
||
|
"\n",
|
||
|
"This notebook shows you what happens if you install something, in particular where the software is stored on your hard disk. You will install `folium`, a software used to create (land) maps."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"**Exercise:** Run the cell below. Notice that *folium is not installed* and hence there is an \n",
|
||
|
"```\n",
|
||
|
"ImportError\n",
|
||
|
"```."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import folium"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"**Exercise:** Import the module `sys` using the instruction `import sys`"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# YOUR CODE HERE, ~1 line\n",
|
||
|
"None\n",
|
||
|
"# END OF YOUR CODE"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"`sys` is a module that has an attribute `path`. `path` contains a list of folders where python looks whenever you import something. This is called the python path, sometimes reffered to as the `PYTHONPATH` variable, because this variable can be overridden via the operating system.\n",
|
||
|
"\n",
|
||
|
"**Note:** There is also a module `os.path`, to work with files on your hard disk. From now on, the <u>hard disk</u> also means the <u>file system</u>. Do not confulse `os.path` (file system operations) and `sys.path` (where python looks for software).\n",
|
||
|
"\n",
|
||
|
"**Exercise:** Look at the content of `sys.path`."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# YOUR CODE HERE, ~1 line\n",
|
||
|
"None\n",
|
||
|
"# END OF YOUR CODE"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"This list include text in between apostrophes (`'`). This is Python's way to display text elements (a.k.a. <u>strings</u>).\n",
|
||
|
"\n",
|
||
|
"**Apple computer**\n",
|
||
|
"> You will also notice foward slashes (`/`). They separate folders in your computer, and are called <u>path separators</u>.\n",
|
||
|
"\n",
|
||
|
"**Windows computer**\n",
|
||
|
"> You will also notice slashes (`\\`). They separate folders in your computer, and are called <u>path separators</u>. \n",
|
||
|
">\n",
|
||
|
"> You will also notice that slahes are doubled (`\\\\`). Putting a `\\` before a character is called <u>escaping</u>. We will talk more about it in a future lecture.\n",
|
||
|
"\n",
|
||
|
"---\n",
|
||
|
"\n",
|
||
|
"---\n",
|
||
|
"\n",
|
||
|
"Among the folders you just saw, there is one with your packages. To you help you find it, execute one of the following cells:\n",
|
||
|
"\n",
|
||
|
"**On Windows**"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"for folder in sys.path:\n",
|
||
|
" if '\\\\intropython\\\\lib\\\\site-packages' in folder:\n",
|
||
|
" print('==> ', folder)\n",
|
||
|
" else:\n",
|
||
|
" print(folder)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"**On Apple**"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"for folder in sys.path:\n",
|
||
|
" if '/intropython/lib/python3.6/site-packages' in folder:\n",
|
||
|
" print('==> ', folder)\n",
|
||
|
" else:\n",
|
||
|
" print(folder)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"The folder with `==>` is the one you are looking for. Open it using Windows Explorer (on Windows) of Files (on Apple).\n",
|
||
|
"\n",
|
||
|
"You should see many folders with installed Python software, **MAKE SURE NOT TO DELETE OR EDIT ANYTHING**."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Notice that you cannot find `folium` in this folder. Let's install it!\n",
|
||
|
"\n",
|
||
|
"You should always install or uninstall software using `pip3 install <package-name>` or `pip3 uninstall <package-name>`.\n",
|
||
|
"\n",
|
||
|
"Open Anaconda Console via the start menu, activate the Python environment you created last week via `conda activate introproc` and then install `folium` using `pip3 install folium`.\n",
|
||
|
"\n",
|
||
|
"**Exercise:** Run the activate and install commands in Anaconda Console, then refresh the aformentioned folder you should see folium."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"Now, let's show a map of Leeuwarden with a marker where we are (approximately)! No worries about understanding the code below, make the following notes though:\n",
|
||
|
"\n",
|
||
|
" * with `pip3 install` and `import` we can use existing software,\n",
|
||
|
" * folium allows us to create a map, with only 3 or 4 lines of code,\n",
|
||
|
" * this map is stored in a variable `m`, via the first line with `m = ...`\n",
|
||
|
" * this line creates a `folium.Map`, tells it which background-map to use (`'stamentoner'`), the centre location in latitude and longitude, and the zoom level.\n",
|
||
|
" * then a marker is added to the map\n",
|
||
|
" * the last expression of the cell is its output, in this case that is the map `m`. If you delete this line, the map will be created, but not show.\n",
|
||
|
"\n",
|
||
|
"**Exercise:** delete the last line with `m` and verify that the map will be gone. Put it back again."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import folium"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"m = folium.Map(tiles='stamentoner', location=[53.1991713, 5.7941344], zoom_start=16)\n",
|
||
|
"\n",
|
||
|
"folium.Marker(location=[53.1991713, 5.7941344]).add_to(m)\n",
|
||
|
"\n",
|
||
|
"m"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"The map `m` also has attributes, accessable via the period point (`.`). That's because `m` is a special type of variable: an `object`. Access the attribute `location` of `m`. You can start by typing `m.l` and then press the key *TAB*. Jupyter will show several options for you to choose from, choose `location`.\n",
|
||
|
"\n",
|
||
|
"**Exercise:** Get the location of `m`."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# YOUR CODE HERE, ~1 line\n",
|
||
|
"None\n",
|
||
|
"# END OF YOUR CODE"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"The map also has an attribute `get_bounds` that is a function. Functions of objects are called methods. You also call them using brackets `()`.\n",
|
||
|
"\n",
|
||
|
"**Exercise:** use `get_bounds()` to get the top-left and bottom-right corners of the map."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {
|
||
|
"collapsed": true
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"# YOUR CODE HERE, ~1 line\n",
|
||
|
"None\n",
|
||
|
"# END OF YOUR CODE"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"You have learned about\n",
|
||
|
"\n",
|
||
|
" * The Python path\n",
|
||
|
" * Installing software via pip\n",
|
||
|
" * Importing code of others\n",
|
||
|
" * Accessing attributes or methods with the dot `some_object.some_attribute`"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"hide_input": false,
|
||
|
"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.4.3"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 2
|
||
|
}
|