Проект использует виртуальное окружение, созданное с помощью pyvenv, для изоляции зависимостей и обеспечения стабильной работы безотносительно операционной системы, под которой он запускается.
python3 -m venv venvДля ОС на основе Unix, BSD или Linux:
source venv/bin/activateДля ОС семейства Windows:
venv\Scripts\activateК проекту прилагается файл requirements.txt с сигнатурами зависимостей. необходимо установить зависимости проекта, используя данный файл:
pip install -r requirements.txtТеперь всё готово для запуска.
/
├ economics_metrices_analyzer/
│ ├─── cli.py -- парсинг аргументов командной строки
│ ├── configurator.py -- класс конфигуратора
│ ├── gdp_calculator.py -- основной модуль рассчёта метрик
│ ├── __init__.py
│ ├── __main__.py -- точка входа модуля
│ ├── parsers.py -- парсеры данных из кортежа CSV-файлов
│ ├── tests -- тесты основного кода
│ │ ├── conftest.py -- конфигурация pytest
│ │ ├── __init__.py
│ │ ├── test_cli.py -- пакет тестов для модуля cli
│ │ ├── test_configurator.py -- пакет тестов для модуля configurator
│ │ ├── test_gdp_calculator.py -- пакет тестов для модуля gdp_calculator
│ │ ├── test_parsers.py -- пакет тестов для модуля parsers
│ │ └── test_utils.py -- пакет тестов для модуля utils
│ └── utils.py -- вспомогательные методы обработки и вывода данных
├── static/ -- логи запусков flake8, pylint, pytest, таблицы корректных результатов запуска
└── requirements.txt
python -m economics_metrices_analyzer --key-column country --files static/economic3.csv --report "average-gdp"python -m economics_metrices_analyzer -e "utf-8" -d , -k country -c gdp -s -f static/*.csv -r "average-gdp"python -m economics_metrices_analyzer --encoding "utf-8" --delimiter , --key-column country --required-columns gdp --skip-invalid --files static/*.csv --report "average-gdp" usage: python -m economics_metrices_analyzer [-h] [--encoding ENCODING]
[--delimiter DELIMITER]
[--key-column KEY_COLUMN [KEY_COLUMN ...]]
[--required-columns REQUIRED_COLUMNS [REQUIRED_COLUMNS ...]]
[--skip-invalid]
--files FILES [FILES ...]
--report {average-gdp,min-gdp,max-gdp} [{average-gdp,min-gdp,max-gdp} ...]
Агрегатор макроэкономических метрик по странам из CSV‑файлов.
options:
-h, --help show this help message and exit
--encoding, -e ENCODING
Кодировка входных файлов(по умолчанию – UTF-8)
--delimiter, -d DELIMITER
Разделитель (по умолчанию – автоопределение)
--key-column, -k KEY_COLUMN [KEY_COLUMN ...]
Возможные значения столбца с названием страны
--required-columns, -c REQUIRED_COLUMNS [REQUIRED_COLUMNS ...]
Перечислите имена столбцов, которые обязаны
присутствовать в каждом файле
--skip-invalid, -s Пропускать строки с ошибками вместо аварийного
завершения
--files, -f FILES [FILES ...]
Источник(-и) данных (поддерживаются шаблны, например
*.csv)
--report, -r {average-gdp,min-gdp,max-gdp} [{average-gdp,min-gdp,max-gdp} ...]
Целевая метрика(-ки)
python -m economics_metrices_analyzer \
-e "utf-8" \
-d , \
-k country \
-c gdp \
-s \
-f static/*.csv \
-r "average-gdp"Argentina:
1) {'country': 'Argentina', 'year': '2023', 'gdp': '520', 'gdp_growth': '1.5', 'inflation': '4.9', 'unemployment': '9.2', 'population': '45', 'continent': 'South America'}
2) {'country': 'Argentina', 'year': '2022', 'gdp': '510', 'gdp_growth': '2.3', 'inflation': '5.5', 'unemployment': '9.0', 'population': '45', 'continent': 'South America'}
3) {'country': 'Argentina', 'year': '2021', 'gdp': '500', 'gdp_growth': '5.0', 'inflation': '5.3', 'unemployment': '9.4', 'population': '45', 'continent': 'South America'}
4) {'country': 'Argentina', 'year': '2020', 'gdp': '460', 'gdp_growth': '-10.0', 'inflation': '3.7', 'unemployment': '10.5', 'population': '45', 'continent': 'South America'}
5) {'country': 'Argentina', 'year': '2019', 'gdp': '480', 'gdp_growth': '2.2', 'inflation': '4.0', 'unemployment': '9.8', 'population': '45', 'continent': 'South America'}
6) {'country': 'Argentina', 'year': '2018', 'gdp': '470', 'gdp_growth': '2.5', 'inflation': '4.2', 'unemployment': '10.0', 'population': '45', 'continent': 'South America'}
7) {'country': 'Argentina', 'year': '2017', 'gdp': '460', 'gdp_growth': '2.8', 'inflation': '4.5', 'unemployment': '10.2', 'population': '45', 'continent': 'South America'}
8) {'country': 'Argentina', 'year': '2016', 'gdp': '450', 'gdp_growth': '2.0', 'inflation': '4.7', 'unemployment': '10.3', 'population': '45', 'continent': 'South America'}
9) {'country': 'Argentina', 'year': '2015', 'gdp': '440', 'gdp_growth': '2.1', 'inflation': '5.0', 'unemployment': '10.5', 'population': '45', 'continent': 'South America'}
average-gdp: 476.67
Australia:
1) {'country': 'Australia', 'year': '2023', 'gdp': '1693', 'gdp_growth': '2.1', 'inflation': '5.2', 'unemployment': '3.7', 'population': '26', 'continent': 'Oceania'}
2) {'country': 'Australia', 'year': '2022', 'gdp': '1675', 'gdp_growth': '3.7', 'inflation': '6.6', 'unemployment': '3.7', 'population': '26', 'continent': 'Oceania'}
3) {'country': 'Australia', 'year': '2021', 'gdp': '1543', 'gdp_growth': '1.6', 'inflation': '2.9', 'unemployment': '5.1', 'population': '26', 'continent': 'Oceania'}
4) {'country': 'Australia', 'year': '2020', 'gdp': '1395', 'gdp_growth': '-2.4', 'inflation': '1.8', 'unemployment': '6.9', 'population': '26', 'continent': 'Oceania'}
5) {'country': 'Australia', 'year': '2019', 'gdp': '1470', 'gdp_growth': '1.7', 'inflation': '2.0', 'unemployment': '5.8', 'population': '26', 'continent': 'Oceania'}
6) {'country': 'Australia', 'year': '2018', 'gdp': '1390', 'gdp_growth': '2.5', 'inflation': '1.9', 'unemployment': '5.5', 'population': '26', 'continent': 'Oceania'}
7) {'country': 'Australia', 'year': '2017', 'gdp': '1325', 'gdp_growth': '2.2', 'inflation': '1.8', 'unemployment': '5.6', 'population': '26', 'continent': 'Oceania'}
8) {'country': 'Australia', 'year': '2016', 'gdp': '1240', 'gdp_growth': '2.0', 'inflation': '1.6', 'unemployment': '5.9', 'population': '26', 'continent': 'Oceania'}
9) {'country': 'Australia', 'year': '2015', 'gdp': '1175', 'gdp_growth': '2.5', 'inflation': '1.5', 'unemployment': '6.2', 'population': '26', 'continent': 'Oceania'}
average-gdp: 1434.0
...
United states:
1) {'country': 'United States', 'year': '2023', 'gdp': '25462', 'gdp_growth': '2.1', 'inflation': '3.4', 'unemployment': '3.7', 'population': '339', 'continent': 'North America'}
2) {'country': 'United States', 'year': '2022', 'gdp': '23315', 'gdp_growth': '2.1', 'inflation': '8.0', 'unemployment': '3.6', 'population': '338', 'continent': 'North America'}
3) {'country': 'United States', 'year': '2021', 'gdp': '22994', 'gdp_growth': '5.9', 'inflation': '4.7', 'unemployment': '5.3', 'population': '337', 'continent': 'North America'}
4) {'country': 'United States', 'year': '2020', 'gdp': '20936', 'gdp_growth': '-3.5', 'inflation': '1.2', 'unemployment': '6.7', 'population': '331', 'continent': 'North America'}
5) {'country': 'United States', 'year': '2019', 'gdp': '20580', 'gdp_growth': '2.2', 'inflation': '1.8', 'unemployment': '3.7', 'population': '328', 'continent': 'North America'}
6) {'country': 'United States', 'year': '2018', 'gdp': '19485', 'gdp_growth': '2.9', 'inflation': '2.4', 'unemployment': '4.0', 'population': '327', 'continent': 'North America'}
7) {'country': 'United States', 'year': '2017', 'gdp': '18560', 'gdp_growth': '2.2', 'inflation': '2.1', 'unemployment': '4.4', 'population': '326', 'continent': 'North America'}
8) {'country': 'United States', 'year': '2016', 'gdp': '17924', 'gdp_growth': '1.5', 'inflation': '1.5', 'unemployment': '4.9', 'population': '324', 'continent': 'North America'}
9) {'country': 'United States', 'year': '2015', 'gdp': '17321', 'gdp_growth': '2.9', 'inflation': '0.1', 'unemployment': '5.3', 'population': '321', 'continent': 'North America'}
average-gdp: 20730.78
python -m economics_metrices_analyzer \
--encoding "utf-8" \
--delimiter , \
--key-column country \
--required-columns gdp \
--skip-invalid \
--files static/*.csv \
--report "average-gdp"Argentina:
1) {'country': 'Argentina', 'year': '2023', 'gdp': '520', 'gdp_growth': '1.5', 'inflation': '4.9', 'unemployment': '9.2', 'population': '45', 'continent': 'South America'}
2) {'country': 'Argentina', 'year': '2022', 'gdp': '510', 'gdp_growth': '2.3', 'inflation': '5.5', 'unemployment': '9.0', 'population': '45', 'continent': 'South America'}
3) {'country': 'Argentina', 'year': '2021', 'gdp': '500', 'gdp_growth': '5.0', 'inflation': '5.3', 'unemployment': '9.4', 'population': '45', 'continent': 'South America'}
4) {'country': 'Argentina', 'year': '2020', 'gdp': '460', 'gdp_growth': '-10.0', 'inflation': '3.7', 'unemployment': '10.5', 'population': '45', 'continent': 'South America'}
5) {'country': 'Argentina', 'year': '2019', 'gdp': '480', 'gdp_growth': '2.2', 'inflation': '4.0', 'unemployment': '9.8', 'population': '45', 'continent': 'South America'}
6) {'country': 'Argentina', 'year': '2018', 'gdp': '470', 'gdp_growth': '2.5', 'inflation': '4.2', 'unemployment': '10.0', 'population': '45', 'continent': 'South America'}
7) {'country': 'Argentina', 'year': '2017', 'gdp': '460', 'gdp_growth': '2.8', 'inflation': '4.5', 'unemployment': '10.2', 'population': '45', 'continent': 'South America'}
8) {'country': 'Argentina', 'year': '2016', 'gdp': '450', 'gdp_growth': '2.0', 'inflation': '4.7', 'unemployment': '10.3', 'population': '45', 'continent': 'South America'}
9) {'country': 'Argentina', 'year': '2015', 'gdp': '440', 'gdp_growth': '2.1', 'inflation': '5.0', 'unemployment': '10.5', 'population': '45', 'continent': 'South America'}
average-gdp: 476.67
Australia:
1) {'country': 'Australia', 'year': '2023', 'gdp': '1693', 'gdp_growth': '2.1', 'inflation': '5.2', 'unemployment': '3.7', 'population': '26', 'continent': 'Oceania'}
2) {'country': 'Australia', 'year': '2022', 'gdp': '1675', 'gdp_growth': '3.7', 'inflation': '6.6', 'unemployment': '3.7', 'population': '26', 'continent': 'Oceania'}
3) {'country': 'Australia', 'year': '2021', 'gdp': '1543', 'gdp_growth': '1.6', 'inflation': '2.9', 'unemployment': '5.1', 'population': '26', 'continent': 'Oceania'}
4) {'country': 'Australia', 'year': '2020', 'gdp': '1395', 'gdp_growth': '-2.4', 'inflation': '1.8', 'unemployment': '6.9', 'population': '26', 'continent': 'Oceania'}
5) {'country': 'Australia', 'year': '2019', 'gdp': '1470', 'gdp_growth': '1.7', 'inflation': '2.0', 'unemployment': '5.8', 'population': '26', 'continent': 'Oceania'}
6) {'country': 'Australia', 'year': '2018', 'gdp': '1390', 'gdp_growth': '2.5', 'inflation': '1.9', 'unemployment': '5.5', 'population': '26', 'continent': 'Oceania'}
7) {'country': 'Australia', 'year': '2017', 'gdp': '1325', 'gdp_growth': '2.2', 'inflation': '1.8', 'unemployment': '5.6', 'population': '26', 'continent': 'Oceania'}
8) {'country': 'Australia', 'year': '2016', 'gdp': '1240', 'gdp_growth': '2.0', 'inflation': '1.6', 'unemployment': '5.9', 'population': '26', 'continent': 'Oceania'}
9) {'country': 'Australia', 'year': '2015', 'gdp': '1175', 'gdp_growth': '2.5', 'inflation': '1.5', 'unemployment': '6.2', 'population': '26', 'continent': 'Oceania'}
average-gdp: 1434.0
...
United states:
1) {'country': 'United States', 'year': '2023', 'gdp': '25462', 'gdp_growth': '2.1', 'inflation': '3.4', 'unemployment': '3.7', 'population': '339', 'continent': 'North America'}
2) {'country': 'United States', 'year': '2022', 'gdp': '23315', 'gdp_growth': '2.1', 'inflation': '8.0', 'unemployment': '3.6', 'population': '338', 'continent': 'North America'}
3) {'country': 'United States', 'year': '2021', 'gdp': '22994', 'gdp_growth': '5.9', 'inflation': '4.7', 'unemployment': '5.3', 'population': '337', 'continent': 'North America'}
4) {'country': 'United States', 'year': '2020', 'gdp': '20936', 'gdp_growth': '-3.5', 'inflation': '1.2', 'unemployment': '6.7', 'population': '331', 'continent': 'North America'}
5) {'country': 'United States', 'year': '2019', 'gdp': '20580', 'gdp_growth': '2.2', 'inflation': '1.8', 'unemployment': '3.7', 'population': '328', 'continent': 'North America'}
6) {'country': 'United States', 'year': '2018', 'gdp': '19485', 'gdp_growth': '2.9', 'inflation': '2.4', 'unemployment': '4.0', 'population': '327', 'continent': 'North America'}
7) {'country': 'United States', 'year': '2017', 'gdp': '18560', 'gdp_growth': '2.2', 'inflation': '2.1', 'unemployment': '4.4', 'population': '326', 'continent': 'North America'}
8) {'country': 'United States', 'year': '2016', 'gdp': '17924', 'gdp_growth': '1.5', 'inflation': '1.5', 'unemployment': '4.9', 'population': '324', 'continent': 'North America'}
9) {'country': 'United States', 'year': '2015', 'gdp': '17321', 'gdp_growth': '2.9', 'inflation': '0.1', 'unemployment': '5.3', 'population': '321', 'continent': 'North America'}
average-gdp: 20730.78
python -m economics_metrices_analyzer \
--key-column country \
--files static/economics3.csv \
--report "average-gdp"
Argentina:
1) {'country': 'Argentina', 'year': '2023', 'gdp': '520', 'gdp_growth': '1.5', 'inflation': '4.9', 'unemployment': '9.2', 'population': '45', 'continent': 'South America'}
2) {'country': 'Argentina', 'year': '2022', 'gdp': '510', 'gdp_growth': '2.3', 'inflation': '5.5', 'unemployment': '9.0', 'population': '45', 'continent': 'South America'}
3) {'country': 'Argentina', 'year': '2021', 'gdp': '500', 'gdp_growth': '5.0', 'inflation': '5.3', 'unemployment': '9.4', 'population': '45', 'continent': 'South America'}
4) {'country': 'Argentina', 'year': '2020', 'gdp': '460', 'gdp_growth': '-10.0', 'inflation': '3.7', 'unemployment': '10.5', 'population': '45', 'continent': 'South America'}
5) {'country': 'Argentina', 'year': '2019', 'gdp': '480', 'gdp_growth': '2.2', 'inflation': '4.0', 'unemployment': '9.8', 'population': '45', 'continent': 'South America'}
6) {'country': 'Argentina', 'year': '2018', 'gdp': '470', 'gdp_growth': '2.5', 'inflation': '4.2', 'unemployment': '10.0', 'population': '45', 'continent': 'South America'}
7) {'country': 'Argentina', 'year': '2017', 'gdp': '460', 'gdp_growth': '2.8', 'inflation': '4.5', 'unemployment': '10.2', 'population': '45', 'continent': 'South America'}
8) {'country': 'Argentina', 'year': '2016', 'gdp': '450', 'gdp_growth': '2.0', 'inflation': '4.7', 'unemployment': '10.3', 'population': '45', 'continent': 'South America'}
9) {'country': 'Argentina', 'year': '2015', 'gdp': '440', 'gdp_growth': '2.1', 'inflation': '5.0', 'unemployment': '10.5', 'population': '45', 'continent': 'South America'}
average-gdp: 476.67
...
United states:
1) {'country': 'United States', 'year': '2023', 'gdp': '25462', 'gdp_growth': '2.1', 'inflation': '3.4', 'unemployment': '3.7', 'population': '339', 'continent': 'North America'}
2) {'country': 'United States', 'year': '2022', 'gdp': '23315', 'gdp_growth': '2.1', 'inflation': '8.0', 'unemployment': '3.6', 'population': '338', 'continent': 'North America'}
3) {'country': 'United States', 'year': '2021', 'gdp': '22994', 'gdp_growth': '5.9', 'inflation': '4.7', 'unemployment': '5.3', 'population': '337', 'continent': 'North America'}
4) {'country': 'United States', 'year': '2020', 'gdp': '20936', 'gdp_growth': '-3.5', 'inflation': '1.2', 'unemployment': '6.7', 'population': '331', 'continent': 'North America'}
5) {'country': 'United States', 'year': '2019', 'gdp': '20580', 'gdp_growth': '2.2', 'inflation': '1.8', 'unemployment': '3.7', 'population': '328', 'continent': 'North America'}
6) {'country': 'United States', 'year': '2018', 'gdp': '19485', 'gdp_growth': '2.9', 'inflation': '2.4', 'unemployment': '4.0', 'population': '327', 'continent': 'North America'}
7) {'country': 'United States', 'year': '2017', 'gdp': '18560', 'gdp_growth': '2.2', 'inflation': '2.1', 'unemployment': '4.4', 'population': '326', 'continent': 'North America'}
8) {'country': 'United States', 'year': '2016', 'gdp': '17924', 'gdp_growth': '1.5', 'inflation': '1.5', 'unemployment': '4.9', 'population': '324', 'continent': 'North America'}
9) {'country': 'United States', 'year': '2015', 'gdp': '17321', 'gdp_growth': '2.9', 'inflation': '0.1', 'unemployment': '5.3', 'population': '321', 'continent': 'North America'}
average-gdp: 20730.78