<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Graphing Equations
Lets revisit high school and think about those tiny screens a lot of us had to use.
We may recreate those kinds of plots, of mathematical functions, quite straightforwardly.
Step1:  Lets define a domain from -5 to 5, of 100 points, and plot some XY curves that show some functions.
Step2:  Now that we've plotted some data, lets organize the data into a data table, or "data frame" to be more precise.  Pandas is all about the DataFrame object.
Our domain is a 1-D ndarray lets remember.  As such, we may turn it into a Series, which is the one dimensional equivalent in pandas.  DataFrames are 2-dimensional and above.
Step3:  Without the columns argument, there's no guarantee that datadict will gives us the left-to-right column order we desire.
Step4:  Here we're starting to introduce how data may be selected by numeric indexes, yes, but also by labels.
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
Explanation: Graphing Equations
Lets revisit high school and think about those tiny screens a lot of us had to use.
We may recreate those kinds of plots, of mathematical functions, quite straightforwardly.
End of explanation
domain = np.linspace(-5.0,5.0,100)
y = np.power(domain, 2)
%matplotlib inline  
# "magic" command telling Jupyter NB to embed plots
# always label and title your plot, at minimum
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Parabolic Curve")
p = plt.plot(domain, y)
x3 = np.power(domain, 3)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("X to the 3rd Power")
p = plt.plot(domain, x3)
def poly(x):
    return (x - 3) * (x + 5) * (x - 1) * x
Poly = np.vectorize(poly)
y = Poly(domain)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("4th Degree Polynomial")
plt.grid()
p = plt.plot(domain, y)
y0 = np.sin(domain)
y1 = np.cos(domain)
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Sine & Cosine")
plt.grid()
plt.plot(domain, y0, color = "orange", label="Sine")
plt.plot(domain, y1, color = "green", label="Cosine")
p = plt.legend()
Explanation: Lets define a domain from -5 to 5, of 100 points, and plot some XY curves that show some functions.
End of explanation
domain.shape
col0 = pd.Series(domain)
col1 = pd.Series(np.power(domain,2))
col2 = pd.Series(x3)
col3 = Poly(domain)
datadict = {"Input":col0, "Parabola":col1, "3rd Power":col2, "Polynomial":col3}
df = pd.DataFrame(datadict, columns = ["Input", "Parabola", "3rd Power", "Polynomial"])
Explanation: Now that we've plotted some data, lets organize the data into a data table, or "data frame" to be more precise.  Pandas is all about the DataFrame object.
Our domain is a 1-D ndarray lets remember.  As such, we may turn it into a Series, which is the one dimensional equivalent in pandas.  DataFrames are 2-dimensional and above.
End of explanation
df.head()
Explanation: Without the columns argument, there's no guarantee that datadict will gives us the left-to-right column order we desire.
End of explanation
df.loc[:,"3rd Power"].head()
df.loc[:10,["Input", "3rd Power"]]  # rows 0-10 inclusive, two columns
Explanation: Here we're starting to introduce how data may be selected by numeric indexes, yes, but also by labels.
End of explanation
<END_TASK>