1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-data8-textbook-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
6.md 37 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 06:54 043962f

Визуализация

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

В этой главе мы разработаем некоторые базовые графические методы анализа данных. Нашим источником данных является Интернет-база данных фильмов (IMDB), которая представляет собой онлайн-базу данных, содержащую информацию о фильмах, телешоу и видеоиграх. Сайт Box Office Mojo предоставляет множество сводных данных IMDB, которые мы уже использовали. Мы также использовали сводные данные сайта The Numbers, девиз которого — «Встреча данных и киноиндустрии».

Точечные и линейные графики

Таблица actors содержит данные об актёрах Голливуда мужского и женского пола. Её столбцы:

Столбец Содержание
Actor Имя актёра
Total Gross Общий внутренний доход актёра от всех фильмов (в миллионах долларов)
Number of Movies Количество фильмов, в которых снялся актёр
Average per Movie Общий доход, разделённый на количество фильмов
#1 Movie Фильм с самым высоким доходом актёра
Gross Доход актёра от фильма с самым высоким доходом (в миллионах долларов)

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

Эта таблица содержит 50 строк, соответствующих 50 самым известным актёрам. Эта таблица уже отсортирована по Total Gross, поэтому легко увидеть, что Харрисон Форд — лучший актёр. В целом, его фильмы собрали больше внутренних доходов, чем фильмы других актёров.

actors = Table.read_table('actors.csv')
actors
Actor Total Gross Number of Movies Average per Movie #1 Movie Gross
Harrison Ford 4871.7 41 118.8 Star Wars: The Force Awakens 936.7
Samuel L. Jackson 4772.8 69 69.2 The Avengers 623.4
Morgan Freeman 4468.3 61 73.3 The Dark Knight 534.9
Tom Hanks 4340.8 44 98.7 Toy Story 3 415
Robert Downey, Jr. 3947.3 53 74.5 The Avengers 623.4
Eddie Murphy 3810.4 38 100.3 Shrek 2 441.2
Том Круз 3587.2 36 99.6 Война миров 234.3
Джонни Депп 3368.6 45 74.9 Сундук мертвецов 423.3
Майкл Кейн 3351.5 58 57.8 Тёмный рыцарь 534.9
Скарлетт Йоханссон 3341.2 37 90.3 Мстители 623.4

(Опущено 40 строк)

Термин. Переменные — это официальное название того, что мы называем «характеристиками», например, «количество фильмов». Термин «переменная» подчёркивает, что для разных людей эта характеристика может иметь разные значения — количество фильмов, сыгранных актёром, варьируется от человека к человеку.

Переменные, имеющие числовые значения (например, «количество фильмов» или «средний валовой доход за фильм»), называются количественными или числовыми переменными.

Точечная диаграмма

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

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

actors.scatter('Number of Movies', 'Total Gross')

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

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

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

Позже в курсе мы узнаем, как количественно оценить корреляцию. Сейчас мы просто размышляем качественно.

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

actors.scatter('Number of Movies', 'Average per Movie')

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

Кроме того, есть одна точка, которая очень высока и находится слева на графике. Она соответствует актёру с небольшим количеством фильмов, у которого средний доход за фильм очень высок. Эта точка является аномалией. Это далеко от общей области графика. Фактически, это отличается от всех остальных точек на графике.

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

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

no_outlier = actors.where('Number of Movies', are.above(10))
no_outlier.scatter('Number of Movies', 'Average per Movie')

Отрицательная корреляция всё ещё очевидна. Давайте найдём некоторых актёров, соответствующих точкам справа на графике, где количество фильмов велико:

actors.where('Number of Movies', are.above(60))
Актёр Общий валовой доход Количество фильмов Средний доход за фильм #1 Фильм Валовой доход
Сэмюэл Л. Джексон 4772,8 69 69,2 Мстители 623,4
Морган Фриман 4468,3 61 73,3 Тёмный рыцарь 534,9
Роберт Де Ниро 3081,3 79 39 Знакомьтесь, Фаучеры 279,3
Лиам Нисон 2942,7 63 46,7 Призрачная угроза 474,5

Великий актёр Роберт Де Ниро имеет наибольшее количество фильмов и самый низкий средний доход за фильм. Остальные великие актёры находятся недалеко от точек, но Де Ниро находится очень далеко.

