Beispiel #1
0
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)
Beispiel #2
0
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))
Beispiel #3
0
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')
Beispiel #4
0
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)
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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)
Beispiel #8
0
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))
Beispiel #9
0
def main():
    data = archive.load()
    plot_all(data)
Beispiel #10
0
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))