Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to �нтеллектуальная Кобринщина

Perform Operations on Subgroups of Data - Wolfram Mathematica

Выполнение операций с подгруппами данных

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

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

In[29]:=

PerformOperationsOnSubgroupsOfDataRU_1.gif

Данные могут быть сгруппированы по типу почвы при помощи функций First и GatherBy, которые делают выборку в подсписки по первому э лементу каждой точки данных:

In[30]:=

PerformOperationsOnSubgroupsOfDataRU_2.gif

Out[30]=

PerformOperationsOnSubgroupsOfDataRU_3.gif

Средняя урожайность для каждого типа почвы может быть вычислена путем извлечения типа почвы из каждого подсписка и вычисления среднего Mean значения урожайности (последнего элемента) в списке.  Для решения задачи можно воспользоваться функцией Table при трёх группах в качестве значения для итератора переменной x.

Применим функцию Table для вывода типа грунта и средней урожайности для каждой группы:

In[31]:=

PerformOperationsOnSubgroupsOfDataRU_4.gif

Out[31]=

PerformOperationsOnSubgroupsOfDataRU_5.gif

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

Воспользуемся чистой функцией #[[2]]& вместе с GatherBy, для выборки данных по сорту семян:

In[32]:=

PerformOperationsOnSubgroupsOfDataRU_6.gif

Out[32]=

PerformOperationsOnSubgroupsOfDataRU_7.gif

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

Воспользуемся функцией Table для вычисления средней урожайности для каждого сорта семян:

In[33]:=

PerformOperationsOnSubgroupsOfDataRU_8.gif

Out[33]=

PerformOperationsOnSubgroupsOfDataRU_9.gif

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

Так вычисляется минимальная и максимальная урожайность для каждого сорта семян:

In[34]:=

PerformOperationsOnSubgroupsOfDataRU_10.gif

Out[34]=

PerformOperationsOnSubgroupsOfDataRU_11.gif

    

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

In[35]:=

PerformOperationsOnSubgroupsOfDataRU_12.gif

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

Сгруппируем данные по виду лекарства, сохранив новый список под именем byDrug :

In[36]:=

PerformOperationsOnSubgroupsOfDataRU_13.gif

Out[36]=

PerformOperationsOnSubgroupsOfDataRU_14.gif

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

In[37]:=

PerformOperationsOnSubgroupsOfDataRU_15.gif

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

In[38]:=

PerformOperationsOnSubgroupsOfDataRU_16.gif

Out[38]=

PerformOperationsOnSubgroupsOfDataRU_17.gif

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

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

In[39]:=

PerformOperationsOnSubgroupsOfDataRU_18.gif

Out[39]=

PerformOperationsOnSubgroupsOfDataRU_19.gif

Воспользуемся функцией Table вместе с describe для вычисления статистических данных в разрезе возрастных групп. Функция Sort применяется здесь для сортировки данных по увеличению возраста группы:

In[40]:=

PerformOperationsOnSubgroupsOfDataRU_20.gif

Out[40]=

PerformOperationsOnSubgroupsOfDataRU_21.gif

Данные, также, могут быть сгруппированы по нескольким параметрам. Например, медицинские данные могут быть сгруппированы по виду лекарства и по возрасту, путем указания обеих функций - First и IntegerPart в списке аргументов функции GatherBy.

Выполним группировку данных по виду лекарства и возрастной группе:

In[41]:=

PerformOperationsOnSubgroupsOfDataRU_22.gif

Out[41]=

PerformOperationsOnSubgroupsOfDataRU_23.gif

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

In[45]:=

PerformOperationsOnSubgroupsOfDataRU_24.gif

Out[45]=

drugA 30 {3,15.3333,16.,{12.,18.}}
drugA 40 {1,16.,16.,{16.,16.}}
drugA 50 {1,24.,24.,{24.,24.}}
drugA 60 {1,30.,30.,{30.,30.}}
drugA 70 {2,38.,38.,{36.,40.}}
drugB 20 {1,3.,3.,{3.,3.}}
drugB 30 {1,3.,3.,{3.,3.}}
drugB 40 {1,18.,18.,{18.,18.}}
drugB 50 {2,14.5,14.5,{13.,16.}}
drugB 60 {1,18.,18.,{18.,18.}}
drugB 70 {3,28.6667,28.,{25.,33.}}
placebo 20 {2,8.5,8.5,{8.,9.}}
placebo 40 {3,19.3333,20.,{15.,23.}}
placebo 50 {1,25.,25.,{25.,25.}}
placebo 60 {1,34.,34.,{34.,34.}}
placebo 70 {1,37.,37.,{37.,37.}}

За дополнительной информацией по отображению и форматированию таблиц данных, обратитесь к Руководству How to: Work with Tables.