Как составить агрегированную таблицы

Tags:
Power BI

Агрегированные таблицы — это быстрое решение для огромных таблиц DirectQuery в Power BI. В предыдущем посте мы объяснили, что такое агрегация, и почему это важная часть реализации Power BI. Агрегации являются частью модели Composite в Power BI. Для настройки агрегации первым шагом будет создание агрегированной таблицы. Здесь мы расскажем, как можно реализовать этот шаг.

Пример набора данных

Если вы хотите следовать сценарию этого примера, вам понадобится база данных SQL Server с именем AdventureWorksDW. Мы внесли некоторые изменения в свой набор данных, чтобы он был немного больше по размеру его таблицы фактов, поэтому мы можем показать вам функциональность агрегатов. Вы можете скачать ссылку на базу данных здесь:

Download

Пример модели

В этом шаблоне модели мы будем анализировать данные FactInternetSales (которые мы считаем нашей большой таблицей фактов). Создайте отчет Power BI с подключением DirectQuery к SQL Server;

 

С помощью параметра DirectQuery выберите следующие таблицы:

FactInternetSales, DimCustomer, DimDate, DimProduct, DimProductCategory, DimProductSubCategory, DimPromotion и DimGeography.

 

Таблицы, загруженные в Power BI, будут иметь совместные связи, мы просто ограничили связь между таблицей DimDate и FactInternetSales с одной активной связью, основанной на DateKey (в DimDate) и OrderDateKey (в FactInternetSales). Это диаграмма отношений.

 

Что такое агрегированная  таблица

Агрегированная таблица представляет собой таблицу в Power BI, объединенную одним или несколькими полями из исходной таблицы DirectQuery. В нашем случае агрегированная таблица представляет собой сгруппированную таблицу по определенным полям из таблицы FactInternetSales. Совокупная таблица может быть создана всеми возможными способами. Вы можете создать агрегированную таблицу с операторами T-SQL из SQL Server. Или вы можете создать ее в Power Query. Вы можете создать его во всех других инструментах преобразования данных и языках запросов. Поскольку мы здесь делаем все с помощью Power BI, мы создадим агрегированную таблицу с Power Query.

Агрегированную таблицу можно создать в источнике данных с запросами T-SQL или в Power Query или в другом месте, где вы можете создать сгруппированную таблицу.

Создание агрегированной таблицы

Перейдите в Power Query Editor и выберите таблицу FactInternetSales. Агрегированная таблица, которую мы собираемся создать в этом примере, будет состоять из трех полей: OrderDateKey, CustomerKey и ProductSubCategoryKey. Первые два поля существуют в FactInternetSales, но не в третьем. Однако, используя столбцы связей, мы можем получить это.

Прокрутите направо в столбцах таблицы FactInternetSales, чтобы найти Product, затем нажмите Expand. В параметрах Expand просто выберите ProductSubCategoryKey.

 

Теперь, когда вы получили ProductSubCategoryKey в таблице, вы можете применить Group By. На вкладке Transformation нажмите Group By;

 

Когда появится диалоговое окно Group By, выберите Advanced

 

Выберите три поля OrderDateKey, CustomerKey и ProductSubcategoryKey в полях Group By

 

Затем добавьте четыре агрегации, как показано ниже:

 

После построения этой таблицы назовем ее Sales Agg table. Вот скриншот этой таблицы.

 

Ключевое рассмотрение предстоящих шагов

Агрегационные столбцы в агрегированной таблице должны соответствовать определенным правилам.

Правило № 1: точное соответствие для типов данных агрегации по Sum, Min, Max, Average

Столбцы, к которым применяется такая операция, как Sum, Average, Min или Max, должны иметь точно такой же тип данных, что и исходный столбец источника после агрегации. Если они этого не делают, убедитесь, что вы изменили типы данных, чтобы они были одинаковыми.

Поле SalesAmount в FactInternetSales имеет десятичный тип данных (если нет, измените его на это)

 

В столбце SalesAmount_Sum таблицы Sales Agg также должен быть одинаковый тип данных. В этом случае Decimal.

 

Обратите внимание, что наличие десятичного типа данных не является важной частью правила. Важно, чтобы оба типа данных точно соответствовали друг другу.

Этот процесс в нашем примере должен быть завершен для двух столбцов SalesAmount_Sum и UnitPrice_Sum.

Правило №2: Тип данных с полным номером является обязательным для агрегаций по Count

Любые агрегации, которые используют Count в качестве функции агрегации, должны иметь тип данных всего числа или, скажем, Integer. В нашей примерной таблице у нас есть два столбца с функцией Count:

 

Вы должны убедиться, что эти два столбца имеют тип данных целого числа после Group by transform;

 

Два упомянутых выше правила будут важны в следующих статьях о шагах агрегации, когда мы будем выполнять настройку агрегации в Power BI.

Агрегированная таблица — это таблица импорта

Совокупная таблица, которую мы создали, называется Sales Agg. Поскольку эта таблица намного меньше, чем таблица FactInternetSales, ее можно сохранить в памяти. Таким образом, мы получаем максимальную производительность отклика запроса, когда мы запрашиваем что-то на агрегированном уровне.

Теперь ваша модель данных в Power BI должна иметь таблицы ниже, после завершения этого шага:

 

Поздравляем, вы создали сводную таблицу, и теперь вы можете создавать отношения между этой таблицей и тремя таблицами измерений: DimCustomer, DimDate и DimProductSubcategory. Вот диаграмма полной взаимосвязи;

 

На следующем шаге мы объясним, что такое режим хранения, и насколько важна конфигурация модели Dual storage при использовании агрегаций.

Если вы хотите узнать, что такое агрегация, и как это может быть полезно, прочитайте предыдущий пост здесь.

Содержание

  • Составить агрегированный баланс организации
  • Агрегированный баланс – общее понятие и предназначение
    • Степени агрегирования
  • Составление и оформление баланса
    • Пример статей и кодов строк
    • Каким бывает анализ агрегированного баланса
      • Статьи баланса
  • Агрегирование баланса
  • Тестовая база к разделу «Анализ финансовой отчетности»
  • 3.Принадлежности капитала

Составить агрегированный баланс организации

Агрегирование баланса — это объединение однородных по экономическому содержанию статей баланса. При этом статьи актива баланса перегруппировываются по степени их ликвидности. Под ликвидностью активов понимают их способность превращения в денежную форму. Так, наиболее ликвидными являются денежные средства и ценные бумаги, а наименее ликвидными — основные средства. Текущие пассивы перегруппировываются по сроку погашения.

Таблица 1

Схема расчета укрупненных статей баланса

Показатель Код строки баланса
АКТИВ
1. Наиболее ликвидные активы (А1) (денежные средства и финансовые вложения) 1240 + 1250
2. Быстрореализуемые активы (А2) (дебиторская задолженность до 1 года и прочие оборотные средства) 1232 + 1260
3. Медленно реализуемые активы (А3) (запасы и затраты) 1210 + 1220
4. Труднореализуемые активы (А4) (Внеоборотные активы и дебиторская задолженность свыше 1 года) 1100 + 1231
Итого активов (имущества), А
ПАССИВ
1. Наиболее срочные обязательства (П1) (кредиторская задолженность и прочие обязательства) 1520 + 1540 + 1550
2. Краткосрочные обязательства (П2) (краткосрочные займы)
3. Долгосрочные обязательства
4. Собственный капитал (капитал и резервы + доходы будущих периодов) 1300 + 1530
Итого пассивов (обязательств), П

Для определения кредитоспособности заемщика проводится оценка его финансового состояния. Цель анализа — получение объективной оценки его финансового положения, способности заемщика своевременно и в полном объеме погасить задолженность по ссуде. Для оценки кредитоспособности заемщика с точки зрения банка предстоит рассчитать для нее коэффициенты ликвидности и финансовой устойчивости.

Банки оценивают финансовое состояние заемщиков по коэффициентам ликвидности (абсолютной, текущей и покрытия), финансового риска (соотношению собственных и заемных средств), а также рентабельности.

Показатели ликвидности характеризуют обеспеченность заемщика оборотными средствами. Первый из них, коэффициент абсолютной ликвидности, рассчитывается по формуле 1. Он показывает, насколько быстро компания в состоянии расплатиться по своим обязательствам, какая часть ее краткосрочных долгов может быть при необходимости погашена за счет имеющихся денежных средств и высоколиквидных краткосрочных ценных бумаг.

Формула 1. Расчет коэффициента абсолютной ликвидности

Используемые обозначения Расшифровка Ед. измерения Источник данных
К1 Коэффициент абсолютной ликвидности ед. Результат расчета
ДС Денежные средства руб. Баланс, стр. 1250
КВ Краткосрочные финансовые вложения руб. Баланс, стр. 1240 (только государственные ценные бумаги, ценные бумаги Сбербанка России и средства на депозитных счетах; если нет детальной информации по вложениям, этот показатель в расчетах не участвует)
КО Краткосрочные обязательства руб. Баланс, стр. 1500
ДП Доходы будущих периодов руб. Баланс, стр. 1530
РП Резервы предстоящих расходов руб. Баланс, стр. 1540 (оценочные обязательства)

