7 Visualizations with Python to Express Changes in Rank over Time | by Boriharn K | Nov, 2022


Using Python to visualize the changes in rank over time

Photo by Austris Augusts on Unsplash

Ranking data is ordering data position in a numerically ordered series. This is an easy way to communicate the information since it helps the reader effortlessly understand the sequence. The ranking is a good idea for coping with multiple observations or categorical data.

However, things change all the time. As time pass, the position in ranking can be constantly altered. Visualizing positions of the ranks during a period helps notify the change and progress.

This article will guide you with some ideas to visualize the changes in rank over time.

Examples of data visualization with Python in this article for presenting the changes in rank over time. Images by the author

Let’s get started

Get data

To show that the method mentioned here can be applied to real-world datasets, I will use the ‘Air Pollution in Seoul’ dataset from Kaggle (link). The data was provided by the Seoul Metropolitan Government (link). The data is used under the terms of the Creative Commons License CC-BY.

The dataset consists of the air pollution data: SO2, NO2, CO, O3, PM10, and PM2.5 recorded between 2017 and 2019 from 25 districts in Seoul, South Korea.

In this article, we will work with Carbon monoxide (CO), a common air pollutant that is harmful to humans. The measurement unit is part-per-million (ppm).

Import Data

After downloading the dataset, start with import libraries.

import numpy as np
import pandas as pd
import math
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline

Use Pandas to read ‘Measurement_summary.csv’

df = pd.read_csv('<file location>/Measurement_summary.csv')
df.head()

Explore data

Exploring the dataset as the first step is always a good idea. Fortunately, the result below shows that we do not have to deal with missing values.

df.info()

Let’s look at the total number of the variable ‘Station code.’

df['Station code'].nunique()

## output
## 25

There are 25 districts in total.

set(df['Station code'])

## output
## {101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
## 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125}

Select and prepare data

For example, I will select Station codes 111-118. If you want to plot other station numbers, feel free to modify the code below.

list_stations = [111, 112, 113, 114, 115, 116, 117, 118]
df_select = df[df['Station code'].isin(list_stations)]
df_select.head()

The retrieved dataset is not ready to be plotted. Some columns are needed to be created or modified before use.

## crete year_month, year and month columns
year_month = [i[0:7] for i in list(df_select['Measurement date'])]
df_select['year_month'] = year_month
df_select['year'] = [i[0:4] for i in year_month]
df_select['month'] = [i[-2:] for i in year_month]

## create district name column
district = [i.split(', ')[2] for i in df_select['Address']]
df_select['District'] = district

## change Station code column type
df_select = df_select.astype({'Station code': str})

## groupby with location and point of time
df_month = df_select.groupby(['Station code','District',
'year_month','year','month']).mean()
df_month.reset_index(inplace=True)
df_month.head()

Here comes an important step. The main idea of this article is to create visualizations for ranking data. Next, we will create a column for ranking the districts’ CO number (ppm) during each time point.

keep = []
for i in list(set(df_month['year_month'])):
df = df_month[df_month['year_month']==i]
order = df['CO'].rank(ascending=0)
df['rank'] = [int(i) for i in order]
keep.append(df)

df_month = pd.concat(keep)
df_month.sort_values(['year_month', 'Station code'], ascending=True,
inplace=True, ignore_index=True)
df_month.head()

Before continuing, we will define a dictionary of colors to facilitate the plotting process.

#extract color palette, the palette can be changed
list_dist = list(set(df_select['District']))
pal = list(sns.color_palette(palette='Spectral',
n_colors=len(list_dist)).as_hex())
dict_color = dict(zip(list_dist, pal))

Data visualization

This article intends to guide with some visualization ideas for ranking data over time. Thus, the obtained result should be easy to understand while allowing the reader to compare the data ranks between different points in time.

Something is needed to be clarified before continuing. Each graph has its pros and cons. Of course, nothing is perfect. Some ideas presented here may be just for an eye-catching effect. But they all have the same purpose of showing the changes in data ranks over time.

The charts in this article can be categorized into two groups: animations and charts.

Animation

Besides being a good idea to catch attention, animation can easily show the changes in rank over time.

1. Comparing bar height with an Animated bar chart

Plotly is a useful graphing library for making interactive and animated graphs. The concept of applying an animated bar chart is to fix each district’s position. Each bar will be annotated with the ranking number. By doing this, the amount of CO can be compared over time.