Чтобы понять отрицательную корреляцию, обратите внимание, что у актёров, сыгравших больше фильмов, разнообразие этих фильмов с точки зрения стиля, жанра и кассовых сборов становится больше. Например, актёр может появляться в высокодоходных боевиках или комедиях (таких как «Знакомьтесь, Фаучеры»), а также в превосходных, но не привлекающих большую аудиторию независимых фильмах. Поэтому средний доход этого актёра за фильм может быть относительно низким.

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

actors.where('Number of Movies', are.below(10))
Актёр Общий валовой доход Количество фильмов Средний доход за фильм #1 Фильм Валовой доход
Энтони Дэниелс 3162,9 7 451,8 Звёздные войны: Пробуждение силы 936,7

Как актёр, Энтони Дэниелс (Anthony Daniels), возможно, не обладает телосложением Роберта Де Ниро (Robert De Niro). Однако его средний доход за 7 фильмов близок к 4,52 миллиардам долларов за фильм.

Что это за фильмы? Возможно, вы знаете дроида C-3PO из «Звёздных войн: Пробуждение Силы». C-3PO — это металлический робот из «Звёздных войн», которого играет Энтони Дэниелс.

Дэниелс исполнил роль C-3PO во всех фильмах серии «Звёздные войны» (кроме камео). Это объясняет его высокий средний доход и небольшое количество фильмов.

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

Линейный график

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

Таблица movies_by_year содержит данные о фильмах, выпущенных американскими кинокомпаниями в период с 1980 по 2015 год. В таблице есть следующие столбцы:

Столбец Содержание
Year Год
Total Gross Общий внутренний доход от проката всех фильмов (в миллионах долларов)
Number of Movies Количество выпущенных фильмов
#1 Movie Фильм с самым высоким доходом
movies_by_year = Table.read_table('movies_by_year.csv')
movies_by_year
Year Total Gross Number of Movies #1 Movie
2015 11 128,5 702 «Звёздные войны: Пробуждение силы»
2014 10 360,8 702 «Снайпер»
2013 10 923,6 688 «Голодные игры: И вспыхнет пламя»
2012 10 837,4 667 «Мстители»
2011 10 174,3 602 «Гарри Поттер и Дары Смерти. Часть 2»
... ... ... ...

Метод plot класса Table создаёт линейный график. У него два параметра, которые совпадают с параметрами точечной диаграммы: столбец на горизонтальной оси и столбец на вертикальной оси. Это линейный график количества фильмов, выпущенных ежегодно в период с 1980 по 2015 год.

movies_by_year.plot('Year', 'Number of Movies')

Хотя цифры за каждый год меняются, график резко поднимается, а затем демонстрирует плавный рост. Резкий рост в начале 1980-х годов частично объясняется тем, что после нескольких лет спада в производстве фильмов в 1970-е годы киноиндустрия вернулась к передовым методам производства фильмов в конце 1970-х.

Мы сосредоточимся на последних нескольких годах. Строки, соответствующие периоду с 2000 по 2015 год, распределяются в переменную century_21.

century_21 = movies_by_year.where('Year', are.above(1999))
century_21.plot('Year', 'Number of Movies')

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

century_21.plot('Year', 'Total Gross')

Несмотря на финансовый кризис, количество выпущенных фильмов значительно меньше, чем в 2008 году, но общий доход в 2009 году всё равно выше, чем в предыдущем.

Одна из причин этого противоречия заключается в том, что люди склонны ходить в кино во время экономических спадов. «Во времена экономического спада американцы стекаются в кинотеатры», — пишет «Нью-Йорк Таймс» в феврале 2009 года. Статья цитирует слова Мартина Каплана из Университета Южной Калифорнии: «Люди хотят забыть о своих проблемах и быть с другими». Когда праздники и дорогие угощения становятся недоступными, кино предлагает популярное развлечение и утешение.

Ещё одна причина высоких кассовых сборов в 2009 году — фильм «Аватар» и его 3D-версия. «Аватар» стал не только первым фильмом 2009 года, но и вторым самым кассовым фильмом всех времён. Мы увидим это позже.

century_21.where('Year', are.equal_to(2009))
Year Total Gross Number of Movies #1 Movie
2009 10 595,5 521 «Аватар»

