Repository navigation
Дополнение к коду: вывод статистики и завершение main() #716
Copy link
Copy link
Open
Description
Дополнение к коду: вывод статистики и завершение main()
Добавим недостающую часть функции main() — вывод статистики и сохранение результата.
# Вывод статистики
if args.stats:
stats = processor.describe_extended()
print("\n! + "="*50)
print("РАСШИРЕННАЯ СТАТИСТИКА ПО ЧИСЛОВЫМ КОЛОНКАМ")
print("="*50)
for col, data in stats.items():
print(f"\nКолонка: {col}")
for key, value in data.items():
print(f" {key.capitalize()}: {value:.4f}")
elif args.basic_stats:
stats = processor.describe_extended()
print("\n" + "="*50)
print("БАЗОВАЯ СТАТИСТИКА (mean/median/stdev)")
print("="*50)
for col, data in stats.items():
print(f"\nКолонка: {col}")
for key in ['mean', 'median', 'stdev']:
if key in data:
print(f" {key.capitalize()}: {data[key]:.4f}")
# Сохранение результата
if args.output:
processor.save_data(args.output, result_data)
else:
# Если нет выходного файла — показываем первые 10 строк результата
print("\n! + "="*50)
print("РЕЗУЛЬТАТ (первые 10 строк)")
print("="*50)
print(result_data.head(10).to_string(index=False))
logger.info("Обработка завершена")
if __name__ == "__main__":
main()Как использовать обновлённую версию
- Установите зависимости (если pandas не установлен):
pip install pandas-
Сохраните код в файл
ii_grut.py. -
Примеры запуска из консоли:
# 1. Базовая загрузка и расширенная статистика
python ii_grut.py данные.csv --stats
# 2. Фильтрация: выбрать строки, где Возраст > 18
python ii_grut.py данные.csv --filter Возраст > 18 --output отфильтровано.csv
# 3. Группировка: посчитать сумму продаж по регионам
python ii_grut.py данные.csv --groupby Регион Продажи --agg sum --output итоги.csv
# 4. Базовая статистика (только mean/median/stdev)
python ii_grut.py данные.json --basic-stats
# 5. Комбинированная обработка: фильтрация + группировка + сохранение
python ii_grut.py данные.xlsx \
--filter Статус == "Активный" \
--groupby Город Продажи \
--agg mean \
--output средние_продажи_по_городам.csvНовые возможности по сравнению с предыдущей версией
- Поддержка форматов: CSV, JSON, Excel (xls/xlsx).
- Расширенная фильтрация с операторами:
==,>,<,>=,<=,!=. - Группировка и агрегация по колонкам с функциями: sum, mean, count, min, max.
- Два режима статистики:
--stats— полная (count, mean, median, stdev, min, max, sum);--basic-stats— только базовая (mean, median, stdev).
- Логирование в файл
ii_grut.logи консоль. - Удобный вывод результата:
- сохранение в файл (если указан
--output); - показ первых 10 строк в консоли (если
--outputне указан).
- сохранение в файл (если указан
Возможные доработки
- Добавить поддержку SQL‑баз данных.
- Реализовать визуализацию (графики через matplotlib/seaborn).
- Добавить валидацию схем данных (например, через pandera).
- Сделать веб‑интерфейс на Flask/FastAPI.
- Поддерживать больше форматов (Parquet, XML).
Если нужно добавить какую‑то конкретную функцию или изменить логику — уточните, доработаю код.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
Huaian666 commentedon Jun 18, 2026
lol i keep hitting ctrl+s while testing this... muscle memory from other tools. anyway great work
myltik1702 commentedon Aug 20, 2026
Получаем статистику один раз
stats = processor.describe_extended() if (args.stats or args.basic_stats) else None
Вывод статистики
if args.stats:
print("\n" + "=" * 50)
print("РАСШИРЕННАЯ СТАТИСТИКА ПО ЧИСЛОВЫМ КОЛОНКАМ")
print("=" * 50)
for col, data in stats.items():
print(f"\nКолонка: {col}")
for key, value in data.items():
print(f" {key.capitalize()}: {value:.4f}")
elif args.basic_stats:
print("\n" + "=" * 50)
print("БАЗОВАЯ СТАТИСТИКА (mean/median/stdev)")
print("=" * 50)
for col, data in stats.items():
print(f"\nКолонка: {col}")
for key in ['mean', 'median', 'stdev']:
if key in data:
print(f" {key.capitalize()}: {data[key]:.4f}")
Сохранение результата
if args.output:
processor.save_data(args.output, result_data)
else:
print("\n" + "=" * 50)
print("РЕЗУЛЬТАТ (первые 10 строк)")
print("=" * 50)
if not result_data.empty:
print(result_data.head(10).to_string(index=False))
else:
print("Данные отсутствуют.")
logger.info("Обработка завершена")
myltik1702 commentedon Aug 20, 2026
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"
[project]
name = "data-stats-cli"
version = "0.1.0"
dependencies = ["pandas"]
[project.scripts]
data-stats = "cli_tool:main"