27
loading...
This website collects cookies to deliver better user experience
import pandas as pd
df = pd.read\_csv('data/covid19.csv', index\_col='date',
parse\_dates=['date'])
df.tail()
s = df.loc['2020-03-29']
s
China 3304.0
USA 2566.0
Italy 10779.0
UK 1231.0
Iran 2640.0
Spain 6803.0
Name: 2020-03-29 00:00:00, dtype: float64
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(4, 2.5), dpi=144)
colors = plt.cm.Dark2(range(6))
y = s.index
width = s.values
ax.barh(y=y, width=width, color=colors);
def nice\_axes(ax):
ax.set\_facecolor('.8')
ax.tick\_params(labelsize=8, length=0)
ax.grid(True, axis='x', color='white')
ax.set\_axisbelow(True)
[spine.set\_visible(False) for spine in ax.spines.values()]
nice\_axes(ax)
fig
fig, ax\_array = plt.subplots(nrows=1, ncols=3, figsize=(7, 2.5), dpi=144, tight\_layout=True)
dates = ['2020-03-29', '2020-03-30', '2020-03-31']
for ax, date in zip(ax\_array, dates):
s = df.loc[date].sort\_values()
ax.barh(y=s.index, width=s.values, color=colors)
ax.set\_title(date, fontsize='smaller')
nice\_axes(ax)
df.loc['2020-03-29'].rank(method='first')
China 4.0
USA 2.0
Italy 6.0
UK 1.0
Iran 3.0
Spain 5.0
Name: 2020-03-29 00:00:00, dtype: float64
fig, ax\_array = plt.subplots(nrows=1, ncols=3, figsize=(7, 2.5), dpi=144, tight\_layout=True)
dates = ['2020-03-29', '2020-03-30', '2020-03-31']
for ax, date in zip(ax\_array, dates):
s = df.loc[date]
y = df.loc[date].rank(method='first').values
ax.barh(y=y, width=s.values, color=colors, tick\_label=s.index)
ax.set\_title(date, fontsize='smaller')
nice\_axes(ax)
df2 = df.loc['2020-03-29':'2020-03-31']
df2
df2 = df2.reset\_index()
df2
df2.index = df2.index \* 5
df2
last\_idx = df2.index[-1] + 1
df\_expanded = df2.reindex(range(last\_idx))
df\_expanded
df\_expanded['date'] = df\_expanded['date'].fillna(method='ffill')
df\_expanded = df\_expanded.set\_index('date')
df\_expanded
df\_rank\_expanded = df\_expanded.rank(axis=1, method='first')
df\_rank\_expanded
df\_expanded = df\_expanded.interpolate()
df\_expanded
df\_rank\_expanded = df\_rank\_expanded.interpolate()
df\_rank\_expanded
fig, ax\_array = plt.subplots(nrows=1, ncols=6, figsize=(12, 2),
dpi=144, tight\_layout=True)
labels = df\_expanded.columns
for i, ax in enumerate(ax\_array.flatten()):
y = df\_rank\_expanded.iloc[i]
width = df\_expanded.iloc[i]
ax.barh(y=y, width=width, color=colors, tick\_label=labels)
nice\_axes(ax)
ax\_array[0].set\_title('2020-03-29')
ax\_array[-1].set\_title('2020-03-30');
fig, ax\_array = plt.subplots(nrows=1, ncols=6, figsize=(12, 2),
dpi=144, tight\_layout=True)
labels = df\_expanded.columns
for i, ax in enumerate(ax\_array.flatten(), start=5):
y = df\_rank\_expanded.iloc[i]
width = df\_expanded.iloc[i]
ax.barh(y=y, width=width, color=colors, tick\_label=labels)
nice\_axes(ax)
ax\_array[0].set\_title('2020-03-30')
ax\_array[-1].set\_title('2020-03-31');
def prepare\_data(df, steps=5):
df = df.reset\_index()
df.index = df.index \* steps
last\_idx = df.index[-1] + 1
df\_expanded = df.reindex(range(last\_idx))
df\_expanded['date'] = df\_expanded['date'].fillna(method='ffill')
df\_expanded = df\_expanded.set\_index('date')
df\_rank\_expanded = df\_expanded.rank(axis=1, method='first')
df\_expanded = df\_expanded.interpolate()
df\_rank\_expanded = df\_rank\_expanded.interpolate()
return df\_expanded, df\_rank\_expanded
df\_expanded, df\_rank\_expanded = prepare\_data(df)
df\_expanded.head()
df\_rank\_expanded.head()
from matplotlib.animation import FuncAnimation
def init():
ax.clear()
nice\_axes(ax)
ax.set\_ylim(.2, 6.8)
def update(i):
for bar in ax.containers:
bar.remove()
y = df\_rank\_expanded.iloc[i]
width = df\_expanded.iloc[i]
ax.barh(y=y, width=width, color=colors, tick\_label=labels)
date\_str = df\_expanded.index[i].strftime('%B %-d, %Y')
ax.set\_title(f'COVID-19 Deaths by Country - {date\_str}', fontsize='smaller')
fig = plt.Figure(figsize=(4, 2.5), dpi=144)
ax = fig.add\_subplot()
anim = FuncAnimation(fig=fig, func=update, init\_func=init, frames=len(df\_expanded),
interval=100, repeat=False)
from IPython.display import HTML
html = anim.to\_html5\_video()
HTML(html)
anim.save('media/covid19.mp4')
import bar\_chart\_race as bcr
html = bcr.bar\_chart\_race(df, figsize=(4, 2.5), title='COVID-19 Deaths by Country')
HTML(html)
df2 = df.loc['2020-03-29':'2020-03-31']
df2
df2.asfreq('6h')
num\_periods = (len(df2) - 1) \* 5 + 1
dr = pd.date\_range(start='2020-03-29', end='2020-03-31',
periods=num\_periods)
dr
DatetimeIndex(['2020-03-29 00:00:00', '2020-03-29 04:48:00',
'2020-03-29 09:36:00', '2020-03-29 14:24:00',
'2020-03-29 19:12:00', '2020-03-30 00:00:00',
'2020-03-30 04:48:00', '2020-03-30 09:36:00',
'2020-03-30 14:24:00', '2020-03-30 19:12:00',
'2020-03-31 00:00:00'],
dtype='datetime64[ns]', freq=None)
df2.reindex(dr)
num\_periods = (len(df) - 1) \* 5 + 1
dr = pd.date\_range(start=df.index[0], end=df.index[-1], periods=num\_periods)
df\_expanded = df.reindex(dr)
df\_rank\_expanded = df\_expanded.rank(axis=1).interpolate()
df\_expanded = df\_expanded.interpolate()
df\_expanded.iloc[160:166]
df\_rank\_expanded.iloc[160:166]
df\_one = df.reset\_index() \
.reindex([i / 5 for i in range(len(df) \* 5 - 4)]) \
.reset\_index(drop=True) \
.pipe(lambda x: pd.concat(
[x, x.iloc[:, 1:].rank(axis=1)],
axis=1, keys=['values', 'ranks'])) \
.interpolate() \
.fillna(method='ffill') \
.set\_index(('values', 'date')) \
.rename\_axis(index='date')
df\_one.head()