Промежуточный коэффициент покрытия или критической (быстрой) ликвидности говорит о способности компании погасить свои текущие обязательства в критической ситуации только за счет дебиторской задолженности, денежных средств и ликвидных финансовых вложений. Предполагается, что ликвидационная стоимость запасов нулевая. Коэффициент определяется по формуле 2.

Формула 2. Расчет коэффициента критической ликвидности

Используемые обозначения Расшифровка Единицы измерения Источник данных
К2 Коэффициент критической (быстрой) ликвидности ед. Результат расчета
ДС Денежные средства руб. Баланс, стр. 1250
КВ Краткосрочные финансовые вложения руб. Баланс, стр. 1240 (только государственные ценные бумаги, ценные бумаги Сбербанка России и средства на депозитных счетах; если нет детальной информации по вложениям, этот показатель в расчетах не участвует)
ДЗ Дебиторская задолженность руб. Баланс, стр. 1230
КО Краткосрочные обязательства руб. Баланс, стр. 1500
ДП Доходы будущих периодов руб. Баланс, стр. 1530
РП Резервы предстоящих расходов руб. Баланс, стр. 1540 (оценочные обязательства)

Общий коэффициент покрытия или текущей ликвидности свидетельствует о достаточности оборотного капитала для погашения краткосрочных обязательств компании. Вычисляется по формуле 3.

Формула 3. Расчет коэффициента текущей ликвидности

Используемые обозначения Расшифровка Ед. измер. Источник данных
К3 Коэффициент текущей ликвидности ед. Результат расчета
ЛА Ликвидные активы руб. Расчет по формуле
ТО Текущие обязательства руб. Сумма краткосрочных заемных средств (баланс, раздел V, стр. 1510), кредиторской задолженности (баланс, раздел V, стр. 1520) и прочих обязательств (баланс, раздел V, стр. 1550)

Коэффициент соотношения собственных и заемных средств или финансового риска показывает, сколько собственных средств компании приходится на рубль заемных. Для его расчета применяется формула 4.

Формула 4. Расчет коэффициента соотношения собственных и заемных средств

Используемые обозначения Расшифровка Ед. изм. Источник данных
К4 Коэффициент соотношения собственных и заемных средств ед. Результат расчета
СС Собственные средства руб. Сумма капитала и резервов (баланс, раздел III, стр. 1300), доходов будущих периодов (баланс, раздел V, стр. 1530), долгосрочных (баланс, раздел IV, стр. 1430) и краткосрочных (баланс, раздел V, стр. 1540) оценочных обязательств за минусом капитальных затрат по арендованному имуществу (отчет о финансовых результатах или прибылях и убытках, стр. 2350) и задолженности акционеров по взносу в уставный капитал (баланс, раздел II, стр. 1230, детальнее – счет 75 «Расчеты с учредителями»)
ДО Долгосрочные обязательства руб. Баланс, стр. 1400
КО Краткосрочные обязательства руб. Баланс, стр. 1500
ДП Доходы будущих периодов руб. Баланс, стр. 1530
ДОоц Долгосрочные оценочные обязательства руб. Баланс, стр. 1430
КОоц Краткосрочные оценочные обязательства руб. Баланс, стр. 1540

Кроме прочего, для анализа кредитоспособности рассчитываются два показателя рентабельности – продаж и деятельности в целом.

Формула 5. Расчет рентабельности продаж

Используемые обозначения Расшифровка Единицы измерения Источник данных
К5 Рентабельность продаж ед. Результат расчета
ПР Прибыль от реализации ед. Отчет о финансовых результатах (о прибылях и убытках), стр. 2200
ВР Выручка от реализации руб. Отчет о финансовых результатах (о прибылях и убытках), стр. 2110

Формула 6. Расчет рентабельности деятельности

Агрегированный баланс – общее понятие и предназначение

Агрегированный баланс – это обобщенная (укрупненная) форма бухгалтерского баланса, благодаря использованию которой процедура проведения финансового анализа упрощается. вы узнаете, как правильно составить отчет о финансовых результатах фирмы.

Следует отметить, что даже стандартный бухгалтерский баланс в определенной степени является агрегированным из-за того, что некоторые приведенные в нем данные имеют схожий экономический смысл и объединяются в статьи. Об этом говорится в Приказе Минфина № 66н от 2 июля 2010 года.

Агрегированный баланс обладает рядом особенностей, а именно:

  • Максимально упрощен, поэтому не вызывает сложностей при изучении и позволяет быстро выделить основные показатели, оказывающие влияние на экономическое положение организации;
  • Содержит данные, предназначенные для расчета коэффициента финансовой устойчивости, индекса деловой активности, ликвидности;
  • Формируется различными способами, ведь единого алгоритма укрупнения не существует;
  • Имеет структуру стандартного баланса – преобразуются только статьи;
  • Уровень достоверности проведенного анализа зависит от степени агрегирования информации: чем сильнее укрупнены данные, тем ниже качество оценки.

Как уже говорилось выше, агрегированный бухгалтерский баланс требуется при проведении анализа. На его основе производится оценка двух важных показателей, один из которых – ликвидность, второй – платежеспособность предприятия. Они взаимосвязаны друг с другом.

Так при расчете ликвидности сумма 3-х активов делится на сумму 2-х пассивов, а полученный результат позволяет установить, хватит ли организации денежных средств для покрытия имеющейся задолженности в текущем году.

Структуру и основные правила составления баланса можно посмотреть в этом видео:

Степени агрегирования

Общее количество степеней агрегирования бухгалтерского баланса назвать невозможно. Это связано с тем, что отчетный документ может быть составлен несколькими способами и предназначаться для проведения различного по глубине анализа.

Наиболее известны 2 степени агрегирования баланса – высшая и предшествующая ей. В первом случае данные максимально укрупнены и входят либо в раздел «Активы», либо в раздел «Пассивы», а единственным числовым показателем остается валюта.

Во втором случае упомянутые выше статьи детализированы. Так раздел «Активы» может включать в себя пункты «Внеоборотные активы» и «Оборотные активы», а в раздел «Пассивы» – подразделы «Капитал и резервы», «Долгосрочные обязательства», «Краткосрочные обязательства».

Составление и оформление баланса

Основой для формирования агрегированного баланса служит стандартный бухгалтерский баланс. В процессе укрупнения данных производится объединение статей, имеющих сходное экономическое содержание. Общая структура финансового документа остается нетронутой, поэтому сохраняется равенство активов и пассивов.

Чтобы сформировать агрегированный баланс, необходимо:

  1. Располагать оборотно-сальдовой ведомостью и стандартным бухгалтерским отчетом;
  2. Проанализировать содержание документов и выделить в них подразделы, которые можно объединить;
  3. Используя Microsoft Excel или аналогичную программу, составить отчет в виде таблицы, включающей в себя столбцы (их число зависит от степени агрегирования) с уже обобщенной информацией.

Это важно! Объединение разделов стандартного баланса должно иметь экономическое обоснование. В частности активы группируются по степени ликвидности, а пассивы – по срокам погашения.

Баланс для анализа финансовой устойчивости.

Пример статей и кодов строк

Готовый агрегированный баланс может выглядеть следующим образом:

Статья Коды строк стандартного баланса
Активы
Постоянные активы:
Нематериальные активы 110
Основные средства 120+135
Капиталовложения 130
Долгосрочные вложения 140
Прочие НМА 150
Дебиторская задолженность со сроком погашения более года 230
Итого постоянные активы: 190+230
Текущие активы
НЗП 213
Авансы поставщикам 245
Запасы и МБП 211
Готовая продукция 214
Дебиторская задолженность со сроком погашения до года 215+
Денежные средства 250+260
Прочие текущие активы +246+270
Итого текущие активы: 290-244-230
БАЛАНС АКТИВОВ: 300-244
Пассивы
Собственные средства:
Уставной капитал 410+420+244
Накопленный капитал
Итого собственные средства: 490-244
Заемные средства
Долгосрочные обязательства 590
Краткосрочные кредиты 610
Кредиторская задолженность 621+622+623
Авансы покупателей 627
Расчеты с бюджетом и фондами 625+626
Расчеты по зарплате 624
Прочие пассивы
Текущие пассивы 690
Итого заемные средства: 590+690
БАЛАНС ПАССИВОВ 700-244

Каким бывает анализ агрегированного баланса

Агрегированная форма баланса используется для проведения двух видов анализа. Первый из них – вертикальный, а второй – горизонтальный. Краткие описания обоих приведены ниже.

Вертикальный анализ представляет собой эффективный способ оценки структуры и динамики всех расходов и прибылей в общей выручке предприятия. Его результаты позволяют определить тенденции, свойственные деятельности организации в заданном временном промежутке.

При проведении горизонтального анализа данные из агрегированного баланса сравниваются с аналогичными значениями, полученными ранее, например, месяц или год назад.