Группировка данных по категориям

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

  • Отдельные элементы — бумажные стаканчики для мороженого, переменная — вкус.
  • Отдельные элементы — профессиональные баскетболисты, переменная — команда.
  • Отдельный элемент — год, переменная — самый кассовый фильм года.
  • Отдельный объект — респондент, переменная — выбранный им ответ из вариантов «совершенно не удовлетворён», «немного удовлетворён» и «очень удовлетворён».

Таблица icecream содержит данные о 30 стаканчиках мороженого.

icecream = Table().with_columns(
    'Flavor', make_array('Chocolate', 'Strawberry', 'Vanilla'),
    'Number of Cartons', make_array(16, 5, 9)
)
icecream
Flavor Number of Cartons
Chocolate 16
Strawberry 5
Vanilla 9

Категориальная переменная «вкус» имеет значения «шоколад», «клубника» и «ваниль». Таблица показывает количество стаканчиков каждого вкуса. Мы называем это таблицей распределения. Распределение показывает все значения переменной и частоту каждого значения.

Гистограмма

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

Для построения гистограммы по горизонтали мы используем столбчатую диаграмму, потому что так легче маркировать столбцы. Поэтому метод класса Table называется barh. У него есть два параметра: столбец с категориями и столбец с частотой.

icecream.barh('Flavor', 'Number of Cartons')

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

icecream.barh('Flavor')

Особенности категориального распределения

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

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

Самое главное, столбцы можно расположить в любом порядке. Категории, такие как «шоколад», «ваниль» и «клубника», не имеют общепринятого порядка, как числа 5, 7 и 10.

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

icecream.sort('Number of Cartons', descending=True).barh('Flavor')
``` **Звёздные войны: Пробуждение силы | Buena Vista (Disney) | 906723418 | 906723400 | 2015**

**Аватар | Fox | 760507625 | 846120800 | 2009**

**Титаник | Paramount | 658672302 | 1178627900 | 1997**

**Мир Юрского периода | Universal | 652270625 | 687728000 | 2015**

**Мстители Marvel | Buena Vista (Disney) | 623357910 | 668866600 | 2012**

**Тёмный рыцарь | Warner Bros. | 534858444 | 647761600 | 2008**

**Звёздные войны. Эпизод I: Скрытая угроза | Fox | 474544677 | 785715000 | 1999**

**Звёздные войны | Fox | 460998007 | 1549640500 | 1977**

**Мстители: Эра Альтрона | Buena Vista (Disney) | 459005868 | 465684200 | 2015**

**Тёмный рыцарь: Возрождение легенды | Warner Bros. | 448139099 | 500961700 | 2012**

(Опущено 190 строк)

Дочерние компании Disney, такие как Buena Vista и Fox, часто входят в первую десятку.

Чтобы решить эту проблему, сначала нужно отметить, что нам нужна только таблица с фильмами и студиями; другая информация не требуется.

```py
movies_and_studios = top.select('Title', 'Studio')

Метод group таблицы позволяет нам подсчитать частоту появления каждой студии в таблице. Метод group принимает в качестве параметра столбец меток категорий и возвращает таблицу с количеством строк для каждой категории. Столбец количества всегда называется count, но вы можете использовать relabeled, чтобы изменить его.

movies_and_studios.group('Studio')
Studio count
AVCO 1
Buena Vista (Disney) 29
Columbia 10
Disney 11
Dreamworks 3
Fox 26
IFC 1
Lionsgate 3
MGM 7
MPC 1

(опущено 14 строк)

Таким образом, метод group создаёт таблицу распределения, показывающую, как фильмы распределяются по категориям (студиям).

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

studio_distribution = movies_and_studios.group('Studio')
studio_distribution.sort('count', descending=True).barh('Studio')

Warner Bros. и Buena Vista являются наиболее распространёнными студиями среди первых 200 фильмов. Warner Bros. выпустила фильмы о Гарри Поттере, а Buena Vista — «Звёздные войны».

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

movies_and_years = top.select('Title', 'Year')
movies_and_years.group('Year').sort('count', descending=True).barh('Year')

Все самые длинные столбцы соответствуют годам после 2000 года. Это согласуется с нашим наблюдением, что последние несколько лет должны быть самыми частыми.

Работа с числовыми переменными

У этой диаграммы есть некоторые нерешённые проблемы. Хотя она действительно отвечает на вопрос о том, какой год выпуска был самым популярным среди 200 лучших фильмов, она не перечисляет все годы в хронологическом порядке. Она рассматривает год как категориальную переменную.

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

По умолчанию barh сортирует категории (годы) от самого низкого до самого высокого. Поэтому мы запустим этот код, но не будем сортировать по count.

movies_and_years.group('Year').barh('Year')

Теперь годы расположены в порядке возрастания. Однако у этой гистограммы всё ещё есть проблемы. С 1921 по 1937 год и с 1937 по 1939 год столбцы очень далеко друг от друга. Гистограмма не показывает, что ни один фильм не был выпущен между 1922 и 1936 годами. На основе такого визуального представления такое несоответствие и упущение затрудняют понимание раннего распределения лет.

Гистограммы используются для визуализации категориальных переменных. Когда переменная является числовой, и мы создаём визуализацию, мы должны учитывать числовые отношения между значениями. Это тема следующего раздела. | Возраст | 2010 | 2014 | | --- | --- | --- | | 0 | 3 951 330 | 3 949 775 | | 1 | 3 957 888 | 3 949 776 | | 2 | 4 090 862 | 3 959 664 | | 3 | 4 111 920 | 4 007 079 | | 4 | 4 077 551 | 4 005 716 | | 5 | 4 064 653 | 4 006 900 | | 6 | 4 073 013 | 4 135 930 | | 7 | 4 043 046 | 4 155 326 | | 8 | 4 025 604 | 4 120 903 | | 9 | 4 125 415 | 4 108 349 | | 10 | 4 187 062 | 4 116 942 | | 11 | 4 115 511 | 4 087 402 | | 12 | 4 113 279 | 4 070 682 | | 13 | 4 119 666 | 4 171 030 | | 14 | 4 145 614 | 4 233 839 | | 15 | 4 231 002 | 4 164 796 | | 16 | 4 313 252 | 4 168 559 | | 17 | 4 376 367 | 4 186 513 | | 18 | 4 491 005 | 4 227 920 |

Теперь мы можем построить два наложенных друг на друга линейных графика, показывающих количество детей разного возраста в 2010 и 2014 годах. Метод вызова аналогичен вызову scatter в предыдущем примере.

children.plot('Возраст')

На этой шкале важно помнить, что у нас есть только данные о возрасте «0, 1, 2» года и так далее. Две фигуры «переплетены».

Эти графики пересекаются в некоторых местах: например, количество четырёхлетних детей в 2010 году больше, чем в 2014 году, а количество четырнадцатилетних детей в 2014 году больше, чем в 2010 году.

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

Гистограмма

Для последнего примера этого раздела мы рассмотрим расовое распределение взрослых и детей в Калифорнии и США.

Фонд семьи Кайзер составил данные о расовом распределении населения США на основе данных переписи населения. Сайт фонда предоставляет сводные данные за 2014 год для всего населения США и детей младше 18 лет.

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

usa_ca = Table.read_table('usa_ca_2014.csv')
usa_ca
Этническая принадлежность Все США Калифорния Дети США Дети Калифорнии
Чёрный 0,12 0,05 0,14 0,05
Латиноамериканский 0,18 0,38 0,24 0,5
Белый 0,62 0,39 0,52 0,29
Другое 0,08 0,18 0,1 0,16

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

Метод barh позволяет нам визуализировать сравнение нескольких гистограмм, наложенных друг на друга, путём построения их на общей оси. Этот вызов похож на scatter и plot: мы должны указать общую ось для сравнения категорий.

Примечание переводчика: Ось (Axes) — это область, ограниченная горизонтальной и вертикальной осями.

usa_ca.barh('Этническая принадлежность')

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

Сначала сравним население США и Калифорнии в целом.

usa_ca.select('Этническая принадлежность', 'Все США', 'Калифорния').barh('Этническая принадлежность')

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

Из графика видно, что около 40% населения Калифорнии в 2014 году составляли латиноамериканцы. Сравнение с населением Калифорнии среди детей показывает, что доля латиноамериканцев, вероятно, будет расти в ближайшие годы. Среди детей Калифорнии 50% принадлежат к латиноамериканской группе.

usa_ca.select('Этническая принадлежность', 'Калифорния', 'Дети Калифорнии').barh('Этническая принадлежность')

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-data8-textbook-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-data8-textbook-zh.git
oschina-mirror
wizardforcel-data8-textbook-zh
wizardforcel-data8-textbook-zh
master