import plotly.express as px
fig = px.bar(df_month, x='District', y='CO',
color='District', text='rank',
color_discrete_map= dict_color,
animation_frame='year_month',
animation_group='Station code',
range_y=[0,1.2],
labels={ 'CO': 'CO (ppm)'},
)
fig.update_layout(width=1000, height=600, showlegend=False,
xaxis = dict(tickmode = 'linear', dtick = 1))
fig.update_traces(textfont_size=16, textangle=0)
fig.show()

Voila!!

Animated bar chart shows districts’ monthly rank and CO(ppm) amount. Images by author.

The attached result above may look fast since this is just an example of the outcome. Don’t worry; there is a pause button to pause and a button to select a specific time point.

2. Racing with an Animated scatter plot

Now let’s change the point of view by moving each district according to its rank at different points in time. The sizes of the scatter dots can be used to show the CO number.

To facilitate plotting with Plotly, we need to add two more columns to the DataFrame, position on the X-axis, and text for annotation.

ym = list(set(year_month))
ym.sort()

df_month['posi'] = [ym.index(i) for i in df_month['year_month']]
df_month['CO_str'] = [str(round(i,2)) for i in df_month['CO']]
df_month['CO_text'] = [str(round(i,2))+' ppm' for i in df_month['CO']]
df_month.head()

Next, plot an animated scatter plot.

import plotly.express as px
fig = px.scatter(df_month, x='posi', y='rank',
size= 'CO',
color='District', text='CO_text',
color_discrete_map= dict_color,
animation_frame='year_month',
animation_group='District',
range_x=[-2,len(ym)],
range_y=[0.5,6.5]
)
fig.update_xaxes(title='', visible=False)
fig.update_yaxes(autorange='reversed', title='Rank',
visible=True, showticklabels=True)
fig.update_layout(xaxis=dict(showgrid=False),
yaxis=dict(showgrid=True))
fig.update_traces(textposition='middle left')
fig.show()

Ta-da…

Animated scatter chart shows districts’ monthly rank and CO(ppm) amount. Images by author.

Charts

Animated charts are normally limited by being able to express one point in time. To show multiple time points, some charts and methods can be applied to exhibit many time points at once.

3. Drawing lines with a Bump chart

Basically, a bump chart applies multiple lines to show the changes in ranking over time. Plotting a bump chart with Plotly allows users to filter the result and provide more information when hovering the cursor over each data point, as shown in the result below.

import plotly.express as px
fig = px.line(df_month, x = 'year_month', y = 'rank',
color = 'District',
color_discrete_map= dict_color,
markers=True,
hover_name = 'CO_text')
fig.update_traces(marker=dict(size=11))
fig.update_yaxes(autorange='reversed', title='Rank',
visible=True, showticklabels=True)
fig.update_xaxes(title='', visible=True, showticklabels=True)
fig.update_layout(xaxis=dict(showgrid=False),
yaxis=dict(showgrid=False) )
fig.show()
Bump chart shows districts’ rank and amount of CO(ppm) monthly. The result can be filtered and provide more information, as shown. Images by author.

4. Creating a photo collage of bar charts

A simple bar chart can express ranking at a time point. With many time points, we can create many bar charts and then combine them into a photo collage. Start with using the Seaborn library to create a bar chart.

df_select = df_month[df_month['year_month']=='2017-01']
fig, ax = plt.subplots(figsize=(15, 6))

sns.set_style('darkgrid')
sns.barplot(data = df_select,
x = 'District', y ='CO',
order=df_select.sort_values('CO', ascending=False)['District'],
palette=dict_color)
ax.bar_label(ax.containers[0],
labels=df_select.sort_values('CO', ascending=False)['CO_str'],
label_type='edge', size=11)
plt.ylabel('CO (ppm)')
plt.title('2017-01')
plt.show()

Bar chart shows districts’ amount of CO(ppm) by ranking. Images by author.

Use the for-loop function to create the bar charts at different time points. Please take into account that the code below will export the charts to your computer for importing later.