Одновременно с этим учитывается уровень инфляции, что дает возможность выявить определенные закономерности и сделать прогноз относительно будущих финансовых показателей предприятия.

Представленные виды анализа дополняют друг друга. Их единовременное проведение позволяет сформировать общее представление об экономическом положении организации.

Пример агрегированного баланса.

Статьи баланса

Количество статей в описываемой форме бухгалтерского баланса зависит от степени агрегирования. Если последняя является высшей, то документ имеет такую структуру, в которой есть всего 2 раздела: «Активы» и «Пассивы». Если баланс более развернут, то статей в нем гораздо больше.

вы узнаете, как правильно рассчитать и определить чистые активы в балансе.

Они формируются путем объединения схожих разделов стандартного бухгалтерского баланса. В приведенном выше примере статьи находятся в первом столбце. Это нематериальные активы, основные средства, долгосрочные вложения, уставной капитал и т.д.

Агрегированный баланс – важный финансовый документ. Он редко вызывает сложности в процессе составления, но при этом заметно облегчает аналитику. Отсюда следует, что использование укрупненной формы бухгалтерского баланса – залог проведения качественного экономического анализа.

Пример составления агрегированного баланса можно посмотреть тут:

Агрегирование баланса

Источником информации при проведении финансового анализа служит бухгалтерский баланс. Бухгалтерский баланс – это отчетный документ, представляющий собой детализированный перечень в стоимостной оценке имущества предприятия (активы) и источников их возникновения (пассивы).

Для удобства чтения данных и проведения анализа производят преобразование стандартной формы бухгалтерского баланса в укрупненную (агрегированную) форму.

Основным отличием агрегированного баланса от стандартного является перегруппировка статей бухгалтерского баланса, объединяющая статьи бухгалтерского баланса с одинаковым экономическим содержанием.

Форма агрегированного баланса более удобна для чтения и проведения анализа, она позволяет выделить ключевые элементы, характеризующие состояние компании. Кроме того, подобная форма представления информации близка (методологически и терминологически) к используемым в мировой практике формам балансовых отчетов. Корректное агрегирование статей бухгалтерского баланса является основой для проведения качественного финансового анализа.

На основании статей агрегированного баланса рассчитываются основные показателей, использующихся для характеристики финансового положения организации – коэффициенты ликвидности, финансовой устойчивости, оборачиваемости и т.п.

Агрегированный баланс предприятия, пример составления

При составлении агрегированного баланса сохраняется структура исходного баланса – выделение постоянных и текущих активов, собственного и заемного капитала, сохраняется равенство общих величин (сальдо) актива и пассива баланса. Однако внутри разделов осуществляется ряд преобразований.

Стоит отметить важную особенность агрегирования в финансовом анализе. Уровень укрупнения данных определяет уровень пригодности их для анализа. Чем больше данные агрегированы, тем менее качественный анализ можно провести. Следует подчеркнуть, что единого алгоритма агрегирования баланса для всех известных в практике форматов не существует. Проводя такое агрегирование, необходимо руководствоваться, прежде всего, здравым смыслом и логикой последующего анализа, в основе которой лежит подразделение активов и пассивов на долгосрочные и краткосрочные.

Тестовая база к разделу «Анализ финансовой отчетности»

(правильный вариант ответа выделен жирным шрифтом)

1. Понятие «ликвидность активов» означает:

1.Способность активов организации приносить доход, достаточный для покрытия всех расходов, связанных с производством и реализацией продукции, работ, услуг

2. Период, в течение которого имущество предприятия полностью изнашивается и подлежит ликвидации

3. Способность превращения активов в денежную форму в короткий срок и без существенного снижения их стоимости

4. Период ликвидации имущества предприятия при банкротстве

2. Агрегирование (уплотнение) баланса осуществляется:

1. Вычитанием средних арифметических сумм

2. Объединением в группы однородных статей

3. Исключением регулирующих статей

3. Ликвидность баланса отражает:

1. Состояние имущества и обязательств, при котором предприятие подлежит ликвидации

2. Степень покрытия обязательств предприятия его активами, срок превращения которых в денежную форму соответствует сроку погашения обязательств

3. Период утраты платежеспособности предприятия

4. В агрегированном балансе-нетто статьи актива баланса могут быть сгруппированы по:

1.Принадлежности капитала

2. Степени ликвидности

3. Продолжительности использования капитала

5. Статьи пассива агрегированного баланса могут быть сгруппированы по:

>1.Степени ликвидности

2.Срочности оплаты (степени востребования)

3.Принадлежности капитала

6. К внеоборотным активам относятся:

1. Расчеты по дивидендам

2. Основные средства

3. Краткосрочные финансовые вложения

7. К оборотным активам относятся:

1. Запасы

2. Долгосрочные финансовые вложения

3. Нематериальные активы

8. Эффективность использования оборотных активов характеризуется:

1. Рентабельностью оборотных активов

2. Структурой оборотных средств

3. Структурой капитала

9. Коэффициент текущей ликвидности характеризует:

1. Способность организации отвечать по своим долгосрочным обязательствам

2. Достаточность средств для погашения обязательств в случае его ликвидации

3. Способность отвечать по своим краткосрочным обязательствам в полном объеме и в надлежащие сроки, исходя из имеющихся оборотных активов

10. Чистые оборотные активы определяются так:

1. Активы — Обязательства

2. Собственный капитал — Обязательства

11. В величину стоимости чистых активов не включаются статьи:

1. Нематериальные активы

2. Прочие внеоборотные активы

3. Собственные акции, выкупленные у акционеров

12. В величину срочных обязательств, принимаемых в расчет коэффициентов ликвидности, не включается статья:

1. Расчеты по дивидендам

2. Прочие краткосрочные пассивы

3. Доходы будущих периодов

13. При расчете чистых активов в состав активов не включается статья:

1. Дебиторская задолженность, срок погашения которой превышает 12 месяцев

2. Прочие оборотные активы

3. Задолженность участников (учредителей) по взносам в уставный капитал

14. В величину стоимости чистых активов не включаются статьи:

1. Нематериальные активы

2. Прочие внеоборотные активы

3. Собственные акции, выкупленные у акционеров

15. В величину срочных обязательств, принимаемых в расчет коэффициентов ликвидности, не включается статья:

1. Расчеты по дивидендам

2. Прочие краткосрочные пассивы

3. Доходы от будущих периодов

16. При расчете чистых активов в состав активов не включается статья:

1. Дебиторская задолженность, срок погашения которой превышается 12 месяцев

2. Прочие оборотные активы

3. Задолженность участников (учредителей) по взносам в уставный капитал

17.В величину срочных обязательств, принимаемых в расчет коэффициентов ликвидности, не включается статья:

1. Расчеты по дивидендам

2. Прочие краткосрочные пассивы

3. Резерв по сомнительным долгам

18. При расчете чистых активов в состав активов не включается статья:

1. Дебиторская задолженность, срок погашения которой превышается 12 месяцев

2. Расходы будущих периодов

3. Задолженность участников (учредителей) по взносам в уставный капитал

19. В числитель коэффициента текущей ликвидности не включается:

1. Долгосрочная дебиторская задолженность

2. Прочие оборотные активы

3. Расходы в незавершенном производстве

20. В состав краткосрочных обязательств при расчете коэффициента абсолютной ликвидности не включаются:

1. Задолженность по выплате дивидендов

2. Доходы будущих периодов

3. Прочие краткосрочные пассивы

21. В числе коэффициента абсолютной ликвидности отражается:

1. Денежные средства

2. Денежные средства и их эквиваленты

3. Денежные средства и дебиторская задолженность покупателей с устойчивым финансовым положением

22. В величину срочных обязательств, принимаемых в расчет чистых оборотных активов, не включается статья:

1. Расчеты по дивидендам

2. Прочие краткосрочные пассивы

3. Резервы предстоящих расходов (или добавочный капитал)

23. К ликвидным активам 2 класса можно отнести:

1. Краткосрочная дебиторская задолженность (менее 12 месяцев)

2. Ценные бумаги, не имеющие рыночной котировки

3. Просроченная дебиторская задолженность

4. Готовая продукция, на которую заключены договора с покупателями

24. К ликвидным активам 3 класса можно отнести:

1. Товары, предназначенные для оптовой продажи на условиях предоплаты

2. Ценные бумаги, не имеющие рыночной котировки

3. Просроченная дебиторская задолженность

4. Непросроченная дебиторская задолженность

5. Готовая продукция

25. К ликвидным активам 2 класса можно отнести:

1. Краткосрочная дебиторская задолженность

2. Ценные бумаги со сроком реализации 3 банковских дня

3. Денежные средства на расчетном счете, блокированные в связи с выставлением аккредитива

4. Денежные средства в кассе

5. Готовая продукция, предназначенная к отгрузке в счет поступившей от покупателя предоплаты – если в вопросе будет 3 класса

26. К ликвидным активам 1 класса можно отнести:

1. Товары, предназначенные для оптовой продажи на условиях предоплаты

2. Ценные бумаги со сроком реализации 3 банковских дня и Денежные средства в кассе

