diff --git a/census/analyse.py b/census/analyse.py index 34be16650..0b19724d3 100644 --- a/census/analyse.py +++ b/census/analyse.py @@ -52,6 +52,16 @@ transition_sentiment = { 'przechodzę/przeszł_m detranzycję': -1, } + +def calculate_percentages(df: pd.DataFrame, counts: pd.Series) -> pd.Series: + percentages = counts.apply(lambda x: round(100 * x / len(df), 1)) + + return pd.Series({ + **{k: percentages[k] for k in percentages.index}, + **{f"{k}__count": counts[k] for k in counts.index} + }) + + def extract_question( df: pd.DataFrame, question_number: int, @@ -71,10 +81,8 @@ def extract_question( .replace('łącznie: trans_', 'łącznie: trans*') for c in question_series.columns ] - question_series = question_series.sum() - question_series = question_series.apply(lambda x: round(100 * x / len(df), 1)) - return question_series + return calculate_percentages(df, question_series.sum()) def extract_question_single( @@ -88,10 +96,8 @@ def extract_question_single( question_number, ('' if include_answers else 'aggr_') if include_aggregates else '(?!aggr)' )) - question_series = question_series.groupby(f'{question_number}_')[f'{question_number}_'].count() - question_series = question_series.apply(lambda x: round(100 * x / len(df), 1)) - return question_series + return calculate_percentages(df, question_series.groupby(f'{question_number}_')[f'{question_number}_'].count()) def extract_question_single_sentiment( @@ -135,6 +141,12 @@ def generate_graph( show: bool = False ): print('Generating graph', group, name) + + if isinstance(data, pd.DataFrame): + data = data.loc[[idx for idx in data.index if not str(idx).endswith('__count')]] + elif isinstance(data, pd.Series): + data = data[[not str(k).endswith('__count') for k in data.index]].reindex() + is_multi = type(data) is pd.DataFrame and len(data.columns) > 1 if all([type(c) is str and c.startswith('łącznie: ') for c in data.index]): diff --git a/locale/pl/docs/spis-2025/agab_f/age.html b/locale/pl/docs/spis-2025/agab_f/age.html index 34e314fd8..011065434 100644 --- a/locale/pl/docs/spis-2025/agab_f/age.html +++ b/locale/pl/docs/spis-2025/agab_f/age.html @@ -6,6 +6,6 @@