keep_save = []
for t in ym:
df_ = df_month[df_month['year_month']==t]
fig, ax = plt.subplots(figsize=(8.5, 5))
sns.set_style('darkgrid')
sns.barplot(data = df_,
x = 'District', y ='CO',
order = df_.sort_values('CO', ascending=False)['District'],
palette=dict_color)
ax.bar_label(ax.containers[0],
labels=df_.sort_values('CO', ascending=False)['CO_str'],
label_type='edge', size=11)
plt.ylim([0, 1.2])
plt.ylabel('CO (ppm)')
plt.title(t)
plt.tight_layout()
s_name = t + '_bar.png'
keep_save.append(s_name)
plt.savefig(s_name)
plt.show()

Create a function to combine the charts. I found an excellent code to combine many plots from this link on Stack Overflow.

Apply the function.

## get_collage(n_col, n_row, width, height, save_name, 'output.png')
# width = n_col * figure width
# height = n_row * figure height

get_collage(12, 3, 12*850, 3*500, keep_save, 'order_bar.png')

Ta-da…

A part of a photo collage combining bar charts shows districts’ rank and amount of CO(ppm) monthly. Images by author.

The result shows each district’s monthly CO number while presenting the ranking order over time. Thus, we can compare the district ranks and the amount of pollution of many time points at the same time.

5. Fancy the bar charts with a Circular bar chart

With the same concept as the previous idea, we can turn normal bar charts into circular bar charts(aka race track plots) and combine them into a photo collage.

As previously mentioned that everything has its pros and cons. Each bar on the circular chart may be hard to compare due to the unequal length ratio of each bar. However, this can be considered a good option for creating an eye-catching effect.

Start with an example of creating a circular bar chart.

Circular bar chart shows districts’ amount of CO(ppm) by ranking. Images by author.

Applying the for-loop function to get other circular bar charts. The results will be exported to your computer for import later.

Use the function to obtain a photo collage.

get_collage(12, 3, 12*860, 3*810, keep_cir, 'order_cir.png')
A part of a photo collage combining circular bar charts shows districts’ rank and amount of CO(ppm) monthly. Images by author.

6. Another way to fancy the bar charts with a Radial bar chart

Changing the direction of the bar charts to start from the center with radial bar charts. This is another idea for catching attention. However, it can be noticed that the bars not located near each other are hard to compare.

Start with an example of a radial bar chart.

Radial bar chart shows districts’ amount of CO(ppm) by ranking. Images by author.

Applying the for-loop function to create other radial bar charts. The results will also be exported to your computer for import later.

Apply the function to obtain a photo collage.

get_collage(12, 3, 12*800, 3*800, keep_rad, 'order_rad.png')
A part of a photo collage combining radial bar charts shows districts’ rank and amount of CO(ppm) monthly. Images by author.

7. Using color with Heat Map

Normally, the heat map is a common chart for presenting data into a two-dimensional chart and showing values with colors. With our dataset, the color can be applied to show the rank numbers.

Start with creating a pivot table with pd.pivot().

df_pivot = pd.pivot(data=df_month, index='District',
columns='year_month', values='rank')
df_pivot

After getting the pivot table, we can easily create a heat map with just a few lines of code.

plt.figure(figsize=(20,9.5))
sns.heatmap(df_pivot, cmap='viridis_r', annot=True, cbar=False)
plt.show()
Applied heatmap to show the changes in districts’ rank over time. Images by author.

With the color and annotation, we can spot the district with the highest (yellow color) and lowest(dark blue color) number of CO. The change in ranking can be noticed over time.

Summary

This article has presented seven visualization ideas with Python code to express the changes in data ranks over time. As previously mentioned, everything has its pros and limits. An important thing is finding the right chart that suits the data.

I’m sure there are more graphs for ranking data over time than mentioned here. This article only guides with some ideas. If you have any suggestions or recommendations, please feel free to leave a comment. I would be happy to see it.

Thanks for reading

These are my data visualization articles that you may find interesting:

  • 8 Visualizations with Python to Handle Multiple Time-Series Data (link)
  • 6 Visualization with Python Tricks to Handle Ultra-Long Time-Series Data (link)
  • 9 Visualizations with Python to show Proportions instead of a Pie chart (link)
  • 9 Visualizations with Python that Catch More Attention than a Bar Chart (link)


Using Python to visualize the changes in rank over time

Photo by Austris Augusts on Unsplash

Ranking data is ordering data position in a numerically ordered series. This is an easy way to communicate the information since it helps the reader effortlessly understand the sequence. The ranking is a good idea for coping with multiple observations or categorical data.

