Exemplo n.º 1
0
def current():
    cases, stats = filter_data(InsolvencyType.PRIVATE)
    proceedings = cases[CaseType.VERFAHRENEROEFFNET]

    # Filter for recent proceedings
    latest_data = max(p["date"] for p in proceedings)

    date_7_days_ago = latest_data - dt.timedelta(days=7)
    date_14_days_ago = latest_data - dt.timedelta(days=14)

    last_7_days = len([p for p in proceedings if p["date"] > date_7_days_ago])
    the_7_days_before = len([
        p for p in proceedings
        if date_7_days_ago >= p["date"] > date_14_days_ago
    ])
    try:
        percent_change = f"{signed(round((last_7_days - the_7_days_before) / the_7_days_before * 100))}%"
    except ZeroDivisionError:
        percent_change = "+∞%"

    df = pd.DataFrame(
        data={
            "Der letzten 7 Tage": {
                "Insolvenzverfahren": last_7_days
            },
            "Die 7 Tage davor": {
                "Insolvenzverfahren": the_7_days_before
            },
            "Veränderung": {
                "Insolvenzverfahren": percent_change
            },
        })

    return df
Exemplo n.º 2
0
def current(case_type):
    cases, stats = filter_data(InsolvencyType.REGULAR)
    cases = cases[case_type]

    # Filter for recent proceedings
    latest_data = max(p["date"] for p in cases)

    date_7_days_ago = latest_data - dt.timedelta(days=7)
    date_14_days_ago = latest_data - dt.timedelta(days=14)

    last_7_days = len([p for p in cases if p["date"] > date_7_days_ago])
    the_7_days_before = len(
        [p for p in cases if date_7_days_ago >= p["date"] > date_14_days_ago]
    )
    try:
        percent_change = f"{signed(round((last_7_days - the_7_days_before) / the_7_days_before * 100))}%"
    except ZeroDivisionError:
        percent_change = "+∞%"

    df = pd.DataFrame(
        data={
            "Der letzten 7 Tage": {CASE_TYPE_HEADERS[case_type]: last_7_days},
            "Die 7 Tage davor": {CASE_TYPE_HEADERS[case_type]: the_7_days_before},
            "Veränderung": {CASE_TYPE_HEADERS[case_type]: percent_change},
        },
    )

    return df
Exemplo n.º 3
0
def history(case_type):
    cases, stats = filter_data(InsolvencyType.REGULAR)
    cases = cases[case_type]

    # Bin proceedings by year
    by_year = defaultdict(list)

    for case in cases:
        by_year[case["date"].year].append(case)

    # Bin proceedings by year and week
    by_week_count = defaultdict(lambda: defaultdict(int))
    by_year_and_week_count = defaultdict(lambda: defaultdict(int))

    calendar_today = dt.date.today().isocalendar()
    year_today = calendar_today[0]
    week_today = calendar_today[1]

    for case in cases:
        # Note: isocalendar week behaves weirdly between years
        calendar = case["date"].isocalendar()
        year = calendar[0]
        week = calendar[1]

        # ISO week as string for datawrapper
        if year == year_today or year == year_today - 1 and week >= week_today:
            subtitle = (
                "Unternehmen" if case["courtcase-is-company"] else "Selbstständige"
            )
            by_week_count[f"{year}W{week}"][
                f"{CASE_TYPE_HEADERS[case_type]} ({subtitle})"
            ] += 1

        by_year_and_week_count[year][week] += 1

    # Construct dataframes
    df_week_year = pd.concat(
        {k: pd.Series(v).astype(float) for k, v in by_year_and_week_count.items()},
        axis=1,
    )
    df_week_year.index.name = "Woche"
    df_week_year["Durchschnitt 2018/2019"] = (
        df_week_year[2018] + df_week_year[2019]
    ) / 2.0
    df_week_year = df_week_year.drop(columns=[2018, 2019])

    df_week = pd.concat(
        {k: pd.Series(v).astype(float) for k, v in by_week_count.items()},
        axis=1,
    ).T.fillna(0.0)
    df_week.index.name = "Woche"
    df_week = df_week.reindex(sorted(df_week.columns), axis=1)

    return df_week, df_week_year
