コード例 #1
0
def update_percentage(date, accum_measurement, percentage_measurement):
    accum = influx.get_stat_accumulated_until_day(accum_measurement, date)

    data = {}
    allowed_regions = list(CCAA_POPULATION.keys())
    allowed_regions.append(SPAIN)

    for region in filter(lambda x: x in allowed_regions, accum.keys()):
        percentage = 100 * accum[region] / (CCAA_POPULATION[region]
                                            if region in CCAA_POPULATION else
                                            sum(CCAA_POPULATION.values()))
        data[region] = percentage

    influx.insert_stats(percentage_measurement, date, data)
コード例 #2
0
def get_report_by_ccaa(date_in_header, ccaas_today, ccaas_yesterday, ccaas_accumulated_today):
    tweets = []
    for ccaa in filter(lambda x: x in CCAA_POPULATION.keys(), sorted(ccaas_today.keys())):
        tweets.append(get_territorial_unit_report(ccaa, date_in_header, ccaas_today[ccaa],
                                                  ccaas_yesterday[ccaa], ccaas_accumulated_today[ccaa]))

    return tweets
コード例 #3
0
def get_completed_vaccination_sentence(territorial_unit, stat, accumulated, today_total):
    population = CCAA_POPULATION[territorial_unit] if territorial_unit in CCAA_POPULATION \
        else sum(CCAA_POPULATION.values())
    percentage_population = accumulated / population * 100
    return "- {0}: {1} ({2}%) 🔺{3}".format(stat, _format_number(accumulated),
                                           _format_number(percentage_population),
                                           _format_number(today_total))
コード例 #4
0
    def test_given_no_data_frame_acceded_when_access_then_tabula_used(
            self, tabula_mock):
        date = datetime(2020, 5, 5)
        page = "1"
        area = MagicMock()
        report = SpainCovid19MinistryReport(date, page, area)
        report._get_url = MagicMock()
        valid_data = {
            "Col1*": ["value1", "value2*", "value3", "value4*"] +
            list(CCAA_POPULATION.keys())
        }
        d1 = DataFrame(data={"Col1": [1, 2, 3]})
        d2 = DataFrame(data=valid_data)
        tabula_mock.read_pdf.return_value = [d1, d2]

        returned_data_frame = report.data_frame

        tabula_mock.read_pdf.assert_called_once_with(
            report._get_url.return_value,
            pages=str(page),
            area=area,
            pandas_options={'dtype': str})
        report._get_url.assert_called_once_with()

        self.assertEqual(valid_data["Col1*"],
                         list(returned_data_frame['Col1']))
コード例 #5
0
    def test_given_dataframe_when_get_column_data_then_map_returned(self):

        with patch.object(SpainCovid19MinistryReport, 'data_frame'):
            report = SpainCovid19MinistryReport(None, None)
            headers = ["heade1", "header2", "header3"]
            ccaas = list(map(lambda x: x + "*", CCAA_POPULATION.keys()))
            data1 = list(map(lambda x: str(x), range(1, 20)))
            data2 = list(map(lambda x: str(x) + ".000", range(21, 40)))
            report.data_frame = DataFrame(
                data={
                    "Unnamed: 0": headers + ccaas,
                    "Column1": headers + data1,
                    "Column2": headers + data2
                })

            result = report.get_column_data(2)

            self.assertEqual(list(CCAA_POPULATION.keys()), list(result.keys()))
            self.assertEqual(list(range(21000, 40000, 1000)),
                             list(result.values()))
