{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Python for Data Science Workshop - Spring 2018\n", "May 24, 2018\n", "\n", "Instructor: Fernando Rodriguez\n", "\n", "## Session 5: Strings, Indexing, len(), and Lists" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our goal for today will be to use what we have learned thus far to build the function below.\n", "\n", "This function will take a URL (which is stored as a string) and categorize the url based on a set of criteria." ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "def get_cats_from_url(url):\n", " if len(url.split('/')) < 6:\n", " return \"homepage\"\n", " else:\n", " return url.split('/')[5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "### Exercise: Building Functions\n", "\n", "Build a function that:\n", "1. Takes a variable with a single value (e.g., x = 50), \n", "\n", "2. multiplies that variable it by 100, and \n", "\n", "3. prints the result.\n", "\n", "\n", "So if x = 50, the result will equal 5000\n" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "w = 25\n", "x = 50\n", "y = 100" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2500\n", "12300\n", "10000\n" ] } ], "source": [ "def mult100(x):\n", " solution = x * 100\n", " print solution\n", "\n", "mult100(w)\n", "mult100(x)\n", "mult100(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a function that:\n", "\n", "1. Only multiplies a varaible by 100 if the variable is greater than 30 (hint: use if-else statements in the function).\n", "\n", "2. If the variable is less than 30, the function should print: \"Initial value is less 30. Request denied.\"" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "w = 25\n", "x = 50\n", "y = 100" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial value is less 30. Request denied.\n", "12300\n", "10000\n" ] } ], "source": [ "def mult100(x):\n", " if x > 30:\n", " solution = x * 100\n", " print solution\n", " else:\n", " print \"Initial value is less 30. Request denied.\"\n", "\n", "mult100(w)\n", "mult100(x)\n", "mult100(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "### Strings" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A string is a sequence of characters. \n", "\n", "Use the single or double quotations,\"\", to create a string." ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "fruit = \"banana\"" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "banana\n" ] } ], "source": [ "print fruit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "String are immutable. You cannot modify elements within the string (e.g., replacing the H in hello with L).\n", "\n", "However, you can add more string characters to the beginning or end of a string." ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World\n" ] } ], "source": [ "greeting = 'Hello World'\n", "print greeting" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World!!!\n", "!!!Hello World!!!\n" ] } ], "source": [ "greeting = greeting + \"!!!\"\n", "print greeting\n", "\n", "greeting = \"!!!\" + greeting \n", "print greeting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "### String Methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Strings are examples of Python objects.\n", "\n", "An object contains both data (the actual string itself) and \"methods\".\n", "\n", "Methods are functions that are built into the object and are available to any instance of the object" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "str" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# the `type` function shows the type of an object\n", "type(greeting)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python has a function called `dir` which lists the methods available for an object." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The methods with leading and trailing underscores are 'magic methods'. We won't focus on these for this workshop.\n", "\n", "We will focus on the methods without the underscore. " ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['__add__',\n", " '__class__',\n", " '__contains__',\n", " '__delattr__',\n", " '__doc__',\n", " '__eq__',\n", " '__format__',\n", " '__ge__',\n", " '__getattribute__',\n", " '__getitem__',\n", " '__getnewargs__',\n", " '__getslice__',\n", " '__gt__',\n", " '__hash__',\n", " '__init__',\n", " '__le__',\n", " '__len__',\n", " '__lt__',\n", " '__mod__',\n", " '__mul__',\n", " '__ne__',\n", " '__new__',\n", " '__reduce__',\n", " '__reduce_ex__',\n", " '__repr__',\n", " '__rmod__',\n", " '__rmul__',\n", " '__setattr__',\n", " '__sizeof__',\n", " '__str__',\n", " '__subclasshook__',\n", " '_formatter_field_name_split',\n", " '_formatter_parser',\n", " 'capitalize',\n", " 'center',\n", " 'count',\n", " 'decode',\n", " 'encode',\n", " 'endswith',\n", " 'expandtabs',\n", " 'find',\n", " 'format',\n", " 'index',\n", " 'isalnum',\n", " 'isalpha',\n", " 'isdigit',\n", " 'islower',\n", " 'isspace',\n", " 'istitle',\n", " 'isupper',\n", " 'join',\n", " 'ljust',\n", " 'lower',\n", " 'lstrip',\n", " 'partition',\n", " 'replace',\n", " 'rfind',\n", " 'rindex',\n", " 'rjust',\n", " 'rpartition',\n", " 'rsplit',\n", " 'rstrip',\n", " 'split',\n", " 'splitlines',\n", " 'startswith',\n", " 'strip',\n", " 'swapcase',\n", " 'title',\n", " 'translate',\n", " 'upper',\n", " 'zfill']" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir(greeting)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also use the help command for each object.\n", "\n", "Let's see what rstrip does." ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method_descriptor:\n", "\n", "rstrip(...)\n", " S.rstrip([chars]) -> string or unicode\n", " \n", " Return a copy of the string S with trailing whitespace removed.\n", " If chars is given and not None, remove characters in chars instead.\n", " If chars is unicode, S will be converted to unicode before stripping\n", "\n" ] } ], "source": [ "help(str.rstrip)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use variables in the help function" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function rstrip:\n", "\n", "rstrip(...)\n", " S.rstrip([chars]) -> string or unicode\n", " \n", " Return a copy of the string S with trailing whitespace removed.\n", " If chars is given and not None, remove characters in chars instead.\n", " If chars is unicode, S will be converted to unicode before stripping\n", "\n" ] } ], "source": [ "help(greeting.rstrip)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's try using the method rstrip.\n", "\n", "We invoke methods using dot notation. \n", "\n", "The object (i.e., variable) appears before the dot, and the name of the method appears after the dot." ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World \n" ] } ], "source": [ "greeting = \"Hello World \"\n", "\n", "print greeting" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World !\n" ] } ], "source": [ "print greeting + \"!\"" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World!\n" ] } ], "source": [ "print greeting.rstrip() + \"!\"" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World%%%%&%%%%%&\n" ] } ], "source": [ "greeting = \"Hello World%%%%&%%%%%&\"\n", "print greeting" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World%%%%&%%%%%\n" ] } ], "source": [ "print greeting.rstrip('&')" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World\n" ] } ], "source": [ "print greeting.rstrip('&, %')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "let's try using .upper and .lower" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "HELLO WORLD%%%%&%%%%%&\n", "hello world%%%%&%%%%%&\n" ] } ], "source": [ "print greeting.upper()\n", "print greeting.lower()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can even use mutiple methods in the same line of code" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello world\n" ] } ], "source": [ "print greeting.lower().rstrip('&, %')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember that the outputs for the methods we used have not been saved anywhere." ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World%%%%&%%%%%&\n" ] } ], "source": [ "print greeting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "### Lists\n", "\n", "A list is an ordered sequence of elements. \n", "\n", "Each element inside a list is called an item.\n", "\n", "Lists are defined by having values between square brackets [ ] with elements seperated by commas [1, 2, 3]." ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "numbers = [2, 4, 6, 8]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "### Indexing Lists and Strings\n", "\n", "An index refers to a position within an ordered list. \n", "\n", "Python uses 0-indexing, which means the first character within a list or string is assigned 0. " ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [], "source": [ "colors = ['red', 'blue', 'green']" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf0AAABJCAYAAAA34P9fAAABDWlDQ1BJQ0MgUHJvZmlsZQAAKJFj\nYGCSSCwoyGESYGDIzSspCnJ3UoiIjFJgf8TAyiDBwMUgzMCcmFxc4BgQ4MMABDAaFXy7xsAIoi/r\ngszClMcLuFJSi5OB9B8gTkkuKCphYGBMALKVy0sKQOwWIFskKRvMngFiFwEdCGSvAbHTIewDYDUQ\n9hWwmpAgZyD7BZDNlwRh/wCx08FsJg4QG2ov2A2OQHenKgB9T6LjCYGS1IoSEO2cX1BZlJmeUaIA\nsckzL1lPR8HIwNCCgQEU3hDVnwPB4cgodgYhhgAIscq9wJgIYmBg2YkQCwP6b40+A4MsM0JMTYmB\nQaiegWFjQXJpURnUGEbGswwMhPgAGgVLb95EpwQAAAGcaVRYdFhNTDpjb20uYWRvYmUueG1wAAAA\nAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1\nLjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y\nMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAg\nICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAg\nICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjUwOTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAg\nICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj43MzwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAg\nICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgqGVI90AAAj\n8UlEQVR4Ae2dCWBM1/7HvzOTfZWFJCKRRDSWLBIEJQtiCbW01ZZSS9FqafXpv6901apqLeVp0UVb\n1FpUFc9apaXU+uzELoQgZJnJNsv5n3Mnk8xkkUQkmSS/w83cuffcs3zO8jvnd37njoxxB3JEgAgQ\nASJABIhArScgr/U5pAwSASJABIgAESACEgES+lQRiAARIAJEgAjUEQIk9OtIQVM2iQARIAJEgAiQ\n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\n", "text/plain": [ "" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='images/s5_colorsindex.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using indexing, we can print the item, 'blue'.\n", "\n", "We use [] to access specific characters within a list." ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "blue\n" ] } ], "source": [ "print colors[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A string can be thought of a list of characters, which we can also index." ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfMAAABvCAYAAAD43CnHAAABDWlDQ1BJQ0MgUHJvZmlsZQAAKJFj\nYGCSSCwoyGESYGDIzSspCnJ3UoiIjFJgf8TAyiDIwMUgwGCcmFxc4BgQ4MMABDAaFXy7xsAIoi/r\ngszClMcLuFJSi5OB9B8gTkkuKCphYGBMALKVy0sKQOwWIFskKRvMngFiFwEdCGSvAbHTIewDYDUQ\n9hWwmpAgZyD7BZDNlwRh/wCx08FsJg4QG2ov2A2OQHenKgB9T6LjCYGS1IoSEO2cX1BZlJmeUaIA\nsckzL1lPR8HIwNCCgQEU3hDVnwPB4cgodgYhhgAIscq9wJgIYmBg2YkQCwP6b40+A4MsM0JMTYmB\nQaiegWFjQXJpURnUGEbGswwMhPgAZDNLlTjnIywAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAA\nAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1\nLjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y\nMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAg\nICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAg\nICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjQ5OTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAg\nICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4xMTE8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgog\nICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSbzTOQAA\nO3VJREFUeAHtXQd8VMXW/++nhK4JGvAFlRQFlSIhPEEgRNSnNEHgIaiEIgSx0KT3DgqIIIg0FYIF\nLCAggkoNLbTQQkkoWYQESCCJz2SBXWG+M/fuvdvubjZhN1mSmd8v2elzzn/KmXLujI6RgTACAYGA\nQEAgIBAQCNy1CPzfXUu5IFwgIBAQCAgEBAICAQkBIcxFQxAICAQEAgIBgcBdjoAQ5nd5BQryBQIC\n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\nVwT+H4UgbWJNfknyAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename='images/s4_indexing.png') " ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "n\n" ] } ], "source": [ "print fruit[2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note the differences in how lists and strings are indexed\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "### len() Funciton\n", "\n", "Length gives us the length of a list or a string.\n", "\n", "For lists, it gives us the length of items.\n", "\n", "For strings, it gives us the length fo characters.\n", "\n", "Note the differences in how lists and strings produce length sizes." ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "sampleList = [2, 3, 5, 10, 100]\n", "fruit = \"banana\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "### Exercise: Bringing it all together\n", "\n", "1. Use the .split() method to split the variable, url_file. Make sure to save the output into a new variable (e.g., urlSplit).\n", "2. Print the new variable.\n", "3. Print the length of the new variable.\n", "4. Using indexing, print out 'files' from the list." ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [], "source": [ "url_file = \"https://canvas.eee.uci.edu/courses/2230/files/742190?module_item_id=62039\" \n", "url_assignment = \"https://canvas.eee.uci.edu/courses/2230/assignments/49367/submissions\" \n", "url_home = \"https://canvas.eee.uci.edu/courses/2230\"" ] }, { "cell_type": "code", "execution_count": 97, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['https:', '', 'canvas.eee.uci.edu', 'courses', '2230', 'files', '742190?module_item_id=62039']\n", "7\n", "files\n" ] } ], "source": [ "urlSplit = url_file.split(\"/\")\n", "print urlSplit\n", "print len(urlSplit)\n", "print urlSplit[5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "### Now that we're warmed up, let's write this function\n", "\n", "1. Splits up URL strings into a list\n", "2. Determines the category for each URL string using len() and indexing" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [], "source": [ "def get_cats_from_url(url):\n", " if len(url.split('/')) < 6:\n", " return \"homepage\"\n", " else:\n", " return url.split('/')[5]" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "files\n", "assignments\n", "homepage\n" ] } ], "source": [ "print get_cats_from_url(url_file)\n", "print get_cats_from_url(url_assignment)\n", "print get_cats_from_url(url_home)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll use just three urls to test the function. But in the later weeks, we'll use this function to traverse and categorize all urls in our data." ] } ], "metadata": { "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 2 }