def medical_cases_chart_data(): """Generate data entries for medical cases chart template.""" ignore_dates = ('2020-02-04', '2020-02-21', '2020-02-27') data = archive.load(ignore_dates=ignore_dates) out = [] for i, (date, total, cured, death) in enumerate(zip( data.dates, data.total_cases, data.cured_cases, data.death_cases)): # Comma-delimited digit grouping. total_comma = '' if total == 0 else '{:,}'.format(total) death_comma = '' if death == 0 else '{:,}'.format(death) # Previous numbers. if i == 0: prev_total = 0 prev_death = 0 else: prev_total = data.total_cases[i - 1] prev_death = data.death_cases[i - 1] # Growth percent expressions growth_expr = '+{{{{#expr:({}/{} - 1)*100 round 0}}}}%' if total != prev_total: if prev_total == 0: total_growth_expr = 'firstright1=y' else: total_growth_expr = growth_expr.format(total, prev_total) else: total_growth_expr = '' if death != prev_death: if prev_death == 0: death_growth_expr = 'firstright2=y' else: death_growth_expr = growth_expr.format(death, prev_death) else: death_growth_expr = '' # date;deaths;cured;total;;;total;%age;deaths;%age out.append('{};{};{};{};;;{:};{};{:};{}' .format(date, death, cured, total, total_comma, total_growth_expr, death_comma, death_growth_expr)) # Print continuation lines. curr_index = data.dates.index(date) if curr_index < len(data.dates) - 1: curr_datetime = data.datetimes[curr_index] next_datetime = data.datetimes[curr_index + 1] if (next_datetime - curr_datetime).days != 1: month = next_datetime.strftime('%b') out.append(';{};{};{};;;{:,};;;;divisor=4;collapsed=y;id={}' .format('' if death == 0 else death, '' if cured == 0 else cured, total, total, month.lower())) return '\n'.join(out)
def wiki1(): """Generate Wikipedia markup code for medical cases chart template.""" ignore_dates = ('2020-02-04', '2020-02-27') data = archive.load(ignore_dates=ignore_dates) update = source = fetch_wiki_source(WIKI_SRC1) update = replace_within('Total confirmed -->\n', '\n<!-- Date', update, wiki1_data(data)) log.log('Writing wiki1.txt and wiki1.diff ...') open('wiki1.txt', 'w').write(update) open('wiki1.diff', 'w').write(diff(source, update))
def main(): """Render the home page.""" # Copy static files. if os.path.isdir('_site'): shutil.rmtree('_site') os.mkdir("_site") #shutil.copytree('static', '_site') shutil.copy('indiacovid19.json', '_site') # Load COVID-19 archive data. log.log('Loading archive ...') data = archive.load() log.log('Found entries for {} days', len(data.dates)) # Format placeholder values. last_updated = data.last_ref_datetimes[-1].strftime('%d %b %Y %H:%M IST') new_growth = '{:+.0f}%'.format(data.total_growths[-1]) doubling_time = '{:.1f}'.format(data.doubling_times[-1]) cured_percent = '{:.0f}%'.format(data.cured_percents[-1]) death_percent = '{:.0f}%'.format(data.death_percents[-1]) cured_ratio = '{:.1f}'.format(data.cured_ratios[-1]) img_max_width = round(len(data.dates) * 100 / 40) # Render home page. log.log('Rendering home page ...') layout = fread('layout/index.html') output = render(layout, last_total=data.total_cases[-1], last_active=data.active_cases[-1], last_cured=data.cured_cases[-1], last_death=data.death_cases[-1], last_date=data.dates[-1], last_updated=last_updated, new_cases=data.total_diffs[-1], new_growth=new_growth, doubling_time=doubling_time, cured_percent=cured_percent, death_percent=death_percent, cured_ratio=cured_ratio, case_links=case_links(data), case_rows=case_rows(data)) fwrite('_site/index.html', output) # Render CSS. log.log('Rendering stylesheet ...') layout = fread('layout/main.css') output = render(layout, img_max_width=img_max_width) fwrite('_site/main.css', output) # Plot graphs. log.log('Rendering graphs ...') plot.plot_all(data) log.log('Done') webbrowser.open('_site/index.html')
def main(): parser = argparse.ArgumentParser() parser.add_argument('-w', action='store_true', help='Plot recent graphs only with 16:9 aspect ratio') args = parser.parse_args() data = archive.load() if args.w: plot_recent_wide(data) else: plot_all(data)
def medical_cases(): """Generate Wikipedia markup for medical cases template.""" data = mohfw.load() output = open('layout/medical_cases.txt').read() output = region_table_rows(data, output) output = region_table_foot(data, output) ignore_dates = ('2020-02-04', '2020-02-27') data = archive.load(ignore_dates=ignore_dates) output = medical_cases_plots(data, output) return output
def medical_cases(): """Generate Wikipedia markup for medical cases template.""" home_data = mohfw.load_home_data() dash_data = mohfw.load_dash_data() if home_data.ref_datetime >= dash_data.ref_datetime: data = home_data log.log('Selected home page data') else: data = dash_data data.foreign = home_data.foreign log.log('Selected dashboard data') output = open('layout/medical_cases.txt').read() output = region_table_rows(data, output) output = region_table_foot(data, output) ignore_dates = ('2020-02-04', '2020-02-27') data = archive.load(ignore_dates=ignore_dates) output = medical_cases_plots(data, output) return output
def medical_cases_chart_data(): """Generate data entries for medical cases chart template.""" ignore_dates = ('2020-02-04', '2020-02-21', '2020-02-27') data = archive.load(ignore_dates=ignore_dates) out = [] for i, (date, total, cured, death) in enumerate(zip( data.dates, data.total_cases, data.cured_cases, data.death_cases)): # date;deaths;cured;total out.append('{};{};{};{}'.format(date, death, cured, total)) # Print continuation lines. curr_index = data.dates.index(date) if curr_index < len(data.dates) - 1: curr_datetime = data.datetimes[curr_index] next_datetime = data.datetimes[curr_index + 1] if (next_datetime - curr_datetime).days != 1: month = next_datetime.strftime('%b') out.append(';{};{};{}'.format('' if death == 0 else death, '' if cured == 0 else cured, '' if total == 0 else total)) return '\n'.join(out)
def wiki3(): """Generate Wikipedia markup code for statistics charts.""" ignore_dates = ('2020-02-04', '2020-02-27') data = archive.load(ignore_dates=ignore_dates) update = source = fetch_wiki_source(WIKI_SRC3) full_dates = ', '.join(x.strftime('%Y-%m-%d') for x in data.datetimes) # Cases. total_cases = ', '.join(str(y) for y in data.total_cases) active_cases = ', '.join(str(y) for y in data.active_cases) cured_cases = ', '.join(str(y) for y in data.cured_cases) death_cases = ', '.join(str(y) for y in data.death_cases) # New cases. total_dates, total_diffs, total_avgs = \ format_diffs(*expand_diffs(data.datetimes, data.total_diffs)) cured_dates, cured_diffs, cured_avgs = \ format_diffs(*expand_diffs(data.datetimes, data.cured_diffs)) death_dates, death_diffs, death_avgs = \ format_diffs(*trim_zeros(*expand_diffs(data.datetimes, data.death_diffs))) # Daily new cases vs. active cases. vs_dates, vs_percents, vs_avgs, vs_cagrs = \ vs_data(data.datetimes, data.total_diffs, data.active_cases) # CFR cfr_start = data.dates.index('2020-03-12') cfr_dates = ', '.join( x.strftime('%Y-%m-%d') for x in data.datetimes[cfr_start:]) cfr_percents = ', '.join('{:.2f}'.format(y) for y in data.cfr_percents[cfr_start:]) # For testing regex matches only. """ full_dates = '@@full_dates@@' total_cases = '@@total_cases@@' active_cases = '@@active_cases@@' cured_cases = '@@cured_cases@@' death_cases = '@@death_cases@@' total_dates = '@@total_dates@@' total_diffs = '@@total_diffs@@' total_avgs= '@@total_avgs@@' cured_dates = '@@cured_dates@@' cured_diffs = '@@cured_diffs@@' cured_avgs= '@@cured_avgs@@' death_dates = '@@death_dates@@' death_diffs = '@@death_diffs@@' death_avgs= '@@death_avgs@@' vs_dates = '@@vs_dates@@' vs_percents = '@@vs_percents@@' vs_avgs = '@@vs_avgs@@' vs_cagrs = '@@vs_cagrs@@' cfr_dates, cfr_percents = '@@cfr_dates@@', '@@cfr_percents@@' """ # Linear graph. update = replace_within('= Total confirmed .*?=.*? x = ', '\n', update, full_dates) update = replace_within('= Total confirmed .*?=.*? y1 =.*?--> ', '\n', update, total_cases) update = replace_within('= Total confirmed .*?=.*? y2 =.*?--> ', '\n', update, active_cases) update = replace_within('= Total confirmed .*?=.*? y3 =.*?--> ', '\n', update, cured_cases) update = replace_within('= Total confirmed .*?=.*? y4 =.*?--> ', '\n', update, death_cases) # Logarithmic graph. update = replace_within('= Total confirmed .*?=.*?log.*? x = ', '\n', update, full_dates) update = replace_within('= Total confirmed .*?=.*?log.*? y1 =.*?--> ', '\n', update, total_cases) update = replace_within('= Total confirmed .*?=.*?log.*? y2 =.*?--> ', '\n', update, active_cases) update = replace_within('= Total confirmed .*?=.*?log.*? y3 =.*?--> ', '\n', update, cured_cases) update = replace_within('= Total confirmed .*?=.*?log.*? y4 =.*?--> ', '\n', update, death_cases) # Daily new cases. update = replace_within('= Daily new cases =.*? x = ', '\n', update, total_dates) update = replace_within('= Daily new cases =.*? y1 =.*?--> ', '\n', update, total_diffs) update = replace_within('= Daily new cases =.*? y2 =.*?--> ', '\n', update, total_avgs) # Daily new deaths. update = replace_within('= Daily new deaths =.*? x = ', '\n', update, death_dates) update = replace_within('= Daily new deaths =.*? y1 =.*?--> ', '\n', update, death_diffs) update = replace_within('= Daily new deaths =.*? y2 =.*?--> ', '\n', update, death_avgs) # Daily new recoveries. update = replace_within('= Daily new recoveries =.*? x = ', '\n', update, cured_dates) update = replace_within('= Daily new recoveries =.*? y1 =.*?--> ', '\n', update, cured_diffs) update = replace_within('= Daily new recoveries =.*? y2 =.*?--> ', '\n', update, cured_avgs) # Daily new cases vs. active cases. update = replace_within('= Daily new cases vs active cases =.*? x = ', '\n', update, vs_dates) update = replace_within( '= Daily new cases vs active cases =.*? y1 =.*?--> ', '\n', update, vs_percents) update = replace_within( '= Daily new cases vs active cases =.*? y2 =.*?--> ', '\n', update, vs_avgs) update = replace_within( '= Daily new cases vs active cases =.*? y3 =.*?--> ', '\n', update, vs_cagrs) # CFR. update = replace_within('= Case fatality rate =.*? x = ', '\n', update, cfr_dates) update = replace_within('= Case fatality rate =.*? y = ', '\n', update, cfr_percents) log.log('Writing wiki3.txt and wiki3.diff ...') open('wiki3.txt', 'w').write(update) open('wiki3.diff', 'w').write(diff(source, update))
def main(): data = archive.load() plot_all(data)
def wiki3(): """Generate Wikipedia markup code for statistics charts.""" ignore_dates = ('2020-02-04', '2020-02-27') data = archive.load(ignore_dates=ignore_dates) update = source = fetch_wiki_source(WIKI_SRC3) mini_dates = ', '.join(x.strftime('%d %b %Y').lstrip('0') for x in data.datetimes) full_dates = ', '.join(x.strftime('%d %b %Y').lstrip('0') for x in data.datetimes) # Cases. total_cases = ', '.join(str(y) for y in data.total_cases) active_cases = ', '.join(str(y) for y in data.active_cases) cured_cases = ', '.join(str(y) for y in data.cured_cases) death_cases = ', '.join(str(y) for y in data.death_cases) # New cases. total_dates, total_diffs = clean_data(data.datetimes, data.total_diffs) cured_dates, cured_diffs = clean_data(data.datetimes, data.cured_diffs) death_dates, death_diffs = clean_data(data.datetimes, data.death_diffs) # CFR cfr_start = data.dates.index('2020-03-12') cfr_dates = ', '.join(x.strftime('%d %b %Y').lstrip('0') for x in data.datetimes[cfr_start:]) cfr_percents = ', '.join('{:.2f}'.format(y) for y in data.cfr_percents[cfr_start:]) # For testing regex matches only. """ mini_dates = '@@mini_dates@@' full_dates = '@@full_dates@@' total_cases = '@@total_cases@@' active_cases = '@@active_cases@@' cured_cases = '@@cured_cases@@' death_cases = '@@death_cases@@' total_dates, total_diffs = '@@total_dates@@', '@@total_diffs@@' cured_dates, cured_diffs = '@@cured_dates@@', '@@cured_diffs@@' death_dates, death_diffs = '@@death_dates@@', '@@death_diffs@@' cfr_dates, cfr_percents = '@@cfr_dates@@', '@@cfr_percents@@' """ # Linear graph. update = replace_within('= Total confirmed.*?x = ', '\n', update, full_dates) update = replace_within('= Total confirmed.*?y1 =.*?--> ', '\n', update, total_cases) update = replace_within('= Total confirmed.*?y2 =.*?--> ', '\n', update, active_cases) update = replace_within('= Total confirmed.*?y3 =.*?--> ', '\n', update, cured_cases) update = replace_within('= Total confirmed.*?y4 =.*?--> ', '\n', update, death_cases) # Logarithmic graph. update = replace_within('= Total confirmed.*?log.*?x = ', '\n', update, full_dates) update = replace_within('= Total confirmed.*?log.*?y1 =.*?--> ', '\n', update, total_cases) update = replace_within('= Total confirmed.*?log.*?y2 =.*?--> ', '\n', update, active_cases) update = replace_within('= Total confirmed.*?log.*?y3 =.*?--> ', '\n', update, cured_cases) update = replace_within('= Total confirmed.*?log.*?y4 =.*?--> ', '\n', update, death_cases) # Daily new cases. update = replace_within('= Daily new cases.*?x = ', '\n', update, total_dates) update = replace_within('= Daily new cases.*?y = ', '\n', update, total_diffs) # Daily new deaths. update = replace_within('= Daily new deaths.*?x = ', '\n', update, death_dates) update = replace_within('= Daily new deaths.*?y = ', '\n', update, death_diffs) # Daily new recoveries. update = replace_within('= Daily new recoveries.*?x = ', '\n', update, cured_dates) update = replace_within('= Daily new recoveries.*?y = ', '\n', update, cured_diffs) # CFR. update = replace_within('= Case fatality rate.*?x = ', '\n', update, cfr_dates) update = replace_within('= Case fatality rate.*?y = ', '\n', update, cfr_percents) open('wiki3.txt', 'w').write(update) open('wiki3.diff', 'w').write(diff(source, update))