However, things change all the time. As time pass, the position in ranking can be constantly altered. Visualizing positions of the ranks during a period helps notify the change and progress.

This article will guide you with some ideas to visualize the changes in rank over time.

Examples of data visualization with Python in this article for presenting the changes in rank over time. Images by the author

Let’s get started

Get data

To show that the method mentioned here can be applied to real-world datasets, I will use the ‘Air Pollution in Seoul’ dataset from Kaggle (link). The data was provided by the Seoul Metropolitan Government (link). The data is used under the terms of the Creative Commons License CC-BY.

The dataset consists of the air pollution data: SO2, NO2, CO, O3, PM10, and PM2.5 recorded between 2017 and 2019 from 25 districts in Seoul, South Korea.

In this article, we will work with Carbon monoxide (CO), a common air pollutant that is harmful to humans. The measurement unit is part-per-million (ppm).

Import Data

After downloading the dataset, start with import libraries.

import numpy as np
import pandas as pd
import math
import matplotlib.pyplot as plt
import seaborn as sns

%matplotlib inline

Use Pandas to read ‘Measurement_summary.csv’

df = pd.read_csv('<file location>/Measurement_summary.csv')
df.head()

Explore data

Exploring the dataset as the first step is always a good idea. Fortunately, the result below shows that we do not have to deal with missing values.

df.info()

Let’s look at the total number of the variable ‘Station code.’

df['Station code'].nunique()

## output
## 25

There are 25 districts in total.

set(df['Station code'])

## output
## {101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
## 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125}

Select and prepare data

For example, I will select Station codes 111-118. If you want to plot other station numbers, feel free to modify the code below.

list_stations = [111, 112, 113, 114, 115, 116, 117, 118]
df_select = df[df['Station code'].isin(list_stations)]
df_select.head()

The retrieved dataset is not ready to be plotted. Some columns are needed to be created or modified before use.

## crete year_month, year and month columns
year_month = [i[0:7] for i in list(df_select['Measurement date'])]
df_select['year_month'] = year_month
df_select['year'] = [i[0:4] for i in year_month]
df_select['month'] = [i[-2:] for i in year_month]

## create district name column
district = [i.split(', ')[2] for i in df_select['Address']]
df_select['District'] = district

## change Station code column type
df_select = df_select.astype({'Station code': str})

## groupby with location and point of time
df_month = df_select.groupby(['Station code','District',
'year_month','year','month']).mean()
df_month.reset_index(inplace=True)
df_month.head()

Here comes an important step. The main idea of this article is to create visualizations for ranking data. Next, we will create a column for ranking the districts’ CO number (ppm) during each time point.

keep = []
for i in list(set(df_month['year_month'])):
df = df_month[df_month['year_month']==i]
order = df['CO'].rank(ascending=0)
df['rank'] = [int(i) for i in order]
keep.append(df)

df_month = pd.concat(keep)
df_month.sort_values(['year_month', 'Station code'], ascending=True,
inplace=True, ignore_index=True)
df_month.head()

Before continuing, we will define a dictionary of colors to facilitate the plotting process.

#extract color palette, the palette can be changed
list_dist = list(set(df_select['District']))
pal = list(sns.color_palette(palette='Spectral',
n_colors=len(list_dist)).as_hex())
dict_color = dict(zip(list_dist, pal))

Data visualization

This article intends to guide with some visualization ideas for ranking data over time. Thus, the obtained result should be easy to understand while allowing the reader to compare the data ranks between different points in time.

Something is needed to be clarified before continuing. Each graph has its pros and cons. Of course, nothing is perfect. Some ideas presented here may be just for an eye-catching effect. But they all have the same purpose of showing the changes in data ranks over time.

The charts in this article can be categorized into two groups: animations and charts.

Animation

Besides being a good idea to catch attention, animation can easily show the changes in rank over time.

1. Comparing bar height with an Animated bar chart

Plotly is a useful graphing library for making interactive and animated graphs. The concept of applying an animated bar chart is to fix each district’s position. Each bar will be annotated with the ranking number. By doing this, the amount of CO can be compared over time.