3. Денежные средства на расчетном счете, блокированные в связи с выставлением аккредитива

4. Готовая продукция, предназначенная к отгрузке в счет поступившей от покупателя предоплаты

27. К ликвидным активам 1 класса нельзя отнести:

1.Товары, предназначенные для оптовой продажи на условиях предоплаты, денежные средства на расчетном счете, блокированные в связи с выставлением аккредитива, и готовую продукцию, предназначенную к отгрузке в счет поступившей от покупателя предоплаты

2. Ценные бумаги со сроком реализации 3 банковских дня и Денежные средства в кассе

28. Оборачиваемость готовой продукции рассчитывается исходя из:

1. Полная себестоимость произведенной продукции

2. Полная себестоимость реализованной продукции

3. Плановая производственная себестоимость продукции

4. Выручки от продаж

29. К ликвидным активам 3 класса можно отнести:

1. Запасы, дебиторы, готовая продукция

2. Запасы, НДС по приобретенным ценностям, авансы полученные

3. Материалы, незавершенное производство, готовая продукция, НДС по приобретенным ценностям, товары отгруженные

4. Запасы, НДС по приобретенным ценностям, дебиторская задолженность сроком погашения свыше 12 месяцев, авансы выданные

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Агрегации в аналитике

Аналитические задачи в бизнесе

Каждую минуту кто-то в мире совершает покупку или просто заходит на сайт интернет-магазина. Сегодня даже самые маленькие фирмы собирают большое количество данных о покупках, клиентах и партнерах. Данные такого объема бывает трудно помещать на один график и анализировать визуально, поэтому аналитикам нередко приходится прибегать к сжатию данных — агрегации.

В этом уроке вы узнаете, что такое агрегация и как работать с агрегированными данными. Мы изучим пять основных агрегаций и научимся построить их в Google Sheets.

Что такое агрегация

Агрегация данных — это способ преобразования набора данных в одно результирующее значение. Это значение описывает исходный набор данных с точки зрения того, какая именно агрегация была выбрана.

На схеме агрегацию данных можно изобразить так:

avatar

К основным агрегациям можно отнести:

  • Количество данных
  • Сумма значений
  • Среднее значение
  • Минимальное значение
  • Максимальное значение

Агрегированные данные — это набор нескольких значений, описывающих исходные данные. Агрегированные данные позволяют охарактеризовать данные вне зависимости от их объема в наборе. Чем больше агрегаций, тем точнее.

Далее на примере аналитической задачи мы разберем основные функции агрегации и узнаем, как их реализовывать в Google Sheets.

Основные агрегации

Представим, что мы аналитики в интернет-магазине «Все для дома». Нам нужно предоставить руководителю отчет о покупках за прошедший месяц. Известно, что ему нужны ответы на следующие вопросы:

  • Как часто клиенты покупали у нас?
  • Сколько мы заработали денег на покупках?
  • Какой средний чек покупки?
  • Какая была максимальная покупка?
  • Какая была минимальная покупка?

Для ответа на эти вопросы нам предоставили таблицу с суммами покупок за последний месяц. Задача — собрать агрегированные данные по информации о покупках.

Для удобства будем собирать эти данные в такую таблицу:

avatar

Количество данных: как часто клиенты покупали у нас?

Чтобы ответить на этот вопрос, можно посчитать количество всех совершенных покупок за месяц.

Нам нужно посчитать количество строк в таблице. В Google Sheets это можно сделать с помощью функции COUNT:

  • Шаг 1. В нужной ячейке вводим =COUNT
  • Шаг 2. Открываем скобки и указываем диапазон значений, для которых нужно посчитать агрегацию
  • Шаг 3. Нажимаем Enter

avatar

Количество данных для этого набора — 181. Много это или мало? Мы не можем ответить, пока не сравним это количество покупок с той же метрикой за прошлые месяцы.

Сумма значений: cколько мы заработали денег на покупках?

Выручку от продаж можно получить, если сложить суммы всех покупок за месяц.

Посчитаем сумму всех значений столбца «Сумма покупки» в нашей таблице. В Google Sheets это можно сделать с помощью функции SUM.

  • Шаг 1. В нужной ячейке вводим =SUM
  • Шаг 2. Открываем скобки и указываем диапазон значений, для которых нужно посчитать агрегацию
  • Шаг 3. Нажимаем Enter

avatar

Выручка интернет-магазина за этот месяц составила 848 855,7. На этом этапе мы выяснили, что в прошлом месяце 181 покупка принесла 848 855,7 рубля.

Среднее значение: какой средний чек покупки?

Средний чек покупки — это то же самое, что и среднее значение суммы всех покупок.

Посчитаем сумму всех значений и поделим ее на количество значений. В Google Sheets это можно сделать с помощью функции AVERAGE:

  • Шаг 1. В нужной ячейке вводим =AVERAGE
  • Шаг 2. Открываем скобки и указываем диапазон значений, для которых нужно посчитать агрегацию
  • Шаг 3. Нажимаем Enter

avatar

Таким образом, средний чек за месяц составил 4 689,81 рубля. Другими словами, именно столько тратят покупатели в нашем интернет-магазине в среднем за одну покупку.

Минимальное значение: какая была минимальная покупка?

Чтобы рассчитать минимальную покупку, нужно найти минимальное значение всех покупок.

Можно отсортировать набор данных по возрастанию и взять самое первое значение. В Google Sheets это можно сделать с помощью функции MIN:

  • Шаг 1. В нужной ячейке вводим =MIN
  • Шаг 2. Открываем скобки и указываем диапазон значений, для которых нужно посчитать агрегацию
  • Шаг 3. Нажимаем Enter

avatar

Минимальная сумма покупки месяца составила 1,25. Теперь мы знаем, что за месяц не было ни одной покупки ниже этой суммы. Возможно, за такую цену был приобретен пакет, что может указывать на самый дешевый товар в магазине.

Максимальное значение: какая была максимальная покупка?

Чтобы рассчитать самую дорогую покупку, нам нужно найти максимальное значение среди всех покупок.

Отсортируем набор данных по убыванию и возьмем первое значение. В Google Sheets это можно сделать с помощью функции MAX:

  • Шаг 1. В нужной ячейке вводим =MAX
  • Шаг 2. Открываем скобки и указываем диапазон значений, для которых нужно посчитать агрегацию
  • Шаг 3. Нажимаем Enter

avatar

Самая дорогая покупка в прошлом месяце обошлась в 46 935 рублей. Это значение сильно выше среднего чека — значит оно могло сильно сместить расчет среднего чека. Мы можем сделать вывод, что в прогнозах не стоит полагаться на получившееся среднее значение.

В итоге у нас получилась вот такая таблица агрегированных данных:

avatar

Краткий отчет может выглядеть следующим образом:

«За прошлый месяц была совершена 181 покупка, что принесло фирме выручку в размере 848 855 рублей. Минимальное и максимальное значения покупок сильно далеки друг от друга, поэтому разброс между суммами покупок большой. Это означает, что средний чек может быть сильно смещен. Вероятно, расчеты среднего чека не показывают, какую сумму среднестатистический покупатель действительно тратит в магазине».

В дополнение скажем, что агрегации можно применять и к нечисловым данным. Например, мы хотим описать набор данных с именами наших клиентов. Тогда можно посчитать количество уникальных значений — количество уникальных имен. Так мы сможем посчитать самое распространенное имя среди наших клиентов — то есть самое часто встречающееся значение. В статистике его еще называют модой.

Выводы

В этом уроке мы узнали, что такое агрегация и для чего нужно агрегировать данные. Теперь вы умеете реализовать агрегацию в Google Sheets.

Напомним ключевые выводы урока:

Введение¶

Одна из базовых функций анализа данных — группировка и агрегирование. В некоторых случаях этого уровня анализа может быть достаточно, чтобы ответить на вопросы бизнеса. В других случаях — это может стать первым шагом в более сложном анализе.

В pandas функцию groupby можно комбинировать с одной или несколькими функциями агрегирования, чтобы быстро и легко обобщать данные. Эта концепция обманчиво проста и большинство новых пользователей pandas поймут ее. Однако они удивятся тому, насколько полезными могут стать функции агрегирования для проведения сложного анализа данных.

В этом Блокноте кратко изложены основные функции агрегирования pandas и показаны примеры более сложных настраиваемых агрегаций. Независимо от того, являетесь ли вы начинающим или опытным пользователем pandas, я думаю, вы узнаете что-то новое для себя.

Оригниал статьи Криса тут.

Агрегирование¶

В контексте даннной статьи функция агрегирования — это функция, которая принимает несколько отдельных значений и возвращает сводные данные. В большинстве случаев возвращаемые данные представляют собой одно значение.

Наиболее распространенные функции агрегирования — это простое среднее (simple average) или суммирование (summation) значений.

Далее представлен пример расчета суммарной и средней стоимости билетов для набора данных «Титаник», загруженного из пакета seaborn.

