src package¶
Submodules¶
src.utils module¶
Модуль містить допоміжні функції для підготовки даних та проведення розрахунків.
-
src.utils.merge_all(data, on, return_all_regions=True)[source]¶ Послідовно виконує pd.merge на масиві таблиць.
- Параметри
data (list[pd.DataFrame]) – Список таблиць, які необхідно об’єднати
on (str) – Ключ для об’єднання таблиць
return_all_regions (bool) – Чи включати відсутні області в таблицю
- Повертає
Об’єднана єдина таблиця
- Тип повернення
pd.DataFrame
-
src.utils.normalize_parameter(array, fill_na=True, min_bound=None, max_bound=None, feature_range=(0, 1), reverse=False)[source]¶ Імплементація min-max normalization формули:
\[{x}' = a + \frac{(x-min(x))(b-a)}{max(x)-min(x)}\]де \(x\) є array, \(a\) та \(b\) є feature_range, що за замовченням є [0, 1];
Якщо параметри min_bound та max_bound задані, функція ігнорує реальні мінімальні та максимальні значення array.
- Параметри
array (pd.Series) – Колонка, значення якої нормалізуємо
fill_na (bool) – NaN policy: заповнюємо порожні значення нулями (True) або ні (False)
min_bound (Any[None, int, float]) – Задана нижня межа параметрів, або задане мінімальне значення колонки.
max_bound (Any[None, int, float]) – Задана верхня межа параметрів, або задане максимальне значення колонки.
feature_range (tuple (min, max), default=(0, 1)) – Шкала, в межах якої трансформуємо дані: [мінімальне, максимальне]
reverse (bool) – Спосіб нормалізації. Найбільше значення отримує 1 якщо True, 0 якщо False.
Examples
>>> array = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
За замовченням функція трансформує array в шкалу [0, 1], використовуючи наявні максимальні та мінімальні значення колонки.
>>> normalize_parameter(array) feature_range=(0, 1); fill_na=True; array_bounds=(1, 10); normalization_bounds=(1, 10) 0 0.000000 1 0.111111 2 0.222222 3 0.333333 4 0.444444 5 0.555556 6 0.666667 7 0.777778 8 0.888889 9 1.000000 dtype: float64
Можемо задати максимальне значення самостійно. Наприклад, якщо ми хочемо порівняти наявність генеральних планів у селах і за найкращий показник свідомо беремо 100%, але в жодній з областей такого показника немає, ми вручну встановлюємо верхню межу як 100% замість максимального значення по областях
Спрощений приклад на array: якщо max_bound=15, а реальне максимальне значення в межах колонки сягає 10, найкращий з усіх рядків не отримує 1 (тому що порівнюється вже не відносно інших значень, а ще й відносно заданого максимального значення).
>>> normalize_parameter(array, max_bound=15) feature_range=(0, 1); fill_na=True; array_bounds=(1, 10); normalization_bounds=(1, 15) 0 0.000000 1 0.071429 2 0.142857 3 0.214286 4 0.285714 5 0.357143 6 0.428571 7 0.500000 8 0.571429 9 0.642857 dtype: float64
Приклад використання іншої від [0, 1] шкали нормалізації:
>>> normalize_parameter(array, feature_range=(2, 5)) feature_range=(2, 5); fill_na=True; array_bounds=(1, 10); normalization_bounds=(1, 10) 0 2.000000 1 2.333333 2 2.666667 3 3.000000 4 3.333333 5 3.666667 6 4.000000 7 4.333333 8 4.666667 9 5.000000 dtype: float64
- Повертає
Колонка з нормалізованими значеннями
- Тип повернення
pd.Series
-
src.utils.save_data(sources, weights, parameter, show_results=False)[source]¶ Розраховує оцінку галузевого параметру
- Параметри
sources (list[pd.DataFrame]) – Список усіх таблиць з нормалізованими показниками нижнього рівня
weights (dict[str, float]) – Словник з назвою параметру та його вагою
parameter (str) – Галузевий параметр (параметр верхнього рівня): [P1, P2, P3, P4, P5, P6, P7, P8]
-
src.utils.weighted_average(df, columns, weights, multiplier=10)[source]¶ Ф-ція середнього зваженого.
\[\bar{x} = \frac{\sum_{i=1}^{n} w_ix_i}{\sum_{i=1}^{n} w_i} \times m\]де \(x\) є значенням, \(w\) є його вагою значення, \(m\) є мультиплікатором.
- Параметри
df (pd.DataFrame) – Таблиця з параметрами
columns (list[str]) – Перелік колонок, значення яких слід розрахувати
weights (dict[str, float]) – Словник з назвою параметру та його вагою
multiplier (float) – Мультиплікатор результату
Examples
>>> df = pd.DataFrame({ "A": [1, 4, 4, 5, 6, 7, 5, 3, 4, 5], "B": [2, 8, 1, 4, 6, 2, 8, 1, 1, 1], })
Функція адаптова під роботу з таблицею (використовує broadcasting), що містить окремі колонки, які необхідно порахувати; у реальному застосуванні ці колонки визначаються патерном.
>>> weighted_average(df=df, columns=["A", "B"], weights={"A": 1.5, "B": 2}) 0 15.714286 1 62.857143 2 22.857143 3 44.285714 4 60.000000 5 41.428571 6 67.142857 7 18.571429 8 22.857143 9 27.142857 dtype: float64
- Повертає
Колонка з розрахованим середнім зваженим
- Тип повернення
pd.Series
-
src.utils.zscore_wrapper(df, param, cv=1.96)[source]¶ Визначає аутлаєри колонки param за допомогою scipy.stats.zscore.
Відхилення (аутлаєр) є статистично значущим, якщо отримане значення є більшим або меншим за критичне значення cv.
\[z =\frac{x_i-\mu}{\sigma}\]- Параметри
df (pd.DataFrame) – Таблиця з параметрами
param (str) – Назва параметру
cv (float) – Критичне значення [1.96, 2.58] для 95% та 99% стат. значущості відповідно
Examples
Певний параметр може містити аутлаєри, які часом можуть виникати внаслідок помилки в даних або свідчити про аномальну ситуацію в певних областях (обидва варіанти можуть викривлювати результати розрахунків).
Для прикладу я генерую датасет df, що містить одну колонку param, котра складається з випадкового набору значень в межах нормального розподілу (normal distribution)
>>> df = pd.DataFrame({"param": np.random.standard_normal(size=24)}) >>> df param 0 -1.292244 1 -2.610441 2 0.069343 3 -0.959068 4 0.407773 5 0.192192 6 0.694097 7 -0.758156 8 0.403748 9 1.585239 10 -0.807982 11 -0.507439 12 -0.312586 13 0.624023 14 -0.953230 15 -0.797517 16 1.604804 17 -1.187396 18 -0.535961 19 2.263956 20 -0.182657 21 0.616233 22 -0.928197 23 -0.320723
Функція по суті є обгорткою для
scipy.stats.zscoreі повертає ті рядки-аутлаєри (чиї значення zscore виходять за критичне значенняcv)>>> zscore_wrapper(df, "param") param 1 -2.610441 19 2.263956
- Повертає
Таблиця з статистично значущими аутлаєрами
- Тип повернення
pd.DataFrame
src.visualize module¶
Модуль містить допоміжні функції для візуалізації результатів оцінювання.
-
src.visualize.draw_boxplot(ax, data, numbers)[source]¶ Створює boxplot
- Параметри
ax (matplotlib.axes._subplots.AxesSubplot) – Тло візуалізації
data (pd.DataFrame) – Таблиця з розрахованим індексом
numbers (list) – Перелік колонок, які слід ігнорувати
-
src.visualize.draw_boxplot_dist(df_index, cols, save=False)[source]¶ Створює зображення з розподілом показників нижнього рівня. Обгортка для draw_boxplot
- Параметри
df_index (pd.DataFrame) – asd
cols (list[str]) – asd
reg_index (int) – asd
save (bool, defaults False) – asd
-
src.visualize.draw_multiple_spiders(df_index, cols, save=False)[source]¶ Створює графік, що показує значення параметрів верхнього рівня для кожної з областей. Обгорта для draw_spider
- Параметри
df_index (pd.DataFrame) – Таблиця з розрахованим індексом
cols (list[str]) – Колонки параметрів верхнього рівня
save (bool, defaults False) – Чи слід зберігати зображення в
reports/figures
-
src.visualize.draw_profile_det(df_index, cols, reg_index, save=False)[source]¶ Створює графік для області reg_index з оцінками параметрів нижнього рівня
- Параметри
df_index (pd.DataFrame) – Таблиця з розрахованим індексом
cols (list[str]) – Колонки нижнього параметрів рівня
reg_index (int) – номер індексу таблиці області, яку слід візуалізувати
save (bool, defaults False) – Чи слід зберігати зображення в
reports/figures
-
src.visualize.draw_profile_gen(df_index, cols, reg_index, save=False)[source]¶ Створює графік для області reg_index з оцінками параметрів верхнього рівня
- Параметри
df_index (pd.DataFrame) – Таблиця з розрахованим індексом
cols (list[str]) – Колонки верхнього параметрів рівня
reg_index (int) – номер індексу таблиці області, яку слід візуалізувати
save (bool, defaults False) – Чи слід зберігати зображення в
reports/figures
-
src.visualize.draw_rankings(df_index, kvartal='III', save=False)[source]¶ Створює відсортований барчарт з остаточними оцінками.
- Параметри
df_index (pd.DataFrame) – Таблиця з розрахованим індексом
kvartal (str) – Номер кварталу для винесення в заголовок візуалізації
save (bool, defaults False) – Чи слід зберігати зображення в
reports/figures
-
src.visualize.draw_spider(ax, angles, values, values_mean, cols)[source]¶ Spider-візуалізація.
- Параметри
ax (matplotlib.axes._subplots.AxesSubplot) – Тло візуалізації
angles (list[float]) – Нахил для візулаізації
values (list[floats]) – Оцінка параметрів верхнього рівня
values_mean (float) – Середня оцінка параметрів верхнього рівня
cols (list[str]) – Колонки параметрів верхнього рівня
-
src.visualize.dynamic_rankings(df, value, value_colour, change, change_colour, save=False)[source]¶ Створює відсортований барчарт з абсолютною оцінкою та показує динаміку відносно минулого кварталу.
- Параметри
df (pd.DataFrame) – Таблиця з розрахованим індексом
value (pd.Series) – Колонка з абсолютною оцінкою за квартал
value_color (pd.Series) – Колонка з кольорами для основного барчарту
change (pd.Series) – Колонка з різницею абсолютної оцінки відносно минулого кварталу
change_colour (pd.Series) – Колонка з кольорами для точкової діаграми
save (bool, defaults False) – Чи слід зберігати зображення в
reports/figures