diff --git a/cfu-data-types.ipynb b/cfu-data-types.ipynb index e0fee02..a82a08b 100644 --- a/cfu-data-types.ipynb +++ b/cfu-data-types.ipynb @@ -49,11 +49,68 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Enter your name: Jan\n", + "Enter your age: 39\n", + "Enter your address: Berlin\n", + "Enter your salary: 6000\n", + "Enter your total expenses: 4000\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Jan, who is 39 years old, and lives in Berlin, has 2000.0 dollars left from her salary after expenses. It is True that she has more than $500 left.\n" + ] + } + ], + "source": [ + "name = input(\"Enter your name: \")\n", + "\n", + "age = int(input(\"Enter your age: \"))\n", + "\n", + "address = input(\"Enter your address: \")\n", + "\n", + "salary = float(input(\"Enter your salary: \"))\n", + "\n", + "expenses = float(input(\"Enter your total expenses: \"))\n", + "\n", + "remaining_salary = salary - expenses\n", + "\n", + "remaining_salary = round(remaining_salary, 1)\n", + "\n", + "is_salary_good = remaining_salary >= 500\n", + "\n", + "print(\n", + " f\"{name}, who is {age} years old, and lives in {address}, \"\n", + " f\"has {remaining_salary} dollars left from her salary after expenses. \"\n", + " f\"It is {is_salary_good} that she has more than $500 left.\"\n", + ")# Your code here\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ - "# Your code here\n" + "remaining_salary = salary - expenses" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "is_salary_good = remaining_salary >= 500" ] }, { @@ -85,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -102,12 +159,87 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "some say the world will end in fire some say in ice from what ive tasted of desire i hold with those who favor fire but if it had to perish twice i think i know enough of hate to say that for destruction ice is also great and would suffice python is awesome!\n", + "258\n", + "['some', 'say', 'the', 'world', 'will', 'end', 'in', 'fire', 'some', 'say', 'in', 'ice', 'from', 'what', 'ive', 'tasted', 'of', 'desire', 'i', 'hold', 'with', 'those', 'who', 'favor', 'fire', 'but', 'if', 'it', 'had', 'to', 'perish', 'twice', 'i', 'think', 'i', 'know', 'enough', 'of', 'hate', 'to', 'say', 'that', 'for', 'destruction', 'ice', 'is', 'also', 'great', 'and', 'would', 'suffice', 'python', 'is', 'awesome!']\n" + ] + } + ], "source": [ - "# Your code here\n" + "poem = \"\"\"Some say the world will end in fire,\n", + "Some say in ice.\n", + "From what I’ve tasted of desire\n", + "I hold with those who favor fire.\n", + "But if it had to perish twice,\n", + "I think I know enough of hate\n", + "To say that for destruction ice\n", + "Is also great\n", + "And would suffice.\"\"\"\n", + "\n", + "clean_poem = (\n", + " poem.lower()\n", + " .replace(\",\", \"\")\n", + " .replace(\".\", \"\")\n", + " .replace(\"’\", \"\")\n", + " .replace(\"\\n\", \" \")\n", + ")\n", + "\n", + "new_poem = clean_poem + \" python is awesome!\"\n", + "\n", + "print(new_poem)\n", + "print(len(new_poem))\n", + "\n", + "poem_list = new_poem.split(\" \")\n", + "\n", + "print(poem_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "258\n", + "['some', 'say', 'the', 'world', 'will', 'end', 'in', 'fire', 'some', 'say', 'in', 'ice', 'from', 'what', 'ive', 'tasted', 'of', 'desire', 'i', 'hold', 'with', 'those', 'who', 'favor', 'fire', 'but', 'if', 'it', 'had', 'to', 'perish', 'twice', 'i', 'think', 'i', 'know', 'enough', 'of', 'hate', 'to', 'say', 'that', 'for', 'destruction', 'ice', 'is', 'also', 'great', 'and', 'would', 'suffice', 'python', 'is', 'awesome!']\n" + ] + } + ], + "source": [ + "clean_poem = (\n", + " poem\n", + " .lower()\n", + " .replace(\",\", \"\")\n", + " .replace(\".\", \"\")\n", + " .replace(\"’\", \"\")\n", + " .replace(\"\\n\", \" \")\n", + ")\n", + "\n", + "new_poem = clean_poem + \" python is awesome!\"\n", + "\n", + "print(len(new_poem))\n", + "\n", + "poem_list = new_poem.split(\" \")\n", + "\n", + "print(poem_list)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -126,7 +258,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.13" + "version": "3.13.14" } }, "nbformat": 4, diff --git a/week_1/day_1/1.1_data_structures.ipynb b/week_1/day_1/1.1_data_structures.ipynb new file mode 100644 index 0000000..bb74518 --- /dev/null +++ b/week_1/day_1/1.1_data_structures.ipynb @@ -0,0 +1,1282 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "103c8f9f", + "metadata": { + "toc": true + }, + "source": [ + "

Table of Contents

\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "618d40fe", + "metadata": {}, + "source": [ + "![elgif](https://media.giphy.com/media/coxQHKASG60HrHtvkt/giphy.gif)" + ] + }, + { + "cell_type": "markdown", + "id": "813ac079-1796-4acf-9bd9-90702cb870d8", + "metadata": { + "tags": [] + }, + "source": [ + "# Prework review - Data types and Data structures" + ] + }, + { + "cell_type": "markdown", + "id": "be6c0098-5bdf-44d5-be00-4092f33415eb", + "metadata": {}, + "source": [ + "## Data Types " + ] + }, + { + "cell_type": "markdown", + "id": "3e17c061-b60d-4476-b16c-1c76c0554040", + "metadata": {}, + "source": [ + "Let's review the fundamental data types in Python:\n", + "\n", + "- Integer: Represents whole numbers (e.g., 10, 3, -5, 0).\n", + "- Float: Represents decimal numbers (e.g., 20.2, 100.2403, -5.50).\n", + "- String: Represents text or a group of characters (e.g., \"Hello, World!\", \"Python\").\n", + "- Boolean: Represents either True or False.\n", + "\n", + "The `type()` function is used to check the data type of a variable." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eef61c8c", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "16dc4a43-6f9d-4f8d-b946-3fb5e67d4cb3", + "metadata": {}, + "source": [ + "**Observation**" + ] + }, + { + "cell_type": "markdown", + "id": "38f2e106-8493-4df2-bd0c-9156462ea18b", + "metadata": {}, + "source": [ + "In Python, Boolean values (True and False) are implicitly treated as integers, with True being equivalent to 1 and False being equivalent to 0." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad6316eb-49ee-4e30-8160-ffa29594fdba", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "3fae62dd-08db-4d54-a95f-8eb673ebba9b", + "metadata": {}, + "source": [ + "### Arithmetic Operators " + ] + }, + { + "cell_type": "markdown", + "id": "1295c68f-a366-4459-80ab-bbc8502842f4", + "metadata": {}, + "source": [ + "Arithmetic operators are used to perform mathematical calculations on numeric data types.\n", + "- (+): Adds values.\n", + "- (-): Subtracts values.\n", + "- (*): Multiplies values.\n", + "- (/): Divides values.\n", + "- (//): Performs integer division.\n", + "- (%): Returns remainder of division.\n", + "- (**): Raises a value to a power.\n", + "\n", + "Arithmetic operators on strings in Python:\n", + "\n", + "- Addition (+): Concatenates two strings.\n", + "- Multiplication (*): Repeats a string.\n", + "- Others (-, /, %, **): Not applicable to strings." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fe37f3d1-149f-41f4-8c17-f1580420bea8", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "904d03ac-4898-4aab-94d0-9aad79085c3e", + "metadata": {}, + "source": [ + "### Assignment Operators" + ] + }, + { + "cell_type": "markdown", + "id": "6fb64855-9d00-4334-bb57-0c6006b24f7e", + "metadata": {}, + "source": [ + "Assignment operators in Python are used to assign values to variables. They combine the assignment (=) operator with other operators (e.g., +=, -=, *=) to perform arithmetic or logical operations while assigning the result back to the variable." + ] + }, + { + "cell_type": "raw", + "id": "3b3b6151-a1cf-410e-b409-27f22e2ab75d", + "metadata": {}, + "source": [ + "x += 3 is equivalent to x = x + 3" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cbdd6669-b0a7-4384-a71e-67ee5a4b50f4", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "949f7813-a73e-45ee-996a-165eac50c507", + "metadata": {}, + "source": [ + "### Comparison Operators" + ] + }, + { + "cell_type": "markdown", + "id": "4930ea0e-10f2-4df0-973d-60255aa027bf", + "metadata": {}, + "source": [ + "Comparison operators in Python are used to compare values and return a boolean result (True or False). They include operators such as == (equal to), != (not equal to), > (greater than), < (less than), >= (greater than or equal to), and <= (less than or equal to).\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "48c78ab2-c2ba-4792-af74-673d05cc06bb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "561b79f4-6ebe-46ac-953c-2e67084eb528", + "metadata": {}, + "source": [ + "### Logical Operators" + ] + }, + { + "cell_type": "markdown", + "id": "ddeabd60-2024-4ac4-ab74-2636d5397a8b", + "metadata": {}, + "source": [ + "Python's logical operators allow you to manipulate logical values (True or False) and make decisions based on conditions. The three logical operators in Python are:\n", + "\n", + "- `and`: Returns True if both conditions are True, otherwise False.\n", + "- `or`: Returns True if at least one condition is True, otherwise False.\n", + "- `not`: Negates the logical value of a condition." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "358ff59a-ace0-4cc5-840a-f1112835bf05", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "d696bfa4-d486-4b91-a715-1c5215b499e5", + "metadata": { + "tags": [] + }, + "source": [ + "### Data Type Compatibility and Casting" + ] + }, + { + "cell_type": "markdown", + "id": "3c8aa343-4b83-4b25-a4db-6d982a136003", + "metadata": {}, + "source": [ + "Different data types in Python have specific rules for how they can be used together. Performing operations with incompatible data types can result in errors if the computer doesn't know how to perform it. " + ] + }, + { + "cell_type": "markdown", + "id": "edf71839-14e4-4f6d-a856-0968ea7b0dab", + "metadata": {}, + "source": [ + "Data type casting in Python allows you to convert values from one type to another, as long as the computer knows how to do it (as long as it makes sense to do so). You can use the following functions for type conversion:\n", + "\n", + "- `int()`: Converts a value to an integer.\n", + "- `float()`: Converts a value to a float.\n", + "- `str()`: Converts a value to a string.\n", + "- `bool()`: Converts a value to a boolean." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b149e36d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "a8cbf612-31f9-4eb6-88ae-72e89fd9fa6b", + "metadata": { + "tags": [] + }, + "source": [ + "## String methods and functions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3825dd52-176e-4b08-8f5a-72a7e855246d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "c8e5fa40-7c11-4e77-9fd1-9dc90aa9dc99", + "metadata": {}, + "source": [ + "### Formatting Strings" + ] + }, + { + "cell_type": "markdown", + "id": "e4962711-4fa0-45b3-b486-43ca59736b9a", + "metadata": {}, + "source": [ + "Let's look at different ways to format strings in Python. String formatting allows you to incorporate variables or values into a string in a structured and readable manner.\n", + "\n", + "We'll look at three ways:\n", + "\n", + "1. The first example uses f-strings (formatted string literals), denoted by the 'f' at the beginning of the string. Inside the curly braces, you can include variables or expressions that will be evaluated and replaced with their respective values when the string is created." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "39b2c29a-31ed-4473-9d59-923144e99631", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "22e6bc39-2e31-4c25-8e59-555351158f56", + "metadata": {}, + "source": [ + "2. The second example uses the `format` method to insert the value of the variable `name` into the string. Within the string, you will find a placeholder `{}` where the value will be placed. The `format` method is called on the string and takes the value to be inserted as an argument." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c1de1fa8-6f77-4d63-b891-0af08348848b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "af664ac1-bc02-4910-9acf-6073796cd6c3", + "metadata": {}, + "source": [ + "3. The third example demonstrates simple concatenation. The string \"Hello my name is\" is concatenated with a space and the variable `name` using the `+` operator." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b6520eb5-93fe-4eed-ad2f-4c311bf94c90", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "3ff8ff64-1add-44a2-8c45-edd9e04d80dc", + "metadata": {}, + "source": [ + "### Input and output functions\n", + "\n", + "Input and output are concepts in programming that allow us to interact with the user and display information on the screen. In Python, we commonly use the console as the standard input and output device.\n", + "\n", + "**Input**:\n", + "To get input from the user, we use the `input()` function. It displays a message on the console and waits for the user to enter a value. The value entered by the user is returned as a **string**.\n", + "\n", + "Here's an example:\n", + "```python\n", + "name = input(\"Enter your name: \")\n", + "print(\"Hello, \" + name + \"!\")\n", + "```\n", + "In this example, the `input()` function displays the message \"Enter your name: \" on the console. The user can then enter their name, and the input is assigned to the variable `name`. Finally, the program prints a greeting message using the entered name.\n", + "\n", + "**Output**:\n", + "To display information or results on the console, we use the `print()` function. It takes one or more values as arguments (**strings**) and displays them as output.\n", + "\n", + "Here's an example:\n", + "```python\n", + "age = 25\n", + "print(\"Your age is:\", age)\n", + "```\n", + "In this example, the `print()` function displays the string \"Your age is:\" followed by the value of the `age` variable. The output will be \"Your age is: 25\".\n", + "\n", + "You can also format the output using placeholders or string concatenation, as shown in the previous examples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "764e181e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "56148c6d-d9c7-4b30-9223-8e5532c48423", + "metadata": {}, + "source": [ + "When using the `print()` function in Python, it's important to note that it does not have a return value. If you assign the result of a `print()` statement to a variable or return it in a function, the value will be `None`." + ] + }, + { + "cell_type": "markdown", + "id": "650b4a94-6a3e-4a82-9359-c53d92766a7e", + "metadata": {}, + "source": [ + "### πŸ’‘ Check for understanding\n", + "\n", + "Create a program that asks the user to enter their age. The program should then calculate and display the user's age after 10 years.\n", + "\n", + "Instructions:\n", + "1. Prompt the user to enter their age using the `input()` function and store it in a variable.\n", + "2. Convert the user's input from a string to an integer using the `int()` function and store it in another variable.\n", + "3. Add 10 to the user's age using the `+` operator and store the result in a third variable.\n", + "4. Display the user's age after 10 years by printing the result.\n", + "\n", + "Example Output:\n", + "Enter your age: 25\n", + "Your age after 10 years: 35\n", + "\n", + "Note: Ensure that you handle any potential errors related to casting." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7f52e656-21a5-412a-b56a-0f8805366f49", + "metadata": {}, + "outputs": [], + "source": [ + "# Your code goes here" + ] + }, + { + "cell_type": "markdown", + "id": "5299fd13-4e98-45c7-84f2-48a5538bead3", + "metadata": { + "tags": [] + }, + "source": [ + "## Data structures " + ] + }, + { + "cell_type": "markdown", + "id": "58ae4a1d-6039-4f07-b159-9df5fcd2f78e", + "metadata": {}, + "source": [ + "Data structures are fundamental components in programming that provide a way to manage and **work with collections of values** or entities. " + ] + }, + { + "cell_type": "markdown", + "id": "7f2bedf8-c0fc-4456-b75f-b0347a4e7256", + "metadata": {}, + "source": [ + "Data structures in Python can be categorized as either mutable or immutable.\n", + "\n", + "- **Mutable** data structures, like lists, dictionaries, and sets, can be modified after they are created.\n", + "- **Immutable** data structures, such as strings and tuples, cannot be changed once defined." + ] + }, + { + "cell_type": "markdown", + "id": "0e14084d-5a12-43ab-a188-4fd74344529d", + "metadata": {}, + "source": [ + "Python Data Structures:\n", + "- **Lists**: Ordered, mutable collections that store elements of different types and allow indexing, appending, removing, and modifying. [ ]\n", + "- **Dictionaries**: Ordered (from Python 3.6), mutable key-value pairs for efficient lookup and organization of data. { }\n", + "- **Sets**: Unordered, mutable collections of unique elements with set operations like union and intersection. { }\n", + "- **Tuples**: Ordered, immutable collections commonly used for fixed values. ( )" + ] + }, + { + "cell_type": "markdown", + "id": "4d1afcd5-c5df-4997-986c-7dcf26773a75", + "metadata": {}, + "source": [ + "### Lists" + ] + }, + { + "cell_type": "markdown", + "id": "ee2daf21-6f62-4894-b26e-1daf7cca89cb", + "metadata": {}, + "source": [ + "To create a list, you can simply assign a sequence of elements to a variable using the square brackets notation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e458d22-4aa7-433d-a4c1-2acf4e499df5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "247eb050-d743-4747-b10b-34ffaddc5333", + "metadata": {}, + "source": [ + "#### Indexing and slicing" + ] + }, + { + "cell_type": "markdown", + "id": "d52e7632-b450-413f-934d-9a17af6e0bbf", + "metadata": {}, + "source": [ + "In Python, indexing allows you to access elements within a list using their unique index values. Indexing syntax is as follows:\n", + "\n", + "```python\n", + "list_name[index]\n", + "```\n", + "\n", + "The index starts from 0 for the first element and can also be negative to refer to elements from the end of the list (e.g., -1 for the last element)." + ] + }, + { + "cell_type": "markdown", + "id": "72cb0ec6-7a8d-436c-af9e-860ec95df4c7", + "metadata": {}, + "source": [ + "##### Slicing" + ] + }, + { + "cell_type": "markdown", + "id": "d31d9634-14ca-4ced-8e0e-ad16ce634a80", + "metadata": {}, + "source": [ + "In Python, slicing allows you to extract a portion of a sequence using the syntax `sequence[start:end:step]`. The `start` index is inclusive, the `end` index is exclusive, and the `step` value (optional) controls the increment between elements in the slice. \n", + "\n", + "Note that if you omit a value, such as `x[:stop]`, it is automatically replaced with a default value: the first element for `start`, the last element for `end`, and `1` for `step`." + ] + }, + { + "cell_type": "markdown", + "id": "836a8d24-29ff-4cc6-89e6-562a1ce789e4", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e33d27d0", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "4046120b-1143-4979-84f3-7e65e656bb9c", + "metadata": {}, + "source": [ + "#### Modifying List Elements\n", + "\n", + "Lists are mutable, meaning you can modify their elements after creation. You can assign new values to specific elements using their index." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "02c65c42-e5e6-4382-ae11-508a3b7b04e5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "d2750a99-22c5-4d89-9043-10062b5c7c01", + "metadata": {}, + "source": [ + "#### List Operators and functions\n", + "\n", + "Lists support various operations, such as concatenation (+) to combine two lists or repetition (*) to repeat a list." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e322817e-499f-48f7-be5b-17bfdf948104", + "metadata": {}, + "outputs": [], + "source": [ + "my_list = [1, 2, 3]" + ] + }, + { + "cell_type": "markdown", + "id": "a18f13da-24e3-4d49-a992-df63e7802495", + "metadata": {}, + "source": [ + "#### πŸ’‘ Check for understanding\n", + "\n", + "Look at the error we get if we execute the following line again. Why do you think it is?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5988d2f1-cdf3-4354-a88d-bf0cdf6c3550", + "metadata": {}, + "outputs": [], + "source": [ + "my_list.remove(3) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8abd190-21ed-44d8-b66c-e33331334f5f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "f6854f7a-87c4-4954-8f27-b70e2b2207e6", + "metadata": {}, + "source": [ + "Note: The method `sort()` is a list method that sorts the list in-place, while the function `sorted()` is a built-in Python function that returns a new sorted list without modifying the original list." + ] + }, + { + "cell_type": "markdown", + "id": "41b4719e-5d86-4eb7-ac6d-c103f210420f", + "metadata": {}, + "source": [ + "### Dictionaries " + ] + }, + { + "cell_type": "markdown", + "id": "31594a7d-b5d4-480c-94bc-8657361b9b12", + "metadata": {}, + "source": [ + "In Python, dictionaries are created using curly braces {} and consist of key-value pairs separated by commas. Keys in a dictionary must be unique, and if a key already exists, assigning a new value to that key will overwrite the existing value." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2fe5eb48", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "6dc7b2bd-e15f-4f9d-8702-906dd24f39c7", + "metadata": {}, + "source": [ + "#### Accessing values using the keys" + ] + }, + { + "cell_type": "markdown", + "id": "c266d2c8-0a13-4914-952e-094e8dafb858", + "metadata": {}, + "source": [ + "To access values in a dictionary, use the corresponding key in square brackets [], noting that keys are case-sensitive." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "41e59644", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "c6436cc8-c6c3-4f23-9799-a2e407fa762b", + "metadata": {}, + "source": [ + "#### Adding and Modifying Values\n", + "\n", + "To add a new key-value pair to a dictionary, use the syntax `[] = value`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "893cb9c6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "232d29c6-d3b5-43fe-b78a-d4b21cbf0c81", + "metadata": {}, + "source": [ + "Values inside a dictionary can be any data type, including lists or dictionaries itself." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8101fe0e", + "metadata": {}, + "outputs": [], + "source": [ + "student_data = {\n", + " 'Name': 'John', \n", + " 'E-mail': 'john@gmail.com', \n", + " 'Age': 28, \n", + " 'subjects': ['math', 'science', 'history', 'geography'] \n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "b70a4adb-82b6-4599-998a-a2937d430dfa", + "metadata": {}, + "source": [ + "**Note**: Value associated with the key 'subjects' is a list. According to this, if we want to access 'science', we need first to access the `subjects` key in the dictionary. Then, as the `value` is a list, we need to access the corresponding element of the list.\n", + "\n", + "To access the value 'science' in the `student_data` dictionary, you can use the expression `student_data['subjects'][1]`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8ca10f21-f39e-4a1d-a726-7e820f1b3181", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "c7b44f4f-0e56-4753-a8dd-23cf93160c23", + "metadata": {}, + "source": [ + "#### Removing Values\n", + "\n", + "You can remove a key-value pair from a dictionary using the `del` keyword or the `pop` method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "90903cb7-7644-4702-9321-f8464f89faed", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "341c8a07-81d4-43e5-a40e-26a9b0053a33", + "metadata": {}, + "source": [ + "#### Checking Key Existence\n", + "\n", + "To check if a key exists in a dictionary, you can use the `in` keyword:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07046873-9b8a-4446-a48b-bfd9c935cd20", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "37d42539-6e81-4aed-98f8-3f70ffc0e992", + "metadata": {}, + "source": [ + "#### Dictionary Methods" + ] + }, + { + "cell_type": "markdown", + "id": "18885f64-dce9-4375-a4b1-37df897855cc", + "metadata": {}, + "source": [ + "Python dictionaries provide several useful methods:\n", + "- **`.keys()`**: Returns a view object containing all the keys in the dictionary.\n", + "- **`.values()`**: Returns a view object containing all the values in the dictionary.\n", + "- **`.items()`**: Returns a view object containing all the key-value pairs in the dictionary as tuples.\n", + "- **`get(key)`**: Returns the value associated with the specified key. If the key is not found, it returns a default value (None by default) instead of raising an error." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ec475c8b-b2b5-4c87-afc1-2ced5166a10f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "5108d421-4f84-454a-81fe-c0b26759aba5", + "metadata": {}, + "source": [ + "In Python, the `print()` function displays the value passed to it and outputs it to the console. If the value is `None`, the function explicitly displays the word `None` as the output. In Jupyter Notebook, variables are automatically displayed as output when mentioned in a cell, but if the value is `None`, the notebook environment shows nothing instead of displaying `None`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e93d2989-34c2-48bc-a8d0-3f6bc34b1068", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "09533aba-5aaa-4316-b8ae-29313652c73c", + "metadata": {}, + "source": [ + "### Sets\n", + "\n", + "Sets in Python are unordered collections of unique elements defined using curly braces {} or the set() function. They can contain elements of different data types, do not allow duplicates, and are mutable. Sets support operations like union, intersection, and difference." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31d4f47d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "5c6f9ada-6dd4-4131-8754-e5097570c354", + "metadata": {}, + "source": [ + "### Tuples\n", + "\n", + "Tuples are immutable and defined using parentheses (). They can store elements of different types, and once created, their elements cannot be modified. Tuples are often used to group related data together." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cee6451b-a0f4-4701-ad28-a1ef0a7dcfad", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "f1d43f6e-6746-4488-b6a3-aabe1a57bf46", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "It is always crucial to know what kind of variable you have in your hands because this determines how to retrieve the data. \n", + "\n", + "- lists and tuples -> accessed by **index**\n", + "- dictionaries -> accessed by **key** (misleadingly, the key can be a number but usually is a string)\n", + "- sets -> since sets are unordered, they do not support indexing or retrieval of elements by position\n", + "\n", + "\n", + "To identify these types:\n", + "- Lists are easily recognizable as they begin and end with square brackets `[ ]`.\n", + "- Dictionaries are enclosed in curly brackets `{ }`.\n", + "- Sets are also enclosed in curly brackets `{ }`, but they lack key-value pairs.\n", + "- Tuples are indicated by parentheses `( )`." + ] + }, + { + "cell_type": "markdown", + "id": "1e02990b-5522-4ee2-aa1e-c9e3b7b2601c", + "metadata": {}, + "source": [ + "![](https://github.com/data-bootcamp-v4/lessons/blob/main/img/data-structures.png?raw=true)" + ] + }, + { + "cell_type": "markdown", + "id": "08143668-d89c-40a4-8e3d-4058f0a6b66d", + "metadata": {}, + "source": [ + "## πŸ’‘ Check for understanding" + ] + }, + { + "cell_type": "markdown", + "id": "81d83946-739d-47b6-949d-3d80322f8c47", + "metadata": {}, + "source": [ + "Write a program that allows the user to enter the grades of five students. The program should store these grades in a list and then display the average grade." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f29748e1-523c-4ba3-a74c-c17d4314717e", + "metadata": {}, + "outputs": [], + "source": [ + "# Write your code here" + ] + }, + { + "cell_type": "markdown", + "id": "05fb5689-6131-4ebb-97af-6408f8813217", + "metadata": {}, + "source": [ + "**Please refer to the following hint only if you have attempted the Check for Understanding and are still confused. Do not read it before giving it a try.**:\n", + "\n", + "Here's a step-by-step guide:\n", + "\n", + "1. Create an empty list to store the grades.\n", + "2. Use the `input()` function to get the grade from the user for each student. Append each grade to the list.\n", + "3. Calculate the average grade by summing up all the grades in the list and dividing by the number of grades.\n", + "4. Display the average grade to the user." + ] + }, + { + "cell_type": "markdown", + "id": "6aabbf00-3eba-412b-860a-e7f9727ff71e", + "metadata": {}, + "source": [ + "# Extra: nested dictionaries " + ] + }, + { + "cell_type": "markdown", + "id": "5f25699d-f74f-4136-90e6-2bf44d44d967", + "metadata": {}, + "source": [ + "In Python, a nested dictionary is a dictionary where the values are themselves dictionaries. This can be useful when you need to organize data into multiple levels or categories. Here are some key points about nested dictionaries:\n", + "\n", + "- A nested dictionary can have multiple levels of nesting, with each level representing a specific category or subcategory.\n", + "- You can access the values in a nested dictionary by specifying the keys at each level.\n", + "- You can add, modify, or remove elements from a nested dictionary, just like with regular dictionaries.\n", + "- Each level of a nested dictionary can have different keys and values, providing flexibility in structuring your data.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89c96830-96e2-4178-b3a1-8afed9b641e4", + "metadata": {}, + "outputs": [], + "source": [ + "# Creating a nested dictionary\n", + "student_data = {\n", + " 'John': {\n", + " 'age': 20,\n", + " 'major': 'Computer Science',\n", + " 'grades': [85, 90, 78]\n", + " },\n", + " 'Jane': {\n", + " 'age': 22,\n", + " 'major': 'Biology',\n", + " 'grades': [92, 88, 95]\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a25cd58c-19dc-4e35-b133-3b4b1ae61321", + "metadata": {}, + "outputs": [], + "source": [ + "# Accessing values in a nested dictionary\n", + "john_age = student_data['John']['age']\n", + "jane_major = student_data['Jane']['major']\n", + "john_grades = student_data['John']['grades']\n", + "\n", + "print(john_age) # Output: 20\n", + "print(jane_major) # Output: Biology\n", + "print(john_grades) # Output: [85, 90, 78]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7bf9651-8ca7-4809-9f2b-ac77ec1b868a", + "metadata": {}, + "outputs": [], + "source": [ + "# Modifying values in a nested dictionary\n", + "student_data['John']['major'] = 'Electrical Engineering'\n", + "student_data['Jane']['grades'].append(97)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6c496256-0870-4455-96a9-0aefa9bd6c31", + "metadata": {}, + "outputs": [], + "source": [ + "# Adding a new student to the nested dictionary\n", + "student_data['Sarah'] = {\n", + " 'age': 19,\n", + " 'major': 'Physics',\n", + " 'grades': [90, 91, 88]\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "870021a8-0342-4068-8569-102655de8152", + "metadata": {}, + "outputs": [], + "source": [ + "# Removing a student from the nested dictionary\n", + "del student_data['John']\n", + "\n", + "print(student_data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd09ff80-cfac-48ab-a78d-e653bf9d85f0", + "metadata": {}, + "outputs": [], + "source": [ + "student_data.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a049c2d5-d318-4f0e-95e2-5d3945e84def", + "metadata": {}, + "outputs": [], + "source": [ + "student_data.values()" + ] + }, + { + "cell_type": "markdown", + "id": "da05cac7-13d8-4ecd-bb6e-c244c29ede11", + "metadata": {}, + "source": [ + "As you can see, the `keys` of a dictionary can be either:\n", + "\n", + "- strings \n", + "- numbers\n", + "\n", + "In this above example, the dictionary `keys` which are strings. In this particular case, the `values` are also dictionaries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f9406c7-6da3-430f-a99c-db109cced171", + "metadata": {}, + "outputs": [], + "source": [ + "student_data[\"Jane\"].keys()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b9ec1e3-7e34-4340-863f-09b442c113ba", + "metadata": {}, + "outputs": [], + "source": [ + "student_data[\"Jane\"].values()" + ] + }, + { + "cell_type": "markdown", + "id": "12cf0a81-5f6b-434b-aef2-ebb9afc191ce", + "metadata": {}, + "source": [ + "πŸ’‘Check for understanding: how would you access the first grade of Jane?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "607b21fe-fbd6-430a-b94e-df80ee7864f7", + "metadata": {}, + "outputs": [], + "source": [ + "# Try it yourself here" + ] + }, + { + "cell_type": "markdown", + "id": "2976667a-d51a-4188-ba3a-67a47097d071", + "metadata": {}, + "source": [ + "We mentioned nested dictionaries (dictionaries inside dictionaries) but as you can see in the example, we can also have lists inside dictionaries. " + ] + }, + { + "cell_type": "markdown", + "id": "b1f00c61-f13c-4155-a7d4-d663de273a44", + "metadata": {}, + "source": [ + "You can also have lists in which each element is a dictionary. Therefore the amount of possible combinations and levels of nesting is endless." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78d88957-0a66-4df7-b656-5edaeaf43a6c", + "metadata": {}, + "outputs": [], + "source": [ + "my_data = [{'Mike': [25,23000],'Jane': [38, 40000],'Bill': [45,35000]},{'Developers': ['Mike','Bill']},{'HR': ['Jane']}]\n", + "my_data" + ] + }, + { + "cell_type": "markdown", + "id": "b6a957c4-d529-4fa9-a1d2-dfea3e59adcc", + "metadata": {}, + "source": [ + "This is an example of a nested list with three elements, and each element is a dictionary. When working with nested data structures like this, it is important to understand the type of variable you are dealing with.\n", + "\n", + "Let's check the type of the variable `my_data`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1482c0ca-8477-4b4b-8e15-c5a137a62bf9", + "metadata": {}, + "outputs": [], + "source": [ + "type(my_data)" + ] + }, + { + "cell_type": "markdown", + "id": "a87a5836-1c86-4a1e-8a12-5201daa9e4b5", + "metadata": {}, + "source": [ + "Let's access the first element of the list. Since the variable is a **list**, we use **indexing**. Indexing allows us to retrieve specific elements from a list by their position. In this case, to access the first element, we use the index 0 since Python starts counting from 0." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "247f2ac8-bcaf-46f8-bd70-25a9e51e69eb", + "metadata": {}, + "outputs": [], + "source": [ + "my_data[0]" + ] + }, + { + "cell_type": "markdown", + "id": "88fe62d8-d888-4e97-8856-959ee1bd47aa", + "metadata": {}, + "source": [ + "This element is a dictionary, which can be determined by its structure and the presence of key-value pairs. However, if you're unsure about the data type, you can use the `type()` function to confirm it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9a049816-1098-4799-82a8-003fa5ccd263", + "metadata": {}, + "outputs": [], + "source": [ + "type(my_data[0])" + ] + }, + { + "cell_type": "markdown", + "id": "635d4205-cc13-4a0b-aa87-c0898da9d3dd", + "metadata": {}, + "source": [ + "Now let's access the data of 'Jane'. Since this element is a **dictionary**, we need to access its values using the corresponding **keys**." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "062356f6-f02c-4d11-9dd0-2e55cfa438b8", + "metadata": {}, + "outputs": [], + "source": [ + "my_data[0]['Jane']" + ] + }, + { + "cell_type": "markdown", + "id": "089625c7-dfd1-4b7a-b490-9821eb84572d", + "metadata": {}, + "source": [ + "As we can see, we get another **list**. To access the last element of this list, we can use its **index**." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9bd9d9ac-91c9-48df-8973-18de70bfa330", + "metadata": {}, + "outputs": [], + "source": [ + "type(my_data[0]['Jane']) # Let's make sure its a list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fefcc28d-84b9-4e6e-815b-e924a99ff32e", + "metadata": {}, + "outputs": [], + "source": [ + "my_data[0]['Jane'][1]" + ] + }, + { + "cell_type": "markdown", + "id": "b7107a1a-b95b-4af4-bff4-91a42d435d55", + "metadata": {}, + "source": [ + "# Extra: \"is\" vs \"==\" " + ] + }, + { + "cell_type": "markdown", + "id": "644820c4-1c6a-4793-8153-4a34d6b822de", + "metadata": {}, + "source": [ + "- `==` compares the values of two objects and returns `True` if they are equal.\n", + "- `is` compares the identity of two objects and returns `True` if they refer to the same object in memory.\n", + "- `id()` is a built-in function in Python that returns the unique identifier (memory address) of an object. Each object has a distinct `id()` value, allowing us to differentiate between different objects even if they have the same values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4733a76e-fa9f-4c21-b277-3ecca378139c", + "metadata": {}, + "outputs": [], + "source": [ + "a = [1, 2]\n", + "b = [1, 2]\n", + "\n", + "# Comparing the values of a and b using ==\n", + "print(a == b) # True (Both lists have the same values)\n", + "\n", + "# Comparing the identity of a and b using is\n", + "print(a is b) # False (a and b are different objects in memory)\n", + "\n", + "# Printing the unique identifier (memory address) of a and b\n", + "print(id(a))\n", + "print(id(b))\n", + "\n", + "# Assigning b to a\n", + "a = b\n", + "\n", + "# Comparing the identity of a and b again after assignment\n", + "print(a is b) # True (a and b now refer to the same object)\n", + "\n", + "# Printing the updated memory addresses of a and b\n", + "print(id(a))\n", + "print(id(b))\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.13.14" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": true, + "toc_position": { + "height": "537.273px", + "left": "1007.99px", + "top": "110.824px", + "width": "165px" + }, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/week_1/day_1/lab-python-data-structures b/week_1/day_1/lab-python-data-structures new file mode 160000 index 0000000..250c5f8 --- /dev/null +++ b/week_1/day_1/lab-python-data-structures @@ -0,0 +1 @@ +Subproject commit 250c5f8d9b7bf5130d6b5f131781834ad18590a4 diff --git a/week_1/day_1/lab-python-data-types-extra/README.md b/week_1/day_1/lab-python-data-types-extra/README.md new file mode 100644 index 0000000..cf24bb0 --- /dev/null +++ b/week_1/day_1/lab-python-data-types-extra/README.md @@ -0,0 +1,62 @@ +![logo_ironhack_blue 7](https://user-images.githubusercontent.com/23629340/40541063-a07a0a8a-601a-11e8-91b5-2f13e4e6b441.png) + +# CFU | Data types + +
+ +

Learning Goals

+
+ + This exercise allows you to practice and apply the concepts and techniques taught in class. + + Upon completion of this exercise, you will be able to: + + - Use different data types such as integers, floats, strings, and Boolean and apply them appropriately. + - Apply different operators and methods to manipulate. + +
+
+ +
+ +
+ +

Prerequisites

+
+Before this starting this lab, you should have learnt about: + +- Basic Pyhon syntax +- Variables +- Data types, operators and methods + +
+
+ +
+ +## Introduction + +In this exercise, you will have the opportunity to dive into one of the fundamental building blocks of programming: data types. + +As you may already know, data types are the different kinds of values that can be stored in a program, such as integers, floats, and strings. + +Understanding data types is essential to working with data in any programming language. + +
+ +**Happy coding!** :heart: + + + + +## Getting Started + +Complete the challenges in the notebook. Follow the instructions and add your code and explanations as necessary. + + +## Submission + +- No need to submit. + + + diff --git a/week_1/day_1/lab-python-data-types-extra/cfu-data-types.ipynb b/week_1/day_1/lab-python-data-types-extra/cfu-data-types.ipynb new file mode 100644 index 0000000..e0fee02 --- /dev/null +++ b/week_1/day_1/lab-python-data-types-extra/cfu-data-types.ipynb @@ -0,0 +1,134 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# CFU | Data Types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with Data Types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Objective: Practice working with different data types and their corresponding operations." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercise 1: Calculate remaining salary" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this exercise, prompt the user to enter their personal information such as name, age, address, salary, and expenses, and then perform some calculations to determine how much money they have left after expenses. \n", + "\n", + "Use data type casting to ensure that the age, salary, and expenses are stored as integers or floats, as appropriate, and round the remaining money to one decimal. \n", + "\n", + "Use a boolean variable to indicate whether the remaining salary is greater than or equal to 500. \n", + "\n", + "Finally, you will use string formatting to print a message to the screen in the following format: \n", + "\"*name*, who is *age* years old, and lives in *address* has *remaining_salary* dollars left from her salary after expenses. It is *is_salary_good* that she has more than $500 left.\", using the mentioned variables.\n", + "\n", + "*Hint:* \n", + "- *You can use the input() function to ask the user to enter their information. Beware that input() function returns a String.*\n", + "- *You can round the remaining salary to one decimal using the round() function.*\n", + "- *Use data type conversion functions. Recommended external resources: [Data type conversion](https://www.geeksforgeeks.org/type-conversion-in-python/)*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Your code here\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "### Exercise 2: Text Cleaning and Concatenation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Write code that takes text from the variable `poem`, removes the punctuation and leaves everything in lowercase. \n", + "\n", + "Concatenate the resulting string with the string \"python is awesome!\" and store the result in a new variable. \n", + "\n", + "Print the length of the new string.\n", + "\n", + "Split the string into a list of strings using the space delimiter, save it in a variable `poem_list` and print it. \n", + "\n", + "*Hint:*\n", + "\n", + "- *You can use the len() function to get the length of a string.*\n", + "- *Search string methods to accomplish the other steps. Recommended External Resources: [Python String Methods](https://www.w3schools.com/python/python_ref_string.asp)*\n", + "- *Use method chaining to simplify your code. If you are not sure what it is, read this tutorial before: https://pyneng.readthedocs.io/en/latest/book/04_data_structures/method_chaining.html*\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "poem = \"\"\"Some say the world will end in fire,\n", + "Some say in ice.\n", + "From what I’ve tasted of desire\n", + "I hold with those who favor fire.\n", + "But if it had to perish twice,\n", + "I think I know enough of hate\n", + "To say that for destruction ice\n", + "Is also great\n", + "And would suffice.\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Your code here\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/week_1/day_2/lab-python-flow-control b/week_1/day_2/lab-python-flow-control new file mode 160000 index 0000000..148f6e7 --- /dev/null +++ b/week_1/day_2/lab-python-flow-control @@ -0,0 +1 @@ +Subproject commit 148f6e7390ed27b58ca1212023efa73b14e9ee9b diff --git a/week_1/day_2/lab-python-flow-control-extra b/week_1/day_2/lab-python-flow-control-extra new file mode 160000 index 0000000..5d5dceb --- /dev/null +++ b/week_1/day_2/lab-python-flow-control-extra @@ -0,0 +1 @@ +Subproject commit 5d5dceb72fa80f20515df6fd21480a8a495203b5 diff --git a/week_1/day_2/lab-python-functions b/week_1/day_2/lab-python-functions new file mode 160000 index 0000000..392006e --- /dev/null +++ b/week_1/day_2/lab-python-functions @@ -0,0 +1 @@ +Subproject commit 392006efb90f36c79bbb163e6668fccfbccc0404 diff --git a/week_1/day_2/lab-python-functions-extra b/week_1/day_2/lab-python-functions-extra new file mode 160000 index 0000000..0b4309d --- /dev/null +++ b/week_1/day_2/lab-python-functions-extra @@ -0,0 +1 @@ +Subproject commit 0b4309da6a15d39a8af6c542f3b9c1b037e4dca9 diff --git a/week_1/day_3/1.4_list_dict_set_comprehension copy.ipynb b/week_1/day_3/1.4_list_dict_set_comprehension copy.ipynb new file mode 100644 index 0000000..62f2edb --- /dev/null +++ b/week_1/day_3/1.4_list_dict_set_comprehension copy.ipynb @@ -0,0 +1,669 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ba169949", + "metadata": { + "toc": true + }, + "source": [ + "

Table of Contents

\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "e1f3c60c-6a4c-4420-ab87-c2f6e0bd93ed", + "metadata": { + "lang": "en" + }, + "source": [ + "# List Comprehensions" + ] + }, + { + "cell_type": "markdown", + "id": "41722faf-5aed-40a7-a665-e7b08ac83f23", + "metadata": {}, + "source": [ + "![elgif](https://media.giphy.com/media/8vZY0QZZjJZqmfResk/giphy.gif)" + ] + }, + { + "cell_type": "markdown", + "id": "1f2388fe-f609-4afb-98f7-5a7084d0d9b6", + "metadata": {}, + "source": [ + "List comprehension is an easy to read, compact, and elegant way of **creating a list from any existing iterable object**.\n", + "\n", + "List comprehension is a single line of code that you write inside the square brackets. It has three components:\n", + "\n", + "- For loop\n", + "- Condition and expression (optional)\n", + "- Output\n" + ] + }, + { + "cell_type": "markdown", + "id": "456a017a-22bb-44ba-9c74-b25935d0d80e", + "metadata": {}, + "source": [ + "![imagen_compr](https://stsewd.dev/charla-comprension-de-listas/img/listComprehensions.gif)" + ] + }, + { + "cell_type": "markdown", + "id": "f4e68458-5892-4ef8-8b7b-6d0e9d1ea311", + "metadata": { + "lang": "en" + }, + "source": [ + "Let's look at an example, we'll leave the optional predicate (if or if/else for later). \n", + "\n", + "If we wanted to have a list like the following one, but with all the words in uppercase using a loop, we would do, without list comprehension:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "velvet-madonna", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "71cbc6a3-d126-4c9e-9f8f-09f59388cf41", + "metadata": { + "lang": "en" + }, + "source": [ + "How can we do it with list comprehension?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c1754a5a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "d95d40b9-3d51-404d-ab5a-f85045cb49c1", + "metadata": { + "lang": "en" + }, + "source": [ + "One more example:\n", + "\n", + "We want a list containing the squares of the numbers 1 to 10." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e3bc67b9", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "23be3165-a1c5-4dd9-a304-3e6138318860", + "metadata": { + "lang": "en" + }, + "source": [ + "## Note\n", + "\n", + "List comprehension in Python offers a more concise way to generate lists **without** the need for **explicitly creating an empty list** to begin with and using the **`.append`** method." + ] + }, + { + "cell_type": "markdown", + "id": "339c9c37-e281-4dcb-94dd-8f44db633bc8", + "metadata": { + "lang": "en" + }, + "source": [ + "## πŸ’‘ Check for understanding \n", + "\n", + "Create a new list, substituting \"e's\" for \"a's\" in each word in the original `words` list." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c8c45c56", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "138d7541-41bf-436c-bffb-e4e5a510daa6", + "metadata": { + "lang": "en" + }, + "source": [ + "## Conditions (we put IF in the comprehension)" + ] + }, + { + "cell_type": "markdown", + "id": "a031ef24-f4e4-4f26-8f72-f194b9753142", + "metadata": {}, + "source": [ + "In list comprehension, you can use the `if` and `else` syntax to include conditional statements for filtering and modifying elements while creating a new list. This allows you to conditionally include elements based on certain criteria.\n", + "\n", + "Let's look at just including `if` statement." + ] + }, + { + "cell_type": "markdown", + "id": "714b7bb9-4cad-47a4-97ca-0fcdb0c662ab", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "id": "c420cf54-8049-402f-b4e7-8522f00d8d14", + "metadata": {}, + "source": [ + "Let's create a list like the following one, but with all the **words** in uppercase using a loop (i.e. ignore the elements that are not strings)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36e710a5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "1d655940-9346-4125-8c9e-53fa815cb89a", + "metadata": {}, + "source": [ + "Let's look at one more example. \n", + "Let's create a list with the numbers from 0 to 9 that are even. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4a564491", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "df4b13d9-0df6-4c0c-b481-9689936f4585", + "metadata": { + "lang": "en" + }, + "source": [ + "### πŸ’‘ Check for understanding\n", + "\n", + "We want a new list with words longer than 5 characters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "invalid-variation", + "metadata": {}, + "outputs": [], + "source": [ + "list_of_words = ['barcelona', 'madrid', 'gerona', 'murcia']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1eb8bd68", + "metadata": {}, + "outputs": [], + "source": [ + "# Your code here" + ] + }, + { + "cell_type": "markdown", + "id": "de3bd144-3e49-497b-9840-e05d5e3fd80e", + "metadata": { + "lang": "en" + }, + "source": [ + "## If / Else in comprehension\n", + "\n", + "Let's look at the syntax when including an `else statement`, that is implemented if the condition is false." + ] + }, + { + "cell_type": "markdown", + "id": "fddaf8b8-f193-44ee-848f-bad9fb7dfcfe", + "metadata": {}, + "source": [ + "```python\n", + "new_list = [expression_if_true if condition else expression_if_false for item in original_list]\n", + "```\n", + "\n", + "Explanation:\n", + "- `new_list`: The resulting list created using list comprehension.\n", + "- `expression_if_true`: The value to be included in the new list if the condition is true for the current item.\n", + "- `condition`: The condition to be checked for each item in the original list.\n", + "- `expression_if_false`: The value to be included in the new list if the condition is false for the current item.\n", + "- `item`: The variable representing each element in the original list during iteration.\n" + ] + }, + { + "cell_type": "markdown", + "id": "360215d9-5849-4e39-b578-3a0bf1ceafe2", + "metadata": {}, + "source": [ + "In the next example, if the word is longer than 7 characters, we include it as it is in the new list. Otherwise, we just make it uppercase." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1cd66f87", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "1ea1ad5c-e239-463b-a1a1-05946536157a", + "metadata": {}, + "source": [ + "Another example: Converting Odd Numbers to Negative" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51d6105c-82b9-4fce-854e-9813e9fa0c6b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "71209dc0-4ad9-46e8-b17d-1012e91018cd", + "metadata": {}, + "source": [ + "\n", + "In the examples above, list comprehension filters and modifies elements based on specific conditions, creating a new list as a result. Using `if` and `else` in list comprehension adds flexibility to the process and allows for more complex transformations of the original list elements." + ] + }, + { + "cell_type": "markdown", + "id": "43e5bba4-6315-43d0-a904-6369c29ed147", + "metadata": { + "lang": "en" + }, + "source": [ + "# Dictionary Comprehension" + ] + }, + { + "cell_type": "markdown", + "id": "b29128c6-0134-4b09-b823-580ad4078320", + "metadata": {}, + "source": [ + "Just like list comprehension, dictionary comprehension offers a clean and efficient way to construct dictionaries in a single line of code.\n", + "\n", + "The general syntax for dictionary comprehension is:\n", + "\n", + "```python\n", + "new_dict = {key_expression: value_expression for item in iterable}\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2ca6a9c3-9e8f-4aa5-bf04-199b728000fc", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "b266dda1-d306-42f7-8a0c-cd81aa1b448a", + "metadata": {}, + "source": [ + "We can also use dictionary comprehension to create a dictionary from a list. \n", + "\n", + "Let's keep the values of the `numbers` list as the dictionary `keys`, and as the dictionary `values`, we want those numbers squared. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "101d16d7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "6e49f7d0-3d9b-4661-9bd7-edf7525cd292", + "metadata": { + "lang": "en" + }, + "source": [ + "## πŸ’‘ Check for understanding\n", + "\n", + "You have a list of words. Write a dictionary containing the length of each word." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12333f41", + "metadata": {}, + "outputs": [], + "source": [ + "list_of_words = [\"football\", \"climbing\", \"swimming\", \"golf\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "romantic-tiffany", + "metadata": {}, + "outputs": [], + "source": [ + "# your code here" + ] + }, + { + "cell_type": "markdown", + "id": "fd9c62ab-eda5-4aab-911b-b560db1af80f", + "metadata": {}, + "source": [ + "# Set Comprehension" + ] + }, + { + "cell_type": "markdown", + "id": "f05288d7-5645-4ad1-a55f-bb767582f9b0", + "metadata": {}, + "source": [ + "The syntax for set comprehension is quite similar to list comprehension:\n", + "\n", + "```python\n", + "new_set = {expression for item in iterable}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "b388ae3d-a76d-4077-8486-6e06d6765838", + "metadata": { + "lang": "en" + }, + "source": [ + "## πŸ’‘ Check for understanding\n", + "\n", + "Use set comprehension to create a set with only unique country codes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "inner-refund", + "metadata": {}, + "outputs": [], + "source": [ + "codes_countries = [\"es-91\", \"en-88\", \"fra-12\", \"it-33\", \"ar-55\", \"it-34\", \"es-98\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "30bb8484", + "metadata": {}, + "outputs": [], + "source": [ + "#Β goal = {'AR', 'EN', 'ES', 'FRA', 'IT'}\n", + "\n", + "# getting just the letters\n", + "#Β uppercase" + ] + }, + { + "cell_type": "markdown", + "id": "32925503-a999-4711-8842-b5c83789857d", + "metadata": {}, + "source": [ + "# Summary" + ] + }, + { + "cell_type": "markdown", + "id": "8b7cec96-24f0-4c9c-9b34-8f5993e7d421", + "metadata": {}, + "source": [ + "- Comprehensions provide a quicker, more comfortable, and readable way to create lists, sets, and dictionaries.\n", + "- Saves us some steps compared to traditional for loops (create empty list, use append method)\n", + "- It supports conditions, enabling us to filter or modify elements during the creation process.\n", + "- If an `else` statement is included, the order changes, offering flexibility in handling different conditions." + ] + }, + { + "cell_type": "markdown", + "id": "f64cdf34-69ab-4c28-a92a-6080ecc63d00", + "metadata": { + "lang": "es" + }, + "source": [ + "# Extra" + ] + }, + { + "cell_type": "markdown", + "id": "79557943-bf12-4f38-bdc2-b7cf4747e92d", + "metadata": {}, + "source": [ + "## Nested list comprehensions" + ] + }, + { + "cell_type": "markdown", + "id": "1c45b37a-5935-4b19-a8cf-409e1b593ca7", + "metadata": {}, + "source": [ + "Nested list comprehensions in Python allow you to create lists of lists or perform more complex transformations with multiple levels of iteration. The syntax involves placing one or more list comprehensions inside another." + ] + }, + { + "cell_type": "markdown", + "id": "d29730b4-01f4-4adc-8a71-9c27f78bc070", + "metadata": {}, + "source": [ + "```python\n", + "new_list = [[expression for item in inner_list] for inner_list in outer_list]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "65409460-79a2-4604-a701-d660cf88170f", + "metadata": {}, + "source": [ + "Example: Flattening a List of Lists" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd5dd8c7-aabf-475d-84c1-ca01cd2020c2", + "metadata": {}, + "outputs": [], + "source": [ + "list_of_lists = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]\n", + "flattened_list = []\n", + "for sublist in list_of_lists:\n", + " for num in sublist:\n", + " flattened_list.append(num)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3fb6970-d377-4365-aab7-99a65f9146a3", + "metadata": {}, + "outputs": [], + "source": [ + "# Using nested list comprehension to flatten a list of lists\n", + "flattened_list = [num for sublist in list_of_lists for num in sublist]\n", + "print(flattened_list)" + ] + }, + { + "cell_type": "markdown", + "id": "6b103055-b3a7-4a00-aff4-649cabdb443a", + "metadata": {}, + "source": [ + "Another example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91ab7124", + "metadata": {}, + "outputs": [], + "source": [ + "nested_comprehension = [[[\"Peter\", \"18\"], [\"Clara\", \"20\"]], [['Megan', '35']], [['Marc', '32']]]\n", + "\n", + "flattened = []\n", + "\n", + "for i in nested_comprehension:\n", + " for element in i:\n", + " for x in element:\n", + " flattened.append(x) \n", + " \n", + "flattened" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a89c12a0", + "metadata": {}, + "outputs": [], + "source": [ + "flattened_comp = [x for i in nested_comprehension for element in i for x in element]\n", + "flattened_comp" + ] + }, + { + "cell_type": "markdown", + "id": "9f823b4b-8b6a-4c74-af3c-c46a60c87437", + "metadata": {}, + "source": [ + "## Dict comprehension from two lists" + ] + }, + { + "cell_type": "markdown", + "id": "e0ac7032-bc56-40f6-8634-f05916f23840", + "metadata": { + "lang": "en" + }, + "source": [ + "We can also use dictionary comprehension to create a dictionary from two lists, one will be the `keys`and the other one the `values`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e44b9c5", + "metadata": {}, + "outputs": [], + "source": [ + "names = [\"venice\", \"sam\", \"clara\"]\n", + "ages = [\"32\", \"21\", \"15\"]\n", + "\n", + "the_goal = {\"venice\": \"32\",\n", + " \"sam\": \"21\",\n", + " \"clara\":\"15\" \n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "tough-peeing", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# using a for loop\n", + "new_dictionary = {}\n", + "\n", + "for person, age in zip(names, ages):\n", + " new_dictionary[person] = age\n", + " #print(f\"Person: {person}, emoji: {picture}\")\n", + "print(new_dictionary)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "constitutional-daughter", + "metadata": {}, + "outputs": [], + "source": [ + "new_dict = {person:age for person, age in zip(names, ages)}\n", + "new_dict" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.13" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": true, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/week_1/day_3/1.4_list_dict_set_comprehension.ipynb b/week_1/day_3/1.4_list_dict_set_comprehension.ipynb new file mode 100644 index 0000000..62f2edb --- /dev/null +++ b/week_1/day_3/1.4_list_dict_set_comprehension.ipynb @@ -0,0 +1,669 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ba169949", + "metadata": { + "toc": true + }, + "source": [ + "

Table of Contents

\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "e1f3c60c-6a4c-4420-ab87-c2f6e0bd93ed", + "metadata": { + "lang": "en" + }, + "source": [ + "# List Comprehensions" + ] + }, + { + "cell_type": "markdown", + "id": "41722faf-5aed-40a7-a665-e7b08ac83f23", + "metadata": {}, + "source": [ + "![elgif](https://media.giphy.com/media/8vZY0QZZjJZqmfResk/giphy.gif)" + ] + }, + { + "cell_type": "markdown", + "id": "1f2388fe-f609-4afb-98f7-5a7084d0d9b6", + "metadata": {}, + "source": [ + "List comprehension is an easy to read, compact, and elegant way of **creating a list from any existing iterable object**.\n", + "\n", + "List comprehension is a single line of code that you write inside the square brackets. It has three components:\n", + "\n", + "- For loop\n", + "- Condition and expression (optional)\n", + "- Output\n" + ] + }, + { + "cell_type": "markdown", + "id": "456a017a-22bb-44ba-9c74-b25935d0d80e", + "metadata": {}, + "source": [ + "![imagen_compr](https://stsewd.dev/charla-comprension-de-listas/img/listComprehensions.gif)" + ] + }, + { + "cell_type": "markdown", + "id": "f4e68458-5892-4ef8-8b7b-6d0e9d1ea311", + "metadata": { + "lang": "en" + }, + "source": [ + "Let's look at an example, we'll leave the optional predicate (if or if/else for later). \n", + "\n", + "If we wanted to have a list like the following one, but with all the words in uppercase using a loop, we would do, without list comprehension:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "velvet-madonna", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "71cbc6a3-d126-4c9e-9f8f-09f59388cf41", + "metadata": { + "lang": "en" + }, + "source": [ + "How can we do it with list comprehension?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c1754a5a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "d95d40b9-3d51-404d-ab5a-f85045cb49c1", + "metadata": { + "lang": "en" + }, + "source": [ + "One more example:\n", + "\n", + "We want a list containing the squares of the numbers 1 to 10." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e3bc67b9", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "23be3165-a1c5-4dd9-a304-3e6138318860", + "metadata": { + "lang": "en" + }, + "source": [ + "## Note\n", + "\n", + "List comprehension in Python offers a more concise way to generate lists **without** the need for **explicitly creating an empty list** to begin with and using the **`.append`** method." + ] + }, + { + "cell_type": "markdown", + "id": "339c9c37-e281-4dcb-94dd-8f44db633bc8", + "metadata": { + "lang": "en" + }, + "source": [ + "## πŸ’‘ Check for understanding \n", + "\n", + "Create a new list, substituting \"e's\" for \"a's\" in each word in the original `words` list." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c8c45c56", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "138d7541-41bf-436c-bffb-e4e5a510daa6", + "metadata": { + "lang": "en" + }, + "source": [ + "## Conditions (we put IF in the comprehension)" + ] + }, + { + "cell_type": "markdown", + "id": "a031ef24-f4e4-4f26-8f72-f194b9753142", + "metadata": {}, + "source": [ + "In list comprehension, you can use the `if` and `else` syntax to include conditional statements for filtering and modifying elements while creating a new list. This allows you to conditionally include elements based on certain criteria.\n", + "\n", + "Let's look at just including `if` statement." + ] + }, + { + "cell_type": "markdown", + "id": "714b7bb9-4cad-47a4-97ca-0fcdb0c662ab", + "metadata": {}, + "source": [ + "" + ] + }, + { + "cell_type": "markdown", + "id": "c420cf54-8049-402f-b4e7-8522f00d8d14", + "metadata": {}, + "source": [ + "Let's create a list like the following one, but with all the **words** in uppercase using a loop (i.e. ignore the elements that are not strings)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "36e710a5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "1d655940-9346-4125-8c9e-53fa815cb89a", + "metadata": {}, + "source": [ + "Let's look at one more example. \n", + "Let's create a list with the numbers from 0 to 9 that are even. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4a564491", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "df4b13d9-0df6-4c0c-b481-9689936f4585", + "metadata": { + "lang": "en" + }, + "source": [ + "### πŸ’‘ Check for understanding\n", + "\n", + "We want a new list with words longer than 5 characters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "invalid-variation", + "metadata": {}, + "outputs": [], + "source": [ + "list_of_words = ['barcelona', 'madrid', 'gerona', 'murcia']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1eb8bd68", + "metadata": {}, + "outputs": [], + "source": [ + "# Your code here" + ] + }, + { + "cell_type": "markdown", + "id": "de3bd144-3e49-497b-9840-e05d5e3fd80e", + "metadata": { + "lang": "en" + }, + "source": [ + "## If / Else in comprehension\n", + "\n", + "Let's look at the syntax when including an `else statement`, that is implemented if the condition is false." + ] + }, + { + "cell_type": "markdown", + "id": "fddaf8b8-f193-44ee-848f-bad9fb7dfcfe", + "metadata": {}, + "source": [ + "```python\n", + "new_list = [expression_if_true if condition else expression_if_false for item in original_list]\n", + "```\n", + "\n", + "Explanation:\n", + "- `new_list`: The resulting list created using list comprehension.\n", + "- `expression_if_true`: The value to be included in the new list if the condition is true for the current item.\n", + "- `condition`: The condition to be checked for each item in the original list.\n", + "- `expression_if_false`: The value to be included in the new list if the condition is false for the current item.\n", + "- `item`: The variable representing each element in the original list during iteration.\n" + ] + }, + { + "cell_type": "markdown", + "id": "360215d9-5849-4e39-b578-3a0bf1ceafe2", + "metadata": {}, + "source": [ + "In the next example, if the word is longer than 7 characters, we include it as it is in the new list. Otherwise, we just make it uppercase." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1cd66f87", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "1ea1ad5c-e239-463b-a1a1-05946536157a", + "metadata": {}, + "source": [ + "Another example: Converting Odd Numbers to Negative" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51d6105c-82b9-4fce-854e-9813e9fa0c6b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "71209dc0-4ad9-46e8-b17d-1012e91018cd", + "metadata": {}, + "source": [ + "\n", + "In the examples above, list comprehension filters and modifies elements based on specific conditions, creating a new list as a result. Using `if` and `else` in list comprehension adds flexibility to the process and allows for more complex transformations of the original list elements." + ] + }, + { + "cell_type": "markdown", + "id": "43e5bba4-6315-43d0-a904-6369c29ed147", + "metadata": { + "lang": "en" + }, + "source": [ + "# Dictionary Comprehension" + ] + }, + { + "cell_type": "markdown", + "id": "b29128c6-0134-4b09-b823-580ad4078320", + "metadata": {}, + "source": [ + "Just like list comprehension, dictionary comprehension offers a clean and efficient way to construct dictionaries in a single line of code.\n", + "\n", + "The general syntax for dictionary comprehension is:\n", + "\n", + "```python\n", + "new_dict = {key_expression: value_expression for item in iterable}\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2ca6a9c3-9e8f-4aa5-bf04-199b728000fc", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "b266dda1-d306-42f7-8a0c-cd81aa1b448a", + "metadata": {}, + "source": [ + "We can also use dictionary comprehension to create a dictionary from a list. \n", + "\n", + "Let's keep the values of the `numbers` list as the dictionary `keys`, and as the dictionary `values`, we want those numbers squared. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "101d16d7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "6e49f7d0-3d9b-4661-9bd7-edf7525cd292", + "metadata": { + "lang": "en" + }, + "source": [ + "## πŸ’‘ Check for understanding\n", + "\n", + "You have a list of words. Write a dictionary containing the length of each word." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12333f41", + "metadata": {}, + "outputs": [], + "source": [ + "list_of_words = [\"football\", \"climbing\", \"swimming\", \"golf\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "romantic-tiffany", + "metadata": {}, + "outputs": [], + "source": [ + "# your code here" + ] + }, + { + "cell_type": "markdown", + "id": "fd9c62ab-eda5-4aab-911b-b560db1af80f", + "metadata": {}, + "source": [ + "# Set Comprehension" + ] + }, + { + "cell_type": "markdown", + "id": "f05288d7-5645-4ad1-a55f-bb767582f9b0", + "metadata": {}, + "source": [ + "The syntax for set comprehension is quite similar to list comprehension:\n", + "\n", + "```python\n", + "new_set = {expression for item in iterable}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "b388ae3d-a76d-4077-8486-6e06d6765838", + "metadata": { + "lang": "en" + }, + "source": [ + "## πŸ’‘ Check for understanding\n", + "\n", + "Use set comprehension to create a set with only unique country codes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "inner-refund", + "metadata": {}, + "outputs": [], + "source": [ + "codes_countries = [\"es-91\", \"en-88\", \"fra-12\", \"it-33\", \"ar-55\", \"it-34\", \"es-98\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "30bb8484", + "metadata": {}, + "outputs": [], + "source": [ + "#Β goal = {'AR', 'EN', 'ES', 'FRA', 'IT'}\n", + "\n", + "# getting just the letters\n", + "#Β uppercase" + ] + }, + { + "cell_type": "markdown", + "id": "32925503-a999-4711-8842-b5c83789857d", + "metadata": {}, + "source": [ + "# Summary" + ] + }, + { + "cell_type": "markdown", + "id": "8b7cec96-24f0-4c9c-9b34-8f5993e7d421", + "metadata": {}, + "source": [ + "- Comprehensions provide a quicker, more comfortable, and readable way to create lists, sets, and dictionaries.\n", + "- Saves us some steps compared to traditional for loops (create empty list, use append method)\n", + "- It supports conditions, enabling us to filter or modify elements during the creation process.\n", + "- If an `else` statement is included, the order changes, offering flexibility in handling different conditions." + ] + }, + { + "cell_type": "markdown", + "id": "f64cdf34-69ab-4c28-a92a-6080ecc63d00", + "metadata": { + "lang": "es" + }, + "source": [ + "# Extra" + ] + }, + { + "cell_type": "markdown", + "id": "79557943-bf12-4f38-bdc2-b7cf4747e92d", + "metadata": {}, + "source": [ + "## Nested list comprehensions" + ] + }, + { + "cell_type": "markdown", + "id": "1c45b37a-5935-4b19-a8cf-409e1b593ca7", + "metadata": {}, + "source": [ + "Nested list comprehensions in Python allow you to create lists of lists or perform more complex transformations with multiple levels of iteration. The syntax involves placing one or more list comprehensions inside another." + ] + }, + { + "cell_type": "markdown", + "id": "d29730b4-01f4-4adc-8a71-9c27f78bc070", + "metadata": {}, + "source": [ + "```python\n", + "new_list = [[expression for item in inner_list] for inner_list in outer_list]\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "65409460-79a2-4604-a701-d660cf88170f", + "metadata": {}, + "source": [ + "Example: Flattening a List of Lists" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dd5dd8c7-aabf-475d-84c1-ca01cd2020c2", + "metadata": {}, + "outputs": [], + "source": [ + "list_of_lists = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]\n", + "flattened_list = []\n", + "for sublist in list_of_lists:\n", + " for num in sublist:\n", + " flattened_list.append(num)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b3fb6970-d377-4365-aab7-99a65f9146a3", + "metadata": {}, + "outputs": [], + "source": [ + "# Using nested list comprehension to flatten a list of lists\n", + "flattened_list = [num for sublist in list_of_lists for num in sublist]\n", + "print(flattened_list)" + ] + }, + { + "cell_type": "markdown", + "id": "6b103055-b3a7-4a00-aff4-649cabdb443a", + "metadata": {}, + "source": [ + "Another example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "91ab7124", + "metadata": {}, + "outputs": [], + "source": [ + "nested_comprehension = [[[\"Peter\", \"18\"], [\"Clara\", \"20\"]], [['Megan', '35']], [['Marc', '32']]]\n", + "\n", + "flattened = []\n", + "\n", + "for i in nested_comprehension:\n", + " for element in i:\n", + " for x in element:\n", + " flattened.append(x) \n", + " \n", + "flattened" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a89c12a0", + "metadata": {}, + "outputs": [], + "source": [ + "flattened_comp = [x for i in nested_comprehension for element in i for x in element]\n", + "flattened_comp" + ] + }, + { + "cell_type": "markdown", + "id": "9f823b4b-8b6a-4c74-af3c-c46a60c87437", + "metadata": {}, + "source": [ + "## Dict comprehension from two lists" + ] + }, + { + "cell_type": "markdown", + "id": "e0ac7032-bc56-40f6-8634-f05916f23840", + "metadata": { + "lang": "en" + }, + "source": [ + "We can also use dictionary comprehension to create a dictionary from two lists, one will be the `keys`and the other one the `values`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e44b9c5", + "metadata": {}, + "outputs": [], + "source": [ + "names = [\"venice\", \"sam\", \"clara\"]\n", + "ages = [\"32\", \"21\", \"15\"]\n", + "\n", + "the_goal = {\"venice\": \"32\",\n", + " \"sam\": \"21\",\n", + " \"clara\":\"15\" \n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "tough-peeing", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# using a for loop\n", + "new_dictionary = {}\n", + "\n", + "for person, age in zip(names, ages):\n", + " new_dictionary[person] = age\n", + " #print(f\"Person: {person}, emoji: {picture}\")\n", + "print(new_dictionary)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "constitutional-daughter", + "metadata": {}, + "outputs": [], + "source": [ + "new_dict = {person:age for person, age in zip(names, ages)}\n", + "new_dict" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.13" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": true, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": true + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/week_1/day_3/1.4_list_dict_set_comprehension_answers.ipynb b/week_1/day_3/1.4_list_dict_set_comprehension_answers.ipynb new file mode 100644 index 0000000..33717fa --- /dev/null +++ b/week_1/day_3/1.4_list_dict_set_comprehension_answers.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","id":"b08d37eb","metadata":{"toc":true,"id":"b08d37eb"},"source":["

Table of Contents

\n",""]},{"cell_type":"markdown","id":"e1f3c60c-6a4c-4420-ab87-c2f6e0bd93ed","metadata":{"lang":"en","id":"e1f3c60c-6a4c-4420-ab87-c2f6e0bd93ed"},"source":["# List Comprehensions"]},{"cell_type":"markdown","id":"41722faf-5aed-40a7-a665-e7b08ac83f23","metadata":{"id":"41722faf-5aed-40a7-a665-e7b08ac83f23"},"source":["![elgif](https://media.giphy.com/media/8vZY0QZZjJZqmfResk/giphy.gif)"]},{"cell_type":"markdown","id":"1f2388fe-f609-4afb-98f7-5a7084d0d9b6","metadata":{"id":"1f2388fe-f609-4afb-98f7-5a7084d0d9b6"},"source":["List comprehension is an easy to read, compact, and elegant way of **creating a list from any existing iterable object**.\n","\n","List comprehension is a single line of code that you write inside the square brackets. It has three components:\n","\n","- For loop\n","- Condition and expression (optional)\n","- Output\n"]},{"cell_type":"markdown","id":"456a017a-22bb-44ba-9c74-b25935d0d80e","metadata":{"id":"456a017a-22bb-44ba-9c74-b25935d0d80e"},"source":["![imagen_compr](https://stsewd.dev/charla-comprension-de-listas/img/listComprehensions.gif)"]},{"cell_type":"markdown","id":"f4e68458-5892-4ef8-8b7b-6d0e9d1ea311","metadata":{"lang":"en","id":"f4e68458-5892-4ef8-8b7b-6d0e9d1ea311"},"source":["Let's look at an example, we'll leave the optional predicate (if or if/else for later).\n","\n","If we wanted to have a list like the following one, but with all the words in uppercase using a loop, we would do, without list comprehension:"]},{"cell_type":"code","execution_count":1,"id":"velvet-madonna","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"velvet-madonna","executionInfo":{"status":"ok","timestamp":1763638573510,"user_tz":-60,"elapsed":14,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"139ab636-b32a-4ba5-bb52-7f39d9a224ac"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['BARCELONA', 'MADRID', 'GIRONA', 'MURCIA']"]},"metadata":{},"execution_count":1}],"source":["list_of_words = [\"barcelona\", \"madrid\", \"girona\", \"murcia\"]\n","new_list_words_uppercase = []\n","\n","for city in list_of_words:\n"," new_list_words_uppercase.append(city.upper())\n","new_list_words_uppercase\n","\n","#Β transform the word into upper\n","#Β append that transformed word into the new list"]},{"cell_type":"markdown","id":"71cbc6a3-d126-4c9e-9f8f-09f59388cf41","metadata":{"lang":"en","id":"71cbc6a3-d126-4c9e-9f8f-09f59388cf41"},"source":["How can we do it with list comprehension?"]},{"cell_type":"code","execution_count":2,"id":"c1754a5a","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"c1754a5a","executionInfo":{"status":"ok","timestamp":1763638633886,"user_tz":-60,"elapsed":12,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"82c7d101-8abd-43d1-e105-36f4967dafd2"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['BARCELONA', 'MADRID', 'GIRONA', 'MURCIA']"]},"metadata":{},"execution_count":2}],"source":["# comprehension\n","\n","comp_list = [city.upper() for city in list_of_words]\n","comp_list"]},{"cell_type":"markdown","id":"d95d40b9-3d51-404d-ab5a-f85045cb49c1","metadata":{"lang":"en","id":"d95d40b9-3d51-404d-ab5a-f85045cb49c1"},"source":["One more example:\n","\n","We want a list containing the squares of the numbers 1 to 10."]},{"cell_type":"code","execution_count":null,"id":"e3bc67b9","metadata":{"id":"e3bc67b9"},"outputs":[],"source":["# what we have: nothing :/\n","# goal: squares 1 - 10"]},{"cell_type":"code","execution_count":3,"id":"8f1496bc","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8f1496bc","executionInfo":{"status":"ok","timestamp":1763638760690,"user_tz":-60,"elapsed":25,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"29f180a3-c442-4ed2-8b28-0a89a16a40b5"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]"]},"metadata":{},"execution_count":3}],"source":["#Β Regular loop\n","\n","new_list = []\n","for number in range(1, 11):\n"," new_list.append(number ** 2)\n","new_list\n"]},{"cell_type":"code","execution_count":4,"id":"238f8099","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"238f8099","executionInfo":{"status":"ok","timestamp":1763638791575,"user_tz":-60,"elapsed":11,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"ef1b3f61-893b-46e4-9362-860f988a65f1"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]"]},"metadata":{},"execution_count":4}],"source":["#Β list comprehension\n","\n","squares = [number**2 for number in range(1,11)]\n","squares"]},{"cell_type":"markdown","id":"23be3165-a1c5-4dd9-a304-3e6138318860","metadata":{"lang":"en","id":"23be3165-a1c5-4dd9-a304-3e6138318860"},"source":["## Note\n","\n","List comprehension in Python offers a more concise way to generate lists **without** the need for **explicitly creating an empty list** to begin with and using the **`.append`** method."]},{"cell_type":"markdown","id":"339c9c37-e281-4dcb-94dd-8f44db633bc8","metadata":{"lang":"en","id":"339c9c37-e281-4dcb-94dd-8f44db633bc8"},"source":["## πŸ’‘ Check for understanding\n","\n","Create a new list, substituting \"e's\" for \"a's\" in each word in the original `words` list."]},{"cell_type":"code","execution_count":6,"id":"c8c45c56","metadata":{"id":"c8c45c56","executionInfo":{"status":"ok","timestamp":1763643886794,"user_tz":-60,"elapsed":6,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}}},"outputs":[],"source":["list_of_cities = ['barcelona', 'madrid', 'gerona', 'murcia']\n","\n","#Β e -> a"]},{"cell_type":"code","execution_count":7,"id":"e9043062","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"e9043062","executionInfo":{"status":"ok","timestamp":1763643888554,"user_tz":-60,"elapsed":9,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"54d0edd3-897f-4597-f752-30fdf0546564"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['barcalona', 'madrid', 'garona', 'murcia']"]},"metadata":{},"execution_count":7}],"source":["# for loop\n","new_list = []\n","for city in list_of_cities:\n"," new_list.append(city.replace(\"e\", \"a\"))\n","new_list"]},{"cell_type":"code","execution_count":8,"id":"4cf5c6cb","metadata":{"id":"4cf5c6cb","executionInfo":{"status":"ok","timestamp":1763643908655,"user_tz":-60,"elapsed":9,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}}},"outputs":[],"source":["# your code goes here\n","new_list_of_cities = [city.replace(\"e\", \"a\") for city in list_of_cities]"]},{"cell_type":"markdown","id":"138d7541-41bf-436c-bffb-e4e5a510daa6","metadata":{"lang":"en","id":"138d7541-41bf-436c-bffb-e4e5a510daa6"},"source":["## Conditions (we put IF in the comprehension)"]},{"cell_type":"markdown","id":"a031ef24-f4e4-4f26-8f72-f194b9753142","metadata":{"id":"a031ef24-f4e4-4f26-8f72-f194b9753142"},"source":["In list comprehension, you can use the `if` and `else` syntax to include conditional statements for filtering and modifying elements while creating a new list. This allows you to conditionally include elements based on certain criteria.\n","\n","Let's look at just including `if` statement."]},{"cell_type":"markdown","id":"714b7bb9-4cad-47a4-97ca-0fcdb0c662ab","metadata":{"id":"714b7bb9-4cad-47a4-97ca-0fcdb0c662ab"},"source":[""]},{"cell_type":"markdown","id":"c420cf54-8049-402f-b4e7-8522f00d8d14","metadata":{"id":"c420cf54-8049-402f-b4e7-8522f00d8d14"},"source":["Let's create a list like the following one, but with all the **words** in uppercase using a loop (i.e. ignore the elements that are not strings)"]},{"cell_type":"code","execution_count":9,"id":"36e710a5","metadata":{"id":"36e710a5","executionInfo":{"status":"ok","timestamp":1763643994036,"user_tz":-60,"elapsed":7,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}}},"outputs":[],"source":["list_of_words = [\"barcelona\", 2, 3, \"madrid\", \"girona\", 30, \"murcia\"]"]},{"cell_type":"code","source":["[city.upper() for city in list_of_words]"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":141},"id":"P2QmArN9ud4C","executionInfo":{"status":"error","timestamp":1763644016030,"user_tz":-60,"elapsed":12,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"23524ef7-d5b0-4341-e12a-8a1a86284b7c"},"id":"P2QmArN9ud4C","execution_count":10,"outputs":[{"output_type":"error","ename":"AttributeError","evalue":"'int' object has no attribute 'upper'","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)","\u001b[0;32m/tmp/ipython-input-4035248440.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;34m[\u001b[0m\u001b[0mcity\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mcity\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mlist_of_words\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;31mAttributeError\u001b[0m: 'int' object has no attribute 'upper'"]}]},{"cell_type":"code","execution_count":11,"id":"221cc9df","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"221cc9df","executionInfo":{"status":"ok","timestamp":1763644198380,"user_tz":-60,"elapsed":26,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"b2a5a450-ec3b-46b5-b7b2-87898b0cf208"},"outputs":[{"output_type":"stream","name":"stdout","text":["New list: ['BARCELONA', 'MADRID', 'GIRONA', 'MURCIA']\n","Comp list: ['BARCELONA', 'MADRID', 'GIRONA', 'MURCIA']\n"]}],"source":["# Goal: ['BARCELONA', 'MADRID', 'GIRONA', 'MURCIA'], nums out\n","\n","#Β For loop\n","\n","new_list = []\n","for item in list_of_words:\n"," if type(item) == str: # isinstance(item, str)\n"," new_list.append(item.upper())\n","print(\"New list: \", new_list)\n","\n","# List Comprehension\n","comp_list_2 = [item.upper() for item in list_of_words if type(item) == str]\n","print(\"Comp list: \", comp_list_2)"]},{"cell_type":"markdown","id":"1d655940-9346-4125-8c9e-53fa815cb89a","metadata":{"id":"1d655940-9346-4125-8c9e-53fa815cb89a"},"source":["Let's look at one more example.\n","Let's create a list with the numbers from 0 to 9 that are even."]},{"cell_type":"code","execution_count":12,"id":"8046f93d-e55c-45e7-9f94-f0870774b395","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8046f93d-e55c-45e7-9f94-f0870774b395","executionInfo":{"status":"ok","timestamp":1763644257636,"user_tz":-60,"elapsed":13,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"159d9051-9f22-4d8b-e031-3bc2b46600be"},"outputs":[{"output_type":"stream","name":"stdout","text":["[0, 2, 4, 6, 8]\n"]}],"source":["# normal way (no comprehension)\n","my_list = [] # list()\n","for x in range(10):\n"," if x%2==0:\n"," my_list.append(x)\n","print(my_list)"]},{"cell_type":"code","execution_count":13,"id":"373615cb-4037-4aec-99c0-f8411ae7d189","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"373615cb-4037-4aec-99c0-f8411ae7d189","executionInfo":{"status":"ok","timestamp":1763644282455,"user_tz":-60,"elapsed":44,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"9913cb58-b3a5-43dc-d57d-413fe6f3241b"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["[0, 2, 4, 6, 8]"]},"metadata":{},"execution_count":13}],"source":["#equiv but in list comprehension\n","my_list = [x for x in range(10) if x%2==0]\n","my_list"]},{"cell_type":"markdown","id":"df4b13d9-0df6-4c0c-b481-9689936f4585","metadata":{"lang":"en","id":"df4b13d9-0df6-4c0c-b481-9689936f4585"},"source":["### πŸ’‘ Check for understanding\n","\n","We want a new list with words longer than 5 characters."]},{"cell_type":"code","execution_count":14,"id":"invalid-variation","metadata":{"id":"invalid-variation","executionInfo":{"status":"ok","timestamp":1763644468848,"user_tz":-60,"elapsed":42,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}}},"outputs":[],"source":["list_of_words = ['barcelona', 'madrid', 'gerona', 'murcia']"]},{"cell_type":"code","execution_count":null,"id":"83f3feda","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"83f3feda","executionInfo":{"status":"ok","timestamp":1750252890739,"user_tz":-120,"elapsed":13,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"7922698e-cca8-410e-e44d-264861351f15"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['barcelona', 'madrid', 'gerona', 'murcia']"]},"metadata":{},"execution_count":18}],"source":["# Your code goes here\n","[city for city in list_of_words if len(city) > 5]"]},{"cell_type":"markdown","id":"de3bd144-3e49-497b-9840-e05d5e3fd80e","metadata":{"lang":"en","id":"de3bd144-3e49-497b-9840-e05d5e3fd80e"},"source":["## If / Else in comprehension\n","\n","Let's look at the syntax when including an `else statement`, that is implemented if the condition is false."]},{"cell_type":"markdown","id":"fddaf8b8-f193-44ee-848f-bad9fb7dfcfe","metadata":{"id":"fddaf8b8-f193-44ee-848f-bad9fb7dfcfe"},"source":["```python\n","new_list = [expression_if_true if condition else expression_if_false for item in original_list]\n","```\n","\n","Explanation:\n","- `new_list`: The resulting list created using list comprehension.\n","- `expression_if_true`: The value to be included in the new list if the condition is true for the current item.\n","- `condition`: The condition to be checked for each item in the original list.\n","- `expression_if_false`: The value to be included in the new list if the condition is false for the current item.\n","- `item`: The variable representing each element in the original list during iteration.\n"]},{"cell_type":"markdown","id":"360215d9-5849-4e39-b578-3a0bf1ceafe2","metadata":{"id":"360215d9-5849-4e39-b578-3a0bf1ceafe2"},"source":["In the next example, if the word is longer than 7 characters, we include it as it is in the new list. Otherwise, we just make it uppercase."]},{"cell_type":"code","execution_count":15,"id":"1cd66f87","metadata":{"id":"1cd66f87","executionInfo":{"status":"ok","timestamp":1763645941334,"user_tz":-60,"elapsed":76,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}}},"outputs":[],"source":["# if longer than 7\n","#Β else: upper\n","\n","list_of_words = ['barcelona', 'madrid', 'gerona', 'murcia']"]},{"cell_type":"code","execution_count":16,"id":"528c62a3","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"528c62a3","executionInfo":{"status":"ok","timestamp":1763645977544,"user_tz":-60,"elapsed":22,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"d0a661d1-9aaf-48c7-d273-ac78df8cdfdf"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['barcelona', 'MADRID', 'GERONA', 'MURCIA']"]},"metadata":{},"execution_count":16}],"source":["#Β For loop\n","\n","new_list = []\n","for city in list_of_words:\n"," if len(city) > 7:\n"," new_list.append(city)\n"," else:\n"," new_list.append(city.upper())\n","new_list"]},{"cell_type":"code","execution_count":17,"id":"9e203c2d","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"9e203c2d","executionInfo":{"status":"ok","timestamp":1763646029037,"user_tz":-60,"elapsed":20,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"dec98de6-5473-4d0b-a706-064ba61dd354"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['barcelona', 'MADRID', 'GERONA', 'MURCIA']"]},"metadata":{},"execution_count":17}],"source":["#Β Comprehension list\n","\n","new_list = [city if len(city) > 7 else city.upper() for city in list_of_words]\n","new_list"]},{"cell_type":"markdown","source":["Case 1: (without if)\n","````\n","[item for item in iterable]\n","````\n","\n","Case 2: (with if)\n","````\n","[item for item in iterable if condition]\n","````\n","\n","Case 3: (with if and else)\n","````\n","[item1 if condition else item2 for item in iterable]\n","````"],"metadata":{"id":"q5hGfuKL0hAn"},"id":"q5hGfuKL0hAn"},{"cell_type":"code","execution_count":18,"id":"1ec8975d","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":106},"id":"1ec8975d","executionInfo":{"status":"error","timestamp":1763646177021,"user_tz":-60,"elapsed":11,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"4beb6274-e9a8-4d1c-aab9-5b75429307a0"},"outputs":[{"output_type":"error","ename":"SyntaxError","evalue":"expected 'else' after 'if' expression (ipython-input-2813901628.py, line 4)","traceback":["\u001b[0;36m File \u001b[0;32m\"/tmp/ipython-input-2813901628.py\"\u001b[0;36m, line \u001b[0;32m4\u001b[0m\n\u001b[0;31m new_list = [city if len(city) > 7 for city in list_of_words]\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m expected 'else' after 'if' expression\n"]}],"source":["#Β Can you have if in the middle without an else?\n","#Β A: no\n","\n","new_list = [city if len(city) > 7 for city in list_of_words]\n","new_list"]},{"cell_type":"code","execution_count":19,"id":"c367889d","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"c367889d","executionInfo":{"status":"ok","timestamp":1763646233985,"user_tz":-60,"elapsed":13,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"886c008e-75bd-451f-c388-33ec13d0718d"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['barcelona']"]},"metadata":{},"execution_count":19}],"source":["# Q: Can you have multiple ifs?\n","#A: yes, if it is used as a filter as it follows\n","\n","new_list = [city for city in list_of_words if len(city) > 7 if city.upper()]\n","new_list"]},{"cell_type":"markdown","id":"1ea1ad5c-e239-463b-a1a1-05946536157a","metadata":{"id":"1ea1ad5c-e239-463b-a1a1-05946536157a"},"source":["Another example: Converting Odd Numbers to Negative"]},{"cell_type":"code","execution_count":21,"id":"51d6105c-82b9-4fce-854e-9813e9fa0c6b","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"51d6105c-82b9-4fce-854e-9813e9fa0c6b","executionInfo":{"status":"ok","timestamp":1763646355453,"user_tz":-60,"elapsed":33,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"b0b12389-144f-4d7e-d1c0-4eb978b51caf"},"outputs":[{"output_type":"stream","name":"stdout","text":["[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]\n"]}],"source":["numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n","result = [num if num % 2 == 0 else -num for num in numbers]\n","print(result)"]},{"cell_type":"markdown","id":"71209dc0-4ad9-46e8-b17d-1012e91018cd","metadata":{"id":"71209dc0-4ad9-46e8-b17d-1012e91018cd"},"source":["\n","In the examples above, list comprehension filters and modifies elements based on specific conditions, creating a new list as a result. Using `if` and `else` in list comprehension adds flexibility to the process and allows for more complex transformations of the original list elements."]},{"cell_type":"markdown","id":"43e5bba4-6315-43d0-a904-6369c29ed147","metadata":{"lang":"en","id":"43e5bba4-6315-43d0-a904-6369c29ed147"},"source":["# Dictionary Comprehension"]},{"cell_type":"markdown","id":"b29128c6-0134-4b09-b823-580ad4078320","metadata":{"id":"b29128c6-0134-4b09-b823-580ad4078320"},"source":["Just like list comprehension, dictionary comprehension offers a clean and efficient way to construct dictionaries in a single line of code.\n","\n","The general syntax for dictionary comprehension is:\n","\n","```python\n","new_dict = {key_expression: value_expression for item in iterable}\n","```"]},{"cell_type":"code","execution_count":22,"id":"2ca6a9c3-9e8f-4aa5-bf04-199b728000fc","metadata":{"id":"2ca6a9c3-9e8f-4aa5-bf04-199b728000fc","executionInfo":{"status":"ok","timestamp":1763646472266,"user_tz":-60,"elapsed":41,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}}},"outputs":[],"source":["dict_numbers = {\"a\": 1, \"b\":2, \"c\": 3, \"d\":4, \"e\":5}"]},{"cell_type":"code","execution_count":23,"id":"afef9c47-a925-4d6b-bbaa-65f91d620890","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"afef9c47-a925-4d6b-bbaa-65f91d620890","executionInfo":{"status":"ok","timestamp":1763646568981,"user_tz":-60,"elapsed":25,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"b8866ef4-a046-4964-ca66-46e56611a48d"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'a': 2, 'b': 4, 'c': 6, 'd': 8, 'e': 10}"]},"metadata":{},"execution_count":23}],"source":["# create a dict without comprehension that has the values of dict\n","# but doubled\n","dict_double = {}\n","for key, value in dict_numbers.items():\n"," dict_double[key] = value*2\n","dict_double"]},{"cell_type":"code","execution_count":24,"id":"7bc0517f-7406-413f-b12c-bd4869e3d0c6","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"7bc0517f-7406-413f-b12c-bd4869e3d0c6","executionInfo":{"status":"ok","timestamp":1763646614268,"user_tz":-60,"elapsed":21,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"f40c92a7-8106-48c0-baaa-269fbd2a115c"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'a': 2, 'b': 4, 'c': 6, 'd': 8, 'e': 10}"]},"metadata":{},"execution_count":24}],"source":["# same with comprehension\n","dict_double = {key:value*2 for key,value in dict_numbers.items()}\n","dict_double"]},{"cell_type":"code","execution_count":null,"id":"a89cb528-43b0-46c6-bee7-6333064b1112","metadata":{"id":"a89cb528-43b0-46c6-bee7-6333064b1112"},"outputs":[],"source":["# Create a new dictionary, where the key is the same as dict_2\n","# but the value is \"positive\" if the key >= 0 , and \"negative\" key<0"]},{"cell_type":"code","execution_count":25,"id":"1709c91d-0d82-48f2-8bb2-449845aed050","metadata":{"id":"1709c91d-0d82-48f2-8bb2-449845aed050","executionInfo":{"status":"ok","timestamp":1763646672131,"user_tz":-60,"elapsed":10,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}}},"outputs":[],"source":["dict_2 = {-10: \"a\", -5:\"b\", 10:\"c\"}"]},{"cell_type":"code","execution_count":27,"id":"de793752-63e6-41b8-ae53-7fe3d5830e7d","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"de793752-63e6-41b8-ae53-7fe3d5830e7d","executionInfo":{"status":"ok","timestamp":1763646794065,"user_tz":-60,"elapsed":10,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"93a543f1-2285-4ada-ca18-6b5a7a190174"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["{-10: 'negative', -5: 'negative', 10: 'positive'}"]},"metadata":{},"execution_count":27}],"source":["new_dict = {key:(\"positive\" if key>=0 else \"negative\")\n"," for key,value in dict_2.items()}\n","new_dict"]},{"cell_type":"markdown","id":"b266dda1-d306-42f7-8a0c-cd81aa1b448a","metadata":{"id":"b266dda1-d306-42f7-8a0c-cd81aa1b448a"},"source":["We can also use dictionary comprehension to create a dictionary from a list.\n","\n","Let's keep the values of the `numbers` list as the dictionary `keys`, and as the dictionary `values`, we want those numbers squared."]},{"cell_type":"code","execution_count":35,"id":"7049c779-c317-49f4-b152-06566ea3561a","metadata":{"lang":"en","colab":{"base_uri":"https://localhost:8080/"},"id":"7049c779-c317-49f4-b152-06566ea3561a","executionInfo":{"status":"ok","timestamp":1763647263858,"user_tz":-60,"elapsed":10,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"072d3278-f51a-43a5-f8f1-955e5f08df16"},"outputs":[{"output_type":"stream","name":"stdout","text":["{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}\n"]}],"source":["numbers = [1, 2, 3, 4, 5]\n","squared_dict = {key: key**2 for key in numbers}\n","print(squared_dict)"]},{"cell_type":"markdown","id":"6e49f7d0-3d9b-4661-9bd7-edf7525cd292","metadata":{"lang":"en","id":"6e49f7d0-3d9b-4661-9bd7-edf7525cd292"},"source":["## πŸ’‘ Check for understanding\n","\n","You have a list of words. Write a dictionary containing the length of each word."]},{"cell_type":"code","execution_count":36,"id":"12333f41","metadata":{"id":"12333f41","executionInfo":{"status":"ok","timestamp":1763647386693,"user_tz":-60,"elapsed":39,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}}},"outputs":[],"source":["list_of_words = [\"football\", \"climbing\", \"swimming\", \"golf\"]"]},{"cell_type":"code","execution_count":null,"id":"ba02d16c","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ba02d16c","executionInfo":{"status":"ok","timestamp":1750254558031,"user_tz":-120,"elapsed":23,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"d8d89e41-7703-4292-9b6b-fc236b2f7b56"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'football': 8, 'climbing': 8, 'swimming': 8, 'golf': 4}"]},"metadata":{},"execution_count":33}],"source":["# Your code goes here {\"football\": 8, \"climbing\": 8,...}\n","dict_of_words = {word: len(word) for word in list_of_words}\n","dict_of_words"]},{"cell_type":"markdown","id":"fd9c62ab-eda5-4aab-911b-b560db1af80f","metadata":{"id":"fd9c62ab-eda5-4aab-911b-b560db1af80f"},"source":["# Set Comprehension"]},{"cell_type":"markdown","id":"f05288d7-5645-4ad1-a55f-bb767582f9b0","metadata":{"id":"f05288d7-5645-4ad1-a55f-bb767582f9b0"},"source":["The syntax for set comprehension is quite similar to list comprehension:\n","\n","```python\n","new_set = {expression for item in iterable}\n","```"]},{"cell_type":"markdown","id":"b388ae3d-a76d-4077-8486-6e06d6765838","metadata":{"lang":"en","id":"b388ae3d-a76d-4077-8486-6e06d6765838"},"source":["## πŸ’‘ Check for understanding\n","\n","Use set comprehension to create a set with only unique country codes"]},{"cell_type":"code","execution_count":null,"id":"inner-refund","metadata":{"id":"inner-refund"},"outputs":[],"source":["codes_countries = [\"es-91\", \"en-88\", \"fra-12\", \"it-33\", \"ar-55\", \"it-34\", \"es-98\"]"]},{"cell_type":"code","source":["\"fra-12\".split(\"-\")[0]"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":35},"id":"KG7s6u9791NF","executionInfo":{"status":"ok","timestamp":1750255603023,"user_tz":-120,"elapsed":37,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"065f349d-a87b-4312-cd2c-d6e2761017c2"},"id":"KG7s6u9791NF","execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["'fra'"],"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"}},"metadata":{},"execution_count":35}]},{"cell_type":"code","source":["{ country.split(\"-\")[0].upper() for country in codes_countries }"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"nKUZK1pb-_jv","executionInfo":{"status":"ok","timestamp":1750255624486,"user_tz":-120,"elapsed":49,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"30a7fcea-0737-44c2-fdec-1c412ccb2878"},"id":"nKUZK1pb-_jv","execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'AR', 'EN', 'ES', 'FRA', 'IT'}"]},"metadata":{},"execution_count":36}]},{"cell_type":"code","execution_count":null,"id":"30bb8484","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"30bb8484","executionInfo":{"status":"ok","timestamp":1750255641493,"user_tz":-120,"elapsed":24,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"e7431a60-6b48-4903-cf87-f6a71d5a6eb1"},"outputs":[{"output_type":"stream","name":"stdout","text":["{'FRA', 'ES', 'AR', 'EN', 'IT'}\n","[['es', '91'], ['en', '88'], ['fra', '12'], ['it', '33'], ['ar', '55'], ['it', '34'], ['es', '98']]\n"]}],"source":["#Β goal = {'AR', 'EN', 'ES', 'FRA', 'IT'}\n","\n","# getting just the letters\n","#Β uppercase\n","\n","# Your code goes here\n","print({item.split(\"-\")[0].upper() for item in codes_countries})\n","print([item.split(\"-\") for item in codes_countries])"]},{"cell_type":"markdown","id":"32925503-a999-4711-8842-b5c83789857d","metadata":{"id":"32925503-a999-4711-8842-b5c83789857d"},"source":["# Summary"]},{"cell_type":"markdown","id":"8b7cec96-24f0-4c9c-9b34-8f5993e7d421","metadata":{"id":"8b7cec96-24f0-4c9c-9b34-8f5993e7d421"},"source":["- Comprehensions provide a quicker, more comfortable, and readable way to create lists, sets, and dictionaries.\n","- Saves us some steps compared to traditional for loops (create empty list, use append method)\n","- It supports conditions, enabling us to filter or modify elements during the creation process.\n","- If an `else` statement is included, the order changes, offering flexibility in handling different conditions."]},{"cell_type":"markdown","id":"f64cdf34-69ab-4c28-a92a-6080ecc63d00","metadata":{"lang":"es","id":"f64cdf34-69ab-4c28-a92a-6080ecc63d00"},"source":["# Extra"]},{"cell_type":"markdown","id":"79557943-bf12-4f38-bdc2-b7cf4747e92d","metadata":{"id":"79557943-bf12-4f38-bdc2-b7cf4747e92d"},"source":["## Nested list comprehensions"]},{"cell_type":"markdown","id":"1c45b37a-5935-4b19-a8cf-409e1b593ca7","metadata":{"id":"1c45b37a-5935-4b19-a8cf-409e1b593ca7"},"source":["Nested list comprehensions in Python allow you to create lists of lists or perform more complex transformations with multiple levels of iteration. The syntax involves placing one or more list comprehensions inside another."]},{"cell_type":"markdown","id":"d29730b4-01f4-4adc-8a71-9c27f78bc070","metadata":{"id":"d29730b4-01f4-4adc-8a71-9c27f78bc070"},"source":["```python\n","new_list = [[expression for item in inner_list] for inner_list in outer_list]\n","```"]},{"cell_type":"markdown","id":"65409460-79a2-4604-a701-d660cf88170f","metadata":{"id":"65409460-79a2-4604-a701-d660cf88170f"},"source":["Example: Flattening a List of Lists"]},{"cell_type":"code","execution_count":null,"id":"dd5dd8c7-aabf-475d-84c1-ca01cd2020c2","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"dd5dd8c7-aabf-475d-84c1-ca01cd2020c2","executionInfo":{"status":"ok","timestamp":1723114551623,"user_tz":-120,"elapsed":286,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"e3721841-470b-4f4e-e281-23d589e7fc14"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["[1, 2, 3, 4, 5, 6, 7, 8, 9]"]},"metadata":{},"execution_count":35}],"source":["list_of_lists = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]\n","flattened_list = []\n","for sublist in list_of_lists:\n"," for num in sublist:\n"," flattened_list.append(num)\n","\n","flattened_list"]},{"cell_type":"code","execution_count":null,"id":"b3fb6970-d377-4365-aab7-99a65f9146a3","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"b3fb6970-d377-4365-aab7-99a65f9146a3","executionInfo":{"status":"ok","timestamp":1723114611118,"user_tz":-120,"elapsed":266,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"3f658285-d16f-46e5-c9aa-704ffb408742"},"outputs":[{"output_type":"stream","name":"stdout","text":["[1, 2, 3, 4, 5, 6, 7, 8, 9]\n"]}],"source":["# Using nested list comprehension to flatten a list of lists\n","flattened_list = [num for sublist in list_of_lists for num in sublist]\n","print(flattened_list)"]},{"cell_type":"markdown","id":"6b103055-b3a7-4a00-aff4-649cabdb443a","metadata":{"id":"6b103055-b3a7-4a00-aff4-649cabdb443a"},"source":["Another example"]},{"cell_type":"code","execution_count":null,"id":"91ab7124","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"91ab7124","executionInfo":{"status":"ok","timestamp":1723114751327,"user_tz":-120,"elapsed":429,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"829165f2-752c-469c-a67b-694dc9af82ad"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['Peter', '18', 'Clara', '20', 'Megan', '35', 'Marc', '32']"]},"metadata":{},"execution_count":39}],"source":["nested_comprehension = [[[\"Peter\", \"18\"], [\"Clara\", \"20\"]], [['Megan', '35']], [['Marc', '32']]]\n","\n","flattened = []\n","\n","for i in nested_comprehension:\n"," for element in i:\n"," for x in element:\n"," flattened.append(x)\n","\n","flattened"]},{"cell_type":"code","execution_count":null,"id":"a89c12a0","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"a89c12a0","executionInfo":{"status":"ok","timestamp":1723114789443,"user_tz":-120,"elapsed":271,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"aa20c5c6-dac1-4d37-be68-6be32249cf23"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["['Peter', '18', 'Clara', '20', 'Megan', '35', 'Marc', '32']"]},"metadata":{},"execution_count":40}],"source":["flattened_comp = [x for i in nested_comprehension for element in i for x in element]\n","flattened_comp"]},{"cell_type":"markdown","id":"9f823b4b-8b6a-4c74-af3c-c46a60c87437","metadata":{"id":"9f823b4b-8b6a-4c74-af3c-c46a60c87437"},"source":["## Dict comprehension from two lists"]},{"cell_type":"markdown","id":"e0ac7032-bc56-40f6-8634-f05916f23840","metadata":{"lang":"en","id":"e0ac7032-bc56-40f6-8634-f05916f23840"},"source":["We can also use dictionary comprehension to create a dictionary from two lists, one will be the `keys`and the other one the `values`."]},{"cell_type":"code","execution_count":null,"id":"5e44b9c5","metadata":{"id":"5e44b9c5"},"outputs":[],"source":["names = [\"venice\", \"sam\", \"clara\"]\n","ages = [\"32\", \"21\", \"15\"]\n","\n","the_goal = {\"venice\": \"32\",\n"," \"sam\": \"21\",\n"," \"clara\":\"15\"\n","}"]},{"cell_type":"code","execution_count":null,"id":"tough-peeing","metadata":{"scrolled":true,"colab":{"base_uri":"https://localhost:8080/"},"id":"tough-peeing","executionInfo":{"status":"ok","timestamp":1723115120258,"user_tz":-120,"elapsed":290,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"e796adad-e6c2-4474-ec40-6d21ac2d5500"},"outputs":[{"output_type":"stream","name":"stdout","text":["{'venice': '32', 'sam': '21', 'clara': '15'}\n"]}],"source":["# using a for loop\n","new_dictionary = {}\n","\n","list(zip(names, ages))\n","\n","for person, age in zip(names, ages):\n"," new_dictionary[person] = age\n","\n","print(new_dictionary)"]},{"cell_type":"code","execution_count":null,"id":"constitutional-daughter","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"constitutional-daughter","executionInfo":{"status":"ok","timestamp":1723115150355,"user_tz":-120,"elapsed":519,"user":{"displayName":"Ignacio Soteras","userId":"02050793736257155229"}},"outputId":"95dc9483-0cbd-4719-ea66-dccc24a92fab"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'venice': '32', 'sam': '21', 'clara': '15'}"]},"metadata":{},"execution_count":51}],"source":["new_dict = {person:age for person, age in zip(names, ages)}\n","new_dict"]}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","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.9.13"},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":true,"skip_h1_title":false,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{},"toc_section_display":true,"toc_window_display":true},"colab":{"provenance":[]}},"nbformat":4,"nbformat_minor":5} \ No newline at end of file diff --git a/week_1/day_3/lab-python-list-dict-set-comprehension b/week_1/day_3/lab-python-list-dict-set-comprehension new file mode 160000 index 0000000..6d25edd --- /dev/null +++ b/week_1/day_3/lab-python-list-dict-set-comprehension @@ -0,0 +1 @@ +Subproject commit 6d25eddcb6285419e7c3523fb9264d65649b53a7 diff --git a/week_1/day_3/lab-python-list-dict-set-comprehension-extra b/week_1/day_3/lab-python-list-dict-set-comprehension-extra new file mode 160000 index 0000000..0cb49b8 --- /dev/null +++ b/week_1/day_3/lab-python-list-dict-set-comprehension-extra @@ -0,0 +1 @@ +Subproject commit 0cb49b8daec091519a97e9f98cb770ae2d02ab33 diff --git a/week_1/day_4/lab-python-error-handling b/week_1/day_4/lab-python-error-handling new file mode 160000 index 0000000..e01d610 --- /dev/null +++ b/week_1/day_4/lab-python-error-handling @@ -0,0 +1 @@ +Subproject commit e01d61066905d35f249a95f94ef430422a1f5b02 diff --git a/week_1/day_4/lab-python-error-handling-extra b/week_1/day_4/lab-python-error-handling-extra new file mode 160000 index 0000000..2057c6c --- /dev/null +++ b/week_1/day_4/lab-python-error-handling-extra @@ -0,0 +1 @@ +Subproject commit 2057c6c3d06f1dd9172fe8d35d2781302c5af4a9 diff --git a/week_1/day_4/lab-python-lambda-map-reduce-filter b/week_1/day_4/lab-python-lambda-map-reduce-filter new file mode 160000 index 0000000..a27236c --- /dev/null +++ b/week_1/day_4/lab-python-lambda-map-reduce-filter @@ -0,0 +1 @@ +Subproject commit a27236c228e7a5c8badb85c478470287b63909d3 diff --git a/week_1/day_5/lab-python-oop b/week_1/day_5/lab-python-oop new file mode 160000 index 0000000..daaaff4 --- /dev/null +++ b/week_1/day_5/lab-python-oop @@ -0,0 +1 @@ +Subproject commit daaaff4d72a952d33225a2e9de6e304e89c16126 diff --git a/week_2/day_1/.DS_Store b/week_2/day_1/.DS_Store new file mode 100644 index 0000000..f31f198 Binary files /dev/null and b/week_2/day_1/.DS_Store differ diff --git a/week_2/day_1/2.1_pandas.ipynb b/week_2/day_1/2.1_pandas.ipynb new file mode 100644 index 0000000..372c164 --- /dev/null +++ b/week_2/day_1/2.1_pandas.ipynb @@ -0,0 +1 @@ +{"cells":[{"cell_type":"markdown","metadata":{"toc":true,"id":"3HPIK61KSOPO"},"source":["

Table of Contents

\n",""]},{"cell_type":"markdown","metadata":{"id":"fWbJhn0BSOPQ"},"source":["# Short intro to NumPy"]},{"cell_type":"markdown","metadata":{"id":"mR8-_HdQSOPQ"},"source":["Let's start with the first library to be used in this bootcamp:\n","[NumPy](https://numpy.org/)\n","\n","NumPy is a powerful library for numerical computing in Python. It provides support for large, multi-dimensional arrays and matrices thorugh classes, along with an extensive collection of mathematical functions and methods to operate on these arrays efficiently.\n","\n"]},{"cell_type":"markdown","source":["To use a library in our code, first we need to make sure that the library is installed in our computer. In the case of NumPy, we don't need to worry about this because it's installed during the installation of Anaconda.\n","\n","If the library that we pretend to use is not installed in our computer we will have to use a \"package manager\" as Anaconda to do it. However, we will cover this later during the bootcamp.\n","\n","The next step is to make it available in our code. This process is called \"importing\" the library. There are several ways to \"import\" code from a library in our programs:\n","\n","1. Import the whole library or some functions from the library. We can do this by simply adding the line shown below in our code.\n","\n","```\n","import library_name\n","```\n","\n","replacing the `library_name` by the name of the library that we pretend to use.\n","\n","If a function of the library, has the same name as a Python built-in function, it will overwrite it. To avoid this potential problem, we can use an alias during the \"import\" as shown below:\n","\n","```\n","import library_name as alias\n","````\n","\n","where the name of the alias can be anything. However, the coding comunity uses specific aliases for each of the most commonly used libraries. Thus, whenever someone uses an alias in a code everybody knows which library refers to.\n","\n","Finally, there are some huge libraries, and not allways we want to use all the code from a given library. In such cases, we can only \"import\" a subset of clases, methods, functions...etc from the given library. To do this, we can use the syntax shown below:\n","\n","```\n","from library import function, class,...\n","````\n"],"metadata":{"id":"4rVgJptqlFGE"}},{"cell_type":"markdown","source":["Aside from new data types (np.int, np.float, np.bool,...) introduced by Numpy, Numpy comes with a new important class that allows us to handle arrays and to speed up numerical calculations in a more intuitive way.\n","\n","Let's import Numpy in our code. In case of Numpy, all the developers use \"np\" as an alias for Numpy."],"metadata":{"id":"rELPBaObogBY"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"aX1Pti4fSOPQ"},"outputs":[],"source":["import numpy as np\n","\n","# Creating a NumPy array\n","arr = np.array([1, 2, 3, 4, 5])\n","\n","print(arr)\n","\n","# Array elements can be accessed by index like a Python list.\n","print(arr[0])\n","\n","# Performing operations on the array\n","result = arr * 2\n","print(\"Result with a numpy array: \",result) # Output: [2 4 6 8 10]\n","\n","# Notice the difference between arr * 2 if arr is a Numpy array or a Python list\n","print(\"Result with a Python list: \",[1, 2, 3, 4, 5] * 2)\n"]},{"cell_type":"markdown","source":["However, Numpy arrays introduce a restition on the allowed data types of each element in the array: all the elements must be of the same primitive data type. This in in clear contrast with Python lists where the elements can be of heterogeneous data types (one element can be boolean, another can be a list, the other a dictionary, and so on). If the elements of a Numpy array are from different data types, Numpy will try to cast all the elements to a common type. If it's not possible to do the casting it will raise an error."],"metadata":{"id":"jEF2QOhrq-6U"}},{"cell_type":"code","source":["np.__version__"],"metadata":{"id":"uVgyD8Tw5oqX"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["a = np.array([\"Hello\", 1, False])\n","a"],"metadata":{"id":"_tj_Qr7EsErK"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["As we can see, all the elements were casted as \"strings\""],"metadata":{"id":"5Iaw9ft4sMFz"}},{"cell_type":"markdown","source":["The previous example involved a 1D-Numpy array. However Numpy arrays can have multiple dimensions: 2, 3, 4...etc, and each dimension will have an index associated.\n","\n","Let's see an example of a 2d-array. 2d-arrays can be unsderstood as tables of data. However, these tables lack of column/row names."],"metadata":{"id":"kJEj6B0NqTyt"}},{"cell_type":"code","source":["a = np.array([[1,2,3],[4,5,6],[7,8,9]])\n","print(a)\n","#print()\n","# This array has three rows and two columns.\n","# To retrieve an element, we need to provide the index for the row, and the index for the column separated by \",\" within brackets.\n","\n","print(\"The element in the first row and second column is: \",a[0,1])"],"metadata":{"id":"u_o3bJ8QjVzG"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["# Slicing Numpy arrays\n","\n","Sometimes we want to access a subset of rows/columns from the NumPy array. To do this, we can use the following syntax:\n","\n","```\n","a[n:m, p:q]\n","```\n","\n","which means: retrieve all the elements from row \"n\" to row \"m-1\" (the last one is not included) and columns \"p\" to \"q-1\".\n","\n","Let's see an example!"],"metadata":{"id":"BrJ8F2PBtYZG"}},{"cell_type":"code","source":["a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[-2, -5, -6, 3]])\n","print(a)\n","print()\n","print(a[1:3,1:3]) # row indices: 1,3,-> 1:4 columns indices: 1,3 -> 1:3"],"metadata":{"id":"Z6VxdCF9vQpP"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["When we use slicing, we can ommit one or both numbers from the \"n:m\" syntax. Let's see all the possible cases:\n","\n","1. If we ommit \"n\", we will retrieve all the rows from the first one to \"m-1\".\n","2. If we ommit \"m\", we will retrieve all the rows from the \"m\" one to the last one\n","3. If we ommit both, we will obtain all the rows.\n","\n","The same applies for column indexes."],"metadata":{"id":"x_KGkGAavvXe"}},{"cell_type":"code","source":["print(a)\n","print()\n","print(a[1:, 2: ])\n","#print()\n","#print(a[:2, :2])\n","#print()\n","#print(a[:, :])"],"metadata":{"id":"JRWr3eMKyuMa"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["# Filters\n","\n","We can also add filters placing our condition within brackets"],"metadata":{"id":"YcwxGrZS3qC1"}},{"cell_type":"code","source":["print(a[a>5])"],"metadata":{"id":"iPqpRRb63tJT"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["# Some important attributes of the Numpy array class\n","\n","Numpy arrays are instances of the class \"array\". This class has a few important attributes that deserve special attention for us: `.shape`, `.ndim`, and `.size`.\n","\n","The `.shape` attribute returns a tuple with two elements: the number of rows, and the number of columns."],"metadata":{"id":"iTRSyG2u4zEx"}},{"cell_type":"code","source":["a"],"metadata":{"id":"e7xFbHEUHW11"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["print(a.shape)\n","print()\n","print(f\"The Numpy array has {a.shape[0]} rows, and {a.shape[1]} columns\")\n","print()\n","print(f\"The number of dimensions is: {a.ndim}\")\n","print()\n","print(f\"The number of elements in the Numpy array is: {a.size}\")"],"metadata":{"id":"0deItzJI50zG"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["# Checking our Numpy version\n","\n","In Python, all the libraries are constantly changing with new updates and some functions might become deprecated over time. Therefore, it's important to know how to determine the current version of a library. This is very easy to do, we can symply type:\n","\n","```\n","np.__version__\n","```\n","\n","then, when we go to the official page, we need to make sure that we are checking the documentation that corresponds to our case."],"metadata":{"id":"6pJYRMm-4AL2"}},{"cell_type":"code","source":["np.__version__"],"metadata":{"id":"8hub_vyEEgbx"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"7HbdwshLSOPR"},"source":["# Introduction to Pandas Library\n","\n","`pandas` is a powerful library designed for working with tabulated and tagged data, making it ideal for handling spreadsheets, SQL tables, and more. It introduces two new classes: `Series` and `DataFrames`.\n","\n","## Key Features of Pandas\n","\n","- Robust data import/export: `pandas` provides efficient tools to read and write data from various file formats like CSV, XLS, SQL, and HDF5.\n","- Data manipulation: With `pandas`, you can easily filter, add, or delete data, enabling seamless data processing.\n","- High-performance and versatility: It combines the performance of `numpy` arrays with the ability to handle tabulated data efficiently.\n","\n","To import the necessary modules from the `pandas` library, we use the following syntax:"]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"xdtml8oKSOPR"},"outputs":[],"source":["import pandas as pd # 'pd' is an alias for pandas"]},{"cell_type":"markdown","metadata":{"id":"klhkRlxuSOPS"},"source":["![](https://github.com/data-bootcamp-v4/lessons/blob/main/img/pandas.svg?raw=true)"]},{"cell_type":"markdown","metadata":{"id":"V1-KoC0SSOPS"},"source":["## DataFrames and Series in Pandas\n","\n","In `pandas`, a `Series` is a one-dimensional array of data with associated labels called the *index*. If no index is specified, it will automatically generates an ordered sequence of integers as indexes.\n","\n","```python\n","# Creating a Series\n","s = pd.Series(data, index=index)\n","```\n","\n","On the other hand, a `DataFrame` is a two-dimensional data structure that stores data in tabular form, with labeled rows and columns. There are a couple of key differences between Numpy arrays and Pandas DataFrames. First, DataFrames have column/row names while Numpye arrays don't. Second, the data types of each column can be different.\n","\n","Each row represents an observation, and each column represents a variable. `DataFrame` can handle heterogeneous data with different types (numeric, string, boolean, etc.). It also includes variable names, types, and methods to access and modify the data.\n","\n","```python\n","# Creating a DataFrame\n","df = pd.DataFrame(data, ...)\n","```\n"]},{"cell_type":"markdown","metadata":{"id":"bKWEbOOuSOPS"},"source":["---\n","# Series in Pandas\n","\n","## Creating Series\n"]},{"cell_type":"markdown","metadata":{"id":"mL_y3QP5SOPT"},"source":["### From a list"]},{"cell_type":"markdown","metadata":{"id":"1VnmKYddSOPT"},"source":["Create a Series with default indexes from a list"]},{"cell_type":"code","source":["pd.__version__"],"metadata":{"id":"aDjbP-Y5i9Iw"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["np.array([1980, 2020, 2001, 1999])"],"metadata":{"id":"P9lf0pBToIch"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"L_CoXValSOPT"},"outputs":[],"source":["l = [1980, 2020, 2001, 1999]\n","series = pd.Series(l)\n","# Here, we haven't specified the indexes. Therefore, Pandas will automatically set the indexes as consecutive\n","# integer numbers starting from 0\n","series #we can see dtype int which means the series has integers"]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"_PpD61-4SOPU"},"outputs":[],"source":["type(series) #but careful, its still a pandas series"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"bRDLizA9SOPU"},"outputs":[],"source":["series.dtype #this gives me the type of the elements inside the series\n","# this is an attribute (remember our lesson about classes)"]},{"cell_type":"markdown","metadata":{"id":"XKTDghk5SOPU"},"source":["The `Series` have two important attributes:` values` and `index`. The first is a `numpy array` that stores the data, and the second is an object that contains the indexes."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"35NaJi4lSOPU"},"outputs":[],"source":["series.values"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ZJ6useAeSOPU"},"outputs":[],"source":["series.index"]},{"cell_type":"markdown","source":["In this sense, Pandas Series can be understood as Python dictionaries where the keys are the indexes and the values are the values."],"metadata":{"id":"5gM2XcRQ9YU-"}},{"cell_type":"markdown","metadata":{"id":"jGGjwJpeSOPV"},"source":["In Pandas, `Series.items()` is a method used to iterate over the elements of a Pandas Series. It returns an iterator that yields the index-label and corresponding value pairs of the Series."]},{"cell_type":"code","source":["for key in series.keys():\n"," print(key)"],"metadata":{"id":"ooqMcGM4qdkG"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"gZs0m3OkSOPV"},"outputs":[],"source":["#items has tuples (index,value) so i need to iterate with two variables\n","# if i want the values separated, if not, i get the tuple in each\n","# iteration\n","for i in series.index:\n"," print(i)\n","\n","for key, value in series.items():\n"," print(key, value)"]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"cVWKntj9SOPV"},"outputs":[],"source":["for i, v in series.items():\n"," print(\"index \", i)\n"," print(\"value \", v)"]},{"cell_type":"markdown","metadata":{"id":"qoXx1Rr0SOPV"},"source":["### From a list with index"]},{"cell_type":"markdown","metadata":{"id":"Q84AKLrkSOPV"},"source":["When creating a `Series`, you can explicitly define an `array` index and pass it as an argument."]},{"cell_type":"markdown","metadata":{"id":"mtxxu9riSOPV"},"source":["\n","Creating series with defined indexes"]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"4_DTS7IoSOPW"},"outputs":[],"source":["# create a new series with same values as before, and as indexes, names\n","# values [1980, 2020, 2001, 1999]\n","# index \"deb\",\"d\",\"martha\", \"martin\"\n","new_series = pd.Series([1980, 2020, 2001, 1999], index = [\"deb\",\"d\",\"martha\", \"martin\"])\n","new_series"]},{"cell_type":"markdown","metadata":{"id":"vNsPOrrtSOPX"},"source":["### From a dictionary"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-JfF8HLjSOPX"},"outputs":[],"source":["# using dict comprehension, create a dictionary\n","# that has as key \"square of {nr}\" and as value the nr squared\n","# for values from 0 to 10\n","d = {\"square of \"+str(n): n*n for n in range(11)}\n","d"]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"WOcbxY7QSOPX"},"outputs":[],"source":["pd.Series(d) # this creates a series from the dictionary 'd'"]},{"cell_type":"code","source":["pd.Series({str(n): n*n for n in range(11)})"],"metadata":{"id":"vX4ScfZdtGhB"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"r9-Cimt9SOPc"},"source":["\n","# Dataframes in Pandas\n","\n","Unlike `Series`, `DataFrame` is designed to store heterogeneous multivariable data. It can be created from dictionaries (look to Extra section for examples)."]},{"cell_type":"markdown","metadata":{"id":"Jy2b8j1uSOPc"},"source":["We will use `read_csv` to read data from a CSV file and create a DataFrame.\n","\n","We won't be using now the parameter `usecols` nor calling the method `squeeze(\"columns\")`."]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"BQKqa49mSOPc"},"outputs":[],"source":["# Load Titanic dataset from an online source\n","url = 'https://raw.githubusercontent.com/data-bootcamp-v4/data/main/titanic_train.csv'\n","titanic_df = pd.read_csv(url)\n","titanic_df"]},{"cell_type":"markdown","source":["As we can see, with Pandas DataFrames we can read tabular data which was not possible with Numpy arrays. In addition, now every column/row will have \"labels\" and \"indexes\"! Therefore, we will be able to access to a subset of column/rows by using either \"labels\" or \"indexes\" but not both."],"metadata":{"id":"fZITmlfw_CSF"}},{"cell_type":"markdown","source":["# Some important methods of Pandas DataFrames"],"metadata":{"id":"j9iq2uol_lu9"}},{"cell_type":"markdown","metadata":{"id":"xYgf4Q31SOPc"},"source":["### `head()` and `tail()`"]},{"cell_type":"markdown","metadata":{"id":"LzwvgvrUSOPc"},"source":["The `head()` method returns the first few rows of a DataFrame or Series, while the `tail()` method returns the last few rows."]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"IW4tJauMSOPc"},"outputs":[],"source":["titanic_df.head()"]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"m2o_GguwSOPc"},"outputs":[],"source":["titanic_df.tail()"]},{"cell_type":"markdown","metadata":{"id":"JqdTWRs6SOPd"},"source":["### `index, columns and values`"]},{"cell_type":"markdown","metadata":{"id":"BEh1HCs5SOPd"},"source":["The `index` attribute in Pandas returns the index labels of a DataFrame or Series, and the `columns` attribute returns the column labels of a DataFrame."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"HM-sMEVeSOPd"},"outputs":[],"source":["titanic_df.index"]},{"cell_type":"markdown","metadata":{"id":"LIJsYV9KSOPd"},"source":["`RangeIndex(start=0, stop=1460, step=1)` is a special type of index in Pandas called a `RangeIndex`. It represents a range of integer values starting from 0, up to (but not including) 1460, with a step size of 1."]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"fXmybIXxSOPd"},"outputs":[],"source":["list(titanic_df.index)"]},{"cell_type":"markdown","source":["We can have access to the column's names using the `.columns` attribute"],"metadata":{"id":"7IGn0F88_3HN"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"xix7oB0XSOPd"},"outputs":[],"source":["titanic_df.columns"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"6wPsnb3oSOPd"},"outputs":[],"source":["list(titanic_df.columns)"]},{"cell_type":"markdown","metadata":{"id":"GDBORwvGSOPd"},"source":["In Pandas, `df.values` is an attribute that returns the underlying NumPy array of a DataFrame df. It represents the actual data stored in the DataFrame as a two-dimensional NumPy array."]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"IeX8xC08SOPe"},"outputs":[],"source":["titanic_df.values"]},{"cell_type":"markdown","metadata":{"id":"Qgr882OcSOPe"},"source":["\n","Additionally, `Pandas` can create Dataframes from other sources, such as JSON, URL ..."]},{"cell_type":"markdown","metadata":{"id":"5XTv-sV-SOPe"},"source":["\n","---\n","## Data access in Dataframe\n"]},{"cell_type":"markdown","metadata":{"id":"4znM72BLSOPe"},"source":["### Columns"]},{"cell_type":"markdown","metadata":{"id":"eA6gms82SOPe"},"source":["You can extract columns from a `DataFrame` using dictionary-like notation or as attributes, obtaining a `Series` object in both cases, provided the column label is a valid Python identifier."]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"_rE4Zh2MSOPe"},"outputs":[],"source":["titanic_df[\"Sex\"] #dict way of accessing a column"]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"-xVIRo0BSOPe"},"outputs":[],"source":["titanic_df.Sex #attribute access of the column # \"Passenger Sex\" -> \"Passenger_Sex\"\n","\n","#this only works if the column name doesn't have unusual characters, this means\n","#no spaces!!! Therefore, it's important to make sure that the DataFrame doesn't contain columns with white spaces!!!"]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"hZg5NlTESOPe"},"outputs":[],"source":["titanic_df[[\"Sex\"]] #by using double [] we get a Dataframe instead\n","# of a series"]},{"cell_type":"markdown","source":["We can access a subset of columns by providing a list of the desired column's names within square brackets."],"metadata":{"id":"mEHIgb-AAXsa"}},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"bN-PVw6eSOPf"},"outputs":[],"source":["titanic_df[[\"Sex\",\"Fare\"]]"]},{"cell_type":"markdown","metadata":{"id":"-OiJCRwpSOPf"},"source":["### Rows"]},{"cell_type":"markdown","metadata":{"id":"VB78xp2GSOPf"},"source":["To access rows in a Pandas DataFrame, you can use the `iloc` attribute with integer-based indexing or the `loc` attribute with label-based indexing. For example, `df.iloc[0]` will access the first row, and `df.loc['row_label']` will access the row with the specified label."]},{"cell_type":"markdown","metadata":{"id":"ZzOZ5K9uSOPf"},"source":["\n","
Note: Consult http://pandas.pydata.org/pandas-docs/version/0.18.1/indexing.html#different-choices-for-indexing to understand the differences between methods.
"]},{"cell_type":"markdown","metadata":{"id":"2LVHSGnYSOPf"},"source":["Just for the sake of this example, we will create Panda's DataFrame from a dictionary. However, to do so the values of each key must be lists. If we do so, the dictionary keys will become the column names and the values contained in the list will become the entries"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"C61791UoSOPf"},"outputs":[],"source":["d_index = {\n"," \"name\": [\"Paula\", \"Mark\"],\n"," \"score\": [98.5, 95]\n","}\n","print(d_index)\n","df_index = pd.DataFrame(d_index, index=[\"123A\", \"789B\"]) #\n","display(df_index)"]},{"cell_type":"markdown","metadata":{"id":"A6TkK7OLSOPf"},"source":["\n","**loc** is used for label-based indexing to access rows."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"X5Hl5-6kSOPg"},"outputs":[],"source":["df_index.loc[\"789B\"]"]},{"cell_type":"markdown","metadata":{"id":"NzZiBJaPSOPg"},"source":["\n","**iloc** is used for integer-based indexing in Pandas to access rows"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"U5mwXMpWSOPg"},"outputs":[],"source":["df_index.iloc[1]"]},{"cell_type":"markdown","metadata":{"id":"DywdLxv9SOPg"},"source":["### Specific values"]},{"cell_type":"markdown","metadata":{"id":"slFgn-AbSOPg"},"source":["Here's a summary of the different ways to access individual values in a Pandas DataFrame:\n","\n","1. `df.loc[row_label][column_label]`: Chooses the row with the label and then the value in that row with the column label.\n","\n","2. `df.iloc[row_position][column_label]`: Selects the row with the position and then the value in that row with the column label.\n","\n","3. `df.loc[row_label, column_label]`: Directly accesses the value using both row and column labels.\n","\n","4. `df.iloc[row_position, column_position]`: Directly accesses the value using both row and column positions.\n","\n","Note: you might see `df[row_label][column_label]`, even though is less recommended that using `loc()`."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"PEYSZrM8SOPg"},"outputs":[],"source":["# first I access the row with the index, then I access the value\n","# with the index of the resulting series (name of the column)\n","df_index.iloc[0][\"score\"]"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"LaWWYrRFSOPg"},"outputs":[],"source":["# first I access the row with the label, then I access the value\n","# with the index of the resulting series (name of the column)\n","df_index.loc[\"789B\"][\"score\"]"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"54lJAv7aSOPh"},"outputs":[],"source":["df_index.loc[\"789B\",\"score\"]"]},{"cell_type":"markdown","metadata":{"id":"OtO3VQbSSOPi"},"source":["\n","---\n","## More DataFrame Methods\n","\n","\n","Let's see some useful methods of the Dataframe class."]},{"cell_type":"markdown","metadata":{"id":"M3_UXLhtSOPi"},"source":["### `shape`\n","\n","`shape` is a Pandas attribute that returns a tuple representing the dimensions of a DataFrame or Series, indicating the number of rows and columns, while `shape()` is not a valid function in Pandas, and attempting to call it will result in an AttributeError."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"AjCrPIt8SOPj"},"outputs":[],"source":["titanic_df.shape # gives a tuple (nr rows, nr columns)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"7-BE0HxKSOPj"},"outputs":[],"source":["titanic_df.shape[1] #tuples are accesed like this. nr of columns"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"V1V74sd-SOPj"},"outputs":[],"source":["titanic_df.shape[0] # nr of rows"]},{"cell_type":"markdown","metadata":{"id":"YNZQbNgQSOPj"},"source":["### `describe()`\n","\n","`describe()` is a Pandas method that generates descriptive statistics of a DataFrame, providing information on count, mean, standard deviation, minimum, maximum, and quartiles for each numerical column."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"vJXbXx9iSOPk"},"outputs":[],"source":["titanic_df.describe()"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-sv4wz4RSOPk"},"outputs":[],"source":["titanic_df.describe(include=\"object\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"QWZCXC5CSOPk"},"outputs":[],"source":["titanic_df.describe(include=\"all\")"]},{"cell_type":"markdown","metadata":{"id":"Za8beeZKSOPk"},"source":["### `info()`\n","\n","`info()` is a Pandas method that provides a concise summary of a DataFrame, including information about the data types, non-null values, and memory usage."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"YJr-xeuvSOPk"},"outputs":[],"source":["titanic_df.info()"]},{"cell_type":"markdown","metadata":{"id":"_Q7A8NksSOPk"},"source":["### `nunique() and unique()`\n","\n","`nunique()` is a Pandas function that returns the number of unique elements in a Series or DataFrame, while `unique()` returns an array of unique elements in a Series or DataFrame."]},{"cell_type":"code","execution_count":null,"metadata":{"id":"aoR62Hp3SOPk"},"outputs":[],"source":["titanic_df.nunique() #number of unique values per column"]},{"cell_type":"code","source":["titanic_df.Pclass.nunique()"],"metadata":{"id":"Atdd73bN-pPN"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"midngN5LSOPk"},"outputs":[],"source":["#see unique values of one column\n","titanic_df.Pclass.unique() # M, F, male, Male, maaale, ...."]},{"cell_type":"markdown","metadata":{"id":"cWN7tx0qSOPk"},"source":["### `dtypes`"]},{"cell_type":"markdown","metadata":{"id":"dRvC7Hb-SOPk"},"source":["`dtypes` is a Pandas attribute that returns the data types of each column in a DataFrame, while `dtype` is a method that returns the data type of a single element in a Series or DataFrame."]},{"cell_type":"code","execution_count":null,"metadata":{"tags":[],"id":"7nbFD_5pSOPk"},"outputs":[],"source":["titanic_df.dtypes"]},{"cell_type":"markdown","metadata":{"id":"-zfefcKcSOPk"},"source":["### `select_dtypes()`"]},{"cell_type":"markdown","metadata":{"id":"CVvE5GyCSOPk"},"source":["`select_dtypes()` is a pandas function used to filter columns in a DataFrame based on their data types. It allows you to select numeric, object (string), boolean, datetime, or categorical columns.\n","\n","Syntax:\n","```python\n","DataFrame.select_dtypes(include=None, exclude=None)\n","```\n","\n","- `include`: A list of data types or strings representing data types to include in the selection. If specified, only columns with these data types will be included.\n","- `exclude`: A list of data types or strings representing data types to exclude from the selection. If specified, columns with these data types will be excluded.\n","\n","Example:\n","```python\n","# Assuming df is a DataFrame\n","numeric_columns = df.select_dtypes(include='number')\n","object_columns = df.select_dtypes(include='object')\n","```\n","\n"]},{"cell_type":"code","source":["titanic_df.select_dtypes(include=['int','float'])"],"metadata":{"id":"2ZG8Dvi5SNM9"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"nBud_HRWSOPk"},"outputs":[],"source":["titanic_df.select_dtypes(include='number')#.head()"]},{"cell_type":"markdown","metadata":{"id":"pkNwCYvWSOPl"},"source":["### Aggregation such as `max()`"]},{"cell_type":"markdown","source":[],"metadata":{"id":"NXdfp3M-RONM"}},{"cell_type":"code","execution_count":null,"metadata":{"id":"HXSvfeOcSOPl"},"outputs":[],"source":["titanic_df.Fare.max() #get the max for one numerical column"]},{"cell_type":"code","source":["titanic_df.head()"],"metadata":{"id":"wuv_5XAKIPHH"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["titanic_df[[\"Age\",\"Fare\"]].max()"],"metadata":{"id":"60jNaW4MR5v0"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["titanic_df.iloc[:,[list(titanic_df.columns).index(\"Age\"),list(titanic_df.columns).index(\"Fare\")]].max()"],"metadata":{"id":"GKjA5jPfcWzw"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["titanic_df[[\"Age\",\"Fare\"]].max()"],"metadata":{"id":"3bKDeQ7BPeGv"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"_iIlze2tSOPl"},"source":[" Just like `max()`, there are many methods that can be applied to either the entire dataframe or its individual columns."]},{"cell_type":"markdown","metadata":{"id":"vdOGkwpwSOPl"},"source":["## πŸ’‘ Check for understanding"]},{"cell_type":"markdown","source":[".value_counts()"],"metadata":{"id":"N6EZuz-3mpBX"}},{"cell_type":"markdown","metadata":{"id":"ZMhWdj2NSOPl"},"source":["- a. Use the original titanic_df\n","- b. Select the `Sex` and `Fare` columns.\n","- c. Indicate how many different types of `Sex` there are.\n","- d. Indicate how many `Sex` of each type there are.\n","- e. Show a statistical summary of all the variables.\n","- f. Write some conclusions"]},{"cell_type":"code","source":["# a. Your code here"],"metadata":{"id":"OK-IdXqKU4Ys"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"TDZ-NcR_SOPl"},"outputs":[],"source":["# b. Your code here"]},{"cell_type":"code","source":["# c. Your code here"],"metadata":{"id":"OsQlwqP8nc3u"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["#Β d. Your code here"],"metadata":{"id":"NbegkQ6AnksV"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# e. Your code here"],"metadata":{"id":"G5xtWit4ntuQ"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"d3CRY6dISOPl"},"source":["# Summary"]},{"cell_type":"markdown","metadata":{"id":"9yHti1qJSOPl"},"source":["- Pandas is a library designed for working with tabulated and tagged data, making it ideal for handling spreadsheets, SQL tables, and more, built on top of NumPy.\n","- DataFrames and Series are the two main data structures in Pandas.\n","- Series is a one-dimensional array of data with associated labels called the index, while DataFrame is a two-dimensional tabular data structure with labeled rows and columns.\n","- Data access in Series and DataFrame can be achieved using integer-based indexing (iloc), label-based indexing (loc), or dictionary-like notation for column access.\n","- Series and DataFrame have various methods, such as sort_values(), sort_index(), value_counts(), describe(), info(), nunique(), unique(), dtypes, and select_dtypes().\n"]},{"cell_type":"code","source":["titanic_df.sort_values(by=[\"Pclass\",\"Age\"], ascending=[False,True]) #.head()#.sort_values(by=\"Age\")"],"metadata":{"id":"vfSfnJMziBkB"},"execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","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.9.13"},"toc":{"base_numbering":1,"nav_menu":{},"number_sections":true,"sideBar":false,"skip_h1_title":false,"title_cell":"Table of Contents","title_sidebar":"Contents","toc_cell":true,"toc_position":{"height":"537.273px","left":"356px","top":"130.994px","width":"285.994px"},"toc_section_display":true,"toc_window_display":true},"colab":{"provenance":[],"toc_visible":true}},"nbformat":4,"nbformat_minor":0} \ No newline at end of file diff --git a/week_2/day_1/GSAF5.xls b/week_2/day_1/GSAF5.xls new file mode 100644 index 0000000..06df0f4 Binary files /dev/null and b/week_2/day_1/GSAF5.xls differ diff --git a/week_2/day_1/file1.csv b/week_2/day_1/file1.csv new file mode 100644 index 0000000..da4692c --- /dev/null +++ b/week_2/day_1/file1.csv @@ -0,0 +1,4009 @@ +Customer,ST,GENDER,Education,Customer Lifetime Value,Income,Monthly Premium Auto,Number of Open Complaints,Policy Type,Vehicle Class,Total Claim Amount +RB50392,Washington,NA,Master,,0,1000.0000000000,1/0/00,Personal Auto,Four-Door Car,2.704934 +QZ44356,Arizona,F,Bachelor,697953.59%,0,94.0000000000,1/0/00,Personal Auto,Four-Door Car,1131.464935 +AI49188,Nevada,F,Bachelor,1288743.17%,48767,108.0000000000,1/0/00,Personal Auto,Two-Door Car,566.472247 +WW63253,California,M,Bachelor,764586.18%,0,106.0000000000,1/0/00,Corporate Auto,SUV,529.881344 +GA49547,Washington,M,High School or Below,536307.65%,36357,68.0000000000,1/0/00,Personal Auto,Four-Door Car,17.269323 +OC83172,Oregon,F,Bachelor,825629.78%,62902,69.0000000000,1/0/00,Personal Auto,Two-Door Car,159.383042 +XZ87318,Oregon,F,College,538089.86%,55350,67.0000000000,1/0/00,Corporate Auto,Four-Door Car,321.6 +CF85061,Arizona,M,Master,721610.03%,0,101.0000000000,1/0/00,Corporate Auto,Four-Door Car,363.02968 +DY87989,Oregon,M,Bachelor,2412750.40%,14072,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,511.2 +BQ94931,Oregon,F,College,738817.81%,28812,93.0000000000,1/0/00,Special Auto,Four-Door Car,425.527834 +SX51350,California,M,College,473899.20%,0,67.0000000000,1/0/00,Personal Auto,Four-Door Car,482.4 +VQ65197,California,NA,College,819719.71%,0,110.0000000000,1/0/00,Personal Auto,SUV,528 +DP39365,California,NA,Master,879879.70%,77026,110.0000000000,1/2/00,Corporate Auto,Four-Door Car,472.029737 +SJ95423,Arizona,NA,High School or Below,881901.89%,99845,110.0000000000,1/1/00,Corporate Auto,SUV,528 +IL66569,California,NA,College,538443.17%,83689,70.0000000000,1/2/00,Corporate Auto,Four-Door Car,307.139132 +BW63560,Oregon,NA,Bachelor,746313.94%,24599,64.0000000000,1/1/00,Corporate Auto,Four-Door Car,42.920271 +FV94802,Nevada,NA,High School or Below,256686.78%,25049,67.0000000000,1/0/00,Personal Auto,Two-Door Car,454.245098 +OE15005,Cali,NA,College,394524.16%,28855,101.0000000000,1/0/00,Personal Auto,SUV,647.442031 +WC83389,Oregon,NA,College,571033.31%,51148,72.0000000000,1/0/00,Personal Auto,Four-Door Car,308.981664 +FL50705,California,NA,High School or Below,816261.71%,66140,101.0000000000,1/0/00,Corporate Auto,Four-Door Car,484.8 +ZK25313,Oregon,NA,High School or Below,287205.13%,57749,74.0000000000,1/0/00,Personal Auto,Two-Door Car,355.2 +QK46697,Washington,M,Bachelors,617710.93%,61040,79.0000000000,1/1/00,Personal Auto,Two-Door Car,20.382876 +YH23384,Arizona,NA,Bachelor,2412750.40%,14072,71.0000000000,1/0/00,Personal Auto,Four-Door Car,511.2 +TZ98966,Nevada,NA,Bachelor,245019.10%,0,73.0000000000,1/3/00,Corporate Auto,Four-Door Car,554.376763 +HM55802,California,NA,Bachelor,239210.79%,17870,61.0000000000,1/0/00,Corporate Auto,Four-Door Car,439.2 +FS42516,Oregon,NA,College,580206.60%,97541,72.0000000000,1/0/00,Personal Auto,Four-Door Car,389.185006 +US89481,California,NA,Bachelor,394637.21%,0,111.0000000000,1/0/00,Personal Auto,Four-Door Car,799.2 +HS14476,Washington,M,College,916206.32%,29723,80.0000000000,1/0/00,Personal Auto,Four-Door Car,20.985105 +GE62437,AZ,NA,College,1290256.01%,86584,111.0000000000,1/2/00,Personal Auto,Four-Door Car,532.8 +EJ77678,Oregon,NA,Master,323536.05%,75690,80.0000000000,1/1/00,Personal Auto,Four-Door Car,384 +SV85652,Arizona,NA,College,245458.35%,23158,63.0000000000,1/1/00,Personal Auto,Four-Door Car,322.294043 +UL64533,Nevada,NA,High School or Below,1897545.61%,65999,237.0000000000,1/0/00,Corporate Auto,Luxury SUV,615.927769 +PF41800,California,NA,Bachelor,471532.13%,0,65.0000000000,1/0/00,Personal Auto,Four-Door Car,308.15089 +HD95276,Washington,F,College,473787.17%,0,130.0000000000,1/0/00,Personal Auto,SUV,23.820158 +SK67821,Oregon,NA,Bachelor,493291.63%,37260,62.0000000000,1/0/00,Corporate Auto,Four-Door Car,15.437681 +YV55495,Arizona,NA,High School or Below,574422.97%,68987,71.0000000000,1/0/00,Personal Auto,Four-Door Car,204.475147 +KY38074,California,NA,Bachelor,1389173.57%,42305,117.0000000000,1/0/00,Personal Auto,Four-Door Car,561.6 +DM79012,Oregon,NA,Master,738097.67%,65706,91.0000000000,1/0/00,Personal Auto,Four-Door Car,436.8 +CM61827,Oregon,NA,Bachelor,309003.41%,0,90.0000000000,1/0/00,Personal Auto,Two-Door Car,648 +WC35801,Arizona,NA,High School or Below,252163.31%,53243,66.0000000000,1/2/00,Personal Auto,Four-Door Car,157.397849 +QG25316,Nevada,NA,High School or Below,265206.18%,0,70.0000000000,1/1/00,Corporate Auto,Two-Door Car,484.318536 +MB98372,Oregon,NA,College,277104.50%,50071,71.0000000000,1/0/00,Corporate Auto,Two-Door Car,18.918935 +IL19217,California,NA,Bachelor,393900.64%,60021,99.0000000000,1/0/00,Personal Auto,Four-Door Car,882.871945 +SR38658,Arizona,NA,High School or Below,1223187.97%,43244,103.0000000000,1/0/00,Personal Auto,Sports Car,494.4 +YD87931,Washington,M,Doctor,495165.61%,46896,35354.0000000000,1/1/00,Personal Auto,Four-Door Car,31.707317 +HG65722,Oregon,NA,Doctor,1281910.29%,10105,172.0000000000,1/3/00,Personal Auto,SUV,0.517753 +BU27331,Arizona,NA,Bachelor,446851.05%,0,73.0000000000,1/3/00,Personal Auto,Four-Door Car,579.165954 +XM45289,Oregon,NA,High School or Below,551434.40%,23218,71.0000000000,1/0/00,Personal Auto,Two-Door Car,447.79344 +KP34198,California,NA,Bachelor,334387.53%,0,92.0000000000,1/0/00,Corporate Auto,Four-Door Car,529.624084 +SH90947,Arizona,NA,High School or Below,229447.89%,0,62.0000000000,1/0/00,Personal Auto,Four-Door Car,313.023175 +WE95729,Oregon,NA,College,3670742.64%,24804,104.0000000000,1/0/00,Personal Auto,SUV,593.830288 +PY51963,California,NA,Bachelor,3347334.95%,33190,106.0000000000,1/0/00,Corporate Auto,SUV,508.8 +RB69909,Nevada,NA,High School or Below,798343.17%,36014,69.0000000000,1/3/00,Special Auto,Four-Door Car,173.956072 +NW21079,Washington,F,Master,487938.48%,67163,61.0000000000,1/2/00,Personal Auto,Two-Door Car,33.192803 +FR46645,California,NA,Bachelor,429399.73%,16701,113.0000000000,1/0/00,Personal Auto,Four-Door Car,831.625979 +SY17488,Arizona,NA,College,716439.55%,46623,91.0000000000,1/0/00,Corporate Auto,Four-Door Car,436.8 +AP67935,California,NA,College,761951.58%,64749,64.0000000000,1/0/00,Special Auto,Four-Door Car,302.56519 +FS37417,Arizona,NA,High School or Below,395800.28%,0,101.0000000000,1/0/00,Personal Auto,SUV,484.8 +ML29312,Oregon,NA,High School or Below,449949.33%,16969,124.0000000000,1/2/00,Personal Auto,SUV,704.768111 +UB61619,Oregon,NA,Master,405956.74%,11621,108.0000000000,1/0/00,Personal Auto,Four-Door Car,518.4 +CD86811,Arizona,NA,Bachelor,445811.34%,17622,65.0000000000,1/1/00,Personal Auto,Four-Door Car,312 +RU83859,California,NA,Bachelor,811033.31%,11489,105.0000000000,1/0/00,Personal Auto,Two-Door Car,504 +FG63582,Oregon,NA,Bachelor,333976.49%,0,94.0000000000,1/0/00,Personal Auto,Two-Door Car,863.327324 +NN71951,California,NA,High School or Below,2426101.78%,66525,100.0000000000,1/0/00,Personal Auto,SUV,104.331355 +WB37082,Arizona,NA,Bachelor,661397.37%,0,63.0000000000,1/0/00,Personal Auto,Four-Door Car,676.391482 +SM52139,WA,NA,College,293069.35%,33663,73.0000000000,1/0/00,Personal Auto,Four-Door Car,350.4 +FL82372,Oregon,NA,College,867219.43%,22547,112.0000000000,1/0/00,Corporate Auto,SUV,537.6 +DP45816,AZ,NA,High School or Below,1163866.93%,61486,97.0000000000,1/0/00,Personal Auto,Two-Door Car,465.258644 +GW33762,Oregon,NA,Bachelor,684615.03%,0,95.0000000000,1/0/00,Personal Auto,Two-Door Car,456 +RZ33670,California,NA,College,1172777.65%,29879,102.0000000000,1/0/00,Personal Auto,Four-Door Car,500.254235 +PY70169,Oregon,NA,High School or Below,2264383.48%,93011,113.0000000000,1/0/00,Personal Auto,SUV,281.451042 +MO91628,Oregon,NA,Master,261447.43%,65186,65.0000000000,1/0/00,Personal Auto,Two-Door Car,5.434505 +HW87852,Oregon,NA,Master,245175.27%,26840,64.0000000000,1/2/00,Personal Auto,Four-Door Car,307.2 +HB20453,Oregon,NA,Bachelor,678127.02%,0,104.0000000000,1/1/00,Personal Auto,Sports Car,982.399613 +BN87372,Oregon,NA,Bachelor,497480.15%,75644,65.0000000000,1/3/00,Personal Auto,Two-Door Car,467.803638 +YX23800,Oregon,NA,Bachelor,859160.49%,38984,73.0000000000,1/0/00,Personal Auto,Four-Door Car,350.4 +DZ87709,Oregon,NA,High School or Below,559216.14%,71811,71.0000000000,1/0/00,Personal Auto,Four-Door Car,29.03416 +XW13033,Nevada,NA,College,800947.28%,20961,67.0000000000,1/0/00,Personal Auto,Four-Door Car,321.6 +SP81997,Washington,F,Master,,41275,96.0000000000,1/0/00,Personal Auto,Four-Door Car,41.122303 +OM82309,California,NA,Bachelor,5816655.35%,61321,186.0000000000,1/1/00,Personal Auto,Luxury Car,427.63121 +ZU35962,California,NA,College,802522.94%,0,77.0000000000,1/0/00,Personal Auto,Two-Door Car,25.807685 +VH85817,California,NA,High School or Below,578018.22%,51066,74.0000000000,1/0/00,Personal Auto,Four-Door Car,787.993313 +DT85712,California,NA,Doctor,411853.91%,34378,102.0000000000,1/0/00,Personal Auto,SUV,489.6 +YJ88573,Nevada,NA,Master,252307.02%,43072,63.0000000000,1/0/00,Personal Auto,Four-Door Car,302.4 +SQ19467,Oregon,NA,College,655421.64%,25222,90.0000000000,1/0/00,Personal Auto,Four-Door Car,475.623251 +YB66933,Washington,F,Bachelor,538275.20%,77552,68.0000000000,1/1/00,Corporate Auto,Four-Door Car,45.215059 +ET79815,California,NA,College,592672.94%,23091,96.0000000000,1/5/00,Personal Auto,Four-Door Car,460.8 +QC35222,California,NA,Bachelor,268347.07%,48269,69.0000000000,1/3/00,Corporate Auto,Four-Door Car,282.151207 +CJ15590,Oregon,NA,Bachelor,269518.24%,32720,67.0000000000,1/0/00,Personal Auto,Four-Door Car,321.6 +OI48267,California,NA,College,604702.52%,20396,76.0000000000,1/1/00,Personal Auto,Four-Door Car,364.8 +JY67916,Oregon,NA,College,1317101.28%,21513,119.0000000000,1/1/00,Personal Auto,Two-Door Car,679.827592 +OW15518,Washington,F,College,1595001.95%,0,87.0000000000,1/1/00,Personal Auto,Two-Door Car,46.041452 +CZ33664,Oregon,NA,Bachelor,252765.38%,80744,63.0000000000,1/0/00,Corporate Auto,Four-Door Car,11.879037 +WK30175,Oregon,NA,Bachelor,267209.58%,52822,67.0000000000,1/0/00,Corporate Auto,Two-Door Car,350.529033 +ON44465,California,NA,High School or Below,531329.40%,0,77.0000000000,1/1/00,Personal Auto,Four-Door Car,863.3947 +TV87155,Oregon,NA,Bachelor,2094619.25%,69738,74.0000000000,1/1/00,Personal Auto,Four-Door Car,492.127532 +KH48895,AZ,NA,Master,837535.39%,17780,109.0000000000,1/0/00,Personal Auto,SUV,132.588288 +NZ30757,California,NA,Bachelor,480166.15%,18107,62.0000000000,1/0/00,Personal Auto,Four-Door Car,297.6 +RI22468,AZ,NA,Bachelor,574594.33%,57740,74.0000000000,1/3/00,Personal Auto,Four-Door Car,269.905129 +FZ30935,Oregon,NA,College,606611.60%,32627,76.0000000000,1/0/00,Personal Auto,Two-Door Car,380.036697 +UG93476,California,NA,College,800230.83%,0,107.0000000000,1/0/00,Personal Auto,SUV,513.6 +AB96670,California,NA,College,239391.54%,0,70.0000000000,1/0/00,Personal Auto,Four-Door Car,425.266308 +XK64261,Oregon,NA,Bachelor,476281.79%,65795,62.0000000000,1/1/00,Corporate Auto,Two-Door Car,49.011099 +EV68375,California,NA,College,433038.60%,60475,107.0000000000,1/0/00,Personal Auto,Four-Door Car,513.6 +UN51653,California,NA,High School or Below,940272.98%,0,130.0000000000,1/0/00,Personal Auto,SUV,936 +TO96662,Oregon,NA,Bachelor,696669.45%,41837,88.0000000000,1/0/00,Personal Auto,Four-Door Car,142.062768 +MR52087,California,NA,Bachelor,769406.43%,32303,65.0000000000,1/0/00,Personal Auto,Four-Door Car,45.152521 +DE75225,Oregon,NA,High School or Below,871756.11%,0,117.0000000000,1/1/00,Personal Auto,SUV,561.6 +EP80820,California,NA,Bachelor,592874.85%,40531,74.0000000000,1/0/00,Personal Auto,Two-Door Car,30.567357 +GU99037,Oregon,NA,College,245297.73%,79898,62.0000000000,1/1/00,Corporate Auto,Four-Door Car,271.606799 +WI57118,California,NA,College,670157.17%,56398,85.0000000000,1/0/00,Personal Auto,Four-Door Car,408 +GP39118,Washington,M,High School or Below,499655.27%,71600,63.0000000000,1/0/00,Personal Auto,Two-Door Car,46.158117 +MQ14219,AZ,NA,College,849269.88%,27804,109.0000000000,1/0/00,Personal Auto,SUV,784.8 +KN20603,Oregon,NA,Bachelor,771349.40%,45506,66.0000000000,1/2/00,Personal Auto,Four-Door Car,316.8 +SG20925,Washington,F,Master,518579.76%,99428,6464.0000000000,1/1/00,Personal Auto,Four-Door Car,48.046869 +JI70886,California,NA,High School or Below,729006.98%,0,102.0000000000,1/1/00,Corporate Auto,SUV,489.6 +VF72557,Oregon,NA,High School or Below,477294.38%,20993,133.0000000000,1/0/00,Personal Auto,SUV,638.4 +OX28638,AZ,NA,High School or Below,680649.14%,37839,86.0000000000,1/0/00,Personal Auto,Two-Door Car,465.633954 +SK55033,California,NA,Bachelor,246978.13%,92711,62.0000000000,1/0/00,Personal Auto,Two-Door Car,368.400146 +OO88645,California,NA,College,310392.30%,74665,78.0000000000,1/2/00,Corporate Auto,Four-Door Car,236.902001 +FM14335,Washington,F,College,1048491.54%,61108,89.0000000000,1/0/00,Personal Auto,Four-Door Car,49.451117 +CW82151,California,NA,Bachelor,890273.76%,46833,112.0000000000,1/0/00,Personal Auto,Sports Car,64.109663 +DY22043,Oregon,NA,High School or Below,549944.72%,88768,68.0000000000,1/0/00,Personal Auto,Two-Door Car,326.4 +SH36774,California,NA,High School or Below,1502359.86%,28262,192.0000000000,1/0/00,Personal Auto,Luxury SUV,921.6 +EM43724,Nevada,NA,Bachelor,250910.79%,33555,63.0000000000,1/0/00,Personal Auto,Four-Door Car,101.89645 +FH85960,Oregon,NA,College,3122174.81%,42780,113.0000000000,1/1/00,Personal Auto,Four-Door Car,542.4 +XA55993,Oregon,NA,Master,313350.34%,58850,78.0000000000,1/0/00,Personal Auto,Four-Door Car,143.747794 +GO36627,AZ,NA,College,383745.19%,21880,97.0000000000,1/0/00,Special Auto,Four-Door Car,424.077159 +QH48047,Oregon,NA,College,1179049.62%,25251,66.0000000000,1/0/00,Personal Auto,Four-Door Car,316.8 +HS28694,Washington,F,High School or Below,282986.39%,25317,71.0000000000,1/0/00,Personal Auto,Two-Door Car,50.422181 +UH65059,AZ,NA,High School or Below,430580.83%,24188,109.0000000000,1/0/00,Personal Auto,Sports Car,523.2 +FV21968,Nevada,NA,Bachelor,597397.69%,41611,74.0000000000,1/0/00,Special Auto,Four-Door Car,113.801497 +QA87025,Oregon,NA,Bachelor,567044.24%,28406,72.0000000000,1/1/00,Personal Auto,Four-Door Car,192.87572 +TQ13499,AZ,NA,College,473174.93%,69833,118.0000000000,1/0/00,Personal Auto,Four-Door Car,828.662719 +BU44523,AZ,NA,High School or Below,802637.96%,0,74.0000000000,1/0/00,Corporate Auto,Four-Door Car,532.8 +MS41162,AZ,NA,High School or Below,402296.35%,0,117.0000000000,1/0/00,Personal Auto,SUV,975.107098 +PU25891,Oregon,NA,High School or Below,961831.09%,80536,119.0000000000,1/0/00,Special Auto,Sports Car,53.798708 +LH92841,Washington,F,Bachelors,725595.38%,88891,89.0000000000,1/0/00,Personal Auto,Four-Door Car,50.528355 +SX26335,Oregon,NA,College,955292.69%,97732,79.0000000000,1/0/00,Personal Auto,Four-Door Car,289.9122 +AZ95587,AZ,F,Bachelor,1038855.32%,61222,89.0000000000,1/0/00,Special Auto,Four-Door Car,392.604371 +DS81757,Oregon,M,College,247012.12%,0,74.0000000000,1/0/00,Personal Auto,Two-Door Car,721.242206 +OJ94107,AZ,M,Master,561906.85%,50335,140.0000000000,1/0/00,Personal Auto,SUV,456.52385 +LP84436,California,F,High School or Below,904711.92%,0,127.0000000000,1/0/00,Personal Auto,Sports Car,1087.995426 +FF22360,Washington,F,Doctor,268731.41%,82210,68.0000000000,1/4/00,Personal Auto,Four-Door Car,51.961915 +LM19287,Oregon,F,High School or Below,373150.46%,0,96.0000000000,1/0/00,Personal Auto,Four-Door Car,460.8 +ZU18643,Nevada,M,Bachelor,366077.03%,64495,92.0000000000,1/0/00,Corporate Auto,Four-Door Car,251.992083 +AZ82578,California,F,College,792882.93%,0,72.0000000000,1/0/00,Corporate Auto,Four-Door Car,345.6 +XC67861,Arizona,F,Bachelor,501175.16%,28859,67.0000000000,1/3/00,Corporate Auto,Two-Door Car,321.6 +YC43143,Arizona,F,High School or Below,798825.83%,77330,99.0000000000,1/0/00,Personal Auto,Four-Door Car,99.257608 +EK59571,Oregon,M,College,388545.64%,0,105.0000000000,1/0/00,Corporate Auto,Four-Door Car,504 +PA38372,Washington,F,High School or Below,935773.78%,33060,117.0000000000,1/0/00,Personal Auto,Four-Door Car,56.731578 +RO18530,Washington,M,Master,254068.98%,42557,65.0000000000,1/0/00,Personal Auto,Four-Door Car,57.562324 +PD27940,Arizona,M,High School or Below,488516.25%,26372,126.0000000000,1/0/00,Personal Auto,SUV,604.8 +BS77946,Arizona,F,Bachelor,975330.71%,17514,127.0000000000,1/0/00,Personal Auto,SUV,8.312729 +YM50253,California,Femal,Bachelor,294615.37%,89270,74.0000000000,1/0/00,Personal Auto,Four-Door Car,316.599228 +NR15332,California,M,High School or Below,258111.09%,29757,65.0000000000,1/0/00,Personal Auto,Four-Door Car,312 +RC62865,Oregon,M,College,351738.58%,51814,92.0000000000,1/0/00,Personal Auto,Four-Door Car,56.300724 +CC15295,Oregon,F,Bachelor,974335.01%,24028,82.0000000000,1/0/00,Personal Auto,Four-Door Car,393.6 +KA61892,Arizona,M,College,387364.70%,28142,105.0000000000,1/0/00,Personal Auto,Sports Car,701.708239 +OS94884,Arizona,F,Bachelor,764928.20%,52705,64.0000000000,1/1/00,Personal Auto,Two-Door Car,128.705563 +ND87334,California,M,High School or Below,228759.69%,0,63.0000000000,1/0/00,Corporate Auto,Two-Door Car,679.368378 +OY51402,Washington,F,High School or Below,825576.39%,54040,103.0000000000,1/0/00,Personal Auto,SUV,59.987126 +YL74911,California,F,College,871492.21%,0,118.0000000000,1/0/00,Personal Auto,SUV,566.4 +GK92563,Washington,F,Doctor,681923.12%,22492,85.0000000000,1/0/00,Personal Auto,Two-Door Car,61.654262 +HL53154,California,M,Bachelor,741619.73%,0,77.0000000000,1/2/00,Personal Auto,Four-Door Car,554.4 +RI78966,Oregon,M,Master,777115.90%,21876,68.0000000000,1/0/00,Personal Auto,Four-Door Car,465.41477 +IC13702,California,F,Bachelor,696834.19%,0,69.0000000000,1/1/00,Personal Auto,Four-Door Car,496.8 +BE10809,California,F,High School or Below,425028.26%,0,61.0000000000,1/1/00,Personal Auto,Four-Door Car,292.8 +HT87217,Oregon,F,High School or Below,1977656.65%,70699,82.0000000000,1/0/00,Personal Auto,Four-Door Car,256.813837 +TH95618,California,F,High School or Below,2134346.60%,0,74.0000000000,1/1/00,Personal Auto,Four-Door Car,355.2 +TS19868,California,M,College,241313.97%,27501,63.0000000000,1/0/00,Personal Auto,Four-Door Car,542.319401 +LP45550,Oregon,F,Doctor,1536384.72%,15897,101.0000000000,1/0/00,Personal Auto,Four-Door Car,303.148399 +QR87004,Nevada,F,College,845696.19%,25141,73.0000000000,1/1/00,Personal Auto,Four-Door Car,25.438063 +OE75747,Nevada,F,College,218964.25%,0,61.0000000000,1/3/00,Personal Auto,Four-Door Car,292.8 +DX91392,California,M,High School or Below,578018.22%,51066,74.0000000000,1/0/00,Personal Auto,Four-Door Car,787.993313 +AB72731,California,F,Bachelor,463998.16%,28358,117.0000000000,1/0/00,Personal Auto,Sports Car,84.024413 +GX84338,Washington,F,Doctor,382443.13%,62530,95.0000000000,1/0/00,Personal Auto,Four-Door Car,61.693771 +IS12901,Arizona,F,Bachelor,596811.89%,90972,74.0000000000,1/0/00,Personal Auto,Two-Door Car,232.926145 +BN90616,Washington,F,Bachelor,859033.50%,63110,72.0000000000,1/0/00,Personal Auto,Four-Door Car,68.179721 +HH90090,California,F,Bachelor,407663.47%,29549,104.0000000000,1/0/00,Personal Auto,Sports Car,710.433775 +IU25463,California,F,Bachelor,1225260.18%,0,115.0000000000,1/1/00,Personal Auto,Four-Door Car,552 +KC11055,Nevada,F,Bachelor,1693627.15%,39411,217.0000000000,1/2/00,Personal Auto,Luxury Car,1122.658899 +PD33979,Oregon,M,High School or Below,489243.55%,21709,62.0000000000,1/0/00,Personal Auto,Four-Door Car,408.374746 +NK71023,Nevada,M,Bachelor,994230.48%,67890,85.0000000000,1/0/00,Personal Auto,Four-Door Car,408 +AB13432,California,M,Bachelor,373583.81%,0,110.0000000000,1/0/00,Personal Auto,SUV,792 +OZ97704,California,F,High School or Below,1311752.22%,84311,111.0000000000,1/4/00,Personal Auto,SUV,532.8 +UF46533,California,F,College,457452.41%,99316,114.0000000000,1/0/00,Corporate Auto,SUV,754.358929 +XP47431,Arizona,F,Bachelor,547006.06%,54507,138.0000000000,1/0/00,Personal Auto,SUV,702.990032 +GK73582,California,F,Bachelor,297884.60%,64586,76.0000000000,1/0/00,Personal Auto,Four-Door Car,206.837111 +RV98763,Oregon,M,College,641096.75%,61709,82.0000000000,1/2/00,Personal Auto,Four-Door Car,275.395894 +II62831,California,M,Master,447902.31%,94656,111.0000000000,1/1/00,Special Auto,SUV,459.738128 +XK33449,California,F,High School or Below,238373.19%,0,69.0000000000,1/0/00,Special Auto,Two-Door Car,496.8 +TR85083,California,M,Bachelor,276449.37%,61085,70.0000000000,1/1/00,Personal Auto,Two-Door Car,336 +EO95328,Oregon,F,Bachelor,792010.54%,89284,67.0000000000,1/3/00,Personal Auto,Two-Door Car,321.6 +EN21086,Arizona,F,High School or Below,688909.80%,0,63.0000000000,1/0/00,Personal Auto,Four-Door Car,302.4 +YL83902,WA,F,Bachelor,327419.46%,31686,81.0000000000,1/0/00,Personal Auto,Four-Door Car,430.994107 +AZ62651,Oregon,M,High School or Below,995170.77%,56855,255.0000000000,1/0/00,Corporate Auto,Luxury SUV,1836 +ZW25874,Oregon,M,Bachelor,252155.57%,53703,67.0000000000,1/2/00,Special Auto,Four-Door Car,67.632476 +EH41854,WA,F,High School or Below,2370611.34%,0,96.0000000000,1/1/00,Personal Auto,Two-Door Car,844.481918 +MW70227,California,M,College,604702.52%,20396,76.0000000000,1/1/00,Personal Auto,Four-Door Car,364.8 +SL22297,California,F,Master,1114030.25%,27679,150.0000000000,1/0/00,Personal Auto,SUV,722.486994 +RV14138,Nevada,F,Bachelor,433406.41%,23904,123.0000000000,1/3/00,Personal Auto,SUV,590.4 +UO62808,Arizona,F,High School or Below,279974.79%,65351,69.0000000000,1/0/00,Corporate Auto,Four-Door Car,481.027516 +ZX64745,California,M,College,792313.66%,0,113.0000000000,1/0/00,Personal Auto,SUV,1124.427734 +FL34139,California,M,High School or Below,368811.09%,0,63.0000000000,1/3/00,Personal Auto,Four-Door Car,669.682001 +TS11219,California,M,College,1206745.60%,0,116.0000000000,1/0/00,Personal Auto,SUV,1284.093173 +XX12304,California,F,College,292497.67%,64459,72.0000000000,1/0/00,Personal Auto,Four-Door Car,240.259479 +SD64087,California,M,College,1501409.27%,32961,190.0000000000,1/0/00,Corporate Auto,SUV,912 +OY38576,Oregon,F,High School or Below,927723.38%,71416,116.0000000000,1/0/00,Corporate Auto,SUV,556.8 +BG76355,WA,F,Bachelor,627412.39%,68964,78.0000000000,1/0/00,Personal Auto,Four-Door Car,115.086827 +IP66913,Cali,M,High School or Below,388664.74%,78108,98.0000000000,1/0/00,Personal Auto,Two-Door Car,470.4 +LE95702,Cali,M,College,438627.76%,10621,67.0000000000,1/0/00,Special Auto,Four-Door Car,321.6 +KX54357,WA,M,College,1136526.77%,84910,95.0000000000,1/0/00,Corporate Auto,Two-Door Car,383.167471 +EZ78112,Cali,Femal,High School or Below,561096.43%,77493,70.0000000000,1/0/00,Special Auto,Four-Door Car,307.963291 +XN16891,Arizona,M,College,291289.20%,81097,74.0000000000,1/0/00,Personal Auto,Four-Door Car,355.2 +XK31350,Oregon,Femal,College,691572.99%,96610,85.0000000000,1/0/00,Corporate Auto,Four-Door Car,520.364752 +CC30924,Oregon,M,College,626266.33%,30110,159.0000000000,1/0/00,Corporate Auto,Sports Car,466.436375 +IT78748,Oregon,Femal,High School or Below,650339.70%,22081,84.0000000000,1/0/00,Special Auto,Two-Door Car,451.670309 +KY33386,WA,Femal,High School or Below,800739.94%,0,112.0000000000,1/0/00,Personal Auto,Sports Car,537.6 +CO44221,Cali,M,College,292991.65%,98473,72.0000000000,1/0/00,Personal Auto,Four-Door Car,345.6 +LK60013,Oregon,Femal,Bachelor,596955.30%,97431,74.0000000000,1/0/00,Personal Auto,Four-Door Car,355.2 +DE21533,Cali,M,Bachelor,547315.99%,93870,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +YS94121,Nevada,M,High School or Below,564539.67%,50366,72.0000000000,1/0/00,Personal Auto,Four-Door Car,428.734656 +UK68427,WA,M,High School or Below,636926.24%,34498,83.0000000000,1/0/00,Personal Auto,Two-Door Car,398.4 +TE49565,Oregon,Femal,College,1183376.73%,16552,103.0000000000,1/0/00,Personal Auto,SUV,494.4 +RA88421,Oregon,Femal,College,612110.79%,26787,77.0000000000,1/0/00,Personal Auto,Four-Door Car,369.6 +KQ51983,Nevada,M,College,515936.97%,0,74.0000000000,1/0/00,Personal Auto,Two-Door Car,831.752839 +CD88896,Nevada,Femal,High School or Below,251459.20%,43860,65.0000000000,1/0/00,Corporate Auto,Four-Door Car,156.124914 +YV22553,Arizona,M,High School or Below,866861.13%,21474,114.0000000000,1/2/00,Corporate Auto,SUV,373.428187 +WU14435,Cali,M,Bachelor,496096.54%,18174,66.0000000000,1/0/00,Corporate Auto,Four-Door Car,395.934815 +XV84099,Arizona,Femal,Bachelor,550413.90%,0,73.0000000000,1/0/00,Corporate Auto,Four-Door Car,350.4 +RI24911,Arizona,Male,College,750745.54%,60920,64.0000000000,1/0/00,Personal Auto,Two-Door Car,231.201886 +KO26461,Arizona,Male,High School or Below,3226985.14%,41520,90.0000000000,1/0/00,Personal Auto,Four-Door Car,289.904105 +HI14283,Oregon,Femal,Bachelor,565703.16%,0,152.0000000000,1/0/00,Personal Auto,SUV,729.6 +PT50227,Arizona,Male,High School or Below,506175.79%,0,68.0000000000,1/0/00,Personal Auto,Two-Door Car,326.4 +BH36570,Cali,Male,Bachelor,591278.38%,72208,73.0000000000,1/0/00,Personal Auto,Two-Door Car,350.4 +TX17484,Cali,Femal,Bachelor,1518227.98%,53863,63.0000000000,1/0/00,Personal Auto,Four-Door Car,105.765111 +CT41158,WA,Male,College,1074703.09%,66446,136.0000000000,1/0/00,Corporate Auto,SUV,639.464548 +AO87348,WA,Male,College,205062.35%,0,61.0000000000,1/0/00,Personal Auto,Four-Door Car,292.8 +DE55857,WA,Femal,Bachelor,246544.49%,64997,63.0000000000,1/1/00,Personal Auto,Four-Door Car,383.442328 +LF66923,Nevada,Femal,High School or Below,534312.13%,64460,66.0000000000,1/0/00,Corporate Auto,Two-Door Car,316.8 +CN24514,Arizona,Femal,College,811982.91%,46618,67.0000000000,1/0/00,Personal Auto,Four-Door Car,99.085943 +UW32074,Oregon,Femal,College,460526.52%,0,64.0000000000,1/0/00,Corporate Auto,Four-Door Car,307.2 +HP36979,Cali,Male,College,640878.56%,49988,84.0000000000,1/5/00,Personal Auto,Two-Door Car,566.935022 +PP40919,Cali,Femal,College,237653.35%,0,91.0000000000,1/5/00,Personal Auto,Two-Door Car,436.8 +RO73268,Cali,M,Bachelor,321107.00%,16269,86.0000000000,1/0/00,Corporate Auto,Two-Door Car,412.8 +HO61691,Arizona,F,Bachelor,509452.23%,72006,64.0000000000,1/0/00,Personal Auto,Four-Door Car,307.2 +BS13062,Arizona,F,High School or Below,2575527.82%,0,81.0000000000,1/2/00,Personal Auto,Four-Door Car,388.8 +FO35655,Oregon,M,Bachelor,867222.97%,0,245.0000000000,1/0/00,Corporate Auto,Luxury SUV,2345.413441 +HR10526,Cali,M,Master,804473.07%,44320,67.0000000000,1/0/00,Personal Auto,Four-Door Car,321.6 +IA63417,Arizona,F,High School or Below,400151.91%,19782,108.0000000000,1/0/00,Personal Auto,Two-Door Car,773.470977 +BH35016,Nevada,F,Bachelor,1670611.70%,63933,70.0000000000,1/0/00,Personal Auto,Two-Door Car,424.883448 +PK52952,Arizona,M,Doctor,854441.11%,28224,109.0000000000,1/0/00,Personal Auto,SUV,523.2 +OD76309,WA,F,College,780531.29%,21073,106.0000000000,1/1/00,Personal Auto,SUV,508.8 +IL28481,Oregon,M,Bachelor,611275.69%,63243,77.0000000000,1/0/00,Personal Auto,Four-Door Car,364.240307 +GY55092,Nevada,M,High School or Below,477294.38%,20993,133.0000000000,1/0/00,Personal Auto,SUV,638.4 +UF33451,Oregon,F,Bachelor,1097909.56%,94827,135.0000000000,1/0/00,Personal Auto,SUV,354.729129 +CF15558,Cali,F,Master,500426.38%,39161,63.0000000000,1/1/00,Personal Auto,Two-Door Car,283.995953 +JM62924,WA,M,Bachelor,1322304.38%,37534,84.0000000000,1/2/00,Personal Auto,Four-Door Car,403.2 +EM66435,Oregon,F,Bachelor,262331.54%,80210,65.0000000000,1/0/00,Corporate Auto,Four-Door Car,20.543176 +QX45933,Cali,M,Bachelor,1784019.56%,0,62.0000000000,1/0/00,Personal Auto,Four-Door Car,385.115437 +JI71369,Cali,F,College,510611.18%,30110,64.0000000000,1/0/00,Personal Auto,Four-Door Car,140.165035 +JU93290,Arizona,F,College,1793060.45%,21708,68.0000000000,1/0/00,Personal Auto,Four-Door Car,326.4 +GU66096,Arizona,M,High School or Below,545734.26%,94731,67.0000000000,1/0/00,Personal Auto,Four-Door Car,321.6 +UC33108,Cali,M,Bachelor,656364.41%,32375,83.0000000000,1/0/00,Personal Auto,Four-Door Car,398.4 +LW93867,Oregon,M,College,481252.52%,16531,63.0000000000,1/0/00,Corporate Auto,Four-Door Car,102.879769 +OU78470,Arizona,F,Master,2932804.19%,32006,94.0000000000,1/0/00,Corporate Auto,Four-Door Car,56.868289 +XW90265,Arizona,F,Bachelor,577352.07%,81676,72.0000000000,1/0/00,Personal Auto,Two-Door Car,463.158502 +HS67749,Cali,M,College,684711.89%,71038,86.0000000000,1/0/00,Corporate Auto,Four-Door Car,205.444066 +VZ51506,Arizona,F,High School or Below,359531.29%,0,103.0000000000,1/0/00,Corporate Auto,Sports Car,741.6 +UI64281,Nevada,F,Master,2285561.21%,20832,65.0000000000,1/0/00,Personal Auto,Two-Door Car,56.371967 +AE98193,WA,M,High School or Below,785941.46%,0,113.0000000000,1/0/00,Personal Auto,SUV,813.6 +AZ74055,Oregon,M,High School or Below,411557.74%,52405,103.0000000000,1/0/00,Personal Auto,Four-Door Car,494.4 +XS76911,Arizona,F,High School or Below,502963.88%,0,133.0000000000,1/0/00,Personal Auto,Sports Car,795.864079 +AY40674,WA,F,Bachelor,482141.85%,26583,1005.0000000000,1/4/00,Personal Auto,SUV,614.4 +NA12740,Oregon,M,Master,500431.05%,25486,65.0000000000,1/0/00,Special Auto,Two-Door Car,72.438681 +UA84837,Arizona,M,College,863005.39%,24065,111.0000000000,1/0/00,Corporate Auto,Four-Door Car,532.8 +DJ51510,Arizona,F,High School or Below,932208.51%,70435,116.0000000000,1/0/00,Personal Auto,Four-Door Car,67.881546 +VM58985,Cali,M,College,1672756.06%,0,76.0000000000,1/2/00,Personal Auto,Two-Door Car,402.636829 +OH60605,Oregon,F,High School or Below,365253.24%,39679,92.0000000000,1/0/00,Personal Auto,Two-Door Car,641.388616 +UO98052,Nevada,M,College,615860.12%,0,89.0000000000,1/0/00,Personal Auto,Four-Door Car,342.481173 +NC53424,Cali,M,Bachelor,437608.40%,0,69.0000000000,1/4/00,Personal Auto,Two-Door Car,331.2 +LQ13873,Nevada,M,High School or Below,556945.62%,53565,71.0000000000,1/1/00,Personal Auto,Four-Door Car,340.8 +LA97014,WA,M,Bachelor,257651.30%,37574,66.0000000000,1/1/00,Personal Auto,Two-Door Car,412.101933 +NB79936,WA,M,Bachelor,834698.32%,48259,108.0000000000,1/0/00,Personal Auto,Two-Door Car,73.700573 +NT89061,Arizona,F,High School or Below,632392.39%,78532,78.0000000000,1/0/00,Personal Auto,Four-Door Car,374.4 +AF10970,Arizona,F,Bachelor,597314.34%,96163,73.0000000000,1/0/00,Corporate Auto,Four-Door Car,350.4 +ZG48513,Cali,M,Bachelor,470667.70%,0,72.0000000000,1/0/00,Personal Auto,Four-Door Car,345.6 +JQ59145,Cali,Male,High School or Below,809341.03%,0,114.0000000000,1/1/00,Personal Auto,Sports Car,722.024742 +FE84989,WA,Male,College,503574.46%,72672,63.0000000000,1/0/00,Personal Auto,Four-Door Car,259.361117 +JT52858,Oregon,F,Bachelor,902786.72%,99002,112.0000000000,1/1/00,Personal Auto,Four-Door Car,537.6 +MC62068,California,Male,High School or Below,728888.48%,79494,91.0000000000,1/0/00,Personal Auto,Four-Door Car,396.295614 +EU27538,Oregon,Male,Master,1804247.94%,35704,225.0000000000,1/0/00,Personal Auto,Luxury Car,358.281562 +RH42306,Arizona,F,Bachelor,499206.30%,0,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,653.388564 +US23612,Oregon,F,High School or Below,910226.78%,26049,118.0000000000,1/0/00,Personal Auto,Two-Door Car,121.032372 +WV76014,Arizona,Male,Doctor,254040.77%,70125,64.0000000000,1/0/00,Special Auto,Four-Door Car,92.813396 +RK96223,California,Male,College,1294189.19%,52369,110.0000000000,1/1/00,Personal Auto,SUV,528 +MF82000,WA,female,Bachelor,236534.86%,0,66.0000000000,1/2/00,Special Auto,Four-Door Car,159.636956 +FM46980,Arizona,Male,College,572076.51%,41770,72.0000000000,1/0/00,Personal Auto,Four-Door Car,476.156957 +SY56792,Oregon,Male,High School or Below,703553.41%,0,101.0000000000,1/0/00,Corporate Auto,Four-Door Car,727.2 +RF61565,California,M,College,263697.77%,31911,67.0000000000,1/0/00,Personal Auto,Four-Door Car,321.6 +IM94808,Nevada,M,Bachelor,539583.20%,70051,68.0000000000,1/0/00,Corporate Auto,Four-Door Car,42.078345 +VI14730,Oregon,M,High School or Below,838263.01%,19683,117.0000000000,1/1/00,Personal Auto,Sports Car,561.6 +YR34119,WA,F,College,3116174.52%,30916,112.0000000000,1/0/00,Personal Auto,SUV,200.11606 +RR77985,Oregon,F,Bachelor,288774.23%,0,80.0000000000,1/0/00,Personal Auto,Four-Door Car,676.944023 +QD28391,Washington,M,College,742584.53%,84302,62.0000000000,1/0/00,Personal Auto,Four-Door Car,76.609295 +WV17090,California,M,Bachelor,2558572.78%,0,116.0000000000,1/0/00,Corporate Auto,SUV,830.623064 +TM23514,Oregon,M,College,1027260.82%,60145,132.0000000000,1/0/00,Personal Auto,SUV,580.473259 +MQ68407,Oregon,F,Bachelor,437636.36%,63774,111.0000000000,1/0/00,Personal Auto,Four-Door Car,60.036683 +GJ59592,California,F,Bachelor,531889.66%,25134,67.0000000000,1/0/00,Corporate Auto,Four-Door Car,321.6 +FY56083,Oregon,M,Bachelor,471976.22%,37057,61.0000000000,1/1/00,Personal Auto,Four-Door Car,47.53101 +UA94723,Oregon,F,High School or Below,442803.16%,58577,110.0000000000,1/0/00,Personal Auto,SUV,303.872752 +FW91032,California,M,High School or Below,587917.61%,85857,73.0000000000,1/0/00,Corporate Auto,Four-Door Car,100.620067 +DE34457,Oregon,F,Doctor,941690.85%,70602,116.0000000000,1/0/00,Personal Auto,SUV,481.339891 +HD32044,Oregon,F,Master,828815.56%,33816,106.0000000000,1/2/00,Corporate Auto,Four-Door Car,508.8 +HH30454,Oregon,M,Bachelor,3265483.83%,0,153.0000000000,1/0/00,Personal Auto,SUV,1101.6 +AH84063,Oregon,F,College,471945.01%,89642,121.0000000000,1/4/00,Corporate Auto,SUV,86.320022 +QA17596,California,F,Bachelor,390347.48%,60068,98.0000000000,1/0/00,Personal Auto,Two-Door Car,470.4 +XI41052,California,F,Bachelor,545725.97%,50044,139.0000000000,1/0/00,Personal Auto,SUV,667.2 +DI30528,California,F,Master,272535.64%,36650,69.0000000000,1/1/00,Personal Auto,Four-Door Car,56.60333 +SC66359,Arizona,F,College,443397.37%,50653,110.0000000000,1/0/00,Corporate Auto,SUV,262.865172 +EN61670,Arizona,F,Doctor,533246.27%,68931,66.0000000000,1/0/00,Personal Auto,Four-Door Car,309.577946 +DQ10761,Oregon,M,Bachelor,231509.50%,0,73.0000000000,1/1/00,Corporate Auto,Four-Door Car,350.4 +BQ51587,California,F,College,541195.37%,0,73.0000000000,1/0/00,Personal Auto,Four-Door Car,365.364581 +JE21522,California,M,Bachelor,958733.23%,39266,80.0000000000,1/0/00,Personal Auto,Four-Door Car,384 +WS47147,California,M,College,2210350.72%,0,102.0000000000,1/0/00,Personal Auto,SUV,489.6 +ZA64638,Nevada,F,High School or Below,976494.53%,0,98.0000000000,1/1/00,Personal Auto,Four-Door Car,705.6 +EW38459,Nevada,F,Bachelor,256715.15%,40864,65.0000000000,1/0/00,Corporate Auto,Four-Door Car,9.51528 +QW87316,Oregon,F,College,265062.28%,39035,68.0000000000,1/0/00,Personal Auto,Four-Door Car,244.564334 +IC43478,California,M,Bachelor,1126436.33%,34923,98.0000000000,1/0/00,Personal Auto,Two-Door Car,639.105556 +TE34064,California,M,High School or Below,216852.35%,0,63.0000000000,1/0/00,Personal Auto,Four-Door Car,453.6 +WU60905,California,F,High School or Below,861066.75%,0,111.0000000000,1/0/00,Corporate Auto,SUV,532.8 +YM18992,California,F,College,283464.62%,24506,71.0000000000,1/0/00,Personal Auto,Two-Door Car,511.2 +PD55753,Oregon,M,High School or Below,893013.97%,0,82.0000000000,1/0/00,Personal Auto,Four-Door Car,554.522969 +KU56006,Arizona,F,College,553638.70%,52220,70.0000000000,1/1/00,Personal Auto,Four-Door Car,336 +MJ69973,Arizona,M,High School or Below,284085.43%,0,74.0000000000,1/0/00,Personal Auto,Two-Door Car,402.449823 +TW43626,California,M,College,808288.10%,53554,67.0000000000,1/0/00,Personal Auto,Four-Door Car,327.020539 +XX84133,California,M,Bachelor,525473.43%,34476,67.0000000000,1/1/00,Corporate Auto,Four-Door Car,5.3953 +ZW84453,Arizona,F,Bachelor,511623.76%,0,70.0000000000,1/0/00,Personal Auto,Four-Door Car,131.401291 +HO29524,California,M,College,303464.70%,68205,76.0000000000,1/0/00,Personal Auto,Two-Door Car,99.382943 +VE89726,California,female,High School or Below,802489.99%,0,119.0000000000,1/1/00,Personal Auto,SUV,856.8 +GE87503,California,M,High School or Below,1821114.32%,53690,154.0000000000,1/0/00,Personal Auto,SUV,739.2 +PX90263,Oregon,M,High School or Below,512156.33%,0,72.0000000000,1/0/00,Personal Auto,Four-Door Car,518.4 +NI17718,California,female,High School or Below,215017.86%,0,61.0000000000,1/0/00,Personal Auto,Four-Door Car,292.8 +FY32213,California,female,High School or Below,559538.99%,74454,71.0000000000,1/0/00,Personal Auto,Four-Door Car,340.8 +RZ13254,Nevada,female,Bachelor,756282.40%,0,73.0000000000,1/0/00,Personal Auto,Four-Door Car,350.4 +GN45013,Oregon,M,High School or Below,538585.32%,29664,71.0000000000,1/0/00,Personal Auto,Four-Door Car,340.8 +NM39588,Washington,F,Doctor,267805.83%,72450,66.0000000000,1/0/00,Corporate Auto,Four-Door Car,84.218363 +KU84464,Nevada,female,Bachelor,942256.79%,47272,79.0000000000,1/3/00,Personal Auto,Four-Door Car,64.546877 +YH43527,Oregon,female,College,360586.03%,21585,92.0000000000,1/0/00,Corporate Auto,Four-Door Car,441.6 +RO30676,California,female,College,776259.06%,23827,106.0000000000,1/2/00,Personal Auto,Four-Door Car,37.910623 +QL59704,Arizona,female,College,2344490.05%,69906,74.0000000000,1/2/00,Corporate Auto,Four-Door Car,202.860399 +QH19450,California,female,High School or Below,255817.82%,0,72.0000000000,1/0/00,Corporate Auto,Four-Door Car,345.6 +SA54664,Washington,M,Master,265438.10%,73196,66.0000000000,1/1/00,Personal Auto,Four-Door Car,85.809817 +CI38330,Washington,M,Bachelor,254978.61%,72217,6464.0000000000,1/0/00,Personal Auto,Four-Door Car,91.146661 +WB38524,California,M,High School or Below,296959.33%,46131,74.0000000000,1/0/00,Personal Auto,Two-Door Car,355.2 +CE56187,Oregon,female,Master,436312.46%,54514,109.0000000000,1/3/00,Personal Auto,SUV,286.234931 +JL19416,California,female,High School or Below,588430.86%,0,161.0000000000,1/0/00,Personal Auto,SUV,1159.2 +JZ61422,Nevada,female,College,527219.16%,96668,66.0000000000,1/0/00,Personal Auto,Four-Door Car,316.8 +LA13377,California,M,Doctor,550989.57%,78879,69.0000000000,1/1/00,Personal Auto,Four-Door Car,466.570791 +NC99948,Nevada,M,College,1631368.35%,0,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +QD34785,Arizona,female,Bachelor,567805.02%,0,76.0000000000,1/0/00,Personal Auto,Four-Door Car,364.8 +RO26085,California,female,Bachelor,1210120.88%,0,112.0000000000,1/0/00,Personal Auto,Sports Car,1252.406235 +ES57969,Oregon,M,Bachelor,245357.08%,29735,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +JK55587,California,M,High School or Below,507566.27%,23082,65.0000000000,1/0/00,Special Auto,Four-Door Car,312 +RN97635,Arizona,M,Bachelor,321497.94%,53984,80.0000000000,1/0/00,Corporate Auto,Four-Door Car,421.484456 +BI76326,California,female,College,1227534.31%,52135,156.0000000000,1/0/00,Personal Auto,SUV,430.505942 +JA34909,California,female,College,272221.07%,17576,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,398.502948 +OJ90342,Oregon,female,Bachelor,245744.09%,29486,62.0000000000,1/0/00,Personal Auto,Four-Door Car,7.646763 +CM88932,Oregon,female,Master,355484.53%,58557,88.0000000000,1/0/00,Corporate Auto,Four-Door Car,55.510526 +JJ97525,California,M,Bachelor,492954.97%,25632,63.0000000000,1/0/00,Personal Auto,Two-Door Car,351.270869 +XV21647,California,female,High School or Below,803645.03%,0,112.0000000000,1/0/00,Personal Auto,Sports Car,806.4 +MC83487,Arizona,M,Bachelor,427691.53%,18768,68.0000000000,1/3/00,Corporate Auto,Four-Door Car,647.454583 +BL90769,California,female,Bachelor,3347334.95%,33190,106.0000000000,1/0/00,Personal Auto,SUV,508.8 +CR57148,Oregon,female,Master,596058.14%,47945,74.0000000000,1/0/00,Personal Auto,Two-Door Car,128.43823 +CP85232,Arizona,M,College,4479546.94%,58778,126.0000000000,1/0/00,Special Auto,SUV,302.033971 +YL74732,California,female,High School or Below,383211.81%,15192,100.0000000000,1/0/00,Personal Auto,SUV,480 +FG16766,California,female,Bachelor,683793.26%,51859,171.0000000000,1/0/00,Personal Auto,SUV,1003.160633 +NV55438,Nevada,female,High School or Below,528526.82%,23422,72.0000000000,1/0/00,Personal Auto,Two-Door Car,518.4 +RM10880,California,female,College,309651.12%,21604,79.0000000000,1/0/00,Corporate Auto,Four-Door Car,379.2 +GL56175,Arizona,M,College,358971.07%,79298,90.0000000000,1/0/00,Personal Auto,Four-Door Car,244.362072 +UK52289,Arizona,female,Bachelor,258240.85%,76731,64.0000000000,1/0/00,Special Auto,Four-Door Car,201.455005 +OT85112,Washington,M,College,340391.94%,38460,88.0000000000,1/1/00,Personal Auto,Four-Door Car,91.55098 +BC62782,Arizona,F,College,1357567.60%,48534,115.0000000000,1/1/00,Personal Auto,SUV,552 +TI19722,Washington,M,Doctor,343613.43%,30817,88.0000000000,1/0/00,Corporate Auto,Four-Door Car,91.834668 +JP30654,Oregon,F,College,2868582.79%,48412,104.0000000000,1/0/00,Personal Auto,SUV,707.430832 +UM45563,Washington,M,Bachelor,450267.97%,68798,114.0000000000,1/0/00,Personal Auto,SUV,92.915251 +EN60878,Oregon,M,Bachelor,618311.15%,23712,85.0000000000,1/0/00,Personal Auto,Four-Door Car,376.126419 +JF36291,California,M,College,387364.70%,28142,105.0000000000,1/0/00,Personal Auto,Sports Car,701.708239 +BK59444,California,F,Master,1892933.06%,72196,68.0000000000,1/0/00,Personal Auto,Four-Door Car,152.184244 +MK70700,California,M,Master,555329.58%,68197,69.0000000000,1/0/00,Personal Auto,Four-Door Car,176.819414 +IW71076,California,M,Bachelor,501125.92%,75248,63.0000000000,1/0/00,Corporate Auto,Four-Door Car,104.454624 +AP98768,California,F,College,1044244.63%,0,98.0000000000,1/0/00,Personal Auto,Four-Door Car,941.718054 +OM24164,Nevada,M,Bachelor,219961.78%,0,65.0000000000,1/1/00,Personal Auto,Two-Door Car,468 +HR85211,Washington,female,Master,512317.09%,89879,63.0000000000,1/0/00,Personal Auto,Two-Door Car,94.030308 +VC87846,Oregon,M,High School or Below,748431.05%,46998,96.0000000000,1/0/00,Corporate Auto,Four-Door Car,460.8 +ZM92052,Oregon,M,Bachelor,261302.31%,57099,67.0000000000,1/0/00,Personal Auto,Two-Door Car,67.859881 +ON73702,Arizona,F,Bachelor,908063.97%,33897,114.0000000000,1/0/00,Corporate Auto,SUV,539.843003 +QQ90441,Nevada,F,High School or Below,1377097.62%,59207,116.0000000000,1/0/00,Personal Auto,Four-Door Car,556.8 +HU35721,Oregon,M,High School or Below,287682.29%,40171,73.0000000000,1/0/00,Personal Auto,Four-Door Car,350.4 +YP47665,Washington,M,Doctor,540891.15%,80192,67.0000000000,1/0/00,Personal Auto,Four-Door Car,95.193157 +FU99476,Washington,M,High School or Below,677030.68%,74422,85.0000000000,1/1/00,Personal Auto,Four-Door Car,95.338505 +AG85615,Oregon,M,College,2414387.56%,0,87.0000000000,1/0/00,Special Auto,Four-Door Car,626.4 +OY74069,Arizona,F,College,353805.95%,0,67.0000000000,1/5/00,Personal Auto,Four-Door Car,321.6 +DJ91267,Nevada,F,Bachelor,2909123.94%,34226,244.0000000000,1/0/00,Personal Auto,Luxury SUV,494.395024 +KB72438,California,F,High School or Below,1983420.12%,65989,123.0000000000,1/1/00,Personal Auto,SUV,115.545086 +TR67616,Oregon,M,High School or Below,473136.70%,30686,61.0000000000,1/0/00,Corporate Auto,Four-Door Car,19.938981 +GF65731,California,F,Master,3553784.60%,0,113.0000000000,1/0/00,Personal Auto,Sports Car,799.926741 +HB67642,Arizona,F,High School or Below,3461137.90%,20090,109.0000000000,1/0/00,Personal Auto,Sports Car,523.2 +DP84567,California,M,High School or Below,2021630.88%,0,183.0000000000,1/0/00,Personal Auto,Luxury SUV,878.4 +VV77534,Oregon,M,College,1397651.93%,77094,176.0000000000,1/0/00,Personal Auto,SUV,444.470676 +GL67540,California,F,College,590408.82%,97413,73.0000000000,1/0/00,Personal Auto,Four-Door Car,268.819985 +SV50502,Oregon,F,Master,559583.50%,79189,69.0000000000,1/0/00,Corporate Auto,Four-Door Car,331.2 +UK59698,California,F,High School or Below,229430.36%,0,62.0000000000,1/0/00,Personal Auto,Two-Door Car,297.6 +OA57352,Arizona,F,College,627391.19%,18577,86.0000000000,1/0/00,Personal Auto,Four-Door Car,412.8 +ZF84449,Oregon,F,College,372672.80%,0,112.0000000000,1/1/00,Special Auto,Sports Car,806.4 +AX86150,Washington,M,High School or Below,265671.31%,62777,67.0000000000,1/0/00,Personal Auto,Two-Door Car,101.288069 +HG39060,Oregon,Male,Bachelor,511068.08%,0,74.0000000000,1/0/00,Corporate Auto,Four-Door Car,532.8 +EM29359,Nevada,Male,College,712659.65%,17483,183.0000000000,1/0/00,Personal Auto,Luxury Car,1317.6 +SF57173,Oregon,Male,Master,460163.41%,84394,114.0000000000,1/0/00,Personal Auto,SUV,691.412378 +OT47603,Oregon,Male,College,915523.97%,0,127.0000000000,1/0/00,Personal Auto,Sports Car,804.811859 +SW31412,Oregon,F,College,1480805.62%,41440,62.0000000000,1/1/00,Personal Auto,Four-Door Car,297.6 +JS36322,Arizona,Male,High School or Below,890167.84%,0,136.0000000000,1/1/00,Personal Auto,Sports Car,1090.86434 +RE81445,Oregon,F,College,573459.82%,98132,71.0000000000,1/0/00,Personal Auto,Two-Door Car,50.587035 +RM24280,Oregon,F,High School or Below,417769.70%,0,112.0000000000,1/0/00,Personal Auto,Four-Door Car,537.6 +LC25393,California,Male,Bachelor,2777628.91%,88220,230.0000000000,1/0/00,Personal Auto,Luxury Car,151.528482 +UX38930,Arizona,F,Master,1036434.75%,58327,129.0000000000,1/0/00,Personal Auto,SUV,347.075948 +HD95496,Oregon,Male,Master,785190.14%,25950,66.0000000000,1/0/00,Personal Auto,Two-Door Car,271.697529 +RX24650,Oregon,Male,High School or Below,477294.38%,20993,133.0000000000,1/0/00,Corporate Auto,SUV,638.4 +DW19309,Oregon,Male,High School or Below,1422650.49%,65726,177.0000000000,1/0/00,Corporate Auto,SUV,849.6 +MT41386,Washington,M,Bachelors,287543.24%,84768,72.0000000000,1/0/00,Personal Auto,Two-Door Car,110.484661 +WZ40465,Washington,F,Bachelor,504129.96%,36234,63.0000000000,1/0/00,Personal Auto,Four-Door Car,113.534474 +DB42794,California,Male,College,436293.12%,58842,110.0000000000,1/0/00,Personal Auto,Four-Door Car,528 +JB50798,Oregon,F,Master,962452.44%,25629,124.0000000000,1/2/00,Corporate Auto,Sports Car,595.2 +IP69763,Washington,F,College,2191440.55%,77311,181.0000000000,1/0/00,Personal Auto,SUV,113.609508 +TE35785,California,Male,Doctor,694842.22%,0,196.0000000000,1/2/00,Personal Auto,Luxury SUV,1337.063487 +HX74855,Washington,M,High School or Below,247152.84%,95697,61.0000000000,1/0/00,Personal Auto,Two-Door Car,114.273025 +QN65180,Oregon,F,Bachelor,2190391.36%,22254,79.0000000000,1/0/00,Personal Auto,Four-Door Car,125.194389 +GE47180,Nevada,Male,High School or Below,902882.14%,65974,113.0000000000,1/0/00,Personal Auto,Sports Car,235.220971 +VQ38776,Oregon,F,College,530375.95%,0,76.0000000000,1/0/00,Personal Auto,Four-Door Car,395.34111 +BH86846,Washington,M,High School or Below,2070825.88%,92079,65.0000000000,1/1/00,Corporate Auto,Four-Door Car,114.798771 +IN17648,Nevada,Male,High School or Below,512376.81%,0,74.0000000000,1/0/00,Personal Auto,Two-Door Car,772.798511 +DF95759,Oregon,Male,College,949234.30%,0,132.0000000000,1/0/00,Personal Auto,SUV,633.6 +QG45324,Oregon,F,High School or Below,820486.32%,0,73.0000000000,1/0/00,Personal Auto,Four-Door Car,350.4 +MN61620,Arizona,F,College,987729.57%,67752,131.0000000000,1/4/00,Personal Auto,Sports Car,168.517149 +YH86390,California,F,Bachelor,481500.97%,25398,64.0000000000,1/0/00,Corporate Auto,Four-Door Car,307.2 +FY13480,California,Male,High School or Below,627701.17%,0,88.0000000000,1/0/00,Personal Auto,Four-Door Car,633.6 +YH61661,California,M,High School or Below,826063.98%,33321,105.0000000000,1/0/00,Special Auto,SUV,504 +NL93182,Nevada,M,Bachelor,254945.00%,0,78.0000000000,1/0/00,Corporate Auto,Four-Door Car,845.654042 +LN31673,Washington,NA,College,1131808.98%,38923,99.0000000000,1/2/00,Personal Auto,Four-Door Car,115.728852 +WE68644,Oregon,F,Bachelor,380392.18%,20325,100.0000000000,1/0/00,Personal Auto,Sports Car,668.29397 +EZ30498,Oregon,M,Bachelor,863540.35%,13129,117.0000000000,1/0/00,Personal Auto,SUV,700.901632 +QY74517,Oregon,F,High School or Below,551055.90%,0,73.0000000000,1/0/00,Personal Auto,Four-Door Car,525.6 +NM88660,Nevada,M,Master,358588.41%,49080,91.0000000000,1/0/00,Corporate Auto,Four-Door Car,25.299 +MZ82036,Nevada,M,College,488925.28%,42536,63.0000000000,1/0/00,Personal Auto,Four-Door Car,375.330097 +ID20929,Oregon,M,Bachelor,275694.17%,29926,74.0000000000,1/0/00,Corporate Auto,Four-Door Car,418.233667 +EY50028,Nevada,M,Doctor,328954.74%,0,86.0000000000,1/0/00,Corporate Auto,Two-Door Car,398.240791 +TT82373,California,F,Bachelor,1093717.85%,21450,138.0000000000,1/0/00,Personal Auto,Sports Car,938.513425 +OH64088,California,M,High School or Below,737556.79%,33345,65.0000000000,1/0/00,Corporate Auto,Four-Door Car,338.619869 +SK97780,California,F,Bachelor,1011077.82%,15752,90.0000000000,1/0/00,Corporate Auto,Two-Door Car,339.344531 +IO33050,Oregon,F,High School or Below,511941.43%,40169,65.0000000000,1/1/00,Personal Auto,Four-Door Car,302.818833 +XA55917,California,F,College,853383.20%,26049,113.0000000000,1/1/00,Personal Auto,SUV,619.165344 +JK32620,Nevada,M,College,222476.80%,0,68.0000000000,1/0/00,Personal Auto,Four-Door Car,326.4 +RQ19236,Arizona,M,Doctor,804280.38%,55411,100.0000000000,1/0/00,Personal Auto,Sports Car,259.561195 +QC47433,Oregon,M,College,255443.71%,12459,70.0000000000,1/0/00,Personal Auto,Four-Door Car,336 +RA93608,Oregon,M,Bachelor,1807394.00%,64620,76.0000000000,1/1/00,Personal Auto,Two-Door Car,364.8 +XH97711,California,M,Bachelor,243050.66%,83140,61.0000000000,1/0/00,Corporate Auto,Four-Door Car,179.161843 +AU96286,Oregon,F,Bachelor,316765.84%,0,92.0000000000,1/0/00,Corporate Auto,Four-Door Car,662.4 +KC17170,Arizona,F,Bachelor,546560.40%,54422,68.0000000000,1/0/00,Corporate Auto,Four-Door Car,75.501852 +ZN47335,California,M,College,1035751.42%,68309,131.0000000000,1/0/00,Corporate Auto,SUV,306.983596 +EI46264,California,M,High School or Below,253781.39%,56621,65.0000000000,1/2/00,Personal Auto,Four-Door Car,84.026848 +EK87864,Arizona,F,College,282194.72%,38977,70.0000000000,1/0/00,Special Auto,Four-Door Car,139.489926 +GV45403,AZ,M,Bachelor,775712.81%,0,111.0000000000,1/0/00,Corporate Auto,Two-Door Car,607.4459 +QK31192,AZ,M,High School or Below,407913.27%,0,114.0000000000,1/0/00,Corporate Auto,Two-Door Car,631.124372 +LU89008,AZ,F,College,595554.46%,0,83.0000000000,1/0/00,Personal Auto,Four-Door Car,628.023494 +NS10490,Oregon,F,Bachelor,1415861.36%,83235,70.0000000000,1/0/00,Personal Auto,Two-Door Car,336 +KL98495,Nevada,M,College,848723.80%,0,74.0000000000,1/0/00,Personal Auto,Two-Door Car,426.655599 +IU96845,AZ,M,College,628547.69%,32390,80.0000000000,1/0/00,Personal Auto,Four-Door Car,91.417923 +QL93655,Oregon,F,High School or Below,1147348.15%,66538,95.0000000000,1/0/00,Personal Auto,Two-Door Car,317.844812 +PF40592,Washington,F,College,494263.06%,23285,65.0000000000,1/0/00,Personal Auto,Two-Door Car,118.446235 +LZ34046,Oregon,M,Bachelor,2359468.02%,76358,66.0000000000,1/0/00,Personal Auto,Four-Door Car,86.461582 +JC80093,Washington,M,Master,257250.66%,21104,66.0000000000,1/0/00,Personal Auto,Four-Door Car,118.454974 +YE88490,AZ,F,College,538089.86%,55350,67.0000000000,1/0/00,Personal Auto,Four-Door Car,321.6 +YC80498,California,F,College,477055.09%,12964,65.0000000000,1/0/00,Personal Auto,Two-Door Car,362.774545 +AI85843,AZ,F,Master,675665.14%,33288,86.0000000000,1/2/00,Personal Auto,Four-Door Car,221.856184 +XD66024,AZ,F,College,593601.18%,0,84.0000000000,1/0/00,Personal Auto,Four-Door Car,980.169081 +FY51713,AZ,F,Bachelor,357076.05%,56168,88.0000000000,1/0/00,Personal Auto,Four-Door Car,614.675906 +PH26378,California,M,College,601996.05%,0,92.0000000000,1/0/00,Personal Auto,Four-Door Car,662.4 +WQ18638,Oregon,M,High School or Below,542686.40%,23105,69.0000000000,1/0/00,Personal Auto,Two-Door Car,331.2 +KY14688,Oregon,F,Master,273031.38%,36218,68.0000000000,1/0/00,Personal Auto,Four-Door Car,145.252168 +TC97762,California,F,High School or Below,498268.14%,52275,62.0000000000,1/0/00,Corporate Auto,Four-Door Car,374.240783 +QC87108,Oregon,F,College,876926.68%,49665,74.0000000000,1/0/00,Personal Auto,Four-Door Car,355.2 +CX12134,Nevada,M,High School or Below,422061.35%,32471,110.0000000000,1/0/00,Personal Auto,Two-Door Car,528 +SM73248,AZ,M,High School or Below,1153750.51%,0,86.0000000000,1/1/00,Corporate Auto,Two-Door Car,619.2 +CK19789,California,F,Master,588718.20%,62773,73.0000000000,1/0/00,Personal Auto,Four-Door Car,80.669257 +UV12583,California,F,College,470058.38%,76694,117.0000000000,1/0/00,Personal Auto,SUV,561.6 +JC11405,Oregon,M,High School or Below,1096395.72%,55687,276.0000000000,1/0/00,Personal Auto,Luxury SUV,1324.8 +KA89683,AZ,F,High School or Below,252317.12%,0,70.0000000000,1/0/00,Personal Auto,Four-Door Car,504 +BG85305,Nevada,M,Doctor,375780.47%,36633,96.0000000000,1/1/00,Personal Auto,Four-Door Car,460.8 +UQ87917,Oregon,M,High School or Below,1294173.35%,77060,106.0000000000,1/0/00,Personal Auto,SUV,468.566133 +XN11823,Nevada,F,Bachelor,376446.51%,92600,94.0000000000,1/0/00,Corporate Auto,Two-Door Car,842.43785 +OS46571,California,M,High School or Below,688955.70%,0,66.0000000000,1/0/00,Personal Auto,Four-Door Car,475.2 +PX17116,Nevada,M,College,362345.42%,0,111.0000000000,1/2/00,Corporate Auto,SUV,1171.93117 +RP19541,AZ,M,College,758211.38%,64801,64.0000000000,1/0/00,Personal Auto,Four-Door Car,268.471802 +ZR25747,Oregon,F,College,827774.56%,45257,103.0000000000,1/0/00,Corporate Auto,Two-Door Car,494.4 +NQ86532,California,M,High School or Below,257645.56%,26854,66.0000000000,1/0/00,Personal Auto,Four-Door Car,475.2 +JY27336,Oregon,F,College,820538.79%,85840,102.0000000000,1/2/00,Corporate Auto,SUV,138.722385 +PB54378,Oregon,F,Doctor,1958246.89%,26463,72.0000000000,1/0/00,Corporate Auto,Four-Door Car,345.6 +SV38190,Nevada,F,Bachelor,648152.66%,30689,81.0000000000,1/0/00,Personal Auto,Four-Door Car,467.24802 +CV24005,Oregon,M,High School or Below,259931.09%,29590,66.0000000000,1/0/00,Corporate Auto,Two-Door Car,467.503236 +EX28656,Oregon,F,College,983033.76%,25965,253.0000000000,1/0/00,Personal Auto,Luxury SUV,1214.4 +CF57022,Oregon,M,Bachelor,1044265.14%,17269,139.0000000000,1/0/00,Personal Auto,SUV,667.2 +GM16780,Oregon,M,College,3605753.70%,90330,137.0000000000,1/3/00,Corporate Auto,Sports Car,192.085299 +BX94438,California,F,High School or Below,847003.68%,0,113.0000000000,1/0/00,Corporate Auto,SUV,619.973889 +RM41745,California,F,High School or Below,827878.65%,0,110.0000000000,1/0/00,Personal Auto,Four-Door Car,1002.782553 +XR70252,California,F,High School or Below,478893.26%,0,67.0000000000,1/1/00,Personal Auto,Two-Door Car,321.6 +YH92099,AZ,F,Bachelor,308799.99%,18558,80.0000000000,1/0/00,Special Auto,Four-Door Car,384 +SG81493,Arizona,M,Bachelor,444373.62%,46384,113.0000000000,1/0/00,Corporate Auto,Four-Door Car,251.774574 +ZX23819,Oregon,F,High School or Below,798408.65%,0,72.0000000000,1/0/00,Personal Auto,Two-Door Car,866.208321 +FJ54907,Oregon,F,College,718097.10%,42303,180.0000000000,1/0/00,Personal Auto,Luxury SUV,1210.920949 +CU26127,California,F,Bachelor,1565603.43%,71731,130.0000000000,1/0/00,Corporate Auto,SUV,599.648466 +YH60476,Oregon,M,High School or Below,578018.22%,51066,74.0000000000,1/0/00,Corporate Auto,Four-Door Car,787.993313 +ZZ97035,California,M,College,2071494.04%,0,203.0000000000,1/0/00,Corporate Auto,Luxury Car,2027.724442 +GE82737,Nevada,F,Bachelor,533735.24%,0,86.0000000000,1/3/00,Personal Auto,Four-Door Car,619.2 +KY21873,Arizona,M,College,505082.62%,0,69.0000000000,1/0/00,Personal Auto,Two-Door Car,72.852047 +UA51318,Arizona,F,High School or Below,511662.40%,26173,68.0000000000,1/1/00,Corporate Auto,Four-Door Car,449.819671 +BV55014,Oregon,M,Bachelor,726873.70%,24445,63.0000000000,1/0/00,Personal Auto,Two-Door Car,302.4 +HX21307,Oregon,Male,College,261661.39%,72302,66.0000000000,1/0/00,Personal Auto,Two-Door Car,316.8 +LQ68252,Oregon,Male,High School or Below,373843.62%,27208,102.0000000000,1/0/00,Personal Auto,SUV,489.6 +CR92802,California,F,Master,272535.64%,36650,69.0000000000,1/1/00,Special Auto,Four-Door Car,56.60333 +SL35268,Arizona,Male,College,545386.12%,30855,68.0000000000,1/0/00,Corporate Auto,Four-Door Car,259.060862 +RD62882,Arizona,F,Bachelor,684615.03%,0,95.0000000000,1/0/00,Personal Auto,Two-Door Car,456 +JS42382,Oregon,Male,Master,617291.42%,99960,76.0000000000,1/0/00,Corporate Auto,Four-Door Car,364.8 +BT30554,Arizona,F,Bachelor,1034632.45%,0,98.0000000000,1/0/00,Personal Auto,Four-Door Car,470.4 +VP57424,Nevada,F,Bachelor,699700.86%,55873,88.0000000000,1/0/00,Personal Auto,Four-Door Car,299.356083 +VU19243,Arizona,F,High School or Below,419625.77%,18052,111.0000000000,1/0/00,Personal Auto,Four-Door Car,699.1679 +TA82973,Oregon,F,High School or Below,785810.98%,28937,104.0000000000,1/2/00,Personal Auto,SUV,117.959654 +GK71720,Oregon,F,High School or Below,606434.40%,0,86.0000000000,1/0/00,Personal Auto,Four-Door Car,545.240341 +OQ61223,California,Male,College,1749752.20%,0,73.0000000000,1/0/00,Personal Auto,Two-Door Car,350.4 +LL62746,Oregon,Male,Doctor,897064.73%,12829,118.0000000000,1/0/00,Personal Auto,SUV,328.231432 +JQ56711,Oregon,F,Master,592311.72%,92163,73.0000000000,1/0/00,Personal Auto,Two-Door Car,66.568642 +AW77988,Oregon,Male,High School or Below,3585059.94%,17588,192.0000000000,1/0/00,Personal Auto,Luxury Car,1382.4 +QP84605,Washington,F,Bachelor,870984.53%,41546,111.0000000000,1/0/00,Corporate Auto,Four-Door Car,121.306839 +MY97912,Arizona,Male,College,1330933.52%,0,127.0000000000,1/0/00,Personal Auto,SUV,609.6 +IB87349,California,M,High School or Below,452850.49%,70340,113.0000000000,1/0/00,Special Auto,Four-Door Car,542.4 +AW73065,Oregon,F,High School or Below,279190.65%,0,74.0000000000,1/0/00,Personal Auto,Four-Door Car,532.8 +BW80872,Washington,M,High School or Below,443441.12%,34549,111.0000000000,1/0/00,Personal Auto,Four-Door Car,125.933005 +PX70175,Arizona,M,College,799600.75%,93459,99.0000000000,1/0/00,Personal Auto,Four-Door Car,655.41333 +KF75098,Arizona,M,Bachelor,512973.90%,86148,65.0000000000,1/2/00,Personal Auto,Four-Door Car,312 +IS50283,California,F,Bachelor,569717.52%,27048,72.0000000000,1/0/00,Corporate Auto,Four-Door Car,345.6 +MY64920,Oregon,F,College,921713.06%,73259,115.0000000000,1/0/00,Personal Auto,SUV,673.34265 +KN34250,Oregon,F,College,1020892.76%,35482,129.0000000000,1/0/00,Corporate Auto,SUV,619.2 +GN46207,Oregon,F,Master,417068.73%,29462,107.0000000000,1/1/00,Personal Auto,SUV,513.6 +KL57176,Oregon,F,College,450540.58%,67801,115.0000000000,1/1/00,Personal Auto,SUV,23.810491 +MN94234,California,M,High School or Below,310756.86%,0,94.0000000000,1/4/00,Personal Auto,Two-Door Car,451.2 +JY90595,Arizona,M,High School or Below,552866.50%,16042,73.0000000000,1/0/00,Personal Auto,Two-Door Car,350.4 +HK26543,California,M,High School or Below,504586.67%,28056,64.0000000000,1/1/00,Personal Auto,Four-Door Car,307.2 +PN86062,California,M,High School or Below,296272.25%,16495,85.0000000000,1/3/00,Corporate Auto,Four-Door Car,408 +VW27730,California,F,Master,866595.64%,41163,108.0000000000,1/0/00,Corporate Auto,SUV,231.922173 +SH55671,Arizona,F,College,1141344.12%,0,161.0000000000,1/1/00,Personal Auto,Sports Car,772.8 +MO56878,California,M,Bachelor,1548843.20%,33799,109.0000000000,1/3/00,Corporate Auto,SUV,664.980242 +VO38365,Washington,F,College,886114.95%,90125,110.0000000000,1/0/00,Corporate Auto,SUV,128.645946 +SV35618,Oregon,F,Bachelor,593474.15%,87747,147.0000000000,1/1/00,Personal Auto,SUV,46.492039 +RX12347,Nevada,M,College,354323.21%,35695,90.0000000000,1/0/00,Personal Auto,Four-Door Car,432 +FR55658,California,M,Master,349002.83%,90985,87.0000000000,1/0/00,Personal Auto,Four-Door Car,78.085149 +XS12556,California,F,College,368309.99%,0,101.0000000000,1/0/00,Corporate Auto,Sports Car,564.466556 +ZU73588,California,M,College,598977.39%,66839,154.0000000000,1/0/00,Personal Auto,Sports Car,739.2 +WT43034,California,F,High School or Below,1250084.30%,0,165.0000000000,1/0/00,Personal Auto,SUV,792 +VM13430,Oregon,F,Bachelor,860915.82%,79090,107.0000000000,1/0/00,Corporate Auto,SUV,289.040734 +TC78849,Oregon,M,Bachelor,249745.51%,24825,64.0000000000,1/0/00,Personal Auto,Two-Door Car,155.938593 +VC34764,California,M,College,701917.72%,26806,63.0000000000,1/0/00,Personal Auto,Four-Door Car,302.4 +WO90953,Oregon,F,College,538792.63%,56835,67.0000000000,1/0/00,Personal Auto,Two-Door Car,326.549425 +IU47468,Oregon,F,Bachelor,616555.75%,0,88.0000000000,1/0/00,Special Auto,Two-Door Car,653.65668 +KO46064,California,M,Bachelor,273020.29%,46135,69.0000000000,1/0/00,Personal Auto,Four-Door Car,103.935601 +RB34917,Arizona,F,Bachelor,516211.69%,0,73.0000000000,1/0/00,Personal Auto,Four-Door Car,809.532341 +BI38192,Oregon,F,High School or Below,793706.48%,22862,67.0000000000,1/0/00,Personal Auto,Two-Door Car,321.6 +PU18983,Oregon,F,High School or Below,860815.72%,21450,110.0000000000,1/2/00,Personal Auto,Sports Car,528 +SW79912,Oregon,M,Bachelor,263254.58%,95854,65.0000000000,1/0/00,Personal Auto,Two-Door Car,312 +ES39217,Oregon,F,Bachelor,778500.42%,44897,99.0000000000,1/1/00,Personal Auto,Four-Door Car,580.72531 +KP72427,Washington,M,High School or Below,2163983.86%,64455,108.0000000000,1/0/00,Personal Auto,SUV,133.735395 +UA19178,Oregon,F,Master,498082.50%,53265,62.0000000000,1/0/00,Personal Auto,Four-Door Car,238.005074 +PR53785,Arizona,F,High School or Below,745723.78%,0,198.0000000000,1/1/00,Personal Auto,Luxury Car,1577.674417 +XF57481,Washington,M,Master,1064093.93%,50450,90.0000000000,1/0/00,Personal Auto,Two-Door Car,135.892444 +CN90378,California,F,High School or Below,686250.83%,54780,88.0000000000,1/3/00,Personal Auto,Four-Door Car,135.26125 +KI56154,Nevada,M,High School or Below,904898.34%,0,119.0000000000,1/0/00,Personal Auto,Sports Car,571.2 +UI55951,California,M,Bachelor,554803.19%,67798,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +FF28650,Oregon,M,Bachelor,831268.16%,21442,118.0000000000,1/0/00,Personal Auto,SUV,566.4 +FS55302,California,M,Bachelor,238998.10%,27615,62.0000000000,1/1/00,Personal Auto,Four-Door Car,297.6 +TN79487,California,M,Bachelor,445811.34%,17622,65.0000000000,1/1/00,Personal Auto,Four-Door Car,312 +HG32616,Nevada,M,High School or Below,529574.17%,50200,135.0000000000,1/0/00,Personal Auto,Sports Car,637.063458 +UK41984,Arizona,F,Doctor,383960.61%,0,112.0000000000,1/2/00,Personal Auto,SUV,537.6 +LZ52266,California,F,High School or Below,373150.46%,0,96.0000000000,1/0/00,Personal Auto,Four-Door Car,460.8 +PM27367,California,F,Master,277890.37%,73570,70.0000000000,1/1/00,Special Auto,Two-Door Car,75.936096 +ZK21724,Oregon,F,High School or Below,401654.20%,0,111.0000000000,1/0/00,Personal Auto,SUV,799.2 +BH35482,Washington,M,Doctor,493094.93%,70412,61.0000000000,1/0/00,Corporate Auto,Two-Door Car,136.291083 +QE22757,Nevada,M,Doctor,249131.70%,36631,62.0000000000,1/0/00,Personal Auto,Four-Door Car,67.530904 +ON77649,Oregon,F,College,290887.59%,35895,73.0000000000,1/0/00,Personal Auto,Four-Door Car,312.921256 +RN82884,Arizona,F,College,428294.80%,40864,109.0000000000,1/1/00,Personal Auto,SUV,166.937747 +CQ75652,Oregon,M,College,834162.37%,0,118.0000000000,1/0/00,Personal Auto,Four-Door Car,566.4 +FF58467,Arizona,F,Master,509078.13%,93018,63.0000000000,1/0/00,Personal Auto,Four-Door Car,135.382194 +BS83666,Oregon,M,Bachelor,736618.83%,70014,62.0000000000,1/0/00,Corporate Auto,Four-Door Car,17.742954 +WO29605,Oregon,F,College,243687.51%,48875,61.0000000000,1/0/00,Personal Auto,Two-Door Car,1.838367 +TL77607,California,M,Bachelor,885268.87%,67969,74.0000000000,1/0/00,Personal Auto,Four-Door Car,197.776009 +EZ50606,Oregon,F,High School or Below,2387547.68%,0,108.0000000000,1/0/00,Corporate Auto,SUV,612.102262 +OS39723,Oregon,F,Doctor,560049.65%,68665,69.0000000000,1/0/00,Personal Auto,Two-Door Car,331.2 +FN69743,California,M,College,463654.65%,26802,66.0000000000,1/1/00,Corporate Auto,Two-Door Car,316.8 +XW96958,Nevada,M,High School or Below,757334.51%,0,110.0000000000,1/0/00,Corporate Auto,Four-Door Car,1193.036154 +TU92578,California,M,College,1469663.55%,45345,125.0000000000,1/0/00,Personal Auto,SUV,600 +TL43709,Washington,M,Bachelors,897214.03%,89689,74.0000000000,1/0/00,Personal Auto,Four-Door Car,136.829537 +YE68736,California,F,Bachelor,772484.01%,32051,193.0000000000,1/1/00,Personal Auto,SUV,926.4 +OB96537,Oregon,M,Master,594667.07%,81139,74.0000000000,1/0/00,Special Auto,Four-Door Car,392.6364 +EU68825,Oregon,F,Master,800054.51%,63834,100.0000000000,1/1/00,Personal Auto,Sports Car,215.226476 +CC31456,Arizona,M,Bachelor,645756.10%,37548,81.0000000000,1/0/00,Special Auto,Four-Door Car,160.598662 +DJ77787,Arizona,F,High School or Below,728144.01%,0,69.0000000000,1/3/00,Personal Auto,Four-Door Car,371.803029 +LN26837,California,M,High School or Below,259243.78%,72421,65.0000000000,1/0/00,Personal Auto,Four-Door Car,312 +YI92916,Nevada,M,Master,467842.34%,83102,116.0000000000,1/0/00,Corporate Auto,Four-Door Car,443.670399 +NW54906,Oregon,M,College,1386992.71%,28432,118.0000000000,1/0/00,Personal Auto,SUV,612.300581 +ME77513,Nevada,F,Master,871777.78%,83707,108.0000000000,1/0/00,Corporate Auto,Four-Door Car,290.391526 +UK76891,California,F,College,523398.68%,63259,65.0000000000,1/0/00,Corporate Auto,Four-Door Car,316.795337 +SI26888,Nevada,F,High School or Below,476418.97%,0,67.0000000000,1/0/00,Personal Auto,Four-Door Car,405.527937 +YD74948,Oregon,F,College,247246.92%,63860,62.0000000000,1/0/00,Personal Auto,Four-Door Car,208.598246 +HB64268,Washington,M,Bachelor,281369.26%,43836,73.0000000000,1/0/00,Personal Auto,Four-Door Car,138.130879 +BW52697,California,F,College,550505.70%,86132,68.0000000000,1/0/00,Personal Auto,Two-Door Car,301.437365 +NL41409,Oregon,F,Bachelor,260620.85%,28519,66.0000000000,1/0/00,Personal Auto,Two-Door Car,456.473115 +OD69005,Arizona,F,High School or Below,1048194.38%,39102,88.0000000000,1/0/00,Personal Auto,Four-Door Car,152.338562 +ZZ91716,California,F,Bachelor,325676.64%,0,89.0000000000,1/0/00,Personal Auto,Four-Door Car,491.755368 +UK70255,California,F,College,3047578.05%,97298,128.0000000000,1/0/00,Personal Auto,Sports Car,48.517439 +QT25383,Nevada,M,High School or Below,636490.22%,41986,84.0000000000,1/2/00,Personal Auto,Two-Door Car,430.375049 +AW18068,Arizona,M,High School or Below,946850.93%,0,88.0000000000,1/0/00,Personal Auto,Two-Door Car,633.6 +NS45347,Oregon,F,College,563145.19%,17291,73.0000000000,1/0/00,Personal Auto,Four-Door Car,350.4 +FV19421,California,M,Bachelor,778099.93%,0,74.0000000000,1/0/00,Personal Auto,Four-Door Car,246.489123 +XW89091,California,M,College,981652.83%,37256,62.0000000000,1/0/00,Personal Auto,Four-Door Car,128.969729 +YC11951,Oregon,M,High School or Below,751913.36%,96306,95.0000000000,1/1/00,Corporate Auto,Four-Door Car,185.355353 +UY18770,California,F,Bachelor,1017971.70%,14290,271.0000000000,1/0/00,Personal Auto,Luxury SUV,1300.8 +RA49085,California,F,College,277283.92%,37038,71.0000000000,1/1/00,Corporate Auto,Four-Door Car,9.071305 +BG84194,Oregon,M,College,403750.18%,90760,103.0000000000,1/2/00,Special Auto,SUV,133.475315 +PT64580,Washington,M,Master,419196.61%,77048,103.0000000000,1/0/00,Personal Auto,SUV,141.199465 +MR67738,Oregon,F,High School or Below,267686.79%,54480,67.0000000000,1/0/00,Personal Auto,Four-Door Car,321.6 +DM95829,California,M,College,252395.96%,16244,68.0000000000,1/0/00,Personal Auto,Two-Door Car,623.223617 +DB75522,California,F,College,698840.16%,22436,89.0000000000,1/0/00,Special Auto,Four-Door Car,427.2 +LM34525,Washington,F,College,874205.78%,71592,72.0000000000,1/0/00,Personal Auto,Four-Door Car,141.725051 +WW30771,Arizona,M,Master,267331.96%,28728,67.0000000000,1/0/00,Personal Auto,Four-Door Car,321.6 +QP65569,Arizona,M,High School or Below,1215732.99%,57449,103.0000000000,1/0/00,Personal Auto,Four-Door Car,494.4 +TN50051,California,F,Doctor,295776.40%,83318,73.0000000000,1/0/00,Personal Auto,Two-Door Car,211.336937 +UO86707,Washington,M,Bachelors,717390.94%,75217,61.0000000000,1/1/00,Personal Auto,Four-Door Car,147.080303 +JA41698,Nevada,M,Bachelor,309953.80%,0,102.0000000000,1/5/00,Corporate Auto,SUV,862.762957 +NX18774,Oregon,M,Bachelor,841568.46%,55308,107.0000000000,1/0/00,Corporate Auto,SUV,513.6 +DA69469,Oregon,F,College,2684312.45%,36068,97.0000000000,1/0/00,Personal Auto,Two-Door Car,113.367765 +CN23147,Oregon,M,Bachelor,1305717.07%,48804,112.0000000000,1/1/00,Corporate Auto,Four-Door Car,537.6 +RA68844,Oregon,M,College,959995.02%,0,131.0000000000,1/0/00,Personal Auto,SUV,943.2 +GH42026,Oregon,M,Bachelor,853510.89%,55790,111.0000000000,1/0/00,Personal Auto,SUV,117.672722 +BD16530,Arizona,F,Bachelor,829348.19%,70258,69.0000000000,1/0/00,Personal Auto,Four-Door Car,225.145949 +JH91579,Oregon,F,Bachelor,684615.03%,0,95.0000000000,1/0/00,Personal Auto,Two-Door Car,456 +WK23685,Oregon,F,Bachelor,663685.98%,47274,83.0000000000,1/1/00,Corporate Auto,Four-Door Car,182.432565 +GR62267,Washington,F,College,560908.25%,44705,71.0000000000,1/0/00,Personal Auto,Two-Door Car,148.173152 +PI78084,Arizona,M,High School or Below,507732.09%,0,73.0000000000,1/0/00,Personal Auto,Two-Door Car,525.6 +GF97874,Washington,F,Master,527562.70%,70446,65.0000000000,1/0/00,Personal Auto,Four-Door Car,155.570802 +ZH19885,Washington,F,High School or Below,251459.20%,43860,65.0000000000,1/0/00,Personal Auto,Four-Door Car,156.124914 +UK25655,Oregon,F,Bachelor,343525.01%,64348,86.0000000000,1/0/00,Personal Auto,Two-Door Car,212.391975 +QR45101,Oregon,M,Bachelor,662461.18%,0,62.0000000000,1/0/00,Corporate Auto,Two-Door Car,297.6 +EL93539,California,M,Master,575744.23%,88997,72.0000000000,1/0/00,Special Auto,Four-Door Car,174.041566 +EE99484,Washington,F,High School or Below,251459.20%,43860,65.0000000000,1/0/00,Corporate Auto,Four-Door Car,156.124914 +DP46882,California,F,High School or Below,288645.16%,10312,78.0000000000,1/0/00,Corporate Auto,Four-Door Car,486.278557 +WP41146,California,F,High School or Below,534143.88%,0,72.0000000000,1/1/00,Personal Auto,Four-Door Car,345.6 +TK60799,Arizona,F,High School or Below,416001.81%,96263,103.0000000000,1/0/00,Personal Auto,SUV,1.924709 +DN29808,California,F,College,284624.54%,28919,72.0000000000,1/0/00,Corporate Auto,Four-Door Car,518.4 +SS59521,Oregon,F,College,477025.66%,0,68.0000000000,1/1/00,Personal Auto,Two-Door Car,326.4 +NG66579,Oregon,M,Bachelor,505961.62%,41869,64.0000000000,1/0/00,Personal Auto,Two-Door Car,262.12205 +TC14209,Arizona,F,High School or Below,909574.46%,0,128.0000000000,1/0/00,Personal Auto,SUV,921.6 +ED50963,California,F,High School or Below,268886.40%,32808,68.0000000000,1/1/00,Personal Auto,Four-Door Car,541.695658 +GP40701,California,F,Bachelor,827763.76%,79780,68.0000000000,1/0/00,Personal Auto,Four-Door Car,326.4 +CP98451,Oregon,F,College,905793.53%,91025,112.0000000000,1/0/00,Personal Auto,SUV,327.682669 +NX52648,California,F,High School or Below,380175.04%,33043,95.0000000000,1/0/00,Personal Auto,Two-Door Car,456 +ZC32510,Arizona,M,High School or Below,933934.16%,69442,118.0000000000,1/3/00,Personal Auto,Four-Door Car,1265.570302 +NG27780,Oregon,M,College,252012.32%,0,70.0000000000,1/0/00,Corporate Auto,Four-Door Car,63.043197 +HN95240,Arizona,F,College,498409.53%,0,70.0000000000,1/0/00,Corporate Auto,Four-Door Car,336 +EB59129,Oregon,F,Bachelor,259574.80%,47234,65.0000000000,1/0/00,Personal Auto,Four-Door Car,15.631363 +RA70851,Oregon,M,High School or Below,743769.33%,86863,92.0000000000,1/0/00,Personal Auto,Four-Door Car,441.6 +PM19162,Oregon,M,Bachelor,1453678.76%,25805,66.0000000000,1/2/00,Personal Auto,Four-Door Car,375.866091 +MS59005,Nevada,M,Bachelor,591330.59%,43676,76.0000000000,1/0/00,Personal Auto,Four-Door Car,364.8 +SU71163,Arizona,M,College,277166.30%,59855,74.0000000000,1/4/00,Personal Auto,Two-Door Car,355.2 +BD35676,Arizona,M,Master,2919436.64%,35296,126.0000000000,1/0/00,Personal Auto,SUV,452.616872 +NI44621,Oregon,F,Master,988038.58%,36576,125.0000000000,1/1/00,Personal Auto,SUV,113.450122 +EW33419,California,F,High School or Below,1511440.24%,28513,100.0000000000,1/1/00,Corporate Auto,SUV,480 +HX44948,Oregon,M,Bachelor,575991.08%,85448,72.0000000000,1/0/00,Special Auto,Four-Door Car,16.03451 +DL36983,Oregon,F,High School or Below,849516.42%,23791,110.0000000000,1/3/00,Personal Auto,Two-Door Car,615.27228 +XR87264,California,F,Bachelor,438118.42%,20597,112.0000000000,1/0/00,Personal Auto,Four-Door Car,615.256301 +NN99001,Arizona,F,College,699782.74%,56940,87.0000000000,1/0/00,Personal Auto,Four-Door Car,512.66245 +XV95530,Oregon,M,Bachelor,1143058.85%,93210,71.0000000000,1/0/00,Personal Auto,Two-Door Car,74.523935 +OL97871,Oregon,F,Bachelor,748248.61%,48992,94.0000000000,1/1/00,Personal Auto,Four-Door Car,426.072946 +HQ23708,Arizona,F,Master,859691.66%,53736,71.0000000000,1/0/00,Personal Auto,Two-Door Car,169.287785 +WR63188,Arizona,M,College,785496.08%,25378,66.0000000000,1/1/00,Personal Auto,Four-Door Car,419.464143 +NG82219,Oregon,F,Bachelor,258240.85%,76731,64.0000000000,1/0/00,Personal Auto,Four-Door Car,201.455005 +KU29408,Washington,M,Master,907576.82%,37722,116.0000000000,1/0/00,Corporate Auto,Sports Car,158.077504 +RE46783,California,F,Bachelor,411858.86%,69379,103.0000000000,1/0/00,Personal Auto,Two-Door Car,494.4 +RU94434,Oregon,M,High School or Below,1215732.99%,57449,103.0000000000,1/0/00,Personal Auto,Four-Door Car,494.4 +GI82355,Arizona,M,Bachelor,515281.96%,0,68.0000000000,1/0/00,Corporate Auto,Four-Door Car,326.4 +VO26340,Nevada,M,College,651297.65%,0,93.0000000000,1/0/00,Personal Auto,Two-Door Car,669.6 +NV61299,Arizona,F,Bachelor,2778969.24%,33806,89.0000000000,1/0/00,Corporate Auto,Four-Door Car,395.729716 +DX31066,Washington,F,College,266727.00%,94041,66.0000000000,1/0/00,Personal Auto,Four-Door Car,159.756733 +CY50337,Oregon,F,College,1092840.71%,74965,90.0000000000,1/0/00,Personal Auto,Four-Door Car,58.557552 +TJ20375,Arizona,F,High School or Below,761538.13%,34095,63.0000000000,1/0/00,Personal Auto,Two-Door Car,302.4 +EP72155,California,F,College,200435.07%,0,66.0000000000,1/4/00,Personal Auto,Four-Door Car,316.8 +JJ76159,California,M,College,243468.12%,96045,61.0000000000,1/0/00,Corporate Auto,Four-Door Car,8.582971 +BG15419,Nevada,F,Bachelor,1419536.03%,86355,118.0000000000,1/0/00,Personal Auto,Sports Car,285.418473 +AO74776,California,F,High School or Below,942768.49%,27824,118.0000000000,1/0/00,Personal Auto,SUV,566.4 +HQ82233,California,M,High School or Below,1198242.09%,42995,101.0000000000,1/0/00,Personal Auto,SUV,410.508316 +OL72737,Oregon,F,High School or Below,310278.95%,21235,79.0000000000,1/0/00,Personal Auto,Two-Door Car,244.23135 +ZQ59828,California,M,High School or Below,422263.12%,74585,106.0000000000,1/0/00,Personal Auto,SUV,218.598065 +NZ15548,Oregon,M,Bachelor,402381.44%,41833,103.0000000000,1/0/00,Personal Auto,Four-Door Car,643.826716 +XK61304,California,F,College,529715.18%,23908,70.0000000000,1/0/00,Personal Auto,Four-Door Car,336 +EJ44139,Oregon,M,Bachelor,2142363.72%,0,65.0000000000,1/0/00,Personal Auto,Two-Door Car,312 +CM94425,Arizona,M,Bachelor,441620.62%,61953,113.0000000000,1/0/00,Personal Auto,SUV,497.047297 +OV54878,California,M,Bachelor,463903.52%,0,142.0000000000,1/0/00,Corporate Auto,SUV,1022.4 +JF57282,Nevada,M,Bachelor,486354.46%,0,137.0000000000,1/0/00,Personal Auto,SUV,657.6 +MY37953,Arizona,F,Bachelor,2583090.98%,73760,107.0000000000,1/1/00,Personal Auto,Sports Car,230.245772 +XP64922,Oregon,F,College,297431.49%,23333,74.0000000000,1/0/00,Corporate Auto,Four-Door Car,5.622751 +WL65572,California,M,College,206445.88%,0,61.0000000000,1/0/00,Personal Auto,Four-Door Car,292.8 +LN50325,Arizona,F,High School or Below,1006460.83%,20440,128.0000000000,1/2/00,Corporate Auto,Sports Car,614.4 +HJ15383,Washington,M,Master,803240.19%,27658,68.0000000000,1/0/00,Personal Auto,Four-Door Car,160.07526 +KH59823,California,M,College,548921.41%,50943,139.0000000000,1/0/00,Special Auto,SUV,667.2 +YM79169,California,M,Bachelor,261275.67%,19003,71.0000000000,1/0/00,Personal Auto,Two-Door Car,34.651305 +DR38127,California,M,College,857346.39%,46703,108.0000000000,1/0/00,Personal Auto,Four-Door Car,678.100487 +PU42145,California,M,Bachelor,2412750.40%,14072,71.0000000000,1/0/00,Personal Auto,Four-Door Car,511.2 +KM33477,Oregon,M,College,855038.66%,21733,73.0000000000,1/0/00,Corporate Auto,Four-Door Car,525.6 +RI53167,Arizona,M,Bachelor,230864.80%,20811,61.0000000000,1/0/00,Personal Auto,Four-Door Car,292.8 +OF77789,Arizona,F,High School or Below,425462.07%,11904,61.0000000000,1/2/00,Personal Auto,Two-Door Car,292.8 +YB33445,Oregon,F,College,898285.04%,43490,114.0000000000,1/4/00,Corporate Auto,SUV,174.588413 +BA17836,California,M,High School or Below,786816.60%,57340,67.0000000000,1/0/00,Corporate Auto,Four-Door Car,159.391681 +JS43228,California,M,College,770424.87%,49088,97.0000000000,1/0/00,Corporate Auto,Four-Door Car,698.4 +BB11622,Nevada,M,Master,1055217.00%,47761,131.0000000000,1/0/00,Personal Auto,SUV,232.711071 +HQ70429,Washington,F,College,1604510.95%,0,65.0000000000,1/0/00,Personal Auto,Two-Door Car,163.046956 +WK88044,Arizona,M,Bachelor,873783.75%,61281,110.0000000000,1/0/00,Personal Auto,SUV,79.865605 +LA80525,Nevada,M,Bachelor,545489.07%,0,82.0000000000,1/1/00,Corporate Auto,Two-Door Car,393.6 +EH16250,Arizona,M,Bachelor,770528.33%,25290,66.0000000000,1/0/00,Personal Auto,Four-Door Car,382.085897 +PU41872,Arizona,F,High School or Below,703926.24%,24239,88.0000000000,1/0/00,Personal Auto,Four-Door Car,48.348319 +HB85743,California,M,Bachelor,883808.56%,82664,114.0000000000,1/3/00,Personal Auto,SUV,133.425609 +MM71959,Arizona,M,Bachelor,873352.73%,83210,110.0000000000,1/0/00,Personal Auto,Sports Car,528 +MB83663,Oregon,F,Bachelor,959747.48%,38736,81.0000000000,1/0/00,Personal Auto,Two-Door Car,561.414794 +KR43119,California,M,College,450666.02%,0,66.0000000000,1/0/00,Personal Auto,Four-Door Car,316.8 +KH24214,Oregon,M,College,1785797.23%,55437,64.0000000000,1/1/00,Personal Auto,Four-Door Car,445.287788 +AC40767,Washington,M,Bachelors,249780.82%,68041,6464.0000000000,1/0/00,Personal Auto,Two-Door Car,165.570243 +HP55391,Oregon,M,Master,542613.62%,0,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,407.99684 +EG62398,California,F,High School or Below,799814.38%,29066,100.0000000000,1/0/00,Personal Auto,SUV,844.229478 +VS19949,Nevada,M,Bachelor,289762.07%,54337,72.0000000000,1/0/00,Personal Auto,Four-Door Car,345.6 +AM92343,Oregon,F,High School or Below,1159950.22%,67616,96.0000000000,1/0/00,Personal Auto,Four-Door Car,340.306584 +GI68556,California,F,Bachelor,1514793.06%,41082,63.0000000000,1/0/00,Personal Auto,Two-Door Car,106.647493 +JT11876,WA,F,High School or Below,543576.78%,0,10202.0000000000,1/0/00,Personal Auto,Four-Door Car,626.116259 +XR64251,Nevada,F,Master,272535.64%,36650,69.0000000000,1/1/00,Personal Auto,Four-Door Car,56.60333 +MK34957,Oregon,F,College,1329771.23%,50631,112.0000000000,1/4/00,Special Auto,SUV,784.65781 +GP18756,California,M,College,992704.97%,19592,92.0000000000,1/0/00,Personal Auto,Four-Door Car,441.6 +AP23850,WA,F,High School or Below,1777154.90%,0,114.0000000000,1/0/00,Personal Auto,Two-Door Car,547.2 +KQ65521,Arizona,F,College,1826927.02%,55761,115.0000000000,1/0/00,Personal Auto,Sports Car,86.27772 +EJ19449,California,F,College,272221.07%,17576,71.0000000000,1/0/00,Special Auto,Four-Door Car,398.502948 +QB70027,California,F,Bachelor,708321.24%,41449,89.0000000000,1/0/00,Personal Auto,Four-Door Car,63.516572 +QW47320,Cali,F,Bachelor,1017971.70%,14290,271.0000000000,1/0/00,Personal Auto,Luxury SUV,1300.8 +KH64733,Nevada,F,College,588950.91%,62007,73.0000000000,1/0/00,Personal Auto,Four-Door Car,120.015609 +ON59472,Arizona,M,High School or Below,1577139.34%,21921,206.0000000000,1/0/00,Corporate Auto,Luxury SUV,1254.137899 +HP94242,Arizona,F,Bachelor,528817.33%,42621,66.0000000000,1/0/00,Personal Auto,Four-Door Car,316.8 +RV15398,Oregon,M,College,2758055.40%,0,87.0000000000,1/1/00,Personal Auto,Four-Door Car,417.6 +EA25683,WA,M,High School or Below,777853.23%,63786,196.0000000000,1/0/00,Corporate Auto,Luxury SUV,798.002689 +PW73754,Cali,F,High School or Below,734186.13%,0,104.0000000000,1/3/00,Personal Auto,Sports Car,82.041684 +MC71942,Cali,F,High School or Below,791919.70%,82877,99.0000000000,1/1/00,Personal Auto,Two-Door Car,22.819088 +OX72195,Arizona,M,College,216387.02%,0,63.0000000000,1/0/00,Corporate Auto,Two-Door Car,302.4 +YQ99152,Nevada,M,High School or Below,978780.88%,10475,88.0000000000,1/1/00,Personal Auto,Two-Door Car,422.4 +KI19439,Oregon,F,High School or Below,520764.08%,21952,66.0000000000,1/0/00,Personal Auto,Four-Door Car,316.8 +PM76175,Oregon,F,Bachelor,2114727.72%,49721,132.0000000000,1/0/00,Corporate Auto,Sports Car,639.971388 +US45383,Cali,M,College,1228076.66%,88340,102.0000000000,1/0/00,Personal Auto,Two-Door Car,489.6 +GT38956,Cali,F,College,244139.42%,0,65.0000000000,1/0/00,Personal Auto,Four-Door Car,312 +SN41301,Oregon,M,Bachelor,653556.06%,0,65.0000000000,1/0/00,Corporate Auto,Four-Door Car,468 +BE62503,WA,F,College,920659.83%,24589,82.0000000000,1/0/00,Personal Auto,Two-Door Car,511.497882 +PA16884,Cali,F,Bachelor,411858.86%,69379,103.0000000000,1/0/00,Personal Auto,Two-Door Car,494.4 +NC58480,Nevada,F,Bachelor,483820.90%,73769,61.0000000000,1/2/00,Personal Auto,Four-Door Car,239.540223 +NS39326,Cali,F,College,462554.81%,66670,114.0000000000,1/0/00,Personal Auto,SUV,518.180364 +PN18507,Arizona,M,Bachelor,1404210.30%,88854,118.0000000000,1/0/00,Personal Auto,Two-Door Car,715.252366 +EK91340,Oregon,M,Bachelor,754661.35%,31266,193.0000000000,1/0/00,Corporate Auto,Luxury Car,926.4 +JY16280,Cali,F,High School or Below,251459.20%,43860,65.0000000000,1/0/00,Personal Auto,Four-Door Car,156.124914 +ZW71731,Cali,M,Bachelor,517035.84%,89284,133.0000000000,1/2/00,Corporate Auto,SUV,402.070719 +ZC24631,Oregon,M,College,1391737.72%,67267,89.0000000000,1/0/00,Corporate Auto,Four-Door Car,94.814032 +YR34689,Cali,F,High School or Below,1131813.08%,79270,95.0000000000,1/3/00,Personal Auto,Four-Door Car,456 +RT65829,Oregon,M,Bachelor,427636.36%,36692,109.0000000000,1/1/00,Personal Auto,Four-Door Car,523.2 +BZ12077,Oregon,F,High School or Below,432224.03%,0,119.0000000000,1/0/00,Personal Auto,SUV,571.2 +WM65373,Cali,F,College,800230.83%,0,107.0000000000,1/0/00,Corporate Auto,SUV,513.6 +NH35059,Nevada,M,College,388545.64%,0,105.0000000000,1/0/00,Corporate Auto,Four-Door Car,504 +QD38160,Oregon,M,College,447177.82%,0,135.0000000000,1/0/00,Personal Auto,SUV,972 +BM15160,Cali,F,High School or Below,849635.28%,44624,71.0000000000,1/1/00,Special Auto,Four-Door Car,73.883044 +VY79030,Arizona,F,College,2250088.35%,0,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,340.8 +EV19512,Nevada,F,Master,1630196.76%,19614,85.0000000000,1/0/00,Personal Auto,Two-Door Car,574.024018 +TE13577,Oregon,F,College,231973.59%,0,64.0000000000,1/0/00,Personal Auto,Four-Door Car,632.715382 +WY97929,Arizona,M,College,871704.98%,83846,74.0000000000,1/3/00,Special Auto,Four-Door Car,355.2 +YG20683,WA,M,College,286011.17%,51159,72.0000000000,1/0/00,Personal Auto,Four-Door Car,4.238626 +FK75497,Cali,M,College,245340.83%,83772,62.0000000000,1/0/00,Personal Auto,Two-Door Car,42.248087 +NE60110,Arizona,M,College,598977.39%,66839,154.0000000000,1/0/00,Personal Auto,Sports Car,739.2 +TN36521,Arizona,F,College,2498022.55%,88440,70.0000000000,1/0/00,Personal Auto,Two-Door Car,27.145151 +HG33568,Arizona,F,Master,748263.95%,25666,63.0000000000,1/2/00,Personal Auto,Four-Door Car,270.002766 +TW17878,Oregon,F,High School or Below,245757.60%,52926,61.0000000000,1/0/00,Personal Auto,Four-Door Car,292.8 +ZO83562,Nevada,F,Bachelor,237974.12%,0,67.0000000000,1/0/00,Personal Auto,Four-Door Car,494.946438 +CH97539,WA,F,Bachelor,828696.44%,40001,70.0000000000,1/0/00,Personal Auto,Four-Door Car,142.567008 +CV29889,Cali,M,College,239391.54%,0,70.0000000000,1/0/00,Personal Auto,Four-Door Car,425.266308 +MO33320,Oregon,M,College,465715.95%,18024,65.0000000000,1/0/00,Personal Auto,Two-Door Car,312 +QZ81258,Oregon,F,College,1319792.89%,0,68.0000000000,1/3/00,Personal Auto,Four-Door Car,326.4 +NY56352,Oregon,F,Bachelor,280391.67%,23220,74.0000000000,1/0/00,Personal Auto,Four-Door Car,251.334247 +EA27048,Cali,F,High School or Below,864650.41%,64125,108.0000000000,1/0/00,Personal Auto,SUV,369.818708 +UT38865,Oregon,F,College,742587.06%,58042,62.0000000000,1/0/00,Corporate Auto,Four-Door Car,161.419528 +QC89139,Oregon,F,High School or Below,452873.74%,90034,112.0000000000,1/0/00,Corporate Auto,SUV,537.6 +LA14484,Nevada,M,High School or Below,222707.28%,27972,61.0000000000,1/0/00,Special Auto,Four-Door Car,292.8 +HN57556,Cali,F,High School or Below,729294.88%,0,65.0000000000,1/0/00,Personal Auto,Four-Door Car,312 +CV31235,Arizona,M,Bachelor,318435.52%,50989,80.0000000000,1/0/00,Corporate Auto,Four-Door Car,255.999709 +WR45726,Arizona,F,Bachelor,1131520.37%,11885,101.0000000000,1/0/00,Special Auto,Four-Door Car,484.8 +LB25094,Cali,F,Bachelor,253070.51%,89451,63.0000000000,1/0/00,Special Auto,Four-Door Car,61.769564 +KW56110,Oregon,M,Bachelor,1836155.53%,0,182.0000000000,1/0/00,Personal Auto,Luxury Car,1310.4 +XO36233,WA,M,Bachelor,864153.00%,78904,109.0000000000,1/0/00,Personal Auto,SUV,250.001424 +ZX86243,Arizona,M,Doctor,327853.19%,70247,83.0000000000,1/1/00,Personal Auto,Four-Door Car,141.799422 +DW29763,Arizona,M,High School or Below,527198.21%,32653,67.0000000000,1/0/00,Personal Auto,Two-Door Car,321.6 +CT83377,WA,M,High School or Below,376363.77%,93595,97.0000000000,1/4/00,Special Auto,Four-Door Car,49.797016 +OQ90898,Cali,M,Master,1395556.96%,90279,115.0000000000,1/0/00,Personal Auto,SUV,372.175592 +GO77248,Oregon,F,College,500152.75%,0,72.0000000000,1/0/00,Personal Auto,Four-Door Car,542.14385 +QW33258,Cali,M,Bachelor,708283.04%,53310,189.0000000000,1/3/00,Personal Auto,Luxury Car,1360.8 +OU79745,Cali,M,College,761948.28%,0,105.0000000000,1/0/00,Personal Auto,Four-Door Car,504 +VZ79886,Oregon,F,Bachelor,1255088.20%,22234,160.0000000000,1/0/00,Personal Auto,SUV,768 +FI92440,WA,F,High School or Below,3219660.04%,91375,99.0000000000,1/0/00,Personal Auto,Two-Door Car,72.632934 +YG85980,Nevada,F,High School or Below,679377.41%,22250,86.0000000000,1/0/00,Personal Auto,Two-Door Car,720.601429 +QM74621,Oregon,M,Bachelor,527231.97%,0,80.0000000000,1/0/00,Personal Auto,Four-Door Car,576 +EI71732,Oregon,F,Doctor,626534.33%,0,84.0000000000,1/1/00,Personal Auto,Four-Door Car,481.025786 +VN79010,Cali,F,High School or Below,854758.61%,51179,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,466.176731 +FI61723,Cali,M,Bachelor,278742.37%,38667,72.0000000000,1/0/00,Personal Auto,Four-Door Car,159.266473 +OH55411,Cali,F,Master,462680.11%,79487,114.0000000000,1/0/00,Corporate Auto,SUV,547.2 +TF10720,Nevada,F,Doctor,866336.40%,67763,107.0000000000,1/2/00,Personal Auto,Four-Door Car,41.283167 +NW30838,Nevada,M,High School or Below,387222.22%,0,62.0000000000,1/2/00,Corporate Auto,Four-Door Car,503.808329 +CB58476,Oregon,F,College,517081.15%,0,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,859.599411 +WI69346,Cali,F,Master,896028.02%,71943,112.0000000000,1/0/00,Corporate Auto,SUV,305.653785 +FS76657,Oregon,F,College,547183.43%,53526,68.0000000000,1/0/00,Personal Auto,Four-Door Car,278.902846 +YX89016,Oregon,M,College,3493100.17%,35005,295.0000000000,1/0/00,Personal Auto,Luxury Car,1416 +PK28821,Cali,M,College,262039.23%,24721,67.0000000000,1/0/00,Personal Auto,Four-Door Car,139.963594 +MB51200,WA,M,College,1906949.95%,0,102.0000000000,1/2/00,Personal Auto,Four-Door Car,734.4 +XG44587,Arizona,M,Master,575744.23%,88997,72.0000000000,1/0/00,Personal Auto,Four-Door Car,174.041566 +FG91922,Arizona,M,Master,4022401.36%,48587,111.0000000000,1/0/00,Personal Auto,SUV,532.8 +OM99303,Arizona,F,High School or Below,270148.83%,76310,67.0000000000,1/0/00,Personal Auto,Two-Door Car,321.6 +RV67546,Cali,M,Bachelor,371243.05%,73205,92.0000000000,1/0/00,Personal Auto,Four-Door Car,37.299865 +UJ79253,Oregon,F,College,2185084.00%,51056,78.0000000000,1/0/00,Personal Auto,Four-Door Car,95.816516 +PN98247,Cali,M,College,784016.58%,58414,210.0000000000,1/2/00,Personal Auto,Luxury SUV,1008 +IB67546,Cali,F,Bachelor,823703.79%,23940,107.0000000000,1/0/00,Personal Auto,SUV,513.6 +OE19087,Cali,F,High School or Below,224347.39%,0,62.0000000000,1/0/00,Personal Auto,Four-Door Car,446.4 +CM95716,Cali,M,Bachelor,843446.41%,44216,71.0000000000,1/0/00,Personal Auto,Four-Door Car,72.205362 +MW62634,Cali,M,High School or Below,222707.28%,27972,61.0000000000,1/0/00,Corporate Auto,Four-Door Car,292.8 +QW67581,Arizona,F,High School or Below,517002.60%,0,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +SN16059,Cali,F,Master,264144.61%,29305,66.0000000000,1/0/00,Personal Auto,Four-Door Car,475.2 +OE51254,Cali,F,College,279068.30%,53882,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +RM42344,Oregon,M,College,274512.98%,91757,69.0000000000,1/1/00,Personal Auto,Four-Door Car,331.2 +GB35238,Cali,F,Bachelor,757953.27%,33906,64.0000000000,1/0/00,Personal Auto,Two-Door Car,401.592109 +ML82674,Oregon,M,Bachelor,1097878.03%,68158,139.0000000000,1/1/00,Personal Auto,SUV,253.183568 +EI85244,Cali,M,College,825506.01%,0,134.0000000000,1/3/00,Personal Auto,SUV,643.2 +DE28132,Oregon,M,College,474773.46%,42165,123.0000000000,1/0/00,Corporate Auto,SUV,799.673766 +TV25678,WA,M,College,354090.43%,0,101.0000000000,1/0/00,Personal Auto,SUV,727.2 +TY26512,Cali,M,Doctor,343613.43%,30817,88.0000000000,1/0/00,Personal Auto,Four-Door Car,91.834668 +OB69153,Cali,M,Bachelor,258218.53%,68074,65.0000000000,1/0/00,Personal Auto,Four-Door Car,27.987867 +QZ77637,Washington,F,College,1166509.78%,84978,35353.0000000000,1/1/00,Corporate Auto,Four-Door Car,166.77296 +XN41715,Cali,F,Master,739628.37%,71135,92.0000000000,1/1/00,Personal Auto,Four-Door Car,270.563995 +QR15857,Cali,F,College,433079.98%,0,61.0000000000,1/0/00,Personal Auto,Two-Door Car,292.8 +FL69363,Oregon,M,Master,907576.82%,37722,116.0000000000,1/0/00,Personal Auto,Sports Car,158.077504 +IS30295,Arizona,F,Bachelor,1463545.16%,0,139.0000000000,1/0/00,Personal Auto,SUV,667.2 +WA25797,Washington,Male,High School or Below,856476.82%,95697,107.0000000000,1/0/00,Personal Auto,Sports Car,178.006524 +NL59519,Cali,F,College,1156568.75%,64642,96.0000000000,1/0/00,Personal Auto,Four-Door Car,404.265696 +ZU93025,Oregon,F,College,277104.50%,50071,71.0000000000,1/0/00,Personal Auto,Two-Door Car,18.918935 +DK94262,Oregon,M,High School or Below,850712.88%,46754,106.0000000000,1/1/00,Personal Auto,SUV,513.818403 +UQ30615,Cali,M,College,758211.38%,64801,64.0000000000,1/0/00,Corporate Auto,Four-Door Car,268.471802 +OR40060,Arizona,M,Bachelor,332309.25%,70410,83.0000000000,1/0/00,Personal Auto,Four-Door Car,131.828507 +DK32872,Nevada,F,High School or Below,523433.17%,66957,131.0000000000,1/1/00,Personal Auto,SUV,628.8 +FA46418,Nevada,F,High School or Below,2470959.96%,24213,78.0000000000,1/1/00,Personal Auto,Four-Door Car,374.4 +ER19995,Washington,F,College,1778627.78%,99790,6464.0000000000,1/0/00,Personal Auto,Four-Door Car,178.986788 +KI75855,Oregon,M,Master,255122.67%,79751,63.0000000000,1/0/00,Personal Auto,Two-Door Car,392.235698 +ND41876,Arizona,M,High School or Below,724771.37%,86122,182.0000000000,1/1/00,Personal Auto,Luxury SUV,873.6 +PN21042,Arizona,M,Bachelor,453884.78%,82297,116.0000000000,1/0/00,Personal Auto,Sports Car,0.382107 +GJ43254,Washington,M,College,3164210.46%,89057,98.0000000000,1/0/00,Corporate Auto,Two-Door Car,187.363583 +AL46984,Cali,M,High School or Below,873042.20%,43259,73.0000000000,1/0/00,Personal Auto,Four-Door Car,350.4 +JP58047,Oregon,M,College,833273.06%,0,79.0000000000,1/0/00,Personal Auto,Four-Door Car,379.2 +ZE85014,Cali,M,College,235774.70%,25064,62.0000000000,1/0/00,Personal Auto,Four-Door Car,297.6 +KU88219,Arizona,M,Master,463716.40%,25816,119.0000000000,1/0/00,Personal Auto,Sports Car,571.2 +UU98729,Cali,M,Bachelor,535719.27%,0,73.0000000000,1/0/00,Personal Auto,Four-Door Car,350.853987 +WS82822,Oregon,F,College,539197.10%,41662,69.0000000000,1/0/00,Corporate Auto,Four-Door Car,217.973168 +YB49933,Arizona,M,Bachelor,369414.05%,96170,92.0000000000,1/0/00,Personal Auto,Four-Door Car,441.6 +XC16387,Arizona,F,High School or Below,504041.24%,46072,64.0000000000,1/0/00,Personal Auto,Four-Door Car,25.934064 +XJ96748,Arizona,F,High School or Below,2749542.19%,37931,99.0000000000,1/0/00,Personal Auto,Four-Door Car,475.2 +TM98684,Oregon,M,High School or Below,484228.50%,35127,62.0000000000,1/0/00,Personal Auto,Four-Door Car,297.6 +AY18433,Washington,F,High School or Below,2738281.89%,45473,76.0000000000,1/0/00,Special Auto,Two-Door Car,188.938397 +DM74502,Nevada,F,College,522710.19%,93087,131.0000000000,1/3/00,Corporate Auto,Sports Car,628.8 +FT56968,Arizona,M,High School or Below,259009.60%,22398,67.0000000000,1/2/00,Personal Auto,Four-Door Car,321.6 +OX36896,Cali,M,High School or Below,1053607.80%,92983,87.0000000000,1/1/00,Corporate Auto,Four-Door Car,153.205591 +BZ65376,Arizona,M,Bachelor,858127.87%,27689,239.0000000000,1/2/00,Personal Auto,Luxury SUV,2893.239678 +LN34660,Cali,F,College,946311.33%,69654,118.0000000000,1/0/00,Corporate Auto,SUV,629.532731 +JC29295,Cali,F,Bachelor,1344100.64%,80744,111.0000000000,1/0/00,Personal Auto,SUV,361.284757 +KJ87930,Cali,F,Bachelor,388650.48%,0,112.0000000000,1/0/00,Corporate Auto,SUV,1185.988301 +XT36360,Arizona,F,High School or Below,678489.37%,0,64.0000000000,1/1/00,Personal Auto,Four-Door Car,460.8 +IX35050,Arizona,M,Bachelor,2359468.02%,76358,66.0000000000,1/0/00,Special Auto,Four-Door Car,86.461582 +UN97379,Oregon,M,Bachelor,253862.63%,18608,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,340.8 +MR57294,Cali,M,High School or Below,563994.20%,73168,70.0000000000,1/0/00,Personal Auto,Four-Door Car,425.800112 +UG79499,Washington,M,Bachelor,1168137.43%,70930,99.0000000000,1/0/00,Personal Auto,Four-Door Car,190.43446 +UA50747,Washington,F,High School or Below,2599775.00%,62262,72.0000000000,1/0/00,Corporate Auto,Four-Door Car,193.505325 +GL20444,Nevada,F,Master,1377836.93%,91474,113.0000000000,1/0/00,Corporate Auto,Two-Door Car,24.087774 +SP58110,Cali,F,Bachelor,492318.17%,61469,63.0000000000,1/5/00,Personal Auto,Four-Door Car,302.4 +XM91635,Arizona,F,High School or Below,227233.54%,16618,62.0000000000,1/0/00,Special Auto,Four-Door Car,219.288706 +TV82603,Cali,F,Bachelor,1489539.80%,48081,188.0000000000,1/0/00,Personal Auto,Luxury SUV,881.360959 +BB82067,Oregon,M,Doctor,975604.50%,67632,121.0000000000,1/0/00,Personal Auto,Sports Car,26.951627 +JP94676,Oregon,F,Bachelor,942297.41%,34115,119.0000000000,1/0/00,Personal Auto,SUV,466.122541 +VU53417,Arizona,M,High School or Below,383735.76%,23051,99.0000000000,1/0/00,Personal Auto,Two-Door Car,475.2 +IW54795,Cali,M,College,1095213.19%,23748,99.0000000000,1/0/00,Personal Auto,Four-Door Car,607.095655 +RN78170,Arizona,F,College,815913.66%,40589,69.0000000000,1/0/00,Corporate Auto,Four-Door Car,331.2 +IX55883,Cali,F,College,1948049.98%,50809,83.0000000000,1/0/00,Personal Auto,Four-Door Car,290.381707 +XM72420,Arizona,F,High School or Below,391936.67%,66676,97.0000000000,1/0/00,Personal Auto,Four-Door Car,558.099357 +GC15104,Nevada,F,Bachelor,798514.21%,52339,70.0000000000,1/3/00,Corporate Auto,Four-Door Car,336 +RX13282,Oregon,M,Bachelor,1216874.49%,14973,115.0000000000,1/0/00,Personal Auto,SUV,828 +QA85890,Arizona,F,High School or Below,584932.15%,0,83.0000000000,1/0/00,Corporate Auto,Four-Door Car,540.514115 +IR62668,Arizona,F,Bachelor,508583.66%,31546,65.0000000000,1/0/00,Personal Auto,Four-Door Car,100.049832 +AL96740,Cali,F,College,290393.98%,67763,73.0000000000,1/1/00,Personal Auto,Four-Door Car,59.861963 +SS48498,Washington,F,College,627317.34%,20836,79.0000000000,1/0/00,Corporate Auto,Four-Door Car,193.57032 +PE39479,Washington,M,College,1832141.90%,88592,76.0000000000,1/0/00,Corporate Auto,Four-Door Car,199.79727 +JH62891,Oregon,F,College,517870.42%,66943,65.0000000000,1/1/00,Special Auto,Four-Door Car,53.084753 +FI20423,Arizona,F,High School or Below,1402435.84%,81872,115.0000000000,1/0/00,Special Auto,Four-Door Car,256.43803 +PM13394,Washington,F,College,530943.59%,22404,70.0000000000,1/1/00,Personal Auto,Four-Door Car,211.136067 +YV67971,Cali,F,High School or Below,494980.38%,21342,62.0000000000,1/0/00,Personal Auto,Four-Door Car,74.350893 +QD31377,Cali,M,Bachelor,859566.53%,34621,108.0000000000,1/1/00,Corporate Auto,SUV,621.464468 +YG10247,Oregon,M,College,2295189.20%,62396,64.0000000000,1/0/00,Personal Auto,Four-Door Car,307.2 +FE73696,Oregon,M,High School or Below,379213.03%,97212,93.0000000000,1/0/00,Personal Auto,Two-Door Car,360.05589 +SW19699,Arizona,F,Bachelor,275574.80%,49648,70.0000000000,1/0/00,Personal Auto,Four-Door Car,65.954813 +QJ40732,Arizona,M,College,488033.96%,97984,61.0000000000,1/1/00,Personal Auto,Four-Door Car,407.450118 +HM76207,Cali,F,College,905190.53%,26308,114.0000000000,1/0/00,Corporate Auto,SUV,547.2 +NT59303,Oregon,F,College,1011544.62%,63528,256.0000000000,1/0/00,Personal Auto,Luxury Car,1228.8 +PU41393,Nevada,M,College,826907.54%,20225,114.0000000000,1/1/00,Special Auto,SUV,547.2 +QO86948,Nevada,M,High School or Below,807165.30%,0,112.0000000000,1/0/00,Personal Auto,SUV,806.4 +QN10888,Oregon,F,High School or Below,772699.36%,87620,64.0000000000,1/0/00,Personal Auto,Four-Door Car,24.063693 +VY19543,Cali,F,Bachelor,831113.59%,0,72.0000000000,1/0/00,Corporate Auto,Four-Door Car,311.329282 +XC15133,Nevada,F,Master,257402.04%,34990,65.0000000000,1/0/00,Personal Auto,Four-Door Car,42.689135 +ST43550,Oregon,M,Bachelor,572732.71%,99934,71.0000000000,1/0/00,Special Auto,Four-Door Car,460.323855 +FX36546,Washington,M,Master,367914.21%,60804,92.0000000000,1/0/00,Personal Auto,Four-Door Car,213.225001 +JX68983,Oregon,M,Bachelor,274451.96%,94648,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +HX78576,Cali,F,High School or Below,563674.03%,24516,71.0000000000,1/0/00,Personal Auto,Four-Door Car,300.607591 +ZQ11381,Arizona,M,Bachelor,1687038.82%,61063,85.0000000000,1/0/00,Personal Auto,Four-Door Car,262.504882 +ON39271,Cali,M,Master,273800.20%,0,74.0000000000,1/0/00,Personal Auto,Two-Door Car,263.365432 +SB18278,Oregon,M,Bachelor,464470.05%,0,64.0000000000,1/0/00,Corporate Auto,Four-Door Car,307.2 +ZT30559,Cali,F,High School or Below,474668.65%,15169,63.0000000000,1/0/00,Personal Auto,Four-Door Car,302.4 +XI41106,Arizona,M,College,1687432.82%,55390,71.0000000000,1/0/00,Corporate Auto,Two-Door Car,256.268091 +ZS88847,Oregon,F,Bachelor,238760.61%,27592,62.0000000000,1/0/00,Personal Auto,Four-Door Car,297.6 +RU49126,Washington,F,College,446533.57%,61846,112.0000000000,1/0/00,Personal Auto,SUV,215.8182 +KR62797,Arizona,F,High School or Below,459162.59%,83297,113.0000000000,1/0/00,Personal Auto,SUV,542.4 +ZJ73220,Arizona,F,College,1309258.58%,0,188.0000000000,1/0/00,Special Auto,Luxury Car,1353.6 +FY62633,Oregon,M,Bachelor,911226.66%,0,90.0000000000,1/0/00,Personal Auto,Four-Door Car,432 +CU36986,Cali,F,High School or Below,416516.66%,55897,104.0000000000,1/0/00,Personal Auto,Four-Door Car,499.2 +WZ53904,Arizona,M,Bachelor,265998.06%,21297,71.0000000000,1/0/00,Personal Auto,Four-Door Car,45.507952 +AA71604,Arizona,F,Master,1198659.21%,87560,98.0000000000,1/1/00,Personal Auto,Two-Door Car,470.4 +TD10493,Oregon,F,High School or Below,289873.27%,0,96.0000000000,1/4/00,Personal Auto,Four-Door Car,691.2 +LY97989,Oregon,F,Bachelor,289424.39%,0,85.0000000000,1/0/00,Personal Auto,Four-Door Car,408 +VX39856,Arizona,F,Doctor,350045.44%,89398,86.0000000000,1/0/00,Personal Auto,Four-Door Car,82.409922 +TP51897,Cali,F,College,262180.86%,36843,68.0000000000,1/3/00,Corporate Auto,Four-Door Car,357.642982 +QQ89253,Oregon,F,College,1022180.50%,0,134.0000000000,1/0/00,Personal Auto,SUV,643.2 +EI91403,Cali,M,High School or Below,257827.10%,34946,65.0000000000,1/0/00,Personal Auto,Two-Door Car,420.35698 +QG15435,Arizona,F,College,624259.57%,75680,78.0000000000,1/0/00,Personal Auto,Four-Door Car,136.787725 +FZ55002,Nevada,F,Doctor,522028.10%,0,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +HX77930,Washington,F,College,313643.21%,49532,79.0000000000,1/1/00,Personal Auto,Four-Door Car,220.186677 +UN37063,Arizona,M,Bachelor,452536.58%,10269,65.0000000000,1/0/00,Personal Auto,Two-Door Car,170.798204 +VB87946,Cali,M,College,497035.73%,49714,63.0000000000,1/3/00,Personal Auto,Four-Door Car,266.165535 +AB60627,Cali,M,High School or Below,1546778.90%,77517,129.0000000000,1/0/00,Corporate Auto,SUV,98.921782 +TA34903,Oregon,M,High School or Below,583889.92%,81082,73.0000000000,1/0/00,Personal Auto,Four-Door Car,281.295903 +AQ51368,Oregon,F,Bachelor,1065688.20%,72540,88.0000000000,1/0/00,Corporate Auto,Two-Door Car,631.743039 +NZ26102,Oregon,F,High School or Below,228961.87%,0,65.0000000000,1/0/00,Personal Auto,Four-Door Car,468 +GB45753,Cali,M,High School or Below,543980.42%,61546,68.0000000000,1/0/00,Corporate Auto,Two-Door Car,29.209521 +BV79904,Cali,F,Master,795615.01%,44818,67.0000000000,1/1/00,Personal Auto,Two-Door Car,136.883999 +OB49075,Arizona,M,Bachelor,445811.34%,17622,65.0000000000,1/1/00,Personal Auto,Four-Door Car,312 +DS97676,Oregon,F,College,255505.15%,0,72.0000000000,1/0/00,Personal Auto,Four-Door Car,518.4 +JO63462,Cali,M,Bachelor,330799.90%,79797,84.0000000000,1/0/00,Corporate Auto,Two-Door Car,31.755601 +NJ10602,Washington,F,College,845905.32%,92717,70.0000000000,1/0/00,Personal Auto,Two-Door Car,224.27582 +RS24501,Oregon,F,College,1335012.09%,28919,173.0000000000,1/0/00,Personal Auto,SUV,830.4 +VT78274,Arizona,M,College,493122.13%,0,68.0000000000,1/0/00,Personal Auto,Four-Door Car,480.159011 +SU56153,Nevada,M,Bachelor,777683.52%,63568,65.0000000000,1/0/00,Corporate Auto,Two-Door Car,390.792553 +MN20737,Nevada,F,College,255367.22%,73935,64.0000000000,1/1/00,Corporate Auto,Four-Door Car,72.071195 +KL43114,Arizona,F,High School or Below,487646.97%,0,66.0000000000,1/0/00,Corporate Auto,Two-Door Car,316.8 +YQ15567,Oregon,F,Bachelor,903430.58%,18846,115.0000000000,1/0/00,Personal Auto,SUV,552 +TR88637,Arizona,F,High School or Below,810591.08%,38893,103.0000000000,1/0/00,Personal Auto,SUV,41.965252 +TC88986,Oregon,M,High School or Below,561968.91%,0,153.0000000000,1/0/00,Special Auto,SUV,1027.000029 +XX88577,Cali,M,Bachelor,1572713.06%,84824,196.0000000000,1/0/00,Corporate Auto,SUV,319.820747 +NE49052,Cali,F,High School or Below,661801.64%,20068,86.0000000000,1/0/00,Corporate Auto,Four-Door Car,411.011162 +KX17826,Oregon,M,Doctor,467004.80%,0,125.0000000000,1/0/00,Corporate Auto,SUV,600 +CC91503,Arizona,F,High School or Below,1016936.98%,0,135.0000000000,1/0/00,Personal Auto,Sports Car,648 +WH32183,Cali,M,Bachelor,832307.40%,97245,70.0000000000,1/0/00,Personal Auto,Four-Door Car,4.110585 +ES90681,Cali,F,College,241776.00%,51808,61.0000000000,1/1/00,Personal Auto,Four-Door Car,351.149904 +DW96592,Cali,M,Bachelor,804487.24%,71391,67.0000000000,1/0/00,Personal Auto,Four-Door Car,284.000172 +MT23134,Oregon,M,High School or Below,532572.45%,0,73.0000000000,1/0/00,Personal Auto,Two-Door Car,496.474767 +BM69081,Arizona,M,Bachelor,694752.40%,0,100.0000000000,1/0/00,Personal Auto,SUV,925.137143 +MB90871,Oregon,F,College,584741.52%,23496,77.0000000000,1/0/00,Special Auto,Four-Door Car,13.164097 +GT62080,Washington,M,High School or Below,,55561,63.0000000000,1/0/00,Personal Auto,Four-Door Car,227.872071 +QL77686,Nevada,F,College,472478.61%,23986,119.0000000000,1/0/00,Corporate Auto,SUV,463.335061 +ON77827,Arizona,F,Master,279022.80%,22974,71.0000000000,1/0/00,Personal Auto,Four-Door Car,180.667969 +KP18988,Oregon,F,High School or Below,2153133.28%,0,101.0000000000,1/0/00,Personal Auto,Four-Door Car,484.8 +TI92884,Arizona,M,Bachelor,1262283.27%,61844,106.0000000000,1/0/00,Personal Auto,Sports Car,508.8 +JH73503,Arizona,M,Doctor,2017196.15%,24804,73.0000000000,1/0/00,Personal Auto,Two-Door Car,350.4 +YE97964,Cali,F,Bachelor,1646436.59%,27760,104.0000000000,1/0/00,Personal Auto,SUV,302.764283 +VA30351,Oregon,F,High School or Below,559538.99%,74454,71.0000000000,1/0/00,Personal Auto,Four-Door Car,340.8 +PV55726,Oregon,F,Master,417068.73%,29462,107.0000000000,1/1/00,Personal Auto,SUV,513.6 +UC88305,Arizona,F,College,266544.71%,52266,68.0000000000,1/0/00,Corporate Auto,Two-Door Car,141.922839 +TS53809,Oregon,M,Bachelor,709891.41%,0,70.0000000000,1/0/00,Personal Auto,Two-Door Car,349.783046 +ZV32120,Cali,M,Doctor,397134.51%,23599,103.0000000000,1/0/00,Corporate Auto,SUV,494.4 +FB80807,Oregon,M,Bachelor,552821.28%,36088,72.0000000000,1/0/00,Personal Auto,Four-Door Car,345.6 +AS55677,Cali,F,High School or Below,833899.58%,70534,104.0000000000,1/0/00,Personal Auto,Four-Door Car,54.065538 +WA15684,Oregon,M,College,3844585.59%,27398,125.0000000000,1/1/00,Personal Auto,SUV,600 +SA50567,Nevada,M,Bachelor,544855.52%,85296,68.0000000000,1/0/00,Personal Auto,Four-Door Car,342.515136 +KJ31611,Arizona,M,High School or Below,1080806.60%,31063,92.0000000000,1/0/00,Personal Auto,Four-Door Car,441.6 +VL37375,Cali,M,Bachelor,618509.65%,0,92.0000000000,1/0/00,Personal Auto,Two-Door Car,1027.177255 +KN21017,Nevada,M,High School or Below,320822.59%,52367,81.0000000000,1/0/00,Personal Auto,Four-Door Car,275.989978 +PX44289,Arizona,M,College,548010.41%,58651,71.0000000000,1/0/00,Personal Auto,Four-Door Car,472.599683 +AM97901,Nevada,F,College,2298615.39%,84831,192.0000000000,1/0/00,Special Auto,Sports Car,1336.931716 +RE42925,Oregon,M,Bachelor,1310792.59%,49088,114.0000000000,1/1/00,Corporate Auto,SUV,547.2 +TR81766,Cali,F,College,746292.63%,70263,93.0000000000,1/0/00,Corporate Auto,Two-Door Car,7.345946 +CH85057,Oregon,F,Doctor,1146399.10%,45354,285.0000000000,1/0/00,Personal Auto,Luxury SUV,540.141566 +UP71482,Arizona,M,High School or Below,723613.25%,0,63.0000000000,1/0/00,Personal Auto,Four-Door Car,383.363758 +EG40670,Cali,F,Bachelor,623268.79%,28334,83.0000000000,1/0/00,Special Auto,Four-Door Car,537.765151 +HV83672,Oregon,F,Bachelor,2839332.99%,38772,90.0000000000,1/0/00,Personal Auto,Four-Door Car,321.873474 +MG10140,Oregon,F,College,374675.16%,41479,94.0000000000,1/1/00,Personal Auto,Two-Door Car,19.575683 +TC44716,Cali,M,Bachelor,2156933.73%,23909,119.0000000000,1/0/00,Personal Auto,SUV,571.2 +QO65264,Cali,M,College,501208.37%,48328,63.0000000000,1/0/00,Personal Auto,Two-Door Car,108.138715 +EB66698,Cali,M,High School or Below,337185.84%,86689,85.0000000000,1/0/00,Corporate Auto,Two-Door Car,408 +OT52034,Cali,M,Bachelor,386477.68%,24204,99.0000000000,1/1/00,Personal Auto,Four-Door Car,707.303416 +CH85444,Oregon,M,College,414571.19%,25943,110.0000000000,1/0/00,Corporate Auto,Two-Door Car,1067.333126 +PU85769,Cali,M,High School or Below,515607.27%,0,73.0000000000,1/0/00,Personal Auto,Four-Door Car,807.947292 +UI73201,Cali,M,College,366737.50%,62375,92.0000000000,1/0/00,Personal Auto,Two-Door Car,618.630955 +SL50592,Cali,F,High School or Below,783568.35%,0,71.0000000000,1/0/00,Corporate Auto,Four-Door Car,404.272806 +XP11075,Arizona,M,Bachelor,1456726.84%,0,148.0000000000,1/0/00,Personal Auto,SUV,710.4 +SI31236,Oregon,M,Bachelor,1017133.90%,70200,65.0000000000,1/0/00,Corporate Auto,Four-Door Car,312 +JN26745,Nevada,F,Bachelor,413577.52%,0,112.0000000000,1/0/00,Special Auto,Four-Door Car,707.977614 +VK48036,Oregon,F,College,551149.11%,79027,70.0000000000,1/0/00,Corporate Auto,Four-Door Car,336 +JX76668,Washington,F,High School or Below,1131424.39%,62935,141.0000000000,1/0/00,Personal Auto,Sports Car,232.242326 +DS45802,Cali,F,High School or Below,541461.73%,26893,68.0000000000,1/0/00,Personal Auto,Four-Door Car,68.226001 +OA96690,Oregon,F,High School or Below,742159.35%,47406,94.0000000000,1/1/00,Personal Auto,Four-Door Car,287.149807 +EM27919,Cali,M,Bachelor,445811.34%,17622,65.0000000000,1/1/00,Personal Auto,Four-Door Car,312 +QO41043,Oregon,F,College,1447612.49%,27572,124.0000000000,1/0/00,Corporate Auto,SUV,595.2 +OV50124,Oregon,F,College,493688.84%,0,72.0000000000,1/2/00,Personal Auto,Two-Door Car,391.636628 +PR31642,Oregon,F,Bachelor,452527.65%,32802,114.0000000000,1/0/00,Personal Auto,SUV,547.2 +BU41599,Washington,F,Master,558176.13%,62739,70.0000000000,1/0/00,Personal Auto,Two-Door Car,239.328571 +TK30357,Cali,F,Bachelor,1413434.74%,90844,118.0000000000,1/0/00,Personal Auto,SUV,232.674417 +NF31087,Nevada,F,High School or Below,2472318.31%,44685,69.0000000000,1/0/00,Personal Auto,Four-Door Car,331.2 +NH16984,Cali,F,Bachelor,283806.78%,0,80.0000000000,1/0/00,Personal Auto,Four-Door Car,336.50961 +OS75493,Cali,F,High School or Below,384848.36%,42589,98.0000000000,1/0/00,Corporate Auto,Four-Door Car,470.4 +VT63298,Oregon,M,Bachelor,1950447.39%,0,72.0000000000,1/0/00,Personal Auto,Four-Door Car,345.6 +QS75550,Washington,F,Bachelors,248004.59%,93383,62.0000000000,1/0/00,Corporate Auto,Two-Door Car,244.212286 +SZ16483,Arizona,F,High School or Below,436137.29%,79583,109.0000000000,1/2/00,Personal Auto,Four-Door Car,523.2 +VM92311,Arizona,F,High School or Below,252907.75%,89129,64.0000000000,1/0/00,Personal Auto,Four-Door Car,328.870868 +NJ46849,Arizona,M,College,250444.48%,0,69.0000000000,1/0/00,Personal Auto,Four-Door Car,496.8 +WZ31900,Oregon,F,Bachelor,864970.06%,94389,107.0000000000,1/0/00,Corporate Auto,SUV,85.063708 +RG30482,Oregon,F,College,1366835.53%,0,197.0000000000,1/0/00,Personal Auto,SUV,1418.4 +ZM86949,Oregon,F,High School or Below,2063508.46%,84106,64.0000000000,1/0/00,Personal Auto,Two-Door Car,334.408717 +QQ39596,Arizona,F,College,251753.36%,0,69.0000000000,1/0/00,Personal Auto,Four-Door Car,42.096415 +FH51383,Cali,F,High School or Below,532667.77%,76717,66.0000000000,1/0/00,Personal Auto,Two-Door Car,300.528579 +BJ53923,Arizona,M,High School or Below,260027.21%,51978,66.0000000000,1/0/00,Corporate Auto,Four-Door Car,144.782152 +CZ96653,Oregon,F,Bachelor,853479.28%,47325,107.0000000000,1/0/00,Personal Auto,SUV,64.598216 +FB23788,Oregon,M,High School or Below,882883.50%,86721,111.0000000000,1/0/00,Corporate Auto,SUV,532.8 +NT43594,Nevada,F,Bachelor,224844.96%,24910,63.0000000000,1/1/00,Personal Auto,Four-Door Car,347.857619 +RJ85627,Washington,F,Bachelor,1230276.24%,43817,62.0000000000,1/1/00,Personal Auto,Four-Door Car,245.447622 +KJ86296,Oregon,M,High School or Below,455659.30%,0,73.0000000000,1/2/00,Personal Auto,Four-Door Car,525.6 +PI47776,Oregon,F,Bachelor,253070.51%,89451,63.0000000000,1/0/00,Corporate Auto,Four-Door Car,61.769564 +MD73554,Cali,M,College,525198.40%,59537,66.0000000000,1/0/00,Personal Auto,Two-Door Car,316.8 +UX92071,Oregon,M,High School or Below,674311.93%,0,199.0000000000,1/0/00,Personal Auto,Luxury SUV,955.2 +YG44474,Oregon,M,College,1401472.13%,54193,117.0000000000,1/0/00,Corporate Auto,SUV,720.752945 +UH45301,Oregon,M,College,943891.56%,86946,118.0000000000,1/0/00,Personal Auto,Four-Door Car,340.656963 +RY92647,Cali,F,Bachelor,1050677.17%,0,92.0000000000,1/0/00,Personal Auto,Four-Door Car,546.524896 +IK12620,Arizona,F,High School or Below,421391.86%,12160,109.0000000000,1/0/00,Personal Auto,Four-Door Car,489.411833 +GQ66762,Cali,M,College,477368.64%,33701,63.0000000000,1/0/00,Personal Auto,Four-Door Car,171.325856 +YT69858,Washington,F,Bachelor,544142.01%,85702,67.0000000000,1/0/00,Personal Auto,Two-Door Car,249.085887 +XD85577,Cali,M,Bachelor,284226.69%,69417,73.0000000000,1/1/00,Personal Auto,Four-Door Car,30.874869 +TM65736,Oregon,M,Master,305955.03%,38644,78.0000000000,1/1/00,Personal Auto,Four-Door Car,361.455219 +VJ51327,Cali,F,High School or Below,2031499.76%,63209,102.0000000000,1/2/00,Personal Auto,SUV,207.320041 +GS98873,Arizona,F,Bachelor,323912.47%,16061,88.0000000000,1/0/00,Personal Auto,Four-Door Car,633.6 +CW49887,California,F,Master,462680.11%,79487,114.0000000000,1/0/00,Special Auto,SUV,547.2 +MY31220,California,F,College,899704.02%,54230,112.0000000000,1/0/00,Personal Auto,Two-Door Car,537.6 +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, +,,,,,,,,,, \ No newline at end of file diff --git a/week_2/day_1/lab-dw-pandas b/week_2/day_1/lab-dw-pandas new file mode 160000 index 0000000..c3337f4 --- /dev/null +++ b/week_2/day_1/lab-dw-pandas @@ -0,0 +1 @@ +Subproject commit c3337f43f588cde8ef0d75700370b24807b2bbbb