15 апреля 1912 года самый большой пассажирский лайнер в истории во время своего первого рейса столкнулся с айсбергом. Когда Титаник затонул, погибли 1502 из 2224 пассажиров и членов экипажа. Эта сенсационная трагедия потрясла международное сообщество и привела к улучшению правил безопасности для судов. Одна из причин, по которой кораблекрушение привело к гибели людей, заключалась в том, что не хватало спасательных шлюпок для пассажиров и экипажа. Несмотря на то, что в выживании после затопления была определенная доля удачи, некоторые группы людей имели больше шансов выжить, чем другие.

In [1]:

import pandas as pd
import seaborn as sns

df = sns.load_dataset('titanic')

Каждая строка набора данных представляет одного человека. Столбцы описывают различные атрибуты, включая то, выжили ли они (survived), их возраст (age), класс пассажира (pclass), пол (sex) и стоимость проезда (fare).

Out[2]:

survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alive alone
0 0 3 male 22.0 1 0 7.2500 S Third man True NaN Southampton no False
1 1 1 female 38.0 1 0 71.2833 C First woman False C Cherbourg yes False
2 1 3 female 26.0 0 0 7.9250 S Third woman False NaN Southampton yes True
3 1 1 female 35.0 1 0 53.1000 S First woman False C Southampton yes False
4 0 3 male 35.0 0 0 8.0500 S Third man True NaN Southampton no True

In [3]:

df['fare'].agg(['sum', 'mean']) # сумма и среднее по столбцу стоимости билета, здесь передаем список агрегирующих функций

Out[3]:

sum     28693.949300
mean       32.204208
Name: fare, dtype: float64

Эта простая концепция — необходимый строительный блок для более сложного анализа.

Одна из областей, которую необходимо обсудить, — это то, что существует несколько способов вызова функции агрегирования. Как показано выше, вы можете передать список функций для применения к одному или нескольким столбцам данных.

Что, если вы хотите выполнить анализ только подмножества столбцов?

Есть два других варианта агрегирования: использование словаря и именованное агрегирование (named aggregation).

In [4]:

df.agg({'fare': ['sum', 'mean'],
        'sex' : ['count']})

Out[4]:

fare sex
count NaN 891.0
mean 32.204208 NaN
sum 28693.949300 NaN

Использование кортежей (именованное агрегирование):

In [5]:

df.agg(fare_sum=('fare', 'sum'),
       fare_mean=('fare', 'mean'),
       sex_count=('sex', 'count'))

Out[5]:

fare sex
fare_sum 28693.949300 NaN
fare_mean 32.204208 NaN
sex_count NaN 891.0

Важно знать об этих параметрах и понимать, какой из них и когда использовать.

Я предпочитаю использовать словари для агрегирования.

Подход с кортежами ограничен возможностью применять только одно агрегирование за раз к определенному столбцу. Если мне нужно переименовать столбцы, я буду использовать функцию rename после завершения агрегации. В некоторых случаях подход со списком является более рациональным. Тем не менее, я повторю, что, на мой взгляд, словарный подход обеспечивает наиболее надежный способ для большинства ситуаций.

Groupby¶

Теперь, когда мы знаем, как использовать агрегацию, мы можем объединить это с groupby для резюмирования данных.

Основы математики¶

Наиболее распространенными встроенными функциями агрегирования являются базовые математические функции, включая сумму (sum), среднее значение (mean), медианное значение (median), минимум (minimum), максимум (maximum), стандартное отклонение (standard deviation), дисперсию (variance), среднее абсолютное отклонение (mean absolute deviation) и произведение (product).

Мы можем применить все эти функции к fare (стоимости проезда) при группировке по embark_town (городу посадки на корабль):

In [6]:

agg_func_math = {
    'fare': ['sum', 'mean', 'median', 'min', 'max', 'std', 'var', 'mad', 'prod']
}

In [7]:

df.groupby(['embark_town']).agg(agg_func_math).round(2)

Out[7]:

fare
sum mean median min max std var mad prod
embark_town
Cherbourg 10072.30 59.95 29.70 4.01 512.33 83.91 7041.39 53.02 6.193716e+250
Queenstown 1022.25 13.28 7.75 6.75 90.00 14.19 201.30 7.87 6.458671e+78
Southampton 17439.40 27.08 13.00 0.00 263.00 35.89 1287.95 21.30 0.000000e+00

Это все относительно простая математика.

Кстати, я не нашел подходящего варианта использования функции prod, которая вычисляет произведение всех значений в группе, и включил ее для полноты картины.

Еще один полезный трюк — использовать describe для одновременного выполнения нескольких встроенных агрегаторов:

In [8]:

agg_func_describe = {'fare': ['describe']}

In [9]:

df.groupby(['embark_town']).agg(agg_func_describe).round(2)

Out[9]:

fare
describe
count mean std min 25% 50% 75% max
embark_town
Cherbourg 168.0 59.95 83.91 4.01 13.70 29.70 78.5 512.33
Queenstown 77.0 13.28 14.19 6.75 7.75 7.75 15.5 90.00
Southampton 644.0 27.08 35.89 0.00 8.05 13.00 27.9 263.00

Подсчет¶

После базовой математики подсчет (counting) является следующим наиболее распространенным агрегированием, которое я выполняю для сгруппированных данных.

Он несколько сложнее, чем простая математика. Вот три примера подсчета:

In [10]:

agg_func_count = {'embark_town': ['count', 'nunique', 'size']}

In [11]:

df.groupby(['deck']).agg(agg_func_count) # статистика по палубам Титаника

Out[11]:

embark_town
count nunique size
deck
A 15 2 15
B 45 2 47
C 59 3 59
D 33 2 33
E 32 3 32
F 13 3 13
G 4 1 4

Главное отличие, о котором следует помнить, заключается в том, что count не включает значения NaN, тогда как size их включает. В зависимости от набора данных это различие может оказаться полезным.

Кроме того, функция nunique исключит значения NaN из уникальных счетчиков.

Продолжайте читать, чтобы увидеть пример того, как включить NaN в подсчет уникальных значений.

Первый и последний¶

В следующем примере мы можем выбрать самую высокую и самую низкую стоимость билета в зависимости от города, в котором совершили посадку пассажиры Титаника.

Следует помнить один важный момент: вы должны сначала отсортировать данные, если хотите, чтобы в качестве first (первого) и last (последнего) были выбраны максимальное и минимальное значения.

In [12]:

agg_func_selection = {'fare': ['first', 'last']}

In [13]:

df.sort_values(by=['fare'], ascending=False).groupby(['embark_town']).agg(agg_func_selection)

Out[13]:

fare
first last
embark_town
Cherbourg 512.3292 4.0125
Queenstown 90.0000 6.7500
Southampton 263.0000 0.0000

В приведенном выше примере я бы рекомендовал использовать max и min, но для полноты картины включил first и last. В других приложениях (например, при анализе временных рядов) вы можете выбрать значения first и last для дальнейшего анализа.

Другой подход к выбору — использовать idxmax и idxmin для выбора значения индекса, соответствующего максимальному или минимальному значениям.

In [14]:

agg_func_max_min = {'fare': ['idxmax', 'idxmin']}

In [15]:

df.groupby(['embark_town']).agg(agg_func_max_min)

Out[15]:

fare
idxmax idxmin
embark_town
Cherbourg 258 378
Queenstown 245 143
Southampton 27 179

Можем проверить результаты:

Out[16]:

survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alive alone
258 1 1 female 35.0 0 0 512.3292 C First woman False NaN Cherbourg yes True
378 0 3 male 20.0 0 0 4.0125 C Third man True NaN Cherbourg no True

Вот еще один трюк, который можно использовать для просмотра строк с максимальной стоимостью проезда (fare):

In [17]:

df.loc[df.groupby('class')['fare'].idxmax()]

Out[17]:

survived pclass sex age sibsp parch fare embarked class who adult_male deck embark_town alive alone
258 1 1 female 35.0 0 0 512.3292 C First woman False NaN Cherbourg yes True
72 0 2 male 21.0 0 0 73.5000 S Second man True NaN Southampton no True
159 0 3 male NaN 8 2 69.5500 S Third man True NaN Southampton no False

Приведенный выше пример — одно из тех мест, где агрегирование на основе списка является полезным.

Другие библиотеки¶

Вы не ограничены функциями агрегирования в pandas. К примеру, можно использовать функции статистики из scipy или numpy.

Вот пример расчета моды (mode) и асимметрии (skew) данных для стоимости проезда.

In [18]:

from scipy.stats import skew, mode

In [19]:

agg_func_stats = {'fare': [skew, mode, pd.Series.mode]}

In [20]:

df.groupby(['embark_town']).agg(agg_func_stats)

Out[20]:

fare
skew mode mode
embark_town
Cherbourg 3.305112 ([7.2292], [15]) 7.2292
Queenstown 4.265111 ([7.75], [30]) 7.7500
Southampton 3.640276 ([8.05], [43]) 8.0500

Интересны результаты вычисления моды (mode). Функция mode из scipy.stats возвращает наиболее часто встречающееся значение, а также количество вхождений. Если вам просто нужно наиболее частое значение, то используйте pd.Series.mode.

