from (package) import (stuff)
, where the \"stuff\" we're importing can range from a specific function in that package to a whole library of functions, as is the case when we type import (package) as (name)
."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from datascience import *\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Before we begin...\n",
"Please help us better establish the audience that we are reaching by filling out the following form:**def** function_name(arguments):\n",
" [function procedures]\n",
" **return** [output]
\n",
" \n",
"There are some aspects of a function that are required no matter what kind of function you are writing. You will always begin writing a function by writing **def**, followed by the name of your function. Following the name of your function, you will want to specify your inputs by using parentheses and giving your inputs names. These names can be anything you'd like, but generally you'd like them to be memorable and symbolic of what you're trying to do.\n",
"\n",
"Before typing in your functions procedure in the **body** of your function, you'll want to end the first line with a `:`. Then you're ready to proceed to the body and second line of your function! You will want to indent (press tab or space 4 times) and write what you'd like your function to do.\n",
"\n",
"Lastly, you'll want to end the function by writing what you'd like your function to **return**.\n",
"\n",
"**Example**: Let's look at what a factorial function would look like!"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"120"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def factorial_func(x):\n",
" product = 1\n",
" while x > 0:\n",
" product = product * x\n",
" x = x - 1\n",
" return product\n",
"\n",
"# Now let's test out our new factorial function!\n",
"factorial_func(5)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Try calculating the factorial value for the crazy big number from before!\n",
"factorial_func(12345)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Amazing! However, you might have noticed there were some new features used, which brings us to our next small topic.\n",
"\n",
"**Loops**\n",
"\n",
"Something that came in handy for this equation was a loop. A loop is a piece of code that repeats a block of code **while** a condition is true or **for** a certain number of times. Like we just not-so-subtly hinted, there are two very important kinds of loops: for loops and while loops. In the case of our function above, the code under the while loop was repeated **while** `x > 0`. On the other hand, a for loop will continue looping **for** a specified number of times."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Section 4: Data Structures\n",
"\n",
"So now that we know how to calculate things and create functions to do so, how can we organize large amounts of information?\n",
"\n",
"The solution to our problem is a data structure! A data structures is simply a means by which to contain and organize our data or information. They include:\n",
"* **List**: A list holds an ordered collection of items similar to a grocery list.\n",
"* **Dictionary**: Like an addressbook in which keys are associated with values (similar to names and phone numbers in addressbooks).\n",
"* **Set**: An unordered collection of items, and they operate similar to how Venn Diagrams do.\n",
"\n",
"Here is how we can use lists:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Helen', 'Nadeem', 'Alma', 'Nika']"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Creating a list using brackets and commas in between:\n",
"names = ['Helen', 'Nadeem', 'Alma', 'Nika']\n",
"names"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Helen'"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# The first name in our list, located at position 0:\n",
"names[0]"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Helen', 'Nadeem', 'Alma', 'Nika', 'Sam']"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Adding a name, feel free to change the name to yours!\n",
"names.append('Sam')\n",
"names"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Exercise**: Now you try creating a list with the names of some of your friends or pets!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Create your list below:\n",
"..."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In addition to the data structures listed above, we can also organize our information in a table. Similar to Google Sheets or Microsoft Excel, we will be organzing our data into nice-looking tables. Let's get crackin'!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Section 5: Tables\n",
"\n",
"# INSERT TABLES INTRO HERE\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#####################SEPARATOR######################"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ESG_table = Table.read_table('ESGPorfolios_forcsv.csv')\n",
"ESG_sorted = ESG_table.sort(\"Total_Var_Cost_USDperMWH\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"Group | Group_num | UNIT NAME | Capacity_MW | Heat_Rate_MMBTUperMWh | Fuel_Price_USDperMMBTU | Fuel_Cost_USDperMWH | Var_OandM_USDperMWH | Total_Var_Cost_USDperMWH | Carbon_tonsperMWH | FixedCst_OandM_perDay | Unnamed: 11 | Unnamed: 12 | Unnamed: 13 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Old Timers | 7 | BIG CREEK | 1000 | nan | 0 | 0 | 0 | 0 | 0 | $15,000 | nan | nan | nan | \n", "
Fossil Light | 8 | HELMS | 800 | nan | 0 | 0 | 0.5 | 0.5 | 0 | $15,000 | nan | nan | nan | \n", "
Fossil Light | 8 | DIABLO CANYON 1 | 1000 | 1 | 7.5 | 7.5 | 4 | 11.5 | 0 | $20,000 | nan | nan | nan | \n", "
Bay Views | 4 | MOSS LANDING 6 | 750 | 6.9 | 4.5 | 31.06 | 1.5 | 32.56 | 0.37 | $8,000 | nan | nan | nan | \n", "
Bay Views | 4 | MOSS LANDING 7 | 750 | 6.9 | 4.5 | 31.06 | 1.5 | 32.56 | 0.37 | $8,000 | nan | nan | nan | \n", "
Old Timers | 7 | MOHAVE 1 | 750 | 10 | 3 | 30 | 4.5 | 34.5 | 0.94 | $15,000 | nan | nan | nan | \n", "
Old Timers | 7 | MOHAVE 2 | 750 | 10 | 3 | 30 | 4.5 | 34.5 | 0.94 | $15,000 | nan | nan | nan | \n", "
Big Coal | 1 | FOUR CORNERS | 1900 | 11.67 | 3 | 35 | 1.5 | 36.5 | 1.1 | $8,000 | nan | nan | nan | \n", "
Bay Views | 4 | MORRO BAY 3&4 | 665 | 8.02 | 4.5 | 36.11 | 0.5 | 36.61 | 0.43 | $4,000 | nan | nan | nan | \n", "
East Bay | 6 | PITTSBURGH 5&6 | 650 | 8.02 | 4.5 | 36.11 | 0.5 | 36.61 | 0.43 | $2,500 | nan | nan | nan | \n", "
... (32 rows omitted)
" ], "text/plain": [ "Group | Group_num | UNIT NAME | Capacity_MW | Heat_Rate_MMBTUperMWh | Fuel_Price_USDperMMBTU | Fuel_Cost_USDperMWH | Var_OandM_USDperMWH | Total_Var_Cost_USDperMWH | Carbon_tonsperMWH | FixedCst_OandM_perDay | Unnamed: 11 | Unnamed: 12 | Unnamed: 13\n", "Old Timers | 7 | BIG CREEK | 1000 | nan | 0 | 0 | 0 | 0 | 0 | $15,000 | nan | nan | nan\n", "Fossil Light | 8 | HELMS | 800 | nan | 0 | 0 | 0.5 | 0.5 | 0 | $15,000 | nan | nan | nan\n", "Fossil Light | 8 | DIABLO CANYON 1 | 1000 | 1 | 7.5 | 7.5 | 4 | 11.5 | 0 | $20,000 | nan | nan | nan\n", "Bay Views | 4 | MOSS LANDING 6 | 750 | 6.9 | 4.5 | 31.06 | 1.5 | 32.56 | 0.37 | $8,000 | nan | nan | nan\n", "Bay Views | 4 | MOSS LANDING 7 | 750 | 6.9 | 4.5 | 31.06 | 1.5 | 32.56 | 0.37 | $8,000 | nan | nan | nan\n", "Old Timers | 7 | MOHAVE 1 | 750 | 10 | 3 | 30 | 4.5 | 34.5 | 0.94 | $15,000 | nan | nan | nan\n", "Old Timers | 7 | MOHAVE 2 | 750 | 10 | 3 | 30 | 4.5 | 34.5 | 0.94 | $15,000 | nan | nan | nan\n", "Big Coal | 1 | FOUR CORNERS | 1900 | 11.67 | 3 | 35 | 1.5 | 36.5 | 1.1 | $8,000 | nan | nan | nan\n", "Bay Views | 4 | MORRO BAY 3&4 | 665 | 8.02 | 4.5 | 36.11 | 0.5 | 36.61 | 0.43 | $4,000 | nan | nan | nan\n", "East Bay | 6 | PITTSBURGH 5&6 | 650 | 8.02 | 4.5 | 36.11 | 0.5 | 36.61 | 0.43 | $2,500 | nan | nan | nan\n", "... (32 rows omitted)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ESG_sorted" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 36.5 , 40.5 , 41.94, 41.94, 66.5 , 73.72])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Big_Coal= ESG_sorted.where(\"Group\",\"Big Coal\")\n", "Big_Coal\n", "width_coal = Big_Coal.column(\"Capacity_MW\")\n", "width_coal\n", "height_coal = Big_Coal.column(\"Total_Var_Cost_USDperMWH\")\n", "height_coal" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "\"\"\"\n", "Given widths sorted in ascending order, returns the y_positions used to graph the capacity vs variable costs bar graph\n", "\"\"\"\n", "\n", "def find_y_pos(widths):\n", " cumulative_widths = [0]\n", " cumulative_widths.extend(np.cumsum(widths))\n", " half_widths = [i/2 for i in widths]\n", " y_pos = []\n", " for i in range(0, len(half_widths)):\n", " y_pos.append(half_widths[i] + cumulative_widths[i])\n", " return y_pos\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[950.0, 2050.0, 2375.0, 3025.0, 3575.0, 3775.0]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_y_coal = find_y_pos(width_coal)\n", "new_y_coal" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "