Лекция Стивена Вольфрама

ВНИМАНИЕ!!!

БЛОГ ПЕРЕЕХАЛ НА НОВЫЙ АДРЕС https://blog.wolframmathematica.ru

Онлайн машина вычисления знаний Wolfram|Alpha ®

Онлайн машина вычисления знаний Wolfram|Alpha ®

воскресенье, 31 марта 2013 г.

Визуализация простого набора данных
Vizualizacija_prostogo_nabora_dannyh_Large.png
Визуализация простого набора данных

Андрей Зеленица,
z-andr@ukr.net
Общее количество использованных в посте встроенных функций или символов: 53

Список имен используемых встроенных функций и символов в порядке их появления в коде:
Set (=) | Import | Flatten | Delete | List ({...}) | Take | All | Partition | ListPlot | Rule (->, ->) | PlotMarkers | Filling | Axis | PlotRange | AxesLabel | ImageSize | Map (/@) | Function (&) | Print | Pick | Slot (#) | Tooltip | Automatic | Medium | Information | LongForm | False | BarChart | ChartLabels | Placed | Rotate | Times (*, ×) | Degree | None | ChartLegends | BarChart3D | Right | ChartStyle | Blue | Yellow | PairedBarChart | ChartElementFunction | PlotLabel | Grid | PieChart | SectorOrigin | ReplaceAll (/.) | Pattern (:) | Blank (_) | SectorChart3D | RectangleChart3D | Bottom | Center
Постановка задачи
“Нужен график, где в системе координат показано, что например для киевской области точка на системе координат найдена, где пересекается его объем кредитования (ось у) и объем валовой продукции (ось х) и точка эта подписана, что это Киевская область. подписаны также оси координат.”
На данном простом примере мы попробуем показать основные приемы визуализации данных в Mathematica. При этом мы постараемся подробно объяснить почему и как используются те или иные функции, опции и приемы, постаравшись ответить на большинство вопросов, которые возникают у начинающих пользователей.
Предлагаемый материал разбит на несколько отдельных частей.
Импорт данных
Обрабатываем данные
График с ListPlot
Tooltip - обманчивая простота
От графиков - к диаграммам
Диаграмма BarChart
Диаграмма BarChart3D
Парная диаграмма PairedBarChart
Круговая диаграмма PieChart
Секторная диаграмма SectorChart3D
Прямоугольная диаграмма RectangleChart3D
Что дальше?
Пользователю предлагается знакомиться с содержанием, последовательно вычисляя при этом каждую ячейку ввода.
Импорт данных
Импортируем данные для отображения.
Для этого, нам нужно указать название того файла, который требуется импортировать. А чтобы не мучиться с вводом полного пути к файлу, что иногда требуется, если он лежит в папке, которая не просматривается Mathematica по умолчанию, или если существуют несколько одноименных файлов, находящихся в разных папках, проделаем следующее:
Введем: Import[]
Поставим курсор внутри квадратных скобок
Откроем меню Insert > File Path… > в появившемся окне найдем требуемый файл и щелкнем на кнопке Открыть.
Полное название файла будет вставлено в качестве аргумента функции Import.
Нажмем Shift+Enter, и содержимое файла будет импортировано.
Содержимое файлов типа *.xls импортируется в виде списков. Если файл содержит много информации, причем на разных листах, то получится достаточно большой вложенный список. Листы при этом будут подсписками первого уровня, внутри которых будет содержаться информация для каждого листа в отдельности.
Чтобы указать лист, который нужно импортировать, обычно используется функция Part.
Для нашего файла это будет выглядеть следующим образом:  
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_1.gif
Обрабатываем данные
Так как данные были только в 1-ом листе, остальные листы Mathematica не импортировала. Но при этом, вся информация была заключена в “общие” скобки. Если бы были еще листы с данными, то пришлось бы удалять ненужные подсписки, а в данном случае нужно удалить одни лишние “общие” скобки.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_2.gif
Удаляем заголовки (первый подсписок), так как они только мешают при расчетах. При необходимости использования их в качестве подписей графика, мы всегда сможем их “выудить” в дальнейшем. Кроме того, нужно удалить последний подсписок, так как он “пустой”.
Обратите внимание, что элементы списка второго аргумента функции Delete заключены в фигурные скобки, которые на первый взгляд могут показаться лишними. Однако, без них будет удалена лишь вторая часть первого подсписка.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_3.gif
График с ListPlot
Выделим в отдельные списки названия областей и координаты, по которым будут строиться точки графика.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_4.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_5.gif
Вспомним, что от нас требует постановка задачи:
“Нужен график, где в системе координат показано, что например для киевской области точка на системе координат найдена, где пересекается его объем кредитования (ось у) и объем валовой продукции (ось х) и точка эта подписана, что это Киевская область. подписаны также оси координат.”
Естественно, ListPlot едва ли не самым лучшим образом подходит для этого, однако, нужно еще и подписать все точки. В документации по ListPlot сказано, что за это отвечает опция PlotMarkers. Но если Вы попробуете воспользоваться конструкцией
ListPlot[координаты, PlotMarkers->названия],
скорее всего все точки будут подписаны первым значением из списка названий. Это происходит потому, что маркеры присваиваются спискам, а на подспискам. Чтобы превратить для Mathematica подсписки координат в списки, потребуются дополнительные фигурные скобки, которые легко добавить с помощью команды Partition.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_6.gif
Теперь можно строить график.
Для улучшения внешнего вида, добавим несколько опций: Filling — для отображения координатных линий, PlotRange — для более точного указания отображаемой области значений, AxesLabel — для задания подписей осей координат.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_7.gif
Возможно, это то, что и требовалось, но при более плотно расположенных результатах, надписи накладываются одна на одну, что ухудшает восприятие графика.
Tooltip - обманчивая простота
Когда нужно отобразить множество точек на графике, подписывать каждую точку становится неудобно: надписи накладываются друг на друга, мешая восприятию информации. Удобнее было бы иметь всплывающую подсказку при наведении указателя мыши на точку. В Mathematica это делается с помощью функции Tooltip.
Ее простой синтаксис является обманчивым. В документации дано большое количество примеров, где данные получаются из функций, и с этим проблем возникнуть не должно. Другое дело — когда нужно применить Tooltip для отображения данных из набора. Для начинающих это может стать изматывающей головоломкой.
Все дело в том, что Tooltip должен последовательно обработать точку за точкой, сопоставляя каждой соответствующее название. И применить Tooltip к списку данных просто так не получится. Нужно выражение, которое подготовит отдельные наборы:
координаты точки + маркер,
и “скормит” полученные наборы функции Tooltip.
Синтаксис Tooltip состоит из двух элементов: выражение и маркер. Подставим на место каждого элемента функцию Pick, чей аргумент состоит из элементов [список, селектор, шаблон]. В качестве списка укажем список координат и список названий (соответственно для выражения и маркера функции Tooltip). В качестве селектора укажем список названий, а в качестве шаблона применим слот # чистой функции (Function). За закрывающей скобкой функции Tooltip введем обозначение чистой функции & а затем команду /@ (Map) и вновь укажем список названий.
Полученная конструкция работает следующим образом:
Функция Map, имеющая альтернативную форму записи /@, обеспечивает последовательный вызов всех элементов списка names.
Чистая функция Function, имеющая альтернативную форму записи &, обеспечивает подстановку полученных значений в свои слоты, являющиеся шаблонами функции Pick.
Функция Pick просматривает селектор (список названий names) в поисках подставленного в слот значения и возвращает значение из основного списка (координат coord и названий names, соответственно).
Подставим пока вместо Tooltip функцию Print, чтобы посмотреть, какие данные получаются на выходе нашего выражения.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_8.png
Vizualizacija_prostogo_nabora_dannyh_9.png
Vizualizacija_prostogo_nabora_dannyh_10.png
Vizualizacija_prostogo_nabora_dannyh_11.png
Vizualizacija_prostogo_nabora_dannyh_12.png
Vizualizacija_prostogo_nabora_dannyh_13.png
Vizualizacija_prostogo_nabora_dannyh_14.png
Vizualizacija_prostogo_nabora_dannyh_15.png
Vizualizacija_prostogo_nabora_dannyh_16.png
Vizualizacija_prostogo_nabora_dannyh_17.png
Vizualizacija_prostogo_nabora_dannyh_18.png
Vizualizacija_prostogo_nabora_dannyh_19.png
Vizualizacija_prostogo_nabora_dannyh_20.png
Vizualizacija_prostogo_nabora_dannyh_21.png
Vizualizacija_prostogo_nabora_dannyh_22.png
Vizualizacija_prostogo_nabora_dannyh_23.png
Vizualizacija_prostogo_nabora_dannyh_24.png
Vizualizacija_prostogo_nabora_dannyh_25.png
Vizualizacija_prostogo_nabora_dannyh_26.png
Vizualizacija_prostogo_nabora_dannyh_27.png
Vizualizacija_prostogo_nabora_dannyh_28.png
Vizualizacija_prostogo_nabora_dannyh_29.png
Vizualizacija_prostogo_nabora_dannyh_30.png
Vizualizacija_prostogo_nabora_dannyh_31.png
Vizualizacija_prostogo_nabora_dannyh_32.png
Vizualizacija_prostogo_nabora_dannyh_33.gif
Все данные сгруппированы в отдельные наборы, и при этом они не объединены в общий список! Именно для этого мы создавали наше выражение, так как Tooltip не срабатывает для списков. Еще одну вещь нужно поправить: координаты заключены в двойные фигурные скобки, что скажется на корректной работе функции Tooltip при построении графика. Поэтому, исправим это с помощью команды Flatten.
Приведенное здесь выражение не является уникальным. Другие пользователи могут применять иные выражения для получения такого же результата. Вы сами можете попробовать создать аналогичное выражение с помощью других функций и приемов Mathematica.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_34.gif
Теперь можно построить график. Мы вновь воспользуемся функцией ListPlot со следующими опциями для улучшения внешнего вида: PlotMarkers — для регулировки размера точек, Filling — для отображения координатных линий, PlotRange — для более точного указания отображаемой области значений, AxesLabel — для задания подписей осей координат.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_35.gif
Теперь, при наведении указателя мыши на точку, высвечивается всплывающая подсказка с названием области, которой соответствует выбранная точка.
От графиков - к диаграммам
Несмотря на то, что нами был дан ответ на поставленную задачу, нельзя сказать, что наглядность отображения данных оказалась исчерпывающей. Поэтому, имеет смысл попробовать обратиться к диаграммам, которые зачастую бывают намного нагляднее графиков. К тому же, для графиков данных зачастую подходит лишь одна функция — ListPlot.
В английском языке “Диаграмма” звучит как “Chart”. Поэтому воспользуемся стандартным приемом получения информации от Mathematica по тем или иным ключевым словам. Начнем код с вопросительного знака, за которым идет искомое слово Chart. Для полноты результата, перед и после слова Chart, вставим звездочки “*”, которые обозначают любую комбинацию знаков, то есть обеспечивают нахождение всех встроенных объектов Mathematica, содержащих в своем названии слово Chart.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_36.png
Щелчок на любом элементе полученного списка выведет краткую информацию по выбранному элементу, а также, если выбранный элемент является функцией, будет дана информация по ее синтаксису.
Диаграмма BarChart
Первой в нашем списке идет диаграмма BarChart.
Попробуем с ходу применить ее к списку координат, полученному ранее.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_37.gif
В соответствии со своим синтаксисом, BarChart рассматривает каждый подсписок как отдельный набор данных. Поэтому она строит разноцветные попарные столбцы, которые неплохо справляются с требуемой целью. И несмотря на то, что значения откладываются по одной оси, это даже лучше подходит для визуального сравнения. Тем более, что по умолчанию Mathematica выводит значение элемента, на который помещен указатель мыши.
Теперь нужно сделать подписи для каждого отдельного набора данных. Да, именно набора, так как нет смысла дублировать название области для каждого столбика. Для этого, используем опцию ChartLabels.
опция ChartLabels с параметром Placed указывает на то, что подписи должны размещаться строго определенным образом.
первым аргументом параметра Placed является список names, откуда будут браться названия для подписей.
второй аргумент параметра Placed указывает на положение или выравнивание подписей. В данном случае символ Axis указывает на то, что подписи должны располагаться под осью и быть выравнены вдоль оси.
Третий аргумент параметра Placed является командой поворота Rotate, который поворачивает все подписи на 90 градусов. Ввиду того, что нужно развернуть целый список подписей, в качестве аргумента команды Rotate применяется слот # чистой функции (Function), которая обозначена символом & за закрывающей квадратной скобкой команды Rotate.
Установочный параметр None, являющийся вторым элементом списка параметров опции ChartLabels, указывает на то, что подписи нужно применить к НАБОРАМ данных, а не к каждому элементу в отдельно взятом наборе. Если этот установочный параметр не указать, то каждый ЭЛЕМЕНТ графика будет подписан первым и вторым именем из списка названий. Попробуйте убрать из выражения установочный параметр None, и увидите что это значит.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_38.gif
Помимо подписей, нам нужно обозначить в чем заключается различие между синими и зелеными столбцами каждого набора. Это реализуется опцией легенды диаграммы ChartLegends. Ее применение очень простое: нужно указать список подписей к легенде. Нужно помнить, что количество элементов в легенде должно совпадать с количеством элементов в наборе данных (при этом, количество наборов не имеет значения).
Еще одна небольшая подсказка кроется в использовании оператора \n для обозначения абзацев в текстовых подписях. Это позволяет управлять внешним видом длинных подписей.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_39.gif
Диаграмма BarChart3D
Разобравшись с функцией BarChart, попробуем отобразить то же самое в пространстве с помощью функции BarChart3D.
Как видите, что-либо менять практически не потребовалось. Мы отказались от подписей под осью координат, разместив их прямо на столбцах диаграммы, благо столбцы стали "массивней". Для этого, вместо символа Axis мы использовали символ Right. Он смещает подпись вправо, что весьма кстати, иначе бы она располагалась по центру каждой пары столбцов. Помимо этого, мы изменили цвета диаграммы с помощью опции ChartStyle.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_40.gif
Парная диаграмма PairedBarChart
Используемый нами набор данных содержит, по сути, по два значения для каждой точки. Для подобных случаев Mathematica располагает парной диаграммой PairedBarChart. Ее синтаксис несколько отличается от того, что использовался в предыдущих функциях. Поэтому нам нужно подготовить данные несколько иным образом чем ранее.
Для применения функции PairedBarChart нужно иметь два отдельных списка данных и список для подписей. Последний у нас уже имеется (names), а два отдельных списка данных нам предстоит создать.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_41.gif
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_42.gif
Строим диаграмму. Уже привычно применяем опцию ChartLabels для подписи столбцов, при этом, чтобы иметь возможность контролировать положение надписей, мы применяем функцию Placed. Следует заметить, что в таком варианте одним и тем же списком названий подписываются столбцы с обеих сторон, соответственно и выравнивание можно указать лишь для обеих сразу. Как вариант, можно использовать опцию ChartLabels без функции Placed, что расставит подписи в центре между столбцами, но здесь есть другой подвох: длинные названия будут накладываться на столбцы, а раздвинуть две части графика намного не удастся, так как отвечающая за это опция BarSpacing позволяет изменять расстояние между осями координат от 0 до размера чуть большего чем толщина столбца. Естественно, можно индивидуально подписать каждый столбец с помощью функции Labeled, но оставим эту возможность для самостоятельного исследования пользователем.
Помимо привычных опций, здесь использованы ChartStyle для отображения диаграммы в пастельных тонах, а также ChartElementFunction для изменения внешнего вида столбцов.
Кроме того, надпись мы здесь задаем с помощью опции PlotLabel, а чтобы "разделить" надпись на две части, мы воспользовались функцией Grid.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_43.gif
Круговая диаграмма PieChart
Еще одним способом отобразить наш набор данных является круговая диаграмма PieChart. При этом, можно отобразить несколько окружностей, для каждого отдельного набора данных. Сгенерированные в предыдущем примере наборы прекрасно подходят для данной диаграммы. Нужно отметить, что опция SectorOrigin отвечает за поворот диаграммы от исходного положения и с ее помощью можно подобрать оптимальное положение, при которой подписи менее всего мешают друг другу.
Еще одной особенностью является выдвижение сегмента при щелчке на нем, что удобно для сравнения. И к тому же, как и во всех предыдущих случаях, при наведении курсора на тот или иной сегмент появляется всплывающая подсказка с значением, присущим данному элементу.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_44.gif
Секторная диаграмма SectorChart3D
Объемная секторная диаграмма SectorChart3D похожа на круговую, однако, ее синтаксис требует трех значений для каждого набора данных, первый из которых отвечает за угол сектора, второй - за радиус сектора, а третий - за высоту сектора.
Так как радиус каждого сектора мы можем оставить одинаковым для всех, отображая кредиты в качестве высоты сектора, а продукцию в качестве угла сектора, мы можем присвоить радиусу любое значение.
Сказанное выше обуславливает необходимость вновь перестроить наш набор данных. И самым простым способом является преобразование списка с помощью правила. В Mathematica правила являются очень мощными инструментами преобразования данных и выражений, имея при этом простой и понятный синтаксис:
левая часть выражения -> правая часть выражения
Слева мы должны указать ту переменную или данные или конструкцию, которую нам нужно найти и преобразовать. Справа мы указываем то, что хотим видеть на месте найденного. Конструкция выражение_ буквально означает любое выражение. При этом не имеет значения, какие символы используются для записи.
Для начала, при помощи команды Print вновь отобразим список step3, полученный нами еще в самом начале этого “блокнота”.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_45.png
Учитывая синтаксис функции SectorChart3D, о котором было сказано выше, на первое место каждого подсписка нужно подставить данные о производстве (находятся на третьей позиции исходного списка step3), на второе место нужно подставить любой радиус, лишь бы он был одинаков для всех наборов (например единицу), на третьем месте должны оказаться данные о кредитах.
Мы начинаем наше преобразование с имени, которое присвоим новому списку (data2), затем указываем исходный список, подлежащий трансформации, затем вставляем команду ReplaceAll, при помощи ее альтернативной формы записи /. , а далее записываем правило.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_46.gif
Теперь можно строить диаграмму. Используемые в ней опции уже хорошо знакомы нам по предыдущим примерам.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_47.gif
Аналогично предыдущему примеру, щелчок на секторе выдвигает сектор, что удобно для сравнения. И к тому же, как и во всех предыдущих случаях, при наведении курсора на тот или иной сектор, появляется всплывающая подсказка с значением, присущим выбранному сектору.
Прямоугольная диаграмма RectangleChart3D
Последний из рассматриваемых нами примеров посвящен функции RectangleChart3D. Ее синтаксис также требует трех значений для каждого набора данных, соответствующих ширине, глубине и высоте столбца. И опять нам понадобится трансформировать исходный набор данных, чтобы мы смогли построить данную диаграмму.
Пусть производство будет ассоциировано с выстой столбца, а кредит с шириной. При этом, глубину столбца установим одинаковой для всех. Соответственно, преобразование будет выглядеть следующим образом:
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_48.gif
Построим график.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_49.gif
Как видим, он не очень удачен. Поэтому, пусть ширина столбцов будет одинакова, а значения кредита ассоциируем с глубиной столбца.
И опять нам придется трансформировать исходный набор данных. Однако, в этом случае указать единицу в качестве ширины столбца не получится - слишком непропорциональным получится диаграмма. Лучше всего подойдет значение от 100 до 500.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_50.gif
Строим график.
Нажмите, чтобы получить возможность скопировать код Wolfram Mathematica
закрыть
Vizualizacija_prostogo_nabora_dannyh_51.gif
Что дальше?
В этом блоге были показаны лишь несколько основных возможностей графического отображения набора данных. Список доступных функций, опций, установок и т.п. очень велик и зависит от поставленной цели, а также от воображения и опыта пользователя. Учитывая то, что Mathematica, помимо своих основных функций как вычислительной системы, является мощной средой программирования, трудно сказать где находится граница возможностей визуализации данных: просто с усложнением и внедрением спецэффектов в графику неизбежно будет расти время, затрачиваемое на ее разработку, а также требования к квалификации пользователя..
Те, кто хочет узнать больше о возможностях, которые предлагает Mathematica в области визуализации данных, в первую очередь следует обратить внимание на следующие встроенные справочные материалы.

Блог принадлежит “Русскоязычной поддержке Wolfram Mathematica
При любом использовании материалов блога, ссылка на блог обязательна.
SpikeyСоздано с помощью Wolfram Mathematica 9

Комментариев нет:

Отправить комментарий