Exemplo n.º 4
0
def districts(case_type):
    cases, stats = filter_data(InsolvencyType.REGULAR)
    cases = cases[case_type]

    # Filter for recent cases
    latest_data = max(p["date"] for p in cases)
    start_date = latest_data - dt.timedelta(days=30)
    last_30_days = [p for p in cases if p["date"] > start_date]

    # Group by district name
    by_district_name = defaultdict(lambda: defaultdict(int))

    for case in last_30_days:
        court = next(
            residence for residence in case["courtcase-residences"] if in_nrw(residence)
        )

        district_name = court["geolocation-street"]["street-gemeinde"][
            "gemeinde-kreis"
        ]["kreis-name"]
        district_name = normalize.district(district_name)
        num_inhabitants = inhabitants[district_name]

        by_district_name[district_name][CASE_TYPE_HEADERS[case_type]] += 1
        by_district_name[district_name][
            f"{CASE_TYPE_HEADERS[case_type]} pro 100.000 Einwohner"
        ] += (1 / num_inhabitants * 100_000)

    # Fill missing districts
    for district_name in inhabitants.keys():
        if district_name == "Gesamt":
            continue

        if district_name not in by_district_name:
            by_district_name[district_name] = {
                CASE_TYPE_HEADERS[case_type]: 0,
                f"{CASE_TYPE_HEADERS[case_type]} pro 100.000 Einwohner": 0.0,
            }

    # Convert to dataframe
    df = pd.DataFrame(by_district_name).T

    df[CASE_TYPE_HEADERS[case_type]] = df[CASE_TYPE_HEADERS[case_type]].astype(int)
    df.index.name = "Name"

    df = df.sort_index()

    return df
Exemplo n.º 5
0
def districts():
    cases, stats = filter_data(InsolvencyType.PRIVATE)
    proceedings = cases[CaseType.VERFAHRENEROEFFNET]

    # Filter for recent proceedings
    latest_data = max(p["date"] for p in proceedings)
    start_date = latest_data - dt.timedelta(days=30)
    last_30_days = [p for p in proceedings if p["date"] > start_date]

    # Group by district name
    by_district_name = defaultdict(int)

    for proceeding in last_30_days:
        court = next(residence
                     for residence in proceeding["courtcase-residences"]
                     if in_nrw(residence))

        district_name = court["geolocation-street"]["street-gemeinde"][
            "gemeinde-kreis"]["kreis-name"]
        district_name = normalize.district(district_name)
        num_inhabitants = inhabitants[district_name]

        by_district_name[district_name] += 1 / num_inhabitants * 100_000

    # Fill missing districts
    for district_name in inhabitants.keys():
        if district_name == "Gesamt":
            continue

        if district_name not in by_district_name:
            by_district_name[district_name] = 0.0

    # Convert to dataframe
    df = pd.DataFrame([by_district_name]).T

    df.index.name = "Name"
    df = df.rename(columns={0: "pro 100.000 Einwohner"})

    return df
Exemplo n.º 6
0
def history():
    cases, stats = filter_data(InsolvencyType.PRIVATE)
    proceedings = cases[CaseType.VERFAHRENEROEFFNET]

    # Bin proceedings by year
    by_year = defaultdict(list)

    for proceeding in proceedings:
        by_year[proceeding["date"].year].append(proceeding)

    # Bin proceedings by year and week
    by_year_and_week = defaultdict(lambda: defaultdict(list))
    by_year_and_week_count = defaultdict(lambda: defaultdict(int))

    for proceeding in proceedings:
        # Note: isocalendar week behaves weirdly between years
        calendar = proceeding["date"].isocalendar()
        by_year_and_week[calendar[0]][calendar[1]].append(proceeding)
        by_year_and_week_count[calendar[0]][calendar[1]] += 1

    # Construct dataframe
    df_by_week = pd.concat(
        {
            k: pd.Series(v).astype(float)
            for k, v in by_year_and_week_count.items()
        },
        axis=1,
    )

    df_by_week.index.name = "Woche"

    df_by_week["Durchschnitt 2018/2019"] = (df_by_week[2018] +
                                            df_by_week[2019]) / 2.0
    df_by_week = df_by_week.drop(columns=[2018, 2019])

    return df_by_week