import toml import os import db_model as db from peewee import SqliteDatabase from peewee import fn import datetime def config_laden(): configfile = os.path.join(SKRIPTPFAD, "config.toml") with open(configfile) as file: return toml.loads(file.read()) SKRIPTPFAD = os.path.abspath(os.path.dirname(__file__)) CONFIG = config_laden() QUELLEN = ["jhu", "who", "rki"] def verdoppelungsrate_ermitteln(quelle, land, confirmed, confirmed_ts): halbe_infizierte = confirmed / 2 ts_halbe = db.CoronaDaten.select(db.CoronaDaten.ts).where( (db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land) & (db.CoronaDaten.confirmed < halbe_infizierte)).order_by(db.CoronaDaten.confirmed.desc()).limit(1).scalar() try: verdoppelungstage = (confirmed_ts - ts_halbe).total_seconds() except TypeError: verdoppelungstage = None return verdoppelungstage def letzte_verdopplungsrate(quelle, land): query = db.CoronaDaten.select(db.CoronaDaten.ts, fn.max(db.CoronaDaten.confirmed).alias("confirmed")).where( (db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land)).dicts() for datensatz in query: verdoppelung = verdoppelungsrate_ermitteln(quelle, land, datensatz["confirmed"], datensatz["ts"]) print(verdoppelung) def durchschnittliche_verdoppelungsrate(quelle, land): query = db.CoronaDaten.select(db.CoronaDaten.ts, db.CoronaDaten.confirmed).where( (db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land) ).namedtuples() verdoppelungsraten = [] for datensatz in query: verdoppelungsrate = verdoppelungsrate_ermitteln(quelle, land, datensatz.confirmed, datensatz.ts) if verdoppelungsrate is not None: verdoppelungsraten.append(verdoppelungsrate) durchschnitt = sum(verdoppelungsraten) / len(verdoppelungsraten) print(verdoppelungsrate_in_tagen(durchschnitt)) def jede_verdoppelungsrate(quelle, land): query = db.CoronaDaten.select(db.CoronaDaten.ts, db.CoronaDaten.confirmed).where( (db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land) ).order_by(db.CoronaDaten.ts.desc()).namedtuples() for datensatz in query: verdoppelungsrate = verdoppelungsrate_ermitteln(quelle, land, datensatz.confirmed, datensatz.ts) print(f"Verdoppelungsrate am {datensatz.ts}: {verdoppelungsrate_in_tagen(verdoppelungsrate)}") def verdoppelungsrate_in_tagen(verdoppelungsrate): try: return verdoppelungsrate / (60 * 60 * 24) except TypeError: return None def main(): db.DATABASE.initialize(SqliteDatabase(os.path.join(SKRIPTPFAD, "corona.db3"))) for quelle in QUELLEN: query = db.CoronaCountry.select().where(db.CoronaCountry.quelle == quelle) for datensatz in query: if quelle == "jhu" and datensatz.country_region == "Germany": jede_verdoppelungsrate(quelle, datensatz.country_region) if __name__ == "__main__": main()