Simple Time Series
The role of visualization in time series analysis has already been demonstrated to you in the previous section. An expert's glance at the chart may be enough to understand whether the data is stationary or not, what main patterns are present in it, etc.
Despite this, it is important to remember that an expert's assessment is not accurate, and we still recommend using formal methods (tests) to analyze your data.
You already know how to implement 2D visualization:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(11, 9))
ax.plot(dataset["Date"], dataset["NO2"])
ax.set_xlabel("Date")
ax.set_ylabel("NO2")
plt.show()
But let's take as an example a situation where we need to take into account 2 or 3 variables that change over time. For example, you have an online store and a pricing task for which you use competitor pricing data. You take on your 2 main competitors. See how you can put several time series on one graph at once:
plt.figure(figsize=(11, 9))
dataset.plot(label="dataset", color=["orange", "blue"])
plt.ylabel("Price")
plt.xlabel("Date")
plt.legend()
What the data looks like in the dataset:
dataset.head()
Also, you can implement it in the following way through a loop:
date = pd.to_datetime(dataset.index)
for i in dataset.columns:
plt.plot(date, dataset[i])
plt.show()
If you have a large amount of data (for example, you want to explore more than 20 competitors), you may have problems with the analysis of the resulting graph:
Then, you can use the seaborn library, which allows you to compare multiple graphs with each other:
12345678910111213141516171819202122import seaborn as sns sns.set_theme(style="dark") flights = sns.load_dataset("flights") g = sns.relplot( data=flights, x="month", y="passengers", col="year", hue="year", kind="line", palette="crest", linewidth=4, zorder=5, col_wrap=3, height=2, aspect=1.5, legend=False, ) for year, ax in g.axes_dict.items(): ax.text(.8, .85, year, transform=ax.transAxes, fontweight="bold") sns.lineplot( data=flights, x="month", y="passengers", units="year", estimator=None, color=".7", linewidth=1, ax=ax, ) ax.set_xticks(ax.get_xticks()[::2]) g.set_axis_labels("", "Passengers") g.tight_layout()
Swipe to start coding
Plot the flights.csv dataset, which contains flight data from 1949 to 1960, every month.
- Save months names within the
all_monthsvariable. Months names aredfcolumn names. - Iterate over each available year in the data. Years are indexes of the
dfdataframe. - Within the loop, filter to iterated year data (using the
.iloc[]property and thenvariable), and save them within theyear_rowvariable. - Within the loop, initialize a line plot with months labels (
all_months) on the x-axis, respective data (year_row) on the y-axis, and setlabelparameter to iteratedyear. - Display the legend of the plot.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 3.85
Simple Time Series
Pyyhkäise näyttääksesi valikon
The role of visualization in time series analysis has already been demonstrated to you in the previous section. An expert's glance at the chart may be enough to understand whether the data is stationary or not, what main patterns are present in it, etc.
Despite this, it is important to remember that an expert's assessment is not accurate, and we still recommend using formal methods (tests) to analyze your data.
You already know how to implement 2D visualization:
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(11, 9))
ax.plot(dataset["Date"], dataset["NO2"])
ax.set_xlabel("Date")
ax.set_ylabel("NO2")
plt.show()
But let's take as an example a situation where we need to take into account 2 or 3 variables that change over time. For example, you have an online store and a pricing task for which you use competitor pricing data. You take on your 2 main competitors. See how you can put several time series on one graph at once:
plt.figure(figsize=(11, 9))
dataset.plot(label="dataset", color=["orange", "blue"])
plt.ylabel("Price")
plt.xlabel("Date")
plt.legend()
What the data looks like in the dataset:
dataset.head()
Also, you can implement it in the following way through a loop:
date = pd.to_datetime(dataset.index)
for i in dataset.columns:
plt.plot(date, dataset[i])
plt.show()
If you have a large amount of data (for example, you want to explore more than 20 competitors), you may have problems with the analysis of the resulting graph:
Then, you can use the seaborn library, which allows you to compare multiple graphs with each other:
12345678910111213141516171819202122import seaborn as sns sns.set_theme(style="dark") flights = sns.load_dataset("flights") g = sns.relplot( data=flights, x="month", y="passengers", col="year", hue="year", kind="line", palette="crest", linewidth=4, zorder=5, col_wrap=3, height=2, aspect=1.5, legend=False, ) for year, ax in g.axes_dict.items(): ax.text(.8, .85, year, transform=ax.transAxes, fontweight="bold") sns.lineplot( data=flights, x="month", y="passengers", units="year", estimator=None, color=".7", linewidth=1, ax=ax, ) ax.set_xticks(ax.get_xticks()[::2]) g.set_axis_labels("", "Passengers") g.tight_layout()
Swipe to start coding
Plot the flights.csv dataset, which contains flight data from 1949 to 1960, every month.
- Save months names within the
all_monthsvariable. Months names aredfcolumn names. - Iterate over each available year in the data. Years are indexes of the
dfdataframe. - Within the loop, filter to iterated year data (using the
.iloc[]property and thenvariable), and save them within theyear_rowvariable. - Within the loop, initialize a line plot with months labels (
all_months) on the x-axis, respective data (year_row) on the y-axis, and setlabelparameter to iteratedyear. - Display the legend of the plot.
Ratkaisu
Kiitos palautteestasi!
single