import plotly.express as px
fig = px.bar(df_month, x='District', y='CO',
color='District', text='rank',
color_discrete_map= dict_color,
animation_frame='year_month',
animation_group='Station code',
range_y=[0,1.2],
labels={ 'CO': 'CO (ppm)'},
)
fig.update_layout(width=1000, height=600, showlegend=False,
xaxis = dict(tickmode = 'linear', dtick = 1))
fig.update_traces(textfont_size=16, textangle=0)
fig.show()

Voila!!

Animated bar chart shows districts’ monthly rank and CO(ppm) amount. Images by author.

The attached result above may look fast since this is just an example of the outcome. Don’t worry; there is a pause button to pause and a button to select a specific time point.

2. Racing with an Animated scatter plot

Now let’s change the point of view by moving each district according to its rank at different points in time. The sizes of the scatter dots can be used to show the CO number.

To facilitate plotting with Plotly, we need to add two more columns to the DataFrame, position on the X-axis, and text for annotation.

ym = list(set(year_month))
ym.sort()

df_month['posi'] = [ym.index(i) for i in df_month['year_month']]
df_month['CO_str'] = [str(round(i,2)) for i in df_month['CO']]
df_month['CO_text'] = [str(round(i,2))+' ppm' for i in df_month['CO']]
df_month.head()

Next, plot an animated scatter plot.

import plotly.express as px
fig = px.scatter(df_month, x='posi', y='rank',
size= 'CO',
color='District', text='CO_text',
color_discrete_map= dict_color,
animation_frame='year_month',
animation_group='District',
range_x=[-2,len(ym)],
range_y=[0.5,6.5]
)
fig.update_xaxes(title='', visible=False)
fig.update_yaxes(autorange='reversed', title='Rank',
visible=True, showticklabels=True)
fig.update_layout(xaxis=dict(showgrid=False),
yaxis=dict(showgrid=True))
fig.update_traces(textposition='middle left')
fig.show()

Ta-da…

Animated scatter chart shows districts’ monthly rank and CO(ppm) amount. Images by author.

Charts

Animated charts are normally limited by being able to express one point in time. To show multiple time points, some charts and methods can be applied to exhibit many time points at once.

3. Drawing lines with a Bump chart

Basically, a bump chart applies multiple lines to show the changes in ranking over time. Plotting a bump chart with Plotly allows users to filter the result and provide more information when hovering the cursor over each data point, as shown in the result below.

import plotly.express as px
fig = px.line(df_month, x = 'year_month', y = 'rank',
color = 'District',
color_discrete_map= dict_color,
markers=True,
hover_name = 'CO_text')
fig.update_traces(marker=dict(size=11))
fig.update_yaxes(autorange='reversed', title='Rank',
visible=True, showticklabels=True)
fig.update_xaxes(title='', visible=True, showticklabels=True)
fig.update_layout(xaxis=dict(showgrid=False),
yaxis=dict(showgrid=False) )
fig.show()
Bump chart shows districts’ rank and amount of CO(ppm) monthly. The result can be filtered and provide more information, as shown. Images by author.

4. Creating a photo collage of bar charts

A simple bar chart can express ranking at a time point. With many time points, we can create many bar charts and then combine them into a photo collage. Start with using the Seaborn library to create a bar chart.

df_select = df_month[df_month['year_month']=='2017-01']
fig, ax = plt.subplots(figsize=(15, 6))

sns.set_style('darkgrid')
sns.barplot(data = df_select,
x = 'District', y ='CO',
order=df_select.sort_values('CO', ascending=False)['District'],
palette=dict_color)
ax.bar_label(ax.containers[0],
labels=df_select.sort_values('CO', ascending=False)['CO_str'],
label_type='edge', size=11)
plt.ylabel('CO (ppm)')
plt.title('2017-01')
plt.show()

Bar chart shows districts’ amount of CO(ppm) by ranking. Images by author.

Use the for-loop function to create the bar charts at different time points. Please take into account that the code below will export the charts to your computer for importing later.

keep_save = []
for t in ym:
df_ = df_month[df_month['year_month']==t]
fig, ax = plt.subplots(figsize=(8.5, 5))
sns.set_style('darkgrid')
sns.barplot(data = df_,
x = 'District', y ='CO',
order = df_.sort_values('CO', ascending=False)['District'],
palette=dict_color)
ax.bar_label(ax.containers[0],
labels=df_.sort_values('CO', ascending=False)['CO_str'],
label_type='edge', size=11)
plt.ylim([0, 1.2])
plt.ylabel('CO (ppm)')
plt.title(t)
plt.tight_layout()
s_name = t + '_bar.png'
keep_save.append(s_name)
plt.savefig(s_name)
plt.show()