Ключевым моментом является то, что вы можете использовать любую функцию, которую хотите, если она знает, как интерпретировать массив значений pandas и возвращает одно значение.

Работа с текстом¶

При работе с текстом функции подсчета будут работать должным образом. Вы также можете использовать функцию mode из scipy для текстовых данных.

Одно интересное приложение состоит в том, что если у вас небольшое количество различных значений, то можете использовать питоновскую функцию set для отображения списка уникальных значений.

Следующая краткая сводка для class (класса каюты) и deck (палубы) показывает, как данный подход можно использовать:

In [21]:

agg_func_text = {'deck': ['nunique', mode, set]}

In [22]:

df.groupby(['class']).agg(agg_func_text)

Out[22]:

deck
nunique mode set
class
First 5 ([C], [59]) {C, nan, A, B, E, D}
Second 3 ([F], [8]) {nan, D, F, E}
Third 3 ([F], [5]) {nan, F, E, G}

Пользовательские функции¶

Стандартные функции агрегирования pandas и функции из экосистемы Python удовлетворят многие ваши потребности в анализе данных. Однако вы, вероятно, захотите создать свои собственные пользовательские функции агрегирования. Есть четыре способа для создания собственных функций.

Чтобы проиллюстрировать различия, давайте вычислим 25-й процентиль данных (также называемый квантилью .25 или нижней квартилью), используя четыре подхода.

Во-первых, мы можем использовать функцию partial:

In [23]:

from functools import partial

In [24]:

q_25 = partial(pd.Series.quantile, q=0.25) # возвращает обортку над pd.Series.quantile()

In [25]:

q_25.__name__ = '25%' # пойдет в наименование будущего столбца

Затем мы определяем нашу собственную функцию (которая представляет собой небольшую обертку для quantile):

In [26]:

def percentile_25(x):
    return x.quantile(.25)

Далее определяем лямбда-функцию и даем ей имя:

In [27]:

lambda_25 = lambda x: x.quantile(.25)

In [28]:

lambda_25.__name__ = 'lambda_25%'

Затем задаем встроенную (inline) лямбду и формируем словарь:

In [29]:

agg_func = {
    'fare': [q_25, percentile_25, lambda_25, lambda x: x.quantile(.25)]
}

In [30]:

df.groupby(['embark_town']).agg(agg_func).round(2)

Out[30]:

fare
25% percentile_25 lambda_25% <lambda_0>
embark_town
Cherbourg 13.70 13.70 13.70 13.70
Queenstown 7.75 7.75 7.75 7.75
Southampton 8.05 8.05 8.05 8.05

Как видите, результаты одинаковые, но названия столбцов немного отличаются. Это область предпочтений программистов, но я рекомендую ознакомиться с вариантами, поскольку вы встретите большинство из них в онлайн-решениях.

Я предпочитаю использовать собственные функции или встроенные (inline) лямбды.

Как и во многих других областях программирования — это элемент стиля и предпочтений, но я рекомендую вам выбрать один или два подхода и придерживаться их для единообразия.

Примеры пользовательских функций¶

Как показано выше, существует несколько подходов к разработке пользовательских функций агрегирования.

В большинстве случаев функции представляют собой легкие обертки (wrappers) для встроенных функций pandas. Они нужны, т.к. нет возможности передать аргументы в агрегаты (aggregations).

Следующие примеры должны пояснить этот момент.

Если вы хотите подсчитать количество нулевых значений, вы можете использовать эту функцию:

In [31]:

def count_nulls(s):
    return s.size - s.count()

Если вы хотите включить значения NaN в свои уникальные счетчики, вам необходимо указать параметр dropna=False у функции nunique.

In [32]:

def unique_nan(s):
    return s.nunique(dropna=False)

Вот результат применения всех функций:

In [33]:

agg_func_custom_count = {
    'embark_town': ['count', 'nunique', 'size', unique_nan, count_nulls, set]
}

In [34]:

df.groupby(['deck']).agg(agg_func_custom_count)

Out[34]:

embark_town
count nunique size unique_nan count_nulls set
deck
A 15 2 15 2 0 {Cherbourg, Southampton}
B 45 2 47 3 2 {nan, Cherbourg, Southampton}
C 59 3 59 3 0 {Cherbourg, Southampton, Queenstown}
D 33 2 33 2 0 {Cherbourg, Southampton}
E 32 3 32 3 0 {Cherbourg, Southampton, Queenstown}
F 13 3 13 3 0 {Cherbourg, Southampton, Queenstown}
G 4 1 4 1 0 {Southampton}

Если вы хотите рассчитать 90-й процентиль, используйте quantile:

In [35]:

def percentile_90(x):
    return x.quantile(.9)

Если вы хотите вычислить усеченное среднее (trimmed mean) значение, из которого исключен самый низкий 10-й процент, используйте функцию trim_mean из scipy:

In [36]:

from scipy.stats import trim_mean

def trim_mean_10(x):
    return trim_mean(x, 0.1)

Если вы хотите получить наибольшее значение, независимо от порядка сортировки (см. ранее в этом Блокноте о first и last):

In [37]:

def largest(x):
    return x.nlargest(1)

Это эквивалентно max, но я приведу еще один пример с nlargest ниже, чтобы подчеркнуть разницу.

Ранее я уже писал о sparkline. Обратитесь к этой статье за инструкциями по установке.

Вот как включить их в агрегатную функцию для уникального представления данных:

In [38]:

#!pip3 install sparklines

In [39]:

from sparklines import sparklines

In [40]:

import numpy as np

def sparkline_str(x):
    bins = np.histogram(x)[0]
    sl = ''.join(sparklines(bins))
    return sl

In [41]:

agg_func_largest = {
    'fare': [percentile_90, trim_mean_10, largest, sparkline_str]
}

In [42]:

df.groupby(['class', 'embark_town']).agg(agg_func_largest)

Out[42]:

fare
percentile_90 trim_mean_10 largest sparkline_str
class embark_town
First Cherbourg 227.5250 85.408335 512.3292 █▇▂▁▃▁▁▁▁▂
Queenstown 90.0000 90.000000 90.0000 ▁▁▁▁▁█▁▁▁▁
Southampton 152.3150 60.500160 263.0000 ▃█▄▃▂▂▁▁▂▂
Second Cherbourg 41.5792 25.167500 41.5792 █▄▁▁▄▂▄▁▄▅
Queenstown 12.3500 12.350000 12.3500 ▁▁▁▁▁█▁▁▁▁
Southampton 31.7500 18.202273 73.5000 ▂█▂▅▁▂▁▁▁▁
Third Cherbourg 19.0229 10.677941 22.3583 ▁█▃▂▁▄▃▁▂▂
Queenstown 24.0600 9.670476 29.1250 █▁▁▂▁▁▁▂▁▂
Southampton 31.2750 11.501469 69.5500 ▁█▂▂▂▁▁▁▁▁

Функции nlargest и nsmallest могут быть полезны для резюмирования данных в различных сценариях.

Следующий код показывает суммарную стоимость для 10 первых и 10 последних пассажиров:

In [43]:

def top_10_sum(x):
    return x.nlargest(10).sum()

In [44]:

def bottom_10_sum(x):
    return x.nsmallest(10).sum()

In [45]:

agg_func_top_bottom_sum = {
    'fare': [top_10_sum, bottom_10_sum]
}

In [46]:

df.groupby('class').agg(agg_func_top_bottom_sum)

Out[46]:

fare
top_10_sum bottom_10_sum
class
First 3361.2584 108.3709
Second 622.2376 42.0000
Third 656.3374 36.1291

Использование этого подхода может быть полезно для применения закона Парето к вашим собственным данным.

Пользовательские функции с несколькими столбцами¶

Если у вас есть сценарий, в котором небходимо запустить несколько агрегаций по столбцам, то вы можете использовать groupby в сочетании с apply, как описано в этом ответе на stack overflow.

Используя этот метод, вы получите доступ ко всем столбцам данных и сможете выбрать подходящий способ агрегирования для создания итогового DataFrame (включая наименование столбцов):

In [47]:

def summary(x):
    result = {
        'fare_sum': x['fare'].sum(),
        'fare_mean': x['fare'].mean(),
        'fare_range': x['fare'].max() - x['fare'].min()
    }
    return pd.Series(result).round(0)

In [48]:

df.groupby(['class']).apply(summary)

Out[48]:

fare_sum fare_mean fare_range
class
First 18177.0 84.0 512.0
Second 3802.0 21.0 74.0
Third 6715.0 14.0 70.0

Использование apply с groupby дает максимальную гибкость. Однако есть и обратная сторона. Функция apply работает медленно, поэтому этот подход следует использовать с осторожностью.

Работа с групповыми объектами¶

После группировки и агрегирования данных вы можете выполнять дополнительные вычисления для сгруппированных объектов.

В следующем примере определим, какой процент от общего количества проданных билетов можно отнести к каждой комбинации embark_town и class.