コード例 #6
0
def calculate_global_incidence(dict_to_unpack, measurement):

    population_to_compare = {
        Measurement.ACCUMULATED_INCIDENCE.value: CCAA_POPULATION,
        Measurement.PERCENTAGE_ADMITTED.value: CCAA_ADMITTED_BEDS,
        Measurement.PERCENTAGE_ICU.value: CCAA_ICU_BEDS
    }[measurement.value]

    total_cases = 0
    population = 0
    ccaas = filter(lambda x: x in CCAA_POPULATION.keys(), dict_to_unpack.keys())
    for ccaa in ccaas:
        total_cases += dict_to_unpack[ccaa][measurement] * population_to_compare[ccaa] / 100000
        population += population_to_compare[ccaa]

    return total_cases / population * 100000 if population else 0
コード例 #7
0
def get_global_data(dict_to_unpack):
    keys = set([key for ccaa in dict_to_unpack for key in dict_to_unpack[ccaa].keys()])
    ia_exists = Measurement.ACCUMULATED_INCIDENCE in keys
    keys.discard(Measurement.ACCUMULATED_INCIDENCE)

    result = defaultdict(lambda: 0)
    for key in keys:
        for ccaa in filter(lambda x: x in CCAA_POPULATION.keys(), dict_to_unpack.keys()):
            result[key] += dict_to_unpack[ccaa][key] if dict_to_unpack[ccaa][key] else 0

    if ia_exists:
        result[Measurement.ACCUMULATED_INCIDENCE] = calculate_global_incidence(dict_to_unpack,
                                                                               Measurement.ACCUMULATED_INCIDENCE)
        result[Measurement.PERCENTAGE_ADMITTED] = calculate_global_incidence(dict_to_unpack,
                                                                             Measurement.PERCENTAGE_ADMITTED)
        result[Measurement.PERCENTAGE_ICU] = calculate_global_incidence(dict_to_unpack,
                                                                        Measurement.PERCENTAGE_ICU)

    return result
コード例 #8
0
def publish_report(today):
    today_vaccinations = influx.get_stat_group_by_day(Measurement.VACCINATIONS,
                                                      today)
    today_completed_vaccinations = influx.get_stat_group_by_day(
        Measurement.COMPLETED_VACCINATIONS, today)
    today_first_doses = influx.get_stat_group_by_day(
        Measurement.FIRST_DOSE_VACCINATIONS, today)
    accumulated_vaccinations = influx.get_stat_accumulated_until_day(
        Measurement.VACCINATIONS, today)
    accumulated_completed_vaccinations = influx.get_stat_accumulated_until_day(
        Measurement.COMPLETED_VACCINATIONS, today)
    accumulated_first_doses = influx.get_stat_accumulated_until_day(
        Measurement.FIRST_DOSE_VACCINATIONS, today)

    today_str = today.strftime("%d/%m/%Y")
    spain_tweet = get_vaccination_report(SPAIN, accumulated_vaccinations,
                                         today_vaccinations,
                                         accumulated_completed_vaccinations,
                                         today_completed_vaccinations,
                                         accumulated_first_doses,
                                         today_first_doses)
    interactive_graph_sentence = "➡️ Gráfico Interactivo: https://home.aitormagan.es/d/TeEplNgRk/covid-vacunas-espana?orgId=1"
    spain_tweet = f"🇪🇸 España - Vacunación a {today_str}:\n\n{spain_tweet}\n\n{interactive_graph_sentence}"
    graph_url = get_graph_url(datetime(2021, 1, 1),
                              today,
                              graph_path=VACCINE_IMAGE_PATH)
    last_tweet = twitter.publish_tweet_with_media(spain_tweet, graph_url)
    ccaa_tweets = []

    for ccaa in filter(lambda x: x in CCAA_POPULATION.keys(),
                       sorted(accumulated_vaccinations.keys())):
        ccaa_tweet = get_vaccination_report(
            ccaa, accumulated_vaccinations, today_vaccinations,
            accumulated_completed_vaccinations, today_completed_vaccinations,
            accumulated_first_doses, today_first_doses)
        ccaa_tweets.append(
            f"{ccaa} - Vacunación a {today_str}:\n\n{ccaa_tweet}")

    twitter.publish_tweets(ccaa_tweets, last_tweet)