Create a function to combine the charts. I found an excellent code to combine many plots from this link on Stack Overflow.

Apply the function.

## get_collage(n_col, n_row, width, height, save_name, 'output.png')
# width = n_col * figure width
# height = n_row * figure height

get_collage(12, 3, 12*850, 3*500, keep_save, 'order_bar.png')

Ta-da…

A part of a photo collage combining bar charts shows districts’ rank and amount of CO(ppm) monthly. Images by author.

The result shows each district’s monthly CO number while presenting the ranking order over time. Thus, we can compare the district ranks and the amount of pollution of many time points at the same time.

5. Fancy the bar charts with a Circular bar chart

With the same concept as the previous idea, we can turn normal bar charts into circular bar charts(aka race track plots) and combine them into a photo collage.

As previously mentioned that everything has its pros and cons. Each bar on the circular chart may be hard to compare due to the unequal length ratio of each bar. However, this can be considered a good option for creating an eye-catching effect.

Start with an example of creating a circular bar chart.

Circular bar chart shows districts’ amount of CO(ppm) by ranking. Images by author.

Applying the for-loop function to get other circular bar charts. The results will be exported to your computer for import later.

Use the function to obtain a photo collage.

get_collage(12, 3, 12*860, 3*810, keep_cir, 'order_cir.png')
A part of a photo collage combining circular bar charts shows districts’ rank and amount of CO(ppm) monthly. Images by author.

6. Another way to fancy the bar charts with a Radial bar chart

Changing the direction of the bar charts to start from the center with radial bar charts. This is another idea for catching attention. However, it can be noticed that the bars not located near each other are hard to compare.

Start with an example of a radial bar chart.

Radial bar chart shows districts’ amount of CO(ppm) by ranking. Images by author.

Applying the for-loop function to create other radial bar charts. The results will also be exported to your computer for import later.

Apply the function to obtain a photo collage.

get_collage(12, 3, 12*800, 3*800, keep_rad, 'order_rad.png')
A part of a photo collage combining radial bar charts shows districts’ rank and amount of CO(ppm) monthly. Images by author.

7. Using color with Heat Map

Normally, the heat map is a common chart for presenting data into a two-dimensional chart and showing values with colors. With our dataset, the color can be applied to show the rank numbers.

Start with creating a pivot table with pd.pivot().

df_pivot = pd.pivot(data=df_month, index='District',
columns='year_month', values='rank')
df_pivot

After getting the pivot table, we can easily create a heat map with just a few lines of code.

plt.figure(figsize=(20,9.5))
sns.heatmap(df_pivot, cmap='viridis_r', annot=True, cbar=False)
plt.show()
Applied heatmap to show the changes in districts’ rank over time. Images by author.

With the color and annotation, we can spot the district with the highest (yellow color) and lowest(dark blue color) number of CO. The change in ranking can be noticed over time.

Summary

This article has presented seven visualization ideas with Python code to express the changes in data ranks over time. As previously mentioned, everything has its pros and limits. An important thing is finding the right chart that suits the data.

I’m sure there are more graphs for ranking data over time than mentioned here. This article only guides with some ideas. If you have any suggestions or recommendations, please feel free to leave a comment. I would be happy to see it.

Thanks for reading

These are my data visualization articles that you may find interesting:

  • 8 Visualizations with Python to Handle Multiple Time-Series Data (link)
  • 6 Visualization with Python Tricks to Handle Ultra-Long Time-Series Data (link)
  • 9 Visualizations with Python to show Proportions instead of a Pie chart (link)
  • 9 Visualizations with Python that Catch More Attention than a Bar Chart (link)

FOLLOW US ON GOOGLE NEWS

Read original article here

Denial of responsibility! Techno Blender is an automatic aggregator of the all world’s media. In each content, the hyperlink to the primary source is specified. All trademarks belong to their rightful owners, all materials to their authors. If you are the owner of the content and do not want us to publish your materials, please contact us by email – admin@technoblender.com. The content will be deleted within 24 hours.
artificial intelligenceBoriharnexpressmachine learningNovpythonRankTechnoblenderTimeVisualizations
Comments (0)
Add Comment