Мы используем метод assign() и лямбда-функцию для добавления столбца pct_total:

In [49]:

df.groupby(['embark_town', 'class']).agg({'fare': 'sum'}).assign(pct_total=lambda x: x / x.sum())

Out[49]:

fare pct_total
embark_town class
Cherbourg First 8901.0750 0.311947
Second 431.0917 0.015108
Third 740.1295 0.025939
Queenstown First 180.0000 0.006308
Second 37.0500 0.001298
Third 805.2043 0.028219
Southampton First 8936.3375 0.313183
Second 3333.7000 0.116833
Third 5169.3613 0.181165

Следует отметить, что можно сделать проще с использованием кросс-таблицы pd.crosstab, как описано в статье:

In [50]:

pd.crosstab(df['embark_town'],
            df['class'],
            values=df['fare'],
            aggfunc='sum',
            normalize=True)

Out[50]:

class First Second Third
embark_town
Cherbourg 0.311947 0.015108 0.025939
Queenstown 0.006308 0.001298 0.028219
Southampton 0.313183 0.116833 0.181165

Пока мы говорим о crosstab (кросс-таблицах), полезно иметь в виду, что функции агрегации также можно комбинировать со сводными таблицами (pivot tables).

In [51]:

pd.pivot_table(data=df,
               index=['embark_town'],
               columns=['class'],
               aggfunc=agg_func_top_bottom_sum)

Out[51]:

fare
bottom_10_sum top_10_sum
class First Second Third First Second Third
embark_town
Cherbourg 282.9957 172.2041 68.2500 3239.3542 334.6084 196.7457
Queenstown 180.0000 37.0500 73.5916 180.0000 37.0500 264.5750
Southampton 108.3709 42.0000 39.6291 2237.5251 614.5000 656.3374

Иногда необходимо выполнить множество группировок (multiple groupby), чтобы ответить на вопрос. Например, если мы хотим увидеть кумулятивную сумму стоимости билетов, мы можем сгруппировать и агрегировать по городу (town) и классу (class), затем сгруппировать полученный объект и вычислить кумулятивную сумму (cumulative sum):

In [52]:

fare_group = df.groupby(['embark_town', 'class']).agg({'fare': 'sum'})
fare_group

Out[52]:

fare
embark_town class
Cherbourg First 8901.0750
Second 431.0917
Third 740.1295
Queenstown First 180.0000
Second 37.0500
Third 805.2043
Southampton First 8936.3375
Second 3333.7000
Third 5169.3613

In [53]:

fare_group.groupby(level=0).cumsum()

Out[53]:

fare
embark_town class
Cherbourg First 8901.0750
Second 9332.1667
Third 10072.2962
Queenstown First 180.0000
Second 217.0500
Third 1022.2543
Southampton First 8936.3375
Second 12270.0375
Third 17439.3988

Это может быть сложным для понимания. Вот краткое пояснение того, что мы делаем:

Пример с данными о продажах¶

В следующем примере резюмируем ежедневные данные о продажах и преобразуем их в совокупное ежедневное и ежеквартальное представление.

Обратитесь к статье о Grouper, если вы не знакомы с использованием метода pd.Grouper().

В этом примере мы хотим включить сумму ежедневных продаж, а также совокупную (cumulative) сумму за квартал:

In [54]:

sales = pd.read_excel('https://github.com/chris1610/pbpython/blob/master/data/2018_Sales_Total_v2.xlsx?raw=True')
sales.head()

Out[54]:

account number name sku quantity unit price ext price date
0 740150 Barton LLC B1-20000 39 86.69 3380.91 2018-01-01 07:21:51
1 714466 Trantow-Barrows S2-77896 -1 63.16 -63.16 2018-01-01 10:00:47
2 218895 Kulas Inc B1-69924 23 90.70 2086.10 2018-01-01 13:24:58
3 307599 Kassulke, Ondricka and Metz S1-65481 41 21.05 863.05 2018-01-01 15:05:22
4 412290 Jerde-Hilpert S2-34077 6 83.21 499.26 2018-01-01 23:26:55

In [55]:

daily_sales = sales.groupby([pd.Grouper(key='date', freq='D')]).agg(daily_sales=('ext price', 'sum')).reset_index()
daily_sales.head()

Out[55]:

date daily_sales
0 2018-01-01 6766.16
1 2018-01-02 1551.91
2 2018-01-03 4278.96
3 2018-01-04 6044.10
4 2018-01-05 1971.94

In [56]:

daily_sales['quarter_sales'] = daily_sales.groupby(pd.Grouper(key='date', freq='Q')).agg({'daily_sales': 'cumsum'})
daily_sales.head()

Out[56]:

date daily_sales quarter_sales
0 2018-01-01 6766.16 6766.16
1 2018-01-02 1551.91 8318.07
2 2018-01-03 4278.96 12597.03
3 2018-01-04 6044.10 18641.13
4 2018-01-05 1971.94 20613.07

Чтобы получить хорошее представление о том, что происходит, вам нужно взглянуть на границу квартала (с конца марта по начало апреля):

Если вы хотите просто получить совокупный (cumulative) квартальный итог, вы можете связать несколько функций groupby.

Сначала сгруппируйте ежедневные результаты, затем сгруппируйте эти результаты по кварталам и используйте кумулятивную сумму:

In [57]:

# веселый пример :)

sales.groupby(
    [pd.Grouper(key='date',
                freq='D')]).agg(
                             daily_sales=('ext price',
                                          'sum')).groupby(
                                                    pd.Grouper(freq='Q')).agg(
                                                                     {'daily_sales': 'cumsum'}).rename(
                                                                                                 columns={'daily_sales': 'quarterly_sales'})

Out[57]:

quarterly_sales
date
2018-01-01 6766.16
2018-01-02 8318.07
2018-01-03 12597.03
2018-01-04 18641.13
2018-01-05 20613.07
2018-12-27 480817.47
2018-12-28 484389.92
2018-12-29 489227.01
2018-12-30 494106.67
2018-12-31 496069.30

365 rows × 1 columns

В этом примере я включил именованный подход агрегации (named aggregation approach), чтобы переименовать переменную и уточнить, что теперь это ежедневные продажи. Затем я снова группирую и использую совокупную (cumulative) сумму, чтобы получить текущую сумму за квартал. Наконец, я переименовал столбец в квартальные продажи (quarterly sales).

По отзывам, на первый взгляд, это сложно понять. Однако, если выполните по шагам, т.е. построите функцию и будете проверять результаты на каждом шаге, то начнете понимать ее.

Не расстраивайтесь!

Сглаживание иерархических индексов столбцов¶

По умолчанию pandas в сводном DataFrame создает иерархический индекс у столбца:

In [58]:

df.groupby(['embark_town', 'class']).agg({'fare': ['sum', 'mean']}).round()

Out[58]:

fare
sum mean
embark_town class
Cherbourg First 8901.0 105.0
Second 431.0 25.0
Third 740.0 11.0
Queenstown First 180.0 90.0
Second 37.0 12.0
Third 805.0 11.0
Southampton First 8936.0 70.0
Second 3334.0 20.0
Third 5169.0 15.0

В какой-то момент в процессе анализа вы, вероятно, захотите «сгладить» (flatten) столбцы, чтобы получилась одна строка с именами.

Я обнаружил, что мне лучше всего подходит следующий подход.

Я использую параметр as_index=False при группировке, а затем создаю новое имя свернутого (collapsed) столбца.

Вот код:

In [59]:

multi_df = df.groupby(['embark_town', 'class'], as_index=False).agg({'fare': ['sum', 'mean']})
multi_df

Out[59]:

embark_town class fare
sum mean
0 Cherbourg First 8901.0750 104.718529
1 Cherbourg Second 431.0917 25.358335
2 Cherbourg Third 740.1295 11.214083
3 Queenstown First 180.0000 90.000000
4 Queenstown Second 37.0500 12.350000
5 Queenstown Third 805.2043 11.183393
6 Southampton First 8936.3375 70.364862
7 Southampton Second 3333.7000 20.327439
8 Southampton Third 5169.3613 14.644083

In [60]:

multi_df.columns = ['_'.join(col).rstrip('_') for col in multi_df.columns.values]
multi_df.round(2)

Out[60]:

embark_town class fare_sum fare_mean
0 Cherbourg First 8901.07 104.72
1 Cherbourg Second 431.09 25.36
2 Cherbourg Third 740.13 11.21
3 Queenstown First 180.00 90.00
4 Queenstown Second 37.05 12.35
5 Queenstown Third 805.20 11.18
6 Southampton First 8936.34 70.36
7 Southampton Second 3333.70 20.33
8 Southampton Third 5169.36 14.64

Вот изображение, показывающее, как выглядит сплющенный кадр данных:

Я предпочитаю использовать _ в качестве разделителя, но вы можете использовать другие значения. Просто имейте в виду, что для последующего анализа будет проще, если в именах результирующих столбцов нет пробелов.

Промежуточные итоги¶

Если вы хотите добавить промежуточные итоги (subtotal), я рекомендую пакет sidetable.

Инструкция по работе с sidetable на русском языке тут.

Вот как вы можете суммировать fares по class, embark_town и sex с промежуточным итогом на каждом уровне, а также общим итогом внизу:

In [63]:

df.groupby(['class', 'embark_town', 'sex']).agg({'fare': 'sum'}).stb.subtotal()

Out[63]:

fare
class embark_town sex
First Cherbourg female 4972.5333
male 3928.5417
First | Cherbourg — subtotal 8901.0750
Queenstown female 90.0000
male 90.0000
First | Queenstown — subtotal 180.0000
Southampton female 4753.2917
male 4183.0458
First | Southampton — subtotal 8936.3375
First — subtotal 18017.4125
Second Cherbourg female 176.8792
male 254.2125
Second | Cherbourg — subtotal 431.0917
Queenstown female 24.7000
male 12.3500
Second | Queenstown — subtotal 37.0500
Southampton female 1468.1500
male 1865.5500
Second | Southampton — subtotal 3333.7000
Second — subtotal 3801.8417
Third Cherbourg female 337.9833
male 402.1462
Third | Cherbourg — subtotal 740.1295
Queenstown female 340.1585
male 465.0458
Third | Queenstown — subtotal 805.2043
Southampton female 1642.9668
male 3526.3945
Third | Southampton — subtotal 5169.3613
Third — subtotal 6714.6951
grand_total 28533.9493

sidetable также позволяет настраивать уровни промежуточных итогов и итоговые метки. Обратитесь к документации пакета для получения дополнительных примеров того, как sidetable может резюмировать данные.

Резюме¶

Спасибо, что прочитали эту статью. Здесь много деталей, но это связано с тем, что существует множество различных применений для группировки и агрегирования данных с помощью pandas. Я надеюсь, что этот пост станет полезным ресурсом, который вы сможете добавить в закладки и вернуться к нему, когда столкнетесь с собственной сложной проблемой.

Если у вас есть другие распространенные техники, которые вы часто используете, дайте мне знать в комментариях к статье. Если я получу что-нибудь полезное, я включу его в этот пост или как обновленную статью.

Подписка на онлайн-обучение telegram

Бухгалтерский баланс – основной источник данных при проведении финансово-экономического анализа. В процессе анализа чаще всего применяется его агрегированная форма. Привести стандартный, детализированный по статьям актива и пассива, баланс к агрегированному виду – значит, преобразовать его, суммируя экономически однородные балансовые показатели, представить их в укрупненном виде. Следует при этом иметь в виду, что единой методики агрегирования бухгалтерского баланса не существует.

Как определяются показатели агрегированного баланса?

Структура и использование агрегированного баланса

Строго говоря, сам по себе «стандартный» бухгалтерский баланс, составляемый по итогам года, является агрегированной формой отчетности. Аналитические, развернутые бухгалтерские данные группируются в нем по статьям, по признаку схожести экономического содержания: «Запасы», «Кредиторская задолженность» и пр.

Как балансовые счета соответствуют статьям агрегированного баланса?

Объединяя статьи далее, можно в итоге агрегировать баланс до формы, в которой будет лишь две сбалансированные по цифровому значению строки – актив и пассив. Агрегированный баланс можно получить, если привычный баланс по итогам года представить в виде разделов, без расшифровки. В левой части такой таблицы будут отражаться оборотные и внеоборотные активы, а в правой – капитал и резервы, долгосрочные и краткосрочные обязательства как отдельные статьи.

Очевидно, что чем более укрупненные показатели формируются в процессе агрегирования данных, тем менее точные данные в процессе анализа могут быть получены. При этом, какова бы ни была степень укрупнения данных, балансовое равенство должно соблюдаться.

Какова структура агрегированного баланса?

В практике анализа используют такую форму агрегированного баланса, данные которого позволяют учитывать ликвидность его активов.

На заметку! Ликвидность – способность перевода активов организации в денежную форму, без утраты балансовой стоимости. Ликвидность активов поддерживает необходимый уровень платежеспособности организации. Наивысшей ликвидностью обладают денежные средства, наиболее низкая активность у основных средств.

Агрегирование баланса в аналитических целях состоит не только в укрупнении показателей отчетного бухгалтерского баланса, но и в перегруппировке его отдельных статей. Как правило, группируют:

  • актив – по степени ликвидности;
  • пассив – по сроку погашения задолженностей.

Агрегированная форма баланса наиболее близка к мировой практике составления балансов и позволяет исчислить ряд важных экономических показателей: оборачиваемости, ликвидности, финансовой устойчивости, деловой активности предприятия и др. На основе полученных данных и проводится экономический анализ.

Агрегирование баланса и использование его показателей

Ранее говорилось, что единой методики агрегирования балансовых показателей не существует. Рассмотрим одну из наиболее распространенных в практике экономического анализа методику.

Группировка активов в общем случае делается указанным ниже способом:

  1. Имеющие наибольшую ликвидность (А1) — это финансовые средства и вложения краткосрочного характера, т.е. на срок менее года.
  2. Имеющие перспективы быстрой реализации (А2) — «дебиторка» и прочие активы.
  3. Медленно реализуемые — запасы, НДС, финансовые вложения на срок, превышающий один год (А3).
  4. Трудно реализуемые — основные средства и иные активы внеоборотного характера (А4).

Группировка пассивов также имеет свою последовательность:

  1. Пассивы наиболее срочные (П1) – кредиторская задолженность.
  2. Краткосрочные и долгосрочные обязательства соответственно (П2, П3).
  3. Пассивы, имеющие постоянный характер (П4), – собственный капитал, доходы будущих периодов.

На основе полученных данных можно провести анализ ликвидности. Так, если А1, А2, А3 соответственно больше П1, П2, П3, но А4 меньше П4, считается, что баланс имеет абсолютную ликвидность.

Текущую ликвидность исчисляют суммированием А1, А2, А3 и делением полученного результата на сумму П1, П2. Показатель характеризует способность фирмы покрыть свои долги в течение 12 месяцев за счет собственных средств.

Быстрая ликвидность, то есть отношение А1 сумме П1 и П2, характеризует степень покрытия задолженности посредством наиболее ликвидных активов.

На основе агрегированных балансовых данных исчисляют и другие аналитические показатели.

На заметку! Краткосрочные финансовые вложения в ценные бумаги в условиях нестабильности этого сегмента рынка могут на практике не обладать высокой степенью ликвидности. В этом случае имеет смысл рассматривать статьи денежных средств и краткосрочных финансовых вложений независимо друг от друга, а также учитывать указанное обстоятельство при анализе ликвидационных показателей, о которых шла речь выше.

Особенности агрегирования отдельных показателей баланса

Кроме методики группировки, опирающейся на ликвидность активов, и соответствующей группировки пассивов, существуют иные способы группировать данные. При этом следует помнить о ряде существенных моментов.

Группировка активов на постоянные (вне оборота) и текущие (в обороте) отчетном балансе отражается в р.1 и 2 актива, однако чтобы иметь корректные итоги указанных показателей, следует из р. 2 исключить дебиторскую задолженность по следующим причинам:

  • платежи по ней ожидаются в срок более года;
  • по этой строке может отражаться безнадежная задолженность, подлежащая списанию.

Ни то, ни другое не отвечает сущности оборотных активов, период оборота которых менее 12 месяцев. Дебиторская задолженность сроком более года может включаться в состав активов вне оборота как отдельная статья либо в составе прочих постоянных активов.

В статью «Запасы» агрегированного баланса правильным будет включить сумму расходов будущих периодов в той их части, которые по экономическому смыслу близки понятию запасов.

Пример: методическая литература, буклеты, прилагаемые к продукции, которая в будущем может быть реализована (например, при производстве сложной бытовой техники). Указанные затраты с течением времени будут включены в себестоимость продукции.

Раздел 3 пассива целесообразно сгруппировать по строкам, одна из которых будет показывать величину уставного капитала, а другая – накопленного капитала. Такая группировка наглядно демонстрирует, какова величина источников, образованных за счет приобретенных, заработанных в процессе деятельности, средств, а какая часть выражена собственно уставным капиталом (с учетом переоценки основных средств, вторичной эмиссии акций и пр.).

Из накопленного капитала вычитают величину непокрытых убытков минувших периодов и текущего года. Из уставного капитала вычитают задолженности участников по взносам в него.

Главное

В ходе экономического анализа деятельности организации применяются различные формы агрегированных (уплотненных) балансов. Суть агрегирования состоит в суммировании статей стандартного баланса, сходных по смыслу. На основе полученных данных рассчитывается ряд показателей, в том числе ликвидности организации.

При составлении агрегированного баланса используют гибкий, экономически выверенный подход, учитывают существенные нюансы экономической деятельности объекта анализа.

Понравилась статья? Поделить с друзьями:
  • Киберпанк 2077 как найти подсказки на записи
  • Видео как найти все подковы
  • Как найти работу по резюме бесплатно
  • Как исправить цифры в диаграмме в ворде
  • Как найти косинус румба калькулятор