Youtube shorts — Все про короткие видео на ютуб
Несмотря на то, что youtube уже давно стал настоящим гигантом, собирая миллиарды зрителей, это не повод останавливаться на достигнутом. Платформа активно внедряет новые функции, использует новые форматы контента. Вслед за популярными историями в конце 2020 года появились и youtube shorts………
Внимание
Мы также покажем вам как добавлять свои Youtube shorts в России
И расскажем все что известно про монетизацию таких роликов…
Расскажем, что это такое и как работает новая функция, а также платит ли ютуб за короткие видео.…
О коротких роликах
Вслед за ростом популярности тиктока корпорация google решила не терять свою нишу и запустила новый проект: youtube shorts.
→ Это — небольшие видеозаметки в вертикальном формате, продолжительностью от 15 до 60 секунд, снабженные хэштегом #shorts.
- Уже хорошо знакомые и полюбившиеся публике Истории имеют другой формат, снабжены небольшим текстом, а также размещаются в отдельной вкладке «сообщество».
- Шортсы же находятся в разделе « видео» канала, а вот механизм попадания в рекомендованное пока не совсем понятен.
Зато совершенно ясно, что таким контентом youtube стремится привлечь более молодую аудиторию, а также стимулировать пользователей на обмен своими сюжетами, а это уже шаг в сторону полноценной социальной сети.
Новые короткие видео на ютубе в самом деле работают достаточно эффективно, в чем их преимущества:
- их легко сделать и быстро заливать, так как shorts, как правило, весит очень мало;
- набирают просмотры в 5 раз быстрее , чем стандартный контент;
- помогают привлечь подписчиков на канал;
- эффективны в качестве анонсов к новым роликам ⇐
- помогают привлечь новую аудиторию, которой больше нравится такой формат.
com/embed/Kj4kutK7OdY?feature=oembed» allow=»accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture» allowfullscreen=»»/>
Важно: если ваш канал еще не приносит доход, короткие видео не помогут вам включить монетизацию в ютубе, так как они не учитываются в общем времени просмотров. Но подписчики, полученные через мини-видео, считаются как обычно.
Если вы не хотите видеть контент такого формата у себя в ленте, чтобы отключить его, нажмите «троеточие» рядом с лентой youtube shorts, а затем выберите «не интересует».
⇓Самое самое — Рекорд ⇓
→ Кстати, самое короткое видео на ютубе – это своего рода тренд, который вот уже несколько лет используют для привлечения любопытных зрителей (ну что же может быть в таком коротеньком фрагменте?) На самом деле таких роликов очень много, обычно они имеют длительность 1 – 2 секунды. Снимают сверхкороткие приколы, живые мемы, страшилки, добавляют просто картинки заставки. В общем, ничего интересного, мы проверяли
Блин что это такое ??? ↓
Тестовая версия
На данный момент полноценный сервис youtube shorts только тестируют в Индии. У них уже есть отдельная кнопка для записи ролика напрямую из приложения: удерживая ее, вы можете начинать запись, отпуская – приостанавливать процесс (и так можно делать несколько раз, пока не будет достигнута максимальная продолжительность).
Запись шортса доступна только в мобильном приложении: нажав на + (создать),
Вы увидите, что рядом с загрузкой и трансляциями, со временем появится команда «записать короткое видео».
Специальный функционал !!!
Помимо этого, полный функционал сервиса предусматривает ускорение/замедление видеоролика, установку таймера и обратного отсчета, наложение звуков из штатной библиотеки ютуба.
Несмотря на то, что загружать из галереи можно до 60 секунд видео, сервис работает только с 15-секундными фрагментами. Как советуют разработчики, это наиболее предпочтительное время.
А что у нас в РФ и СНГ ?
Итак, в Индии уже все работает, тем временем активные ютуберы в нетерпении ожидают, когда youtube shorts выйдет в России. Есть две новости. Плохая: это пока неизвестно, хорошая: во всем мире короткие видео тоже можно записывать и размещать, но немного иначе.
Если вы ищете, как и где скачать приложение для youtube shorts, не стоит тратить время, это делается напрямую с ютуба, без каких-либо дополнительных сервисов:
1. Снимите ролик длительностью не более 1 минуты.
2. Используйте вертикальную ориентацию 16:9 или соотношение сторон 1:1.
3. Загрузите ролик на ютуб с добавлением хэштега #shorts.
Вот и все, достаточно просто. Теперь ролик будет размещен на вашем канале в числе прочего контента, но имея заданные параметры (а главное, хэштег), он сможет попасть в ленту рекомендаций в разделе «короткие видео». Для этого не требуется выполнение каких-либо дополнительных технических требований, разрешение для shorts видео ютуб не ограничивает.
Примечание: добавление хэштега – не основное требование, без него видео также может попасть в рекомендации, но шансов будет меньше.
Важно: так как опция еще тестируется, работает она нестабильно, и если сегодня короткие видео пропали на главной странице в ютубе, завтра ролики вполне могут появиться.
Включаем полный функционал
А теперь способ для тех, кто не собирается дожидаться полноценного запуска в России. Вы можете открыть запись ютуб шортс прямо из приложения уже сейчас. Все просто:
- Необходимо загрузить NORD VPN или любой другой клиент для замены vpn. Установите страну India.
- После того, как все готово, можно заходить на ютуб и снимать шорт: нажимайте плюсик, в открывающемся меню должна появиться надпись «Создать короткое видео».
- Удерживайте кнопку для записи ролика, пока снимаете, и отпустите, когда все будет готово.
- Если вы не довольны тем, как получилось записать, нажмите «Отменить», чтобы убрать короткие видео. Если нужно вернуть удаленное, нажмите «Повторить».
- Перед тем, как выложить короткое видео в ютуб, нажмите «Далее» и воспользуйтесь предварительным просмотром, затем продолжите, чтобы добавить название (до 100 знаков), указать аудиторию и опубликовать свое творение.
Монетизация
Официальная монетизация коротких видео на ютубе не доступна, рекламу в них не показывают.
В общем случае алгоритм работает так: контент, на который вышла поисковая система гугла или ютуба, а также отображенный в рекомендациях, получает показы рекламы на монетизированных каналах. Контент, отображаемый в шорт-видео или в сюжетах, не рассматривается как пригодный для показа рекламы даже на каналах с включенной монеткой.
В данный момент за сторис и short video отвечают самостоятельные медиа-плееры на базе youtube.
НО…!
Как сообщают разработчики платформы, на данный момент стоит задача найти оптимальный способ монетизировать короткие видео, так что в будущем ждем дополнительный заработок в ютуб $$$
А пока что можно извлечь максимальную выгоду:
- анонсируйте новые ролики с помощью мини формата и набирайте дополнительные просмотры для монетизированного контента;
- привлекайте новых подписчиков, чтобы повысить рейтинг канала;
- создавайте поток трафика на свой сайт или в другие социальные сети;
- добавляйте партнерские ссылки, чтобы перенаправить трафик и получить комиссию.
Подробнее о последнем пункте: в отличие от тиктока, который не позволяет добавлять прямые ссылки, вы можете спокойно это делать на ютюбе. Если вы используете этот способ заработка в основном контенте на канале, шорт-видео принесут аналогичный доход намного быстрее.
Ведь мы уже упоминали о высокой скорости набора просмотров
Расчехление игрушек: почему YouTube запрещает рекламу для детей | Статьи
YouTube запретит таргетировать рекламу зрителям детского контента с 10 декабря. Это значит, что личные данные и предпочтения детей, которые смотрят обзоры игрушек и песенки поющих пальчиков, больше нельзя будет использовать для показа им персональной рекламы. Почему это может обрушить рынок детских видео, но сделать ролики более вменяемыми, разбирались «Известия».
Распаковка игрушек как бизнес
На лужайку с неба падают две плюшевые игрушки. Мальчик и девочка лет 10 с невнятными возгласами подбегают к ним, распаковывают и несколько секунд играют, пока не слышат из-за ограды лай. Они бросают игрушки, бегут на звук и находят там еще две игрушки. Распаковывают, играют, пока не находят новые. В течение 7,5 минут этот сюжет повторяется в разных вариациях.
Так выглядит типичный ролик на канале Kids Diana Show, который посмотрели почти 755 млн раз. На канал, который занимает 27-е место в международном рейтинге YouTube, подписаны 34,4 млн пользователей.
Фото: youtube.com/KidsDianaShow
Распаковка игрушек — один из популярных жанров в детском сегменте YouTube. Несколько таких видео есть у Vlad and Nikita (29,3 млн подписчиков), у Mister Max (14,9 млн подписчиков) и у многих, многих, многих блогеров-детей. Если не выключать функцию автовоспроизведения похожих роликов, распаковки можно смотреть сотни часов подряд.
По подсчетам сервиса WhatStat, упомянутый в начале канал Дианы и чуть менее популярный канал ее брата Ромы принесли семье из Одессы, переехавшей в США, $4,7 млн. А Райан Каджи, звезда канала Ryan ToysReview, который в некотором смысле изобрел распаковку игрушек, в 2018 году заработал $11 млн.
На тот момент ему было шесть лет и он уже вошел в рейтинг самых высокооплачиваемых предпринимателей видеосервиса, составленный Forbes.Конец прекрасной эпохи близок
Деньги дети-блогеры и их родители получают деньги не только за показ товаров в кадре, но и за прероллы, рекламу, которая воспроизводится перед началом роликов. Разным людям прероллы показываются разные. Это делается на основе анализа личных данных, просмотренных до этого роликов, геометок, лайков и многого другого. Как работает таргетирование рекламы в интернете и почему это нормально, «Известия» объясняли на примере британской конторы Cambridge Analytica, которую обвинили в Brexit’е и победе Трампа в 2016 году.
Так вот, с 10 декабря YouTube хочет запретить анализировать данные тех, кто смотрит детский контент (это могут быть не только дети).
Фото: Global Look Press/Jochen Tack
«Доходы с YouTube в том виде, который есть сейчас, безусловно, просядут у детских каналов, — считает Кирилл Диденок (основатель музыкального издательства DNK-Music и рекламного агентства DIDENOK TEAM представляет интересы самых популярных детских и молодежных YouTube-каналов СНГ, в общей сложности у них более 50 млн подписчиков). — По поводу цифр уменьшения заработка у всех паника: YouTube обещает, что доходы просядут только на 20%, креаторы уверены, что это все 90%, но никто ничего точного сказать не может».
Кирилл Диденок, продюсер детских и молодежных YouTube-каналов
YouTube особенно активно продвигает те видео, на аудиторию которых есть очередь из рекламодателей (чтобы показать эту рекламу аудитории). Есть рекламодатели, которые планируют потратить определенный бюджет для показа рекламы на определенную аудиторию, и есть ограниченное количество видео, аудитория которых подходит для рекламодателей. Для того чтобы YouTube смог «выкрутить» закупленную брендами рекламу, видеохостингу необходимо дополнительно продвигать данные видео в рекомендации. Поэтому количество просмотров таких видео достигает сотен миллионов.
Вместе с запретом на анализ данных YouTube решил полностью отключить комментарии к рассчитанным на детей видео. И это также повлияет на продвижение, так как «наличие комментариев под видео влияет на органический прирост просмотров и выдачу в рекомендациях и трендах», напомнил Кирилл Диденок.
Кирилл Диденок — основатель музыкального издательства DNK-Music и рекламного агентства DIDENOK TEAM
Фото: из личного архива Кирилла Диденока
В разговоре с «Известиями» он предположил, что «большая часть рекламодателей перестанет показывать свою рекламу в детском контенте, так как каждый из брендов хочет четко идентифицировать свою аудиторию». Диденок ожидает, что в дальнейшем YouTube предложит другие методы монетизации детского контента — например, абонентскую плата за подписку на сервис «YouTube детям». Представители YouTube заявляли о планах перенести детский контент туда и модерировать его алгоритмами и вручную. Пока в новом приложении, по словам продюсера, слишком маленькая аудитория и, соответственно, слишком маленькая монетизация.
YouTube — отражение политики США
Изменения в детском сегменте YouTube происходят на фоне активизации деятельности Федеральной торговой комиссии США. Во-первых, она озаботилась тем, как соблюдается Закон о защите личных сведений детей в интернете. Документ, регламентирующий сбор персональной информации детей младше 13 лет лицами или организациями под юрисдикцией США, вступил в силу в 2000 году.
Представление о границах персональных данных с тех пор сильно изменилось (YouTube заработал в 2005 году). А американская юрисдикция, похоже, перестала иметь такое значение. В начале ноября журналисты The New York Times писали о расследовании в отношении китайского видеосервиса TikTok. Цель расследования — выяснить, передает ли популярный у детей сервис собранные данные властям КНР.
Фото: REUTERS/Dado Ruvic
Во-вторых, торговая комиссия в сентябре грозилась запретить всю рекламу в детских роликах на YouTube. Этому предшествовала жалоба в комиссию надзорной общественной организации Truth in Advertising («Правда в рекламе»). Общественников возмутило, что минимум один продукт из каждого обзора игрушек спонсорский, а ролики не отмечены как рекламные. Претензия серьезная, хотя, по мнению опрошенных «Известиями» психологов, дети до 10 лет не в состоянии понять, что такое реклама.
Детские видео могут стать адекватнее
«С точки зрения безопасности детской психики и сохранения их культурного поля это правильное решения — более тщательно фильтровать показ рекламы. Но важно, чтобы креаторы YouTube не потеряли мотивацию создавать свои ролики с прежним энтузиазмом, ведь основной трафик площадки держится на детских видео», — этой фразой Кирилл Диденок предварил все свои рассуждения о падении доходов блогеров.
Есть надежда, что новые ограничения YouTube сделают ролики более безопасными для детей.Фото: Depositphotos
Понятно, что взрослый человек не может посмотреть на мир глазами ребенка. Но когда подряд смотришь десятки популярных у детей роликов на YouTube, возникает не слишком приятное чувство. Оно похоже на эффект «зловещей долины». Так называют ощущение отвращения, которое вызывает робот, выглядящий почти (но не совсем) как человек.
Писатель и художник Джеймс Бридл объясняет это тем, что видео, ориентированные на детей, бесконечно повторяют себя. В лекции, которую Бридл читал на площадке TED в 2018 году, он говорил о 10 млн найденных им роликах, в которых открывают шоколадные яйца с игрушками: «Я думаю, что их гораздо больше. Это бесконечный поток видео с разными комбинациями материалов. И больше и больше загружают каждый день. Эти видео, как крэк для маленьких детей. Что-то есть в повторении, в постоянном выделении из-за этого дофамина, что подсаживает их».
Ролики с участием детей до 13 лет вообще один из самых популярных видов контента на YouTube, говорится в исследовании Pew Research Center, опубликованном 25 июля. Компания проанализировала более 48 часов видео на 43 тыс. каналов разного профиля — от политических до геймерских. Видео с детьми занимали всего 2% от общего объема роликов, однако у них в среднем втрое больше просмотров.
Писатель и художник Джеймс Бридл объясняет, как названия детских роликов конструируются из трендовых словечек. И как потом ролики снимают исходя из этих названий
Фото: youtube
Популярность такого контента не новость, но вот набирающие по 17 млн просмотров видео с названиями типа «ДЕТИ СУПЕРГЕРОИ СТРОЯТ ПРЯНИЧНЫЙ ДОМИК (ЗНАК СЕРДЕЧКА) СУПЕРГЕРОИ ДЕТИ ИГРАЮТ С ПЛАСТИЛИНОМ И КАРТОНОМ ДЛЯ ДЕТЕЙ» удивили авторов исследования. У Бирдла есть объяснение тому, откуда берутся такие странные названия.
Джеймс Бридл, писатель и художник
Главный способ получать просмотры — а просмотры — это деньги, — засунуть в название популярные слова, термины, тренды. В итоге получается мешанина слов, которая не имеет никакого смысла для человека. Реальная аудитория для этих названий — алгоритмы, которые решают, какое видео похоже на какое, чтобы рекомендовать его пользователю после просмотра.
Но в итоге получается не только бессмысленное название, но и бессмысленный контент. Потому что в этой оптимизированной алгоритмами системе есть реальные люди. Люди, которые снимаются в роликах, сюжеты которых должны соответствовать этим безумным названиям. Как актеры-импровизаторы, чьи выступления отвечают выкрикам миллиона младенцев одновременно. В этом алгоритмическом мире, даже если ты человек, ты должен действовать как машина, чтобы выжить.
Новые большие братья
То, что происходит с детским YouTube, имеет внутренние причины. При этом является частью большого тренда. Соцсети из площадок для создания контента всё больше превращаются в модераторов. Facebook сначала ввела функцию распознавания лиц, которая помогала отмечать друзей на фотографиях, а потом создала софт, чтобы с ней бороться. Но, естественно, не внутри самой соцсети.
Фото: ТАСС/Сергей Коньков
Instagram запретил высказываться о политике и социальных проблемах авторам, чьи видео для внутреннего сервиса IGTV спонсирует. А перед этим объявил, что скоро уберет лайки. Идея вроде бы благая — чтобы люди за этими самыми лайками не гнались. Но по факту это поможет лучше таргетировать рекламные посты. Руководствоваться не количеством лайков, которые постоянно накручивают, а временем, которое пользователи будут смотреть на экране пост.
ЧИТАЙТЕ ТАКЖЕ
На YouTube вступили в силу новые правила для детского контента / Хабр
На YouTube вступили в силу новые правила, касающиеся контента для детей. Отныне для роликов, которые авторы помечают как детские, будет отключена таргетированная реклама, комментарии, чат и некоторые другие функции платформы, включая возможность отправки push-уведомлений. Любой, кто просматривает видео для детей, будет автоматически рассматриваться как зритель в возрасте до 13 лет независимо от того, сколько лет на самом деле пользователю.
Еще в сентябре YouTube предупредил авторов видео, что скоро от них потребуется «определить свой контент как предназначенный или не предназначенный для детей». Изменения стали частью соглашения платформы с Федеральной торговой комиссией США (FTC).
«Многие авторы видеороликов по всему миру создают качественный детский контент для своей аудитории, и эти изменения окажут на их работу значительное влияние», — говорится в посте техподдержки YouTube.
Тем не менее, YouTube не даёт чётких критериев определения контента, предназначенного для детей.
«Согласно FTC, видео сделано для детей, если оно соответствует множеству критериев, включая сам предмет видео, в котором акцент делается на детских персонажах, темах, игрушках или играх и многом другом. В ноябре мы представили новые настройки в YouTube Studio, которые помогут определить контент как предназначенный для детей. Авторы лучше всего знают содержание своих видео и должны сами определять их назначение, — указано в посте. — Мы также используем машинное обучение, чтобы идентифицировать контент, и автор может исправить маркировку, сделанную нашими системами, если сочтёт, что видео было идентифицировано неправильно. Мы переопределим обозначение, сделанное автором, только в случае обнаружения ошибки».
Как пишет The Verge, отсутствие чётких инструкций маркировки видео как детского вызывает беспокойство ютуберов. Например, у каналов, посвящённых играм, есть аудтория как среди детей, так и среди взрослых. Создатели таких каналов готовятся к серьезным проблемам с монетизацией.
«Если FTC решит, что наш канал нацелен на детей, нас ждёт штраф. Это особенно неприятно, потому что словосочетание «ориентированный для ребёнка» не очень понятно, и нам неясно, нарушаем мы правила или нет», — отмечает Дэн Эрдли, создатель канала Pixel Dan, посвящённого коллекционным игрушкам.
В блоге YouTube сообщается, что в ближайшие месяцы платформа опубликует больше подробностей о том, какой тип контента считать детским, а какой нет. На данный момент ютуберам советуют высказывать свои опасения напрямую в FTC.
основные термины и новые форматы
Главная тема августе 2017 года на Теплице социальных технологий — создание видео. Наши корреспонденты расскажут, с помощью каких инструментов создавать вирусные видеоролики, каким образом нужно обращаться к зрителю, проанализируют популярность формата историй и живых трансляций, рассмотрят феномен видеоблогерства и поделятся контактами российских видеографов. В этом материале мы собрали основные термины, которые нужно знать при съемки и обработке видеороликов.
В глоссарий вошли стандартные термины из техники монтажа, операторского искусства и драматургии, а также новые видеоформаты, которые появились благодаря социальным сетям и внедрению виртуальной реальности (VR).
Операторские термины
Ракурс (Angle/Perspective) — так называется наклон оптической оси при съемке, чтобы показать предмет с различных точек зрения. Например, нейтральный ракурс предполагает незначительное смещение точки съемки относительно предмета, а при остром ракурсе точка съемки сильно смещается. Последнее используют для того, чтобы усилить эмоциональное воздействие, подчеркнуть значение предмета или героя, акцентировать внимание.
Правило 180° (180-degree rule) — это правило используется при съемке двух героев (к примеру, во время разговора). По правилу камера может менять ракурс, но при этом один персонаж должен всегда оставаться справа, а другой слева. Если воображаемую линию пересечь, то зритель будет просто-напросто дезориентирован.
Экспозиция (Exposure) — это физическая величина, которая обозначает общее количество света при создании кадра.
Глубина кадра (Frame depth) — принцип организации кадра, следующий правилам линейной перспективы и позволяющий воспринимать изображение на плоской поверхности объемным; зависит от разделения внутрикадрового пространства на планы и их соотношения, значения диафрагмы, фокусного расстояния и других параметров.
Деталь (Detail/Extreme close-up) — так называется крупное изображение достаточно мелкого предмета или части лица/руки героя.
Длинный кадр (Long take/Extended take) — это кадр, который не прерывается монтажными переходами. Например, полуторачасовой художественный фильм «Русский ковчег» режиссера Александра Сокурова снят без остановки камеры и без монтажных склеек.
План — система деления пространства. По крупности планы делят на задний, общий, средний, крупный. Также есть деление по смыслу: основной (главная сюжетная линия) и второстепенный (фоновый план).
Монтаж (Film editing) — это технический и творческий процесс переработки и структуризации отснятого материала. С помощью монтажа создают определенную последовательность кадров.
Контрапункт (Counterpoint) — так называют контрастное столкновение, противопоставление соседних кадров, зрительных и звуковых образов.
Драматургия
Сюжет (Plot/Story/Beat/«A» story) – это смысловое ядро произведения. Сюжет реализуется посредством фабулы – перечня событий, выстраивания их причинно-следственной связи.
Идея (Idea/Concept) — главная мысли, которая утверждается, она обобщает смысловое содержание. Идея отвечает на вопрос «для чего?»
Еще по теме: Мономиф: как НКО рассказать историю, чтобы захватить внимание пользователя
Сценарий (Screenplay/Script) — это основа для съемки ролика/фильма. Представляет из себя литературно-драматическое произведение, которое включает описание сцен действия и диалоги героев.
Новые форматы
Прямые трансляции (live video) — или прямые включения. Формат прямого включения поддерживают многие социальные сети, первопроходцами стал Snapchat, Periscope и YouTube, затем функция стала доступна Вконтакте, Facebook, Instagram и Одноклассниках.
Панорамная камера (panoramic camera) — камера, которая позволяет снимать панорамные фото и видео-ролики с углом обзора в 360 градусов.
Видео в формате 360° — или видео виртуальной реальности (virtual reality, VR), при просмотре такого видео зритель может «поворачивать» все кадры на 360°. Оно создает сильный эффект присутствия. Видео в формате 360° создается благодаря панорамной камере или компьютерной графике.
Еще по теме: «Гринпис» России создал фильм виртуальной реальность о крайнем севере
Видео можно смотреть с помощью специальных очков или шлема виртуальной реальности, на мобильном телефоне или компьютере, с установленным плеером или через интернет-браузер, поддерживающий формат VR. Воспроизведение видео в этом формате поддерживает Facebook и YouTube.
Live-видео 360° — видео, которое объединяет прямую трансляцию и видео с круговым обзором. Платформы для таких видео запустили уже Facebook и Twitter.
Коуб-видео (Coub-video) — это короткий 10-секундный ролик, фрагмент которого повторяется, то есть зацикливается. На видео накладывается музыка, которая определяет настроение ролика. Теплица уже рассказывали о том, как создать коуб-видео за 10 минут.
Исчезающее видео — видеоконтент, который удаляется вскоре после публикации. Такой формат поддерживает Snapchat и Instagram Stories. В Instagram видео, например, хранится сутки с момента публикации. Такие видео лучше снимать вертикально, потому что их будут смотреть на мобильных устройствах.
Родители: воспитатель детского сада в Южно-Сахалинске била детей — Новости Сахалинской области. Происшествия
По сахалинским мессенджерам распространяют сообщение:
«Родители, вам информация. У меня коллега водил в частный сад ребёнка. ему около 1 годика. Там работала Юлия Николаевна, которая с родителями такая любезная, всех деток любит. Тут её увольняет директор. Мой коллега, довольный воспитателем, разговаривает с директором, та в свою очередь показывает видео со скрытых камер (мой коллега не смог досмотреть даже), она бьёт детей, заводит в душ и обливает холодной водой. Там, говорит, не описать. Маленькие плачут, конечно, потом они слушаются, просто боятся. Так сейчас этот воспитатель ушёл работать в частный садик «Крошка». Будьте бдительны, если ваши детки туда ходят или кого знаете».
Сайт astv.ru связался с директором детского сада «Алиса» Анастасией Калабуховой.
По словам руководителя учреждения, родители не преувеличивают. Озвученная ими информация вскрылась накануне, 18 ноября. В тот же день воспитателя уволили.
«У нас в детском саду установлено множество камер. К некоторым из них родители имеют доступ онлайн. К другим имеет доступ только руководство. Вчера я стала смотреть камеры с раздевалки, чтобы узнать, во сколько привели ребёнка. Увидела, что воспитательница стоит и рассказывает родителям, что увольняется с 1 декабря и уходит в другой детский сад, потому что там лучше. Родители её отговаривают, но она предлагает перейти вместе с ней.
Тогда я решила посмотреть камеры за предыдущие дни, чтобы узнать — с кем еще из родителей успела поговорить сотрудница. Посмотрела записи и была в шоке. Воспитательница, когда никто не видит, материт детей, кричит на них, шлёпает.
Иногда к ней приходила дочь. И она, оказывается, не отличалась добротой по отношению к детям. Камеры показывают, что женщина матом кричит на ребёнка, обвиняя его в том, что он обкакался. Потом ведет в санузел и оттуда доносится ужасный плач. Как выяснилось, ребёнка мыли ледяной водой. Такое отношение к малышам недопустимо», — говорит директор детского сада.
Дозвониться до детского сада «Крошка» не удалось.
Прокомментировать ситуацию astv.ru попросил специалистов министерства образования Сахалинской области. Там называли ситуацию вопиющей и недопустимой. Специалисты готовы оказать всестороннее содействие компетентным органам и службам в расследовании инцидента.
Следователи Южно-Сахалинска по факту оказания услуг ненадлежащего качества и ненадлежащего исполнения обязанностей по воспитанию несовершеннолетних работником одного из детских воспитательных учреждений областного центра организовали проведение доследственной проверки.
«Устанавливаются все обстоятельства произошедшего, в ходе проведения проверки будет дана оценка действиям работников воспитательного учреждения, а также приняты меры профилактического характера», — сообщают в областном следкоме.
Эксперт по лжи разобрал признание Рашкина и нашел тайные знаки
+ A —
«Показывает фигуру большого животного»
Валерий Рашкин публично раскаялся. Депутат опубликовал видеообращение, в котором признался, что убил лося. Правда, с оговорками: думал, что целился в кабана, не сомневался, что лицензия на охоту имеется, в тот вечер не выпивал. Свою речь подытожил словами: «Меня подставили». Эксперт по лжи Илья Анищенко разобрал признание Рашкина и заметил, что не во всех моментах депутат был честен.
— Валерий Федорович, конечно, переживает на видео, но держится уверенно. Он намерен идти до конца со своей версией, сдаваться не собирается, — начал профайлер Илья Анищенко. – Планирует давить на то, что его подставили. В конце речи на его лице появляется злость.
Рашкин записал видеообращение по поводу скандальной охоты: «Лежит тело лося»
Смотрите видео по теме
— В самом начале Рашкин говорит, что расскажет всю правду. Врет?
— Я обратил внимание, что в самом начале, когда он говорит о том, что публично и открыто все расскажет, то на слове «честно» пожимает плечами и одергивает голову. Эти жесты свидетельствуют о том, что честного рассказа не услышим.
— Рашкин отрицает, что выпивал в тот вечер. Что можно сказать?
— Судя, по всему, он выпивал, хотя и попытался отрицать этот факт. Говорит, мол, да, приехал в домик к другу, утолил голод, но «спиртные напитки я не употребляю».
Заметьте, он сказал обобщенно. Если ему нечего скрывать, он бы заявил четко: «В тот момент я не пил». Более того, в конце фразы «я не употребляю», Рашкин слегка кивает головой, что свидетельствует о том, что он все-таки выпивает. Идет косвенное отрицание слов.
Еще, когда он рассуждает на тему пьянства, то немного откидывается назад и складывает руки на край стола. До этого сидел спокойно. Но, как только речь зашла про алкоголь, его уровень жестикуляции меняется, идет телесное напряжение, он облизывает губы, потому что тема для него стрессовая. Затем он рассказывает, что отказался от медицинского освидетельствования, потому что собирался пройти его позже. Но нет продолжения его рассказа. Рашкин не пояснил, прошел ли он экспертизу или нет.
— Где он еще, возможно, соврал?
— Когда депутат рассказывал, что не видел, в кого стрелял – вот здесь он лукавит. Депутат понимал и видел, что стреляет в лося, а не в кабана. Во время повествования Рашкин показывает перед собой фигуру большого животного, высотой в свой рост. Очевидно, это лось. Если бы речь шла о кабане, он бы показывал его ниже себя. Таким образом он жестами изобразил лося, который стоял перед ним.
— Он правда, думал, что лицензия есть?
— Вот здесь я ему поверил.
— Рашкин думает, что его подставили?
— Да, в этом он тоже не сомневается.
— Он читает речь?
— Да, он читает с листа, изредка посматривает справа от себя. Видно, что видео снималось за несколько дублей, пара ключевых моментов обрезано. Заметно, что ему тяжело выступать на камеру, возможно, поэтому видео монтировали и переснимали. Но свою вину он собирается заглаживать любыми способами.
Читайте материал «Рашкин и лось зла: лишат мандата даже при мягком приговоре»
Опубликован в газете «Московский комсомолец» №28669 от 19 ноября 2021
Заголовок в газете: «Выпивал и понимал, кого убивает»
анимаций Matplotlib в Jupyter Notebook | by B. Chen
Чтобы создать интерактивный график в Jupyter Notebook, вам сначала нужно включить интерактивный график следующим образом:
# Включить интерактивный график
% matplotlib notebook
После этого мы импортируем необходимые библиотеки. Особенно класс FuncAnimation
, который можно использовать для создания анимации для вас.
import matplotlib.pyplot as plt
из matplotlib.animation import FuncAnimation
Затем нам нужно создать начальное состояние фигуры анимации.Мы вызываем subplots ()
без каких-либо аргументов, чтобы создать Figure fig
и одну Axes ax
. Мы устанавливаем диапазон x на (0, 2 * Pi)
и диапазон y на (-1,1,1,1)
, чтобы избежать их постоянного изменения.
fig, ax = plt.subplots () line , = ax.plot ([]) # Распаковка кортежа для распаковки только plotax. set_xlim (0, 2 * np.pi)
ax. set_ylim (-1.1, 1.1)
Затем мы создаем функцию animate ()
, которая будет вызываться объектом FuncAnimation
.Функция принимает один аргумент frame_num
— номер текущего кадра. Здесь мы хотим изменить данные для нашей строки в соответствии с номером кадра.
def animate (frame_num):
y = np.sin ( x + 2 * np.pi * frame_num / 100 )
line.set_data ((x, y))
return line
Наконец, мы создаем нашу объект анимации путем вызова FuncAnimation
с 4 аргументами
- Первый аргумент
fig
— это ссылка на созданный нами рисунок - Второй аргумент
animate
— это функция, которую мы создали для вызова в каждом кадре для обновления графика. - Третий аргумент —
кадров = 100
, и он определяет количество кадров для «одного раунда анимации». - Наконец, аргумент
interval = 20
устанавливает задержку (в миллисекундах) между кадрами.20
эквивалентно50 FPS
(1000 мс / 20 = 50 FPS). Если число слишком велико, вы ждете очень долго, если число слишком маленькое, это будет быстрее, чем могут видеть ваши глаза. В общем, для плавной анимации нам нужен FPS больше 16 (человеческий глаз может воспринимать только 10–12 кадров [1]).
anim = FuncAnimation (fig, animate, frames = 100, interval = 20) plt.show ()Изображение автора
Исходный код можно найти в Notebook
В предыдущем примере мы создали хорошая синусоидальная анимация. Однако сюжет анимируется только тогда, когда код запущен. Конечно, мы можем сделать снимок экрана, но это неэффективно, если вы хотите поделиться своим Jupyter Notebook в Интернете.
Что мы можем сделать, так это преобразовать анимацию в видео HTML5 и встроить ее в Jupyter Notebook.Мы будем использовать FFmpeg для преобразования. Если у вас его нет, вам сначала нужно выполнить инструкции, чтобы загрузить FFmpeg и разархивировать его.
После этого мы импортируем необходимые библиотеки и устанавливаем 'ffmpeg_path'
как путь к вашему локальному исполняемому файлу ffmpeg :
import matplotlib. pyplot as plt
from matplotlib.animation import 9000 import display plt.rcParams ['animation.ffmpeg_path'] = '/ path_to_your / ffmpeg'
Создание анимации такое же, как в предыдущем примере.
fig, ax = plt.subplots () line, = ax.plot ([]) # Распаковка кортежа для распаковки единственного plotax.set_xlim (0, 2 * np.pi)
ax.set_ylim (-1.1, 1.1 ) def animate (frame_num):
y = np.sin (x + 2 * np.pi * frame_num / 100)
line.set_data ((x, y))
return lineanim = FuncAnimation (fig, animate, frames = 100 , interval = 20)
Но вместо plt.show ()
для его построения мы вызываем метод anim.to_html5_video ()
для преобразования результата анимации в видео HTML5.Затем нам нужно получить HTML-код, который выполняет встраивание для этого видео, и это делается путем вызова IPython display.HTML (video)
. Наконец, мы вызываем display.display (html)
, чтобы встроить HTML-код в Jupyter Notebook.
video = anim.to_html5_video ()Изображение автора
html = display.HTML (video)
display.display (html)
plt.close () # избегать построения лишнего статического графика
Источник можно найти в Блокноте code
В этой статье мы узнали 2 подхода к созданию анимации matplotlib в Jupyter Notebook.Создание анимационного сюжета может помочь вам в проведении моделирования и анализе данных временных рядов.
Надеюсь, эта статья поможет вам сэкономить время при изучении matplotlib. Я рекомендую вам ознакомиться с документацией, чтобы узнать о дополнительных параметрах и настройках, а также о других вещах, которые вы можете сделать.
Спасибо за чтение. Ознакомьтесь с исходным кодом в записной книжке и следите за обновлениями, если вас интересует практический аспект машинного обучения.
Возможно, вас заинтересуют некоторые из моих других статей о визуализации данных и Pandas:
Больше руководств можно найти на моем Github
Справочник
Визуализация данных Python для начинающих — Реальный Python
Если вы только знакомитесь с набором данных или готовитесь к публикации своих результатов, визуализация является незаменимым инструментом. Популярная библиотека анализа данных Python, pandas, предоставляет несколько различных вариантов визуализации ваших данных с помощью .plot ()
. Даже если вы находитесь в начале своего пути к пандам, вы скоро будете создавать базовые графики, которые дадут ценную информацию о ваших данных.
В этом руководстве вы узнаете:
- Что представляют собой различные типы графиков панд и когда их использовать
- Как получить обзор набора данных с гистограммой
- Как обнаружить корреляцию с диаграммой рассеяния
- Как анализировать различные категории и их отношения
Настройте среду
Лучше всего следовать коду из этого руководства в Jupyter Notebook.Таким образом, вы сразу увидите свои сюжеты и сможете поиграть с ними.
Вам также понадобится рабочая среда Python, включая pandas. Если у вас его еще нет, у вас есть несколько вариантов:
Если у вас более амбициозные планы, то скачайте дистрибутив Anaconda. Он огромен (около 500 МБ), но вы будете готовы к большинству задач по анализу данных.
Если вы предпочитаете минималистичную настройку, ознакомьтесь с разделом по установке Miniconda в разделе Настройка Python для машинного обучения в Windows.
Если вы хотите придерживаться
pip
, установите библиотеки, обсуждаемые в этом руководстве, с помощьюpip install pandas matplotlib
. Вы также можете получить Jupyter Notebook сpip install jupyterlab
.Если вы не хотите выполнять какие-либо настройки, воспользуйтесь онлайн-пробной версией Jupyter Notebook.
После настройки среды вы готовы загрузить набор данных. В этом руководстве вы собираетесь проанализировать данные по специальностям колледжей, полученные из выборки микроданных общественного пользования в американском сообществе за 2010–2012 гг.Он послужил основой для Экономического руководства по выбору специалиста в колледже, размещенного на веб-сайте FiveThirtyEight.
Сначала загрузите данные, передав URL-адрес загрузки в pandas.read_csv ()
:
В [1]: импортировать панд как pd
В [2]: download_url = (
...: "https://raw.githubusercontent.com/fivethirtyeight/"
...: "data / master / college-majors / latest-grads.csv"
... :)
В [3]: df = pd.read_csv (download_url)
В [4]: type (df)
Out [4]: панды.core.frame.DataFrame
Вызывая read_csv ()
, вы создаете DataFrame, который является основной структурой данных, используемой в пандах.
Теперь, когда у вас есть DataFrame, вы можете взглянуть на данные. Во-первых, вы должны настроить параметр display.max.columns
, чтобы убедиться, что pandas не скрывает никаких столбцов. Затем вы можете просмотреть первые несколько строк данных с помощью .head ()
:
В [5]: pd.set_option ("display.max.columns", Нет)
В [6]: df.голова()
Вы только что отобразили первые пять строк DataFrame df
, используя . head ()
. Ваш результат должен выглядеть так:
По умолчанию .head ()
отображает пять строк, но вы можете указать любое количество строк в качестве аргумента. Например, чтобы отобразить первые десять строк, вы должны использовать df.head (10)
.
Создайте свой первый сюжет о пандах
Ваш набор данных содержит несколько столбцов, связанных с заработком выпускников по каждой специальности:
-
«Медиана»
— средний заработок работников, занятых полный рабочий день, круглый год. -
«P25th»
— 25-й процентиль дохода. -
«P75th»
— 75-й процентиль дохода. -
«Ранг»
— звание специалиста по среднему заработку.
Начнем с графика, отображающего эти столбцы. Во-первых, вам нужно настроить Jupyter Notebook для отображения графиков с помощью волшебной команды % matplotlib
:
В [7]:% matplotlib
Использование бэкэнда matplotlib: MacOSX
Магическая команда % matplotlib
настраивает ваш Jupyter Notebook для отображения графиков с помощью Matplotlib. Стандартный графический бэкэнд Matplotlib используется по умолчанию, и ваши графики будут отображаться в отдельном окне.
Примечание: Вы можете изменить бэкэнд Matplotlib, передав аргумент волшебной команде % matplotlib
.
Например, встроенный бэкэнд
популярен для Jupyter Notebooks, потому что он отображает график в самом блокноте, непосредственно под ячейкой, которая создает график:
В [7]:% matplotlib inline
Доступен ряд других серверных ВМ.Для получения дополнительной информации ознакомьтесь с учебником Rich Outputs в документации IPython.
Теперь вы готовы сделать свой первый сюжет! Вы можете сделать это с помощью .plot ()
:
В [8]: df.plot (x = "Rank", y = ["P25th", "Median", "P75th"])
Выход [8]:
.plot ()
возвращает линейный график, содержащий данные из каждой строки в DataFrame. Значения по оси x представляют рейтинг каждого учреждения, а значения «P25th»
, «Median»
и «P75th»
нанесены на ось y.
Примечание: Если вы не следуете в блокноте Jupyter или в оболочке IPython, вам нужно будет использовать интерфейс pyplot
из matplotlib
для отображения графика.
Вот как показать фигуру в стандартной оболочке Python:
>>> >>> импортировать matplotlib.pyplot как plt
>>> df.plot (x = "Rank", y = ["P25th", "Median", "P75th"])
>>> plt.show ()
Обратите внимание, что вы должны сначала импортировать модуль pyplot
из Matplotlib перед вызовом plt.show ()
для отображения графика.
Рисунок, созданный с помощью .plot ()
, по умолчанию отображается в отдельном окне и выглядит следующим образом:
Глядя на сюжет, можно сделать следующие наблюдения:
Средний доход уменьшается с понижением ранга. Это ожидается, потому что рейтинг определяется средним доходом.
У некоторых специальностей большой разрыв между 25-м и 75-м процентилями. Люди с этими степенями могут зарабатывать значительно меньше или значительно больше среднего дохода.
У других специальностей очень небольшой разрыв между 25-м и 75-м процентилями. Люди с этими степенями получают зарплату, очень близкую к средней.
Ваш первый график уже намекает, что в данных есть еще много интересного! Некоторые крупные компании имеют широкий диапазон заработков, а другие — довольно узкий. Чтобы обнаружить эти различия, вы будете использовать несколько других типов графиков.
.plot ()
имеет несколько необязательных параметров.В частности, параметр kind
принимает одиннадцать различных строковых значений и определяет, какой тип графика вы будете создавать:
-
«площадь»
— для земельных участков. -
"столбик"
для вертикальных столбчатых диаграмм. -
"barh"
для горизонтальных столбчатых диаграмм. -
"коробка"
для коробчатых участков. -
"hexbin"
для графиков hexbin. -
"hist"
для гистограмм. -
"kde"
— для диаграмм оценки плотности ядра. -
«плотность»
— это псевдоним для«kde»
. -
«линия»
— для линейных графиков. -
"круговая диаграмма"
для круговых диаграмм. -
"разброс"
для графиков разброса.
Значение по умолчанию — «строка»
.Линейные графики, подобные тому, который вы создали выше, дают хороший обзор ваших данных. Вы можете использовать их для выявления общих тенденций. Они редко дают исчерпывающую информацию, но могут подсказать, где увеличить масштаб.
Если вы не укажете параметр для .plot ()
, тогда он создаст линейный график с индексом по оси x и всеми числовыми столбцами по оси y. Хотя это полезное значение по умолчанию для наборов данных с несколькими столбцами, для набора данных о специальностях колледжа и его нескольких числовых столбцов это выглядит довольно беспорядочно.
Теперь, когда вы создали свой первый сюжет о пандах, давайте подробнее рассмотрим, как работает .plot ()
.
Загляните под капот: Matplotlib
Когда вы вызываете .plot ()
для объекта DataFrame
, Matplotlib создает график под капотом.
Чтобы убедиться в этом, попробуйте два фрагмента кода. Сначала создайте график с Matplotlib, используя два столбца вашего DataFrame:
>>> В [9]: импортировать matplotlib. pyplot как plt
В [10]: plt.сюжет (df ["Rank"], df ["P75th"])
Выход [10]: []
Сначала вы импортируете модуль matplotlib.pyplot
и переименовываете его в plt
. Затем вы вызываете plot ()
и передаете столбец "Rank"
объекта "Rank"
в качестве первого аргумента и столбец "P75th"
в качестве второго аргумента.
Результатом является линейный график, на котором 75-й процентиль отображается на оси y в сравнении с рангом на оси x:
Вы можете создать точно такой же график, используя объекта
метод: DataFrame
.plot ()
В [11]: df.plot (x = "Rank", y = "P75th")
Выход [11]:
.plot ()
— это оболочка для pyplot.plot ()
, и результат представляет собой график, идентичный тому, который вы создали с помощью Matplotlib:
Вы можете использовать pyplot. plot ()
и df.plot ()
для создания одного и того же графика из столбцов объекта DataFrame
. Однако, если у вас уже есть экземпляр DataFrame
, тогда df.plot ()
предлагает более чистый синтаксис, чем pyplot.plot ()
.
Примечание: Если вы уже знакомы с Matplotlib, то вас может заинтересовать параметр kwargs
для .plot ()
. Вы можете передать ему словарь, содержащий аргументы ключевого слова, которые затем будут переданы в бэкэнд построения графиков Matplotlib.
Для получения дополнительной информации о Matplotlib, ознакомьтесь с Python Plotting With Matplotlib.
Теперь, когда вы знаете, что объект DataFrame
имеет значение .plot ()
является оболочкой для Matplotlib pyplot.plot ()
, давайте рассмотрим различные типы графиков, которые вы можете создавать, и способы их создания.
Изучите свои данные
Следующие графики дадут вам общий обзор определенного столбца вашего набора данных. Сначала вы посмотрите на распределение собственности с помощью гистограммы. Затем вы познакомитесь с некоторыми инструментами для исследования выбросов.
Распределения и гистограммы
DataFrame
— не единственный класс в пандах с .plot ()
метод. Как это часто бывает в пандах, объект Series
предоставляет аналогичные функции.
Вы можете получить каждый столбец DataFrame как объект Series
. Вот пример использования столбца «Median»
фрейма данных, который вы создали на основе основных данных колледжа:
В [12]: median_column = df ["Медиана"]
В [13]: тип (средний_столбец)
Выход [13]: pandas.core.series.Series
Теперь, когда у вас есть объект Series
, вы можете создать для него график.Гистограмма — хороший способ визуализировать, как значения распределяются по набору данных. Гистограммы группируют значения в интервалов и отображают количество точек данных, значения которых находятся в конкретном интервале.
Давайте создадим гистограмму для «Медиана»
столбца:
В [14]: median_column.plot (kind = "hist")
Выход [14]:
Вы вызываете .plot ()
для серии median_column
и передаете строку "hist"
параметру kind
.Вот и все!
Когда вы позвоните по номеру .plot ()
, вы увидите следующую цифру:
Гистограмма показывает данные, сгруппированные по десяти ячейкам в диапазоне от 20 000 до 120 000 долларов, и каждая ячейка имеет ширину , равную 10 000 долларов. Гистограмма имеет другую форму, чем нормальное распределение, которое имеет форму симметричного колокола с пиком посередине.
Гистограмма средних данных, однако, имеет пики слева ниже 40 000 долларов. tail простирается далеко вправо и предполагает, что действительно есть области, в которых крупные компании могут рассчитывать на значительно более высокие доходы.
Выбросы
Вы заметили тот одинокий маленький ящик на правом краю раздачи? Кажется, что одна точка данных имеет свою категорию. Специалисты в этой области получают отличную зарплату по сравнению не только со средней зарплатой, но и с зарплатой, занявшей второе место. Хотя это не его основная цель, гистограмма может помочь вам обнаружить такой выброс. Давайте подробнее рассмотрим выброс:
- Какие основные направления представляет этот выброс?
- Насколько велик его край?
В отличие от первого обзора, вы хотите сравнить только несколько точек данных, но вы хотите увидеть о них более подробную информацию.Для этого отличным инструментом является гистограмма. Сначала выберите пять специальностей с самым высоким средним доходом. Вам потребуется два шага:
- Для сортировки по столбцу
«Медиана»
используйте.sort_values ()
и укажите имя столбца, по которому вы хотите выполнить сортировку, а также направлениепо возрастанию = False
. - Чтобы получить пять первых пунктов списка, используйте
.head ()
.
Давайте создадим новый DataFrame с именем top_5
:
В [15]: top_5 = df.sort_values (by = "Median", ascending = False) .head ()
Теперь у вас есть DataFrame меньшего размера, содержащий только пятерку самых прибыльных специальностей. В качестве следующего шага вы можете создать гистограмму, на которой будут показаны только основные специалисты с пятью самыми высокими средними зарплатами:
>>> В [16]: top_5.plot (x = "Major", y = "Median", kind = "bar", rot = 5, fontsize = 4)
Выход [16]:
Обратите внимание, что вы используете параметры rot
и fontsize
для поворота и изменения размера меток оси x, чтобы они были видны.Вы увидите график с 5 полосами:
Этот график показывает, что средняя заработная плата специалистов в области нефтяной инженерии более чем на 20 000 долларов выше, чем у остальных. Доходы компаний, занимающих второе-четвертое места, относительно близки друг к другу.
Если у вас есть точка данных с гораздо большим или меньшим значением, чем у остальных, вам, вероятно, захочется изучить ее немного дальше. Например, вы можете просмотреть столбцы, содержащие связанные данные.
Давайте рассмотрим все специальности, средняя зарплата которых превышает 60 000 долларов.Во-первых, вам нужно отфильтровать эти основные объекты с помощью маски df [df ["Median"]> 60000]
. Затем вы можете создать еще один столбчатый график, показывающий все три столбца доходов:
В [17]: top_medians = df [df ["Median"]> 60000] .sort_values ("Median")
В [18]: top_medians.plot (x = "Major", y = ["P25th", "Median", "P75th"], kind = "bar")
Out [18]:
Вы должны увидеть график с тремя полосами на мажор, например:
25-й и 75-й процентили подтверждают то, что вы видели выше: специальности «нефтяная инженерия» были безусловно самыми высокооплачиваемыми недавними выпускниками.
Почему вас должны так интересовать выбросы в этом наборе данных? Если вы студент колледжа, раздумывающий, какую специальность выбрать, у вас есть по крайней мере одна довольно очевидная причина. Но выбросы также очень интересны с точки зрения анализа. Они могут указывать не только на отрасли с изобилием денег, но и на неверные данные.
Неверные данные могут быть вызваны любым количеством ошибок или упущений, включая отказ датчика, ошибку при ручном вводе данных или участие пятилетнего ребенка в фокус-группе, предназначенной для детей в возрасте от десяти лет и старше.Изучение выбросов — важный шаг в очистке данных.
Даже если данные верны, вы можете решить, что они настолько отличаются от остальных, что производят больше шума, чем пользы. Предположим, вы анализируете данные о продажах небольшого издателя. Вы группируете доходы по регионам и сравниваете их с тем же месяцем предыдущего года. Затем совершенно неожиданно издатель выпускает национальный бестселлер.
Это приятное событие делает ваш репортаж бессмысленным. С учетом данных о бестселлерах продажи повсюду растут.Выполнение того же анализа без выброса предоставит более ценную информацию, позволяющую увидеть, что в Нью-Йорке ваши показатели продаж значительно улучшились, но в Майами они ухудшились.
Проверить корреляцию
Часто вам нужно увидеть, связаны ли два столбца набора данных. Если вы выберете специализацию с более высоким средним заработком, у вас также будет меньше шансов остаться без работы? В качестве первого шага создайте диаграмму рассеяния с этими двумя столбцами:
>>> В [19]: df.график (x = "Median", y = "Unemployment_rate", kind = "scatter")
Выход [19]:
Вы должны увидеть довольно случайный сюжет, например:
Беглый взгляд на эту цифру показывает, что нет значительной корреляции между заработком и уровнем безработицы.
Хотя диаграмма рассеяния — отличный инструмент для получения первого впечатления о возможной корреляции, она, конечно же, не является окончательным доказательством наличия связи. Для обзора корреляций между различными столбцами вы можете использовать .corr ()
. Если вы подозреваете корреляцию между двумя значениями, тогда в вашем распоряжении есть несколько инструментов, чтобы проверить свою догадку и измерить, насколько сильна корреляция.
Однако имейте в виду, что даже если между двумя значениями существует корреляция, это еще не означает, что изменение одного значения приведет к изменению другого. Другими словами, корреляция не подразумевает причинно-следственной связи.
Анализировать категориальные данные
Для обработки больших объемов информации человеческий разум сознательно и бессознательно сортирует данные по категориям.Этот прием часто бывает полезным, но далеко не безупречным.
Иногда мы помещаем вещи в категорию, которая при дальнейшем рассмотрении не так уж и похожа. В этом разделе вы познакомитесь с некоторыми инструментами для изучения категорий и проверки того, имеет ли данная категоризация смысл.
Многие наборы данных уже содержат явную или неявную категоризацию. В текущем примере 173 специализации разделены на 16 категорий.
Группировка
Основное использование категорий — группировка и агрегирование.Вы можете использовать .groupby ()
, чтобы определить, насколько популярна каждая из категорий в наборе основных данных колледжа:
В [20]: cat_totals = df.groupby ("Major_category") ["Total"]. Sum (). Sort_values ()
В [21]: cat_totals
Из [21]:
Major_category
Междисциплинарный 12296,0
Сельское хозяйство и природные ресурсы 75620,0
Право и государственная политика 179107.0
Физические науки 185479,0
Промышленное искусство и бытовые услуги 229792.0
Компьютеры и математика 299008.0
Искусство 357130.0
Коммуникации и журналистика 392601.0
Биология и науки о жизни 453862.0
Здоровье 463230.0
Психология и социальная работа 481007.0
Социальные науки 529966.0
Инженерное дело 537583.0
Образование 559129.0
Гуманитарные и гуманитарные науки 713468. 0
Бизнес 1302376.0
Имя: Total, dtype: float64
С помощью .groupby ()
вы создаете объект DataFrameGroupBy
. С помощью .sum ()
вы создаете серию.
Давайте нарисуем горизонтальную полосу, показывающую итоги всех категорий в cat_totals
:
В [22]: cat_totals.plot (kind = "barh", fontsize = 4)
Выход [22]:
Вы должны увидеть график с одной горизонтальной полосой для каждой категории:
Как видно из вашего сюжета, бизнес — самая популярная основная категория.В то время как гуманитарные науки и гуманитарные науки занимают второе место, остальные области более схожи по популярности.
Примечание: Столбец, содержащий категориальные данные, не только дает ценную информацию для анализа и визуализации, но также дает возможность повысить производительность вашего кода.
Определение соотношений
Вертикальные и горизонтальные гистограммы часто являются хорошим выбором, если вы хотите увидеть разницу между вашими категориями. Если вас интересуют коэффициенты, то круговые диаграммы — отличный инструмент.Однако, поскольку cat_totals
содержит несколько меньших категорий, создание круговой диаграммы с cat_totals.plot (kind = "pie")
создаст несколько крошечных фрагментов с перекрывающимися метками.
Чтобы решить эту проблему, вы можете объединить более мелкие категории в одну группу. Объедините все категории с общим количеством менее 100 000 в категорию под названием «Другое»
, затем создайте круговую диаграмму:
В [23]: small_cat_totals = cat_totals [cat_totals <100_000]
В [24]: big_cat_totals = cat_totals [cat_totals> 100_000]
В [25]: # Добавление нового элемента «Другое» с суммой малых категорий
В [26]: small_sums = pd.Серия ([small_cat_totals.sum ()], index = ["Другое"])
В [27]: big_cat_totals = big_cat_totals.append (small_sums)
В [28]: big_cat_totals.plot (kind = "pie", label = "")
Out [28]:
Обратите внимание, что вы включаете аргумент label = ""
. По умолчанию pandas добавляет метку с именем столбца. Часто это имеет смысл, но в данном случае это только добавит шума.
Теперь вы должны увидеть такой круговой график:
«Другое» Категория
по-прежнему составляет лишь очень небольшой кусок пирога.Это хороший признак того, что объединение этих небольших категорий было правильным выбором.
Увеличение категорий
Иногда вам также нужно проверить, имеет ли смысл определенная категоризация. Являются ли члены категории более похожими друг на друга, чем на остальную часть набора данных? Опять же, дистрибутив — хороший инструмент для первого обзора. Как правило, мы ожидаем, что распределение категории будет аналогично нормальному распределению, но будет иметь меньший диапазон.
Создайте график гистограммы, показывающий распределение среднего дохода для инженерных специальностей:
>>> В [29]: df [df ["Major_category"] == "Engineering"] ["Median"].сюжет (kind = "hist")
Выход [29]:
Вы получите гистограмму, которую можно сравнить с гистограммой всех основных направлений с самого начала:
Диапазон основных средних доходов несколько меньше, начиная с 40 000 долларов. Распределение ближе к нормальному, хотя его пик все еще слева. Итак, даже если вы решили выбрать специальность в инженерной категории, было бы разумно погрузиться глубже и более тщательно проанализировать свои варианты.
Заключение
В этом руководстве вы узнали, как начать визуализировать ваш набор данных с помощью Python и библиотеки pandas. Вы видели, как некоторые базовые графики могут дать вам представление о ваших данных и направить ваш анализ.
В этом руководстве вы узнали, как:
- Получите обзор распределения вашего набора данных с помощью гистограммы
- Обнаружить корреляцию с диаграммой рассеяния
- Анализировать категории с столбчатыми диаграммами и их отношения с круговых диаграмм
- Определите, какой участок наиболее подходит для вашей текущей задачи
Используя . plot ()
и небольшой DataFrame, вы обнаружили немало возможностей для представления изображения ваших данных. Теперь вы готовы использовать эти знания и открывать для себя еще более сложные визуализации.
Если у вас есть вопросы или комментарии, пожалуйста, оставьте их в разделе комментариев ниже.
Дополнительная литература
Хотя pandas и Matplotlib упрощают визуализацию ваших данных, существуют бесконечные возможности для создания более сложных, красивых или увлекательных графиков.
Отличное место для начала — это раздел построения графиков документации pandas DataFrame. Он содержит как отличный обзор, так и некоторые подробные описания многочисленных параметров, которые вы можете использовать с вашими DataFrames.
Если вы хотите лучше понять основы построения графиков с помощью pandas, то познакомьтесь с Matplotlib. Хотя документация иногда может быть огромной, Anatomy of Matplotlib отлично справляется с внедрением некоторых расширенных функций.
Если вы хотите впечатлить свою аудиторию интерактивными визуализациями и побудить их исследовать данные самостоятельно, сделайте следующую остановку — Боке.Вы можете найти обзор функций боке в интерактивной визуализации данных в Python с боке. Вы также можете настроить pandas для использования Bokeh вместо Matplotlib с библиотекой pandas-bokeh
Если вы хотите создать визуализацию для статистического анализа или для научной статьи, обратите внимание на Seaborn. Вы можете найти короткий урок о Seaborn в Python Histogram Plotting.
Создание диаграммы в форме или отчете
Параметры данных
Выберите вкладку Data на панели Chart Settings .
Выберите Таблицы , Запросы или Оба , а затем выберите источник данных из раскрывающегося списка. Поддерживаются сквозные запросы.
По умолчанию образец диаграммы заменяется динамической диаграммой, которая использует первые два поля в источнике данных в качестве измерений оси (категория) и значений (ось Y). Часто первый столбец в таблице является первичным ключом, и вы можете не использовать его в качестве измерения на диаграмме.Свойство диаграммы Предварительный просмотр данных в реальном времени определяет, отображаются ли данные в реальном времени.
Подсказка , если ваш источник данных имеет много полей, вам может быть проще создать запрос, который ограничивает поля только теми, которые вы хотите, чтобы вы могли упростить выбор полей.
В разделах «Ось (категория), », «Легенда (серия), » и «Значения (ось Y), » выберите не менее двух полей для создания диаграммы.Сделайте следующее:
Ось (категория) В этом разделе выберите одно или несколько полей.
Это измерение диаграммы показывает горизонтальные значения в макете диаграммы XY в сгруппированных столбцах и линейных диаграммах и вертикальные значения в сгруппированных столбчатых диаграммах.
Ось кластерной гистограммы
Ось линейного графика
Ось кластерной гистограммы
Агрегирование поля даты по умолчанию — месяцев .Чтобы изменить его, щелкните стрелку вниз и выберите из списка, включая Нет , чтобы удалить агрегирование.
Когда вы выбираете более одного поля Axis (Category) , создается иерархия делений вдоль размерной линии (например, «Состояния внутри подразделения»).
Легенда (Серия) В этом разделе выберите поле.
Это измерение диаграммы объединяет значения полей в заголовки столбцов. Например, значения в поле «Состояние» переносятся как заголовки столбцов, и каждое становится отдельной серией данных.
Значения (ось Y) В этом разделе выберите одно или несколько полей.
Это измерение диаграммы показывает значения по вертикали в макете диаграммы XY в сгруппированных столбцах и линейных диаграммах и горизонтальные значения в сгруппированных столбчатых диаграммах.
Значения кластеризованной гистограммы
Значения линейной диаграммы
Значения кластеризованной гистограммы
Каждое выбранное поле соответствует ряду данных. При выборе двух или более полей «Значения (ось Y)» нельзя выбрать поле «Легенда (серия)». Значения (ось Y) Поля по умолчанию становятся легендой.
По умолчанию каждое выбранное поле агрегируется. Для числовых и денежных полей агрегирование по умолчанию — Сумма . Для всех остальных полей агрегирование по умолчанию — Счетчик . Чтобы изменить агрегирование, щелкните стрелку вниз и выберите из списка, включая Нет , чтобы удалить агрегирование.
Примечание Текстовые поля должны использовать агрегацию Count . Все выбранные поля значений (ось Y) должны быть либо агрегированы, либо неагрегированы.
Примечания Возможны различные комбинации полей, но учтите следующее:
Как минимум, выберите как минимум одно поле оси (категория) и одно поле значений (ось Y) .
Вы можете выбрать только одно поле Legend (Series) , но вы можете выбрать более одного поля из разделов Values (Y axis) или Axis (Category) разделов.
Если вы выбрали одно поле Axis (Category) и одно поле Legend (Series) , вы можете выбрать только одно поле «Значения (ось Y)».Чтобы добавить дополнительное поле «Значения (ось Y)», очистите поле «Ось (категория) » или «Легенда (серия) ».
Если вы выбрали поле Legend (Series) , выберите только одно поле «Значения (ось Y)», и оно должно быть агрегировано.
Верх страницы
Важные соображения
Агрегация Хотя источник данных часто начинается как набор неагрегированных данных, при создании диаграммы Access по умолчанию создает агрегированные вычисления, такие как Sum , Count и Average , в полях, чтобы упростить количество серий данных. Однако вы можете удалить агрегированные вычисления по умолчанию, выбрав Нет в раскрывающемся списке. Этот процесс выбора полей и выбора агрегатов создает оператор SELECT, SQL GROUP BY или TRANSFORM, который сохраняется в свойстве Transformed Row Source . Чтобы просмотреть выписку, щелкните свойство правой кнопкой мыши и выберите Zoom . Ниже приводится краткое изложение трех основных возможностей:
Если вы выберете поля для оси (категория), и значения (ось Y), но удалите агрегаты, Access преобразует источник строки в более простой оператор SELECT.Например:
ВЫБЕРИТЕ [Сегмент], [Продажи] ИЗ [Заказы]
Если выбрать поля Ось (категория) и значения (ось Y) , Access преобразует источник строки в оператор GROUP BY. Например:
ВЫБРАТЬ [Сегмент], Сумма ([Продажи]) КАК [SumOfSales FROM [Заказы] ГРУППА ПО [Сегмент] ЗАКАЗАТЬ ПО [Сегменту]
Если вы также выберете поле Легенда (ряд) , Access преобразует источник строки в запрос кросс-таблицы (с помощью оператора запроса TRANSFORM SQL). Значения полей, возвращаемые предложением PIVOT оператора запроса TRANSFORM SQL, используются в качестве заголовков столбцов, таких как поле состояния, которое может создавать множество заголовков — каждый отдельный ряд данных. Например:
ПРЕОБРАЗОВАТЬ сумму ([Продажи]) КАК [SumOfSales] ВЫБРАТЬ [Сегмент] ИЗ [Заказы] ГРУППА ПО [Сегмент] ЗАКАЗАТЬ ПО [Сегмент] PIVOT [Состояние]
Дополнительные сведения об агрегировании данных см. В разделе Облегчение чтения сводных данных с помощью запроса кросс-таблицы.
Свойства Для дальнейшей настройки диаграммы выберите Дизайн > Свойства > <Имя диаграммы>, в котором отображаются все свойства, связанные с диаграммой. Нажмите F1 на каждом свойстве, чтобы получить справку по этому свойству. Когда вы изменяете свойство на листе свойств, соответствующее значение изменяется на панели Параметры диаграммы и наоборот.
Есть много свойств Формат , уникальных для диаграмм.вы можете использовать их для форматирования значений осей, заголовков и диаграммы. Есть также несколько свойств Data , уникальных для диаграмм, в том числе Preview Live Data , Transformed Row Source ; Ось диаграммы , легенда диаграммы и значение диаграммы .
Добавление дополнительной вертикальной оси При создании диаграммы обычно используется основная вертикальная ось, но вы можете добавить дополнительную вертикальную ось, когда данные сильно различаются, или для построения различных показателей, таких как цена и объем.Масштаб вторичной вертикальной оси показывает значения для связанных с ней серий данных. Чтобы добавить вторичную вертикальную ось, используйте свойство Plot Series On на вкладке Format на панели Chart Settings .
Добавление линии тренда Для числовых данных вы можете добавить линию тренда, чтобы показать тенденции данных. Вы можете использовать параметры Trend Line и Trend Line Name на вкладке Format на панели Chart Settings .
Изменить диаграмму Чтобы изменить диаграмму, откройте форму или отчет в режиме «Дизайн» или «Макет», а затем выберите диаграмму, которая откроет панель «Параметры диаграммы ». Чтобы переключиться на другой тип диаграммы, выберите другую диаграмму из раскрывающегося списка свойств Тип диаграммы . Вы также можете преобразовать любую отдельную диаграмму в комбинированную, изменив свойство Chart Type на странице свойств (а не вкладку Format на панели Chart Settings ).
Обновить исходные данные Чтобы обновить данные диаграммы, переключитесь в режим формы или отчета, выберите диаграмму и затем выберите Обновить все (или нажмите F5).
Настройки диаграммы Если панель Настройки диаграммы закрыта, убедитесь, что выбрана диаграмма, а затем выберите Дизайн > Настройки диаграммы .
Классическая диаграмма Не путайте новую диаграмму, основанную на современных технологиях, с классической диаграммой, которая является элементом управления ActiveX. Однако вы по-прежнему можете использовать классическую диаграмму и даже добавить ее в форму или отчет с новой диаграммой.
Верх страницы
ggplot2 График в скрипте не отображается в R (пример)
В этом руководстве показано, как показать графику ggplot2 при запуске сценария на языке программирования R.
Учебное пособие состоит из следующих блоков содержимого:
Итак, без дальнейших дополнений, займемся этим!
Примеры данных, дополнительные пакеты и график по умолчанию
В качестве первого шага давайте построим несколько иллюстративных данных:
data <- data. frame (x = 1: 5, # Пример данных у = 1: 5) data # Показать пример данных # х у # 1 1 1 # 2 2 2 # 3 3 3 # 4 4 4 # 5 5 5 |
data <- data.frame (x = 1: 5, # Пример данных у = 1: 5) data # Показать пример данных # х у # 1 1 1 # 2 2 2 # 3 3 3 # 4 4 4 # 5 5 5
Ранее показанный вывод консоли RStudio показывает, что данные нашего примера имеют пять строк и два числовых столбца.
Если мы хотим использовать функции и команды пакета ggplot2, мы также должны установить и загрузить ggplot2:
установить.packages ("ggplot2") # Установить пакет ggplot2 library ("ggplot2") # Загрузить пакет ggplot2 |
install.packages («ggplot2») # Установить пакет ggplot2 library («ggplot2») # Загрузить пакет ggplot2
Затем мы можем попытаться построить график наших данных, как показано ниже:
for (i in 1: 3) {# for-loop создание графика ggplot2 if (i == 2) { ggp <- ggplot (данные, aes (x, y)) + geom_point () ggp } } |
for (i in 1: 3) {# for-loop создание графика ggplot2 if (i == 2) { ggp <- ggplot (данные, aes (x, y)) + geom_point () ggp } }
Сюрприз! Ничего не произошло! Так почему же не появился сюжет ggplot2? Вот что я объясню дальше…
Пример: построение графика ggplot2 в цикле for с использованием функции печати
Следующий код показывает, как вернуть график ggplot2 в длинном сценарии программирования R. Если мы хотим нарисовать график внутри цикла или пользовательской функции, мы можем просто использовать функцию print (), чтобы показать наш график.
Выполните следующий синтаксис R:
for (i in 1: 3) {# for-loop создание графика ggplot2 if (i == 2) { ggp <- ggplot (данные, aes (x, y)) + geom_point () print (ggp) # Явная печать графика } } |
for (i in 1: 3) {# for-loop создание графика ggplot2 if (i == 2) { ggp <- ggplot (данные, aes (x, y)) + geom_point () print (ggp) # Явная печать графика } }
Результат предыдущего синтаксиса показан на рисунке 1. Диаграмма рассеяния ggplot2, нарисованная внутри цикла for с условием if.
Видео, дополнительные ресурсы и резюме
Если вам нужна дополнительная информация по содержанию этой статьи, могу порекомендовать посмотреть следующее видео YouTube-канала Statistics Globe. На видео я показываю содержание этой статьи в режиме реального времени в RStudio:
.Видео на YouTube скоро будет добавлено.
Кроме того, вы можете прочитать соответствующие руководства на этом веб-сайте:
Резюме: В этой статье вы узнали, как отображать графики ggplot2 в запущенном скрипте в R.Если у вас есть дополнительные комментарии и / или вопросы, не стесняйтесь, дайте мне знать в разделе комментариев.
/ * Добавьте свои собственные переопределения стиля формы MailChimp в таблицу стилей вашего сайта или в этот блок стилей.Мы рекомендуем переместить этот блок и предыдущую ссылку CSS в HEAD вашего HTML-файла. * /
]]>
Matplotlib Animation Tutorial | Питонические прогулки
В Matplotlib версии 1.1 добавлены некоторые инструменты для создания анимации которые действительно гладкие.Вы можете найти несколько хороших примеров анимации на matplotlib Примеры страница. Я подумал, что расскажу здесь о некоторых вещах, которые я узнал, играя с этими инструментами.
Базовая анимация
Инструменты анимации сосредоточены на базе matplotlib.animation.Animation
.
класс, который обеспечивает основу, вокруг которой функционирует анимация.
построено. Основные интерфейсы: TimedAnimation
и FuncAnimation
,
о которых вы можете узнать больше в
документация.Здесь я исследую использование инструмента FuncAnimation
, который я нашел
быть самым полезным.
Сначала мы будем использовать FuncAnimation
, чтобы сделать базовую анимацию движения синусоидальной волны.
по экрану:
"" " Пример анимации Matplotlib автор: Джейк Вандерплас электронная почта: [email protected] сайт: http://jakevdp.github.com лицензия: BSD Пожалуйста, не стесняйтесь использовать и изменять это, но сохраняйте вышеуказанную информацию. Спасибо! "" " импортировать numpy как np из matplotlib импортировать pyplot как plt из анимации импорта matplotlib # Сначала настройте фигуру, ось и элемент сюжета, который мы хотим анимировать fig = plt.figure () ax = plt.axes (xlim = (0, 2), ylim = (- 2, 2)) линия, = ax.plot ([], [], lw = 2) # функция инициализации: строить фон каждого кадра def init (): line.set_data ([], []) обратная линия, # функция анимации. Это называется последовательно def animate (я): х = np.linspace (0, 2, 1000) y = np.sin (2 * np.пи * (х - 0,01 * я)) line.set_data (x, y) обратная линия, # вызываем аниматора. blit = True означает перерисовку только тех частей, которые были изменены. anim = animation.FuncAnimation (fig, animate, init_func = init, кадры = 200, интервал = 20, blit = True) # сохраняем анимацию как mp4. Для этого требуется, чтобы ffmpeg или mencoder были # установлены. Extra_args гарантирует, что используется кодек x264, так что # видео можно встроить в html5. Возможно, вам придется отрегулировать это для # ваша система: дополнительную информацию см. # http: // matplotlib.sourceforge.net/api/animation_api.html anim.save ('basic_animation.mp4', fps = 30, extra_args = ['- vcodec', 'libx264']) plt.show ()
Давайте пройдемся через это и посмотрим, что происходит. После импорта требуется
части numpy
и matplotlib
, сценарий устанавливает сюжет:
fig = plt.figure () ax = plt.axes (xlim = (0, 2), ylim = (- 2, 2)) линия, = ax.plot ([], [], lw = 2)
Здесь мы создаем окно фигуры, создаем единственную ось на фигуре, а затем создадим наш линейный объект, который будет изменен в анимации.Обратите внимание, что здесь мы просто рисуем пустую строку: мы добавим данные в строку позже.
Далее мы создадим функции, которые делают анимацию. init ()
- это функция, которая будет вызываться для создания базового фрейма, на котором
анимация имеет место. Здесь мы используем простую функцию, которая устанавливает
данные строки ни к чему. Важно, чтобы эта функция возвращала
линейный объект, потому что он сообщает аниматору, какие объекты на графике нужно
обновление после каждого кадра:
def init (): линия.set_data ([], []) обратная линия,
Следующая часть - функция анимации. Требуется единственный параметр,
номер кадра i
, и рисует синусоидальную волну со сдвигом, который зависит от i
:
# функция анимации. Это называется последовательно def animate (я): х = np.linspace (0, 2, 1000) y = np.sin (2 * np.pi * (x - 0,01 * i)) line.set_data (x, y) обратная линия,
Обратите внимание, что здесь мы снова возвращаем кортеж объектов графика, которые были изменен.Это сообщает фреймворку анимации, какие части сюжета должны быть быть оживленным.
Наконец, мы создаем объект анимации:
anim = animation.FuncAnimation (fig, animate, init_func = init, кадры = 100, интервал = 20, blit = True)
Этот объект должен сохраняться, поэтому он должен быть назначен переменной. У нас есть
выбрал 100-кадровую анимацию с задержкой между кадрами 20 мс. В blit Ключевое слово
является важным: оно говорит анимации только перерисовывать
изменившиеся куски сюжета.Время, сэкономленное с помощью blit = True
означает, что анимация отображается намного быстрее.
Мы заканчиваем необязательной командой сохранения, а затем командой show, чтобы показать результат. Вот что генерирует сценарий:
Эта структура для создания и сохранения анимации очень мощная и
гибкий: если мы добавим немного физики в функцию animate
, возможности
бесконечны. Ниже приведены несколько примеров некоторых анимаций физики, которые
Я играл с.
Двойной маятник
Один из примеров, представленных на matplotlib пример страницы представляет собой анимацию двойного маятника. В этом примере используются предварительные вычисления. положение маятника в течение 10 секунд, а затем анимация результатов. я увидел это и задался вопросом, будет ли python достаточно быстрым, чтобы вычислить динамику на лету. Оказывается это:
Двойной маятник double_pendulum.py загрузить"" " Общий численный решатель для одномерного нестационарного уравнения Шредингера.адаптировано из кода на http://matplotlib.sourceforge.net/examples/animation/double_pendulum_animated.py Формула двойного маятника, переведенная из кода C на http://www.physics.usyd.edu.au/~wheat/dpend_html/solve_dpend.c автор: Джейк Вандерплас электронная почта: [email protected] сайт: http://jakevdp.github.com лицензия: BSD Пожалуйста, не стесняйтесь использовать и изменять это, но сохраняйте вышеуказанную информацию. Спасибо! "" " из numpy import sin, cos импортировать numpy как np импортировать matplotlib.pyplot как plt импорт scipy.интегрировать как интегрировать импортировать matplotlib.animation как анимацию класс DoublePendulum: "" "Класс двойного маятника init_state - это [theta1, omega1, theta2, omega2] в градусах, где theta1, omega1 - угловое положение и скорость первого плечо маятника, а theta2, omega2 - это второе плечо маятника "" " def __init __ (self, init_state = [120, 0, -20, 0], L1 = 1. 0, # длина маятника 1 в м L2 = 1.0, # длина маятника 2 в м M1 = 1.2 происхождение = (0, 0)): self.init_state = np.asarray (init_state, dtype = 'float') self.params = (L1, L2, M1, M2, G) self.origin = origin self.time_elapsed = 0 self.state = self.init_state * np.pi / 180. def position (self): "" "вычислить текущие положения x, y рычагов маятника" "" (L1, L2, M1, M2, G) = self.params x = np.cumsum ([self.origin [0], L1 * sin (self.state [0]), L2 * sin (сам.состояние [2])]) y = np.cumsum ([self.origin [1], -L1 * cos (self.state [0]), -L2 * cos (self.state [2])]) возврат (x, y) def energy (self): "" "вычислить энергию текущего состояния" "" (L1, L2, M1, M2, G) = self.params x = np.cumsum ([L1 * sin (self.state [0]), L2 * sin (self. state [2])]) y = np.cumsum ([- L1 * cos (self.state [0]), -L2 * cos (self.state [2])]) vx = np.cumsum ([L1 * self.state [1] * cos (self.state [0]), L2 * self.state [3] * cos (self.state [2])]) vy = np.cumsum ([L1 * self.state [1] * sin (self.state [0]), L2 * self.state [3] * sin (self.state [2])]) U = G * (M1 * y [0] + M2 * y [1]) К = 0,5 * (M1 * np.dot (vx, vx) + M2 * np.dot (vy, vy)) вернуть U + K def dstate_dt (себя, состояние, t): "" "вычислить производную данного состояния" "" (M1, M2, L1, L2, G) = self.params dydx = np.zeros_like (состояние) dydx [0] = состояние [1] dydx [2] = состояние [3] cos_delta = cos (состояние [2] - состояние [0]) sin_delta = sin (состояние [2] - состояние [0]) den1 = (M1 + M2) * L1 - M2 * L1 * cos_delta * cos_delta dydx [1] = (M2 * L1 * состояние [1] * состояние [1] * sin_delta * cos_delta + M2 * G * sin (состояние [2]) * cos_delta + M2 * L2 * состояние [3] * состояние [3] * sin_delta - (M1 + M2) * G * sin (состояние [0])) / den1 den2 = (L2 / L1) * den1 dydx [3] = (-M2 * L2 * состояние [3] * состояние [3] * sin_delta * cos_delta + (M1 + M2) * G * sin (состояние [0]) * cos_delta - (M1 + M2) * L1 * состояние [1] * состояние [1] * sin_delta - (M1 + M2) * G * sin (состояние [2])) / den2 вернуть dydx def step (self, dt): "" "выполнить один временной шаг длиной dt и обновить состояние" "" себя. состояние = интегрировать.odeint (self.dstate_dt, self.state, [0, dt]) [1] self.time_elapsed + = dt # ------------------------------------------------- ----------- # установить начальное состояние и глобальные переменные маятник = Двойной маятник ([180., 0,0, -20., 0,0]) dt = 1./30 # 30 кадров в секунду # ------------------------------------------------- ----------- # настроить рисунок и анимацию fig = plt.figure () ax = fig.add_subplot (111, aspect = 'equal', autoscale_on = False, xlim = (- 2, 2), ylim = (- 2, 2)) ax.grid () линия, = топор.сюжет ([], [], 'o-', lw = 2) time_text = ax.text (0,02, 0,95, '', преобразование = ax.transAxes) energy_text = ax.text (0,02, 0,90, '', преобразование = ax.transAxes) def init (): "" "инициализировать анимацию" "" line.set_data ([], []) time_text.set_text ('') energy_text.set_text ('') строка возврата, time_text, energy_text def animate (я): "" "выполнить шаг анимации" "" глобальный маятник, dt маятник. шаг (dt) line.set_data (* маятник.позиция ()) time_text.set_text ('time =% .1f'% маятник.время истекло; истекшее время) energy_text.set_text ('энергия =% .3f J'% pendulum.energy ()) строка возврата, time_text, energy_text # выбираем интервал на основе dt и времени анимации одного шага от времени импорта времени t0 = время () одушевленный (0) t1 = время () интервал = 1000 * dt - (t1 - t0) ani = animation.FuncAnimation (fig, animate, frames = 300, interval = interval, blit = True, init_func = init) # сохраняем анимацию как mp4. Для этого требуется, чтобы ffmpeg или mencoder были # установлены. Extra_args гарантирует, что используется кодек x264, так что # видео можно встроить в html5.Возможно, вам придется отрегулировать это для # ваша система: дополнительную информацию см. # http://matplotlib.sourceforge.net/api/animation_api.html # ani.save ('double_pendulum.mp4', fps = 30, extra_args = ['- vcodec', 'libx264']) plt.show ()
Здесь мы создали класс, в котором хранится состояние двойного маятника. (закодировано в угле каждой руки плюс угловая скорость каждой руки) а также предоставляет некоторые функции для расчета динамики. Анимация функции такие же, как и выше, но у нас есть немного более сложные функция обновления: она не только меняет положение точек, но и изменяет текст, чтобы отслеживать время и энергию (энергия должна быть постоянной если наша математика верна: это утешает).Видео ниже длится всего десять секунд, но запустив скрипт, вы можете посмотреть, как маятник хаотично колеблется, пока в вашем ноутбуке не разрядится:
Частицы в коробке
Еще одна анимация, которую я создал, - это упругие столкновения группы частиц. в ящике под действием силы тяжести. Столкновения эластичны: они сохраняют энергия и двумерный импульс, а частицы реалистично отскакивают от стен ящика и падают под действием постоянной силы тяжести:
Частицы в коробке Particle_box.ру скачать"" " Анимация упругих столкновений с гравитацией автор: Джейк Вандерплас электронная почта: vanderplas@astro. washington.edu сайт: http://jakevdp.github.com лицензия: BSD Пожалуйста, не стесняйтесь использовать и изменять это, но сохраняйте вышеуказанную информацию. Спасибо! "" " импортировать numpy как np из scipy.spatial.distance import pdist, squareform импортировать matplotlib.pyplot как plt импортировать scipy.integrate как интегрировать импортировать matplotlib.animation как анимацию класс ParticleBox: "" "Класс орбит init_state - это массив [N x 4], где N - количество частиц: [[x1, y1, vx1, vy1], [x2, y2, vx2, vy2], ...] bounds - это размер окна: [xmin, xmax, ymin, ymax] "" " def __init __ (self, init_state = [[1, 0, 0, -1], [-0,5, 0,5, 0,5, 0,5], [-0,5, -0,5, -0,5, 0,5]], границы = [-2, 2, -2, 2], размер = 0,04, М = 0,05, G = 9,8): self.init_state = np.asarray (init_state, dtype = float) self. M = M * np.ones (self.init_state.форма [0]) self.size = размер self.state = self.init_state.copy () self.time_elapsed = 0 self.bounds = границы self.G = G def step (self, dt): "" "шаг один раз на dt секунд" "" self.time_elapsed + = dt # обновить позиции self.state [:,: 2] + = dt * self.state [:, 2:] # найти пары частиц, испытывающих столкновение D = квадратная форма (pdist (self.state [:,: 2])) ind1, ind2 = np. где (D <2 * self.size) уникальный = (инд1 <инд2) ind1 = ind1 [уникальный] ind2 = ind2 [уникальный] # обновить скорости встречных пар для i1, i2 в zip (ind1, ind2): # масса m1 = себя.M [i1] m2 = self.M [i2] # вектор местоположения r1 = self.state [i1,: 2] r2 = self.state [i2,: 2] # вектор скорости v1 = self.state [i1, 2:] v2 = self.state [i2, 2:] # относительное местоположение и векторы скорости r_rel = r1 - r2 v_rel = v1 - v2 # вектор импульса центра масс v_cm = (m1 * v1 + m2 * v2) / (m1 + m2) # столкновение сфер отражает v_rel над r_rel rr_rel = np.точка (r_rel, r_rel) vr_rel = np.dot (v_rel, r_rel) v_rel = 2 * r_rel * vr_rel / rr_rel - v_rel # назначить новые скорости self.state [i1, 2:] = v_cm + v_rel * m2 / (m1 + m2) self.state [i2, 2:] = v_cm - v_rel * m1 / (m1 + m2) # проверка пересечения границы cross_x1 = (self.state [:, 0]self.bounds [1] - self.size) cross_y1 = (self.state [:, 1] self.bounds [3] - self.size) self.state [cross_x1, 0] = self.bounds [0] + self.size self.state [Cross_x2, 0] = self.bounds [1] - self.size self.state [cross_y1, 1] = self.bounds [2] + self.size self.state [Cross_y2, 1] = self.bounds [3] - self.size self.state [скрещенный_x1 | cross_x2, 2] * = -1 self.state [cross_y1 | cross_y2, 3] * = -1 # добавить гравитации self.state [:, 3] - = сам.M * self.G * dt # ------------------------------------------------- ----------- # настроить начальное состояние np.random.seed (0) init_state = -0,5 + np.random.random ((50, 4)) init_state [:,: 2] * = 3,9 box = ParticleBox (init_state, размер = 0,04) dt = 1. / 30 # 30 кадров в секунду # ------------------------------------------------- ----------- # настроить рисунок и анимацию fig = plt.figure () fig.subplots_adjust (слева = 0, справа = 1, снизу = 0, сверху = 1) ax = fig.add_subplot (111, aspect = 'equal', autoscale_on = False, xlim = (- 3.2, 3.2), ylim = (- 2.4, 2.4)) # частицы содержат расположение частиц частицы, = ax.plot ([], [], 'bo', ms = 6) # rect - край рамки rect = plt.Rectangle (box.bounds [:: 2], box.bounds [1] - box.bounds [0], box.bounds [3] - box.bounds [2], ec = 'none', lw = 2, fc = 'none') ax.add_patch (прямоугольник) def init (): "" "инициализировать анимацию" "" глобальный прямоугольник, прямоугольник частицы.set_data ([], []) rect.set_edgecolor ('нет') возвращать частицы, прямоугольник def animate (я): "" "выполнить шаг анимации" "" global box, rect, dt, ax, fig коробка.шаг (dt) ms = int (fig.dpi * 2 * box.size * fig.get_figwidth () / np.diff (ax.get_xbound ()) [0]) # обновить фрагменты анимации rect.set_edgecolor ('k') частицы.set_data (box.state [:, 0], box.state [:, 1]) частицы.set_markersize (мс) возвращать частицы, прямоугольник ani = animation.FuncAnimation (fig, animate, frames = 600, interval = 10, blit = True, init_func = init) # сохраняем анимацию как mp4. Для этого требуется, чтобы ffmpeg или mencoder были # установлены.Extra_args гарантирует, что используется кодек x264, так что # видео можно встроить в html5. Возможно, вам придется отрегулировать это для # ваша система: дополнительную информацию см. # http://matplotlib.sourceforge.net/api/animation_api.html # ani.save ('Particle_box.mp4', fps = 30, extra_args = ['- vcodec', 'libx264']) plt.show ()
Математика должна быть знакома любому человеку с физическим образованием, а результат довольно завораживает. Я закодировал это во время полета и закончил просто сидеть и смотреть около десяти минут.
Это только начало: было бы интересно добавить другие элементы, такие как вычисление температуры и давления для демонстрации закон идеального газа или построение графика распределения скорости в реальном времени наблюдайте, как оно приближается к ожидаемому распределению Максвелла. Это открывает много возможности для демонстрации виртуальной физики ...
Подводя итоги
Модуль анимации matplotlib - отличное дополнение к тому, что уже было отличный пакет. Я думаю, что только что коснулся поверхности того, что возможно с этими инструментами... какие крутые идеи анимации ты можешь придумать с участием?
Edit: в следующем посте я покажу, как эти инструменты можно использовать для создания анимации простого квантового Механическая система.
Мы не можем найти эту страницу
(* {{l10n_strings.REQUIRED_FIELD}})
{{l10n_strings.CREATE_NEW_COLLECTION}} *
{{l10n_strings.ADD_COLLECTION_DESCRIPTION}}
{{l10n_strings.COLLECTION_DESCRIPTION}} {{addToCollection.description.length}} / 500 {{l10n_strings.TAGS}} {{$ item}} {{l10n_strings.PRODUCTS}} {{l10n_strings.DRAG_TEXT}}{{l10n_strings.DRAG_TEXT_HELP}}
{{l10n_strings.LANGUAGE}} {{$ select.selected.display}}{{article.content_lang.display}}
{{l10n_strings.АВТОР}}{{l10n_strings.AUTHOR_TOOLTIP_TEXT}}
{{$ select.selected.display}} {{l10n_strings.CREATE_AND_ADD_TO_COLLECTION_MODAL_BUTTON}} {{l10n_strings.CREATE_A_COLLECTION_ERROR}}вводящих в заблуждение графиков: примеры из реальной жизни
Графики, вводящие в заблуждение в реальной жизни: обзор
Вводящие в заблуждение графики иногда намеренно вводят в заблуждение, а иногда это просто случай, когда люди не понимают данные, стоящие за графиком, который они создают. К «классическим» типам вводящих в заблуждение графиков относятся случаи, когда:
- Вертикальная шкала слишком велика или слишком мала, пропускает числа или не начинается с нуля.
- График неправильно помечен.
- Данные не включены.
Но некоторые реальные графики, вводящие в заблуждение, выходят за рамки классических типов. Одни предназначены для того, чтобы ввести в заблуждение, другие - для шока. А в некоторых случаях благонамеренные люди просто ошибались. Это одни из моих любимых недавних вводящих в заблуждение графиков из реальной жизни.
Посмотрите видео с несколькими примерами:
Не можете посмотреть видео? Кликните сюда.
Вводящие в заблуждение графики: недостающая базовая линия.
The Times оставляет все остальное позади… или нет?
Изображение: Университет Кентукки.
Вы можете подумать, что график справа показывает, что продажи The Times в два раза больше, чем у Daily Telegraph. Но присмотритесь к масштабу, и вы увидите, что, хотя The Times действительно продает больше, она опережает конкурентов только примерно на 10%.
США сегодня
США сегодня печально известны суетливыми графиками, которые содержат слишком много информации и вводят в заблуждение.На этом графике наша проблема благосостояния выглядит так, как будто она выходит из-под контроля. Но обратите внимание, где начинается ось Y… с 94 миллионов!
У этого есть правильные цифры, но этот БОЛЬШОЙ ЗАГОЛОВОК заставляет вас думать, что 5,3% детей получают травмы спинного мозга ... довольно пугающая статистика для родителей:
Для справки, реальная цифра составляет около 0,0000003% ( на основе 2000 травм в год из примерно 74000000 населения).
Fox News, вводящие в заблуждение графики.
Fox News показал эту диаграмму того, что произойдет, если истечет срок сокращения налогов Буша.Катастрофически, правда? Снова проверьте масштаб (он начинается с 34). Все не так, как кажется.
Рис. 1. Источник: https://twitter.com/DanaDanger/status/230851016344600576/photo/1/large
Не для того, чтобы продолжать критиковать Fox News, но их имя снова и снова всплывало в поисках вводящих в заблуждение графиков из реальной жизни. Вот еще один, призванный показать, что после небольшого падения безработицы в администрации Обамы она росла и росла.
Источник изображения: http: // cloudfront.mediamatters.org
Обратите внимание, что значение для ноября (8,6) было нанесено неправильно. Он находится на позиции 9.0. Это не единственная проблема с этим графиком. Он был нанесен так, чтобы выглядело экспоненциальный рост, хотя на самом деле общая тенденция занятости довольно стабильна и составляет около 9%.
Вот как должен выглядеть график , если он построен правильно. Увидеть разницу?
Источник: http://freethoughtblogs.com/lousycanuck/2011/12/14/im-better-at-graphs-than-fox-news/
Эти d% $ n либералы!
Последний пример такого вводящего в заблуждение графа.Терри Скьяво был исключен из системы жизнеобеспечения после долгого судебного разбирательства. CNN использовала график, подобный приведенному ниже, чтобы показать, кто согласился с решением удалить трубку для кормления.
Изображение: Western Reserve Public Media.
При первом взгляде на этот график кажется, что это решение поддержало втрое больше демократов. Но при ближайшем рассмотрении обратите внимание на шкалу на вертикальной оси. Демократов поддержали немногим больше, чем республиканцев (62% против 54%).
В чем проблема этих конкретных графиков, вводящих в заблуждение из реальной жизни? В общем, графики должны показывать базовый уровень.Базовая линия равна нулю по вертикальной шкале. Графики, у которых отсутствует базовая линия и начинаются с произвольного числа (34 на изображении Fox News), как правило, вводят в заблуждение. Когда вы смотрите на график и пытаетесь понять, является ли он истинным отображением того, что на самом деле происходит, проверьте этот базовый уровень.
Вводящие в заблуждение графики: неполные данные.
Если вы действительно хотите сделать шокирующее заявление, убедитесь, что вы включили только часть данных. Возьмем этот первый пример обманчивого графика, который доказывает, что глобальное потепление действительно существует.
Глобальное потепление вышло из-под контроля!
Среднемесячная температура в Нью-Хейвене, Коннектикут. Изображение: Йельский университет
Что не так с этой картинкой? Показывает только первую половину года , так что, конечно, температуры резко повышаются.
Дефицит - постоянная проблема!
Вот еще один пример неполных данных. На этом графике создается впечатление, что дефицит всегда был высоким, потому что график начинается в 2009 году. Это может заставить вас думать, что дефицит был постоянной проблемой.Это не так: дефицит составлял всего 1,2 процента ВВП в 2007 году, когда рынок жилья рухнул.
Наши сливки победят зуд!
Не знаю, что сказать об этом графике для крема против зуда Lanacane.
Похоже, ланакан действует лучше, чем обычный крем от зуда, верно? Обратите внимание на отсутствие этикеток. Что на самом деле говорит нам этот график? Практически ничто другое, кроме их статистики, не умеет делать не очень хорошие графики.
Графики, вводящие в заблуждение: просто читать неправильно
Глобальное потепление остановлено!
Вот еще одна фотография глобального потепления из британского таблоида Mail on Sunday.Газета использовала его, чтобы заявить, что глобальное потепление остановило .
Изображение предоставлено: Mail on Sunday.
Когда мы читаем газеты, мы часто думаем, что люди, пишущие статьи, являются экспертами. Фактически, журналист, который написал статью к этой фотографии (Дэвид Роуз), просто не понял, что ему рассказывал график. Он сделал две ошибки:
- На графике показано температур воздуха . Это очень плохой показатель глобального потепления, поскольку большая часть тепла попадает в океаны.
- Это очень краткосрочный график. Невозможно делать хорошие прогнозы на основе небольшого количества данных. Если вы выиграете первый купленный скретч лотерейный билет, это не значит, что ваши шансы на выигрыш равны 100%. Вам придется купить (и соскрести) десятки или даже сотни билетов, чтобы по-настоящему увидеть тенденцию. Более точный график глобального потепления показал бы тенденцию со времени промышленной революции.
Колледж не стоит вашего времени и денег!
Как насчет этой диаграммы, которая «доказывает», что высшее образование больше не стоит денег?
Масштаб на этой диаграмме в порядке.То, что Business Insider вывел из диаграммы, не соответствует действительности. Мы «… потеряли вездесущую положительную финансовую отдачу от образования»? Нет. Дэвид Блейк прочитал диаграмму, не приняв во внимание ключевой факт, что не было на диаграмме: стоимость , а не , идущая в колледж, уменьшилась на даже больше, чем на . Это означает, что ваши перспективы как выпускника средней школы намного хуже, чем ваши перспективы как выпускника колледжа.
Еще одна ключевая информация находится на самой диаграмме.Обратите внимание, что средний годовой доход, на который может рассчитывать выпускник колледжа, составляет около 45 000 долларов в 2010 году. Это 9 0006 долларов в год. При средней продолжительности работы (скажем, 43 года при выходе на пенсию в возрасте 65 лет) это дает вам доход в размере 45 000 долларов * 43 = 1 935 000 долларов. Вычтите это дорогое образование в колледже (95 000 долларов), и ваш чистый заработок составит 1 840 000 долларов. Сравните это со средним выпускником средней школы. Они могут рассчитывать заработать 1300000 долларов в течение своей жизни (Источник: Министерство образования США). Какая разница!
Мораль сказки? Будьте осторожны, пытаясь прочитать таблицу по теме, в которой вы не являетесь экспертом!
Wii барахтается!
Каждый может быть экспертом в игровых системах, верно? В конце концов, что нужно знать? Как поставить диск в приставку? Как держать контроллер? Как стрелять из оружия? Этот график за 2009 год показывает, как жалкие 6% владельцев Wii на самом деле использовали свои Wii:
Изображение: Kotaku.com.
Ли Эванс в своей статье с обратной совместимостью «Приключения в вводящих в заблуждение графах» лучше всего выразился:
Взгляните на верхнее число на графике. Только 11% владельцев 360 активно используют свои 360 и только 10% владельцев PS3 активно используют свои PS3. А теперь займемся математикой.
Есть 50 миллионов владельцев Wii. 6% от этого числа - 3 миллиона.
Есть 30 миллионов 360 владельцев. 11% от этого числа - 3,3 миллиона.
Есть 20 миллионов владельцев PS3.10% от этого числа - 2 миллиона.
Другими словами, почти одинаковое количество пользователей регулярно использует их систему. Разница в процентах не так уж велика, но по графику (и по тому, как люди его читают) он выглядит как «ОЧЕНЬ БОЛЬШОЙ ПРОБЕЛ!»
Диаграммы, вводящие в заблуждение: числа, которые не складываются
Палин для Pres!
Очевидно, 70% людей поддержали Пэйлин в президентской гонке 2012 года. Но ждать! Статистики Fox News снова взялись за дело. Круговая диаграмма должна давать в сумме 100%.Не этот:
Изображение: http://flowingdata.com/2009/11/26/fox-news-makes-the-best-pie-chart-ever/
Графики, вводящие в заблуждение: две оси Y
Уменьшаются потери работы и медицинского страхования!
Изображение: Wonk Room.
На первый взгляд кажется очевидным, что утверждение верно. Но взгляните на график, и вы увидите и две оси Y . Этот особый тип манипуляции данными выходит за рамки классических методов обмана. Что на самом деле здесь происходит (пропуская математическую часть), так это то, что если вы извлечете данные из этого сбивающего с толку беспорядка на графике, вы получите:
- Отсутствие страховки увеличивается очень незначительно (с ~ 15% до ~ 16%).
- Безработица растет быстрее (с ~ 4,5% до 7,5%).
И победитель в категории «Диаграммы, вводящие в заблуждение» -…
Награда за вводящие в заблуждение графики в категории реальной жизни достается (барабанная дробь, пожалуйста ...) Fox News за этот драгоценный камень:
Изображение: Media Matters
Какие реальные данные скрываются за этим шокирующим графиком? Неужели людей, получающих пособие, больше, чем работающих полный рабочий день? Как указывает Media Matters:
«Fox’s 108.Цифра в 6 миллионов «людей, получающих пособие» получена из отчета Бюро переписи населения об участии в программах проверки нуждаемости, которые включают «всех, кто проживает в домохозяйстве, в котором один или несколько человек получали пособия» в четвертом квартале 2011 года. , таким образом, , включая лиц, которые сами не получали государственных пособий . С другой стороны, цифра «люди с полной занятостью», которую использовал Фокс, включала только людей, которые работали, а не лиц, проживающих в домохозяйстве, где работает хотя бы один человек.”
Другими словами, если вы живете со своей мамой, папой, братом Джо и двоюродным братом Сэмом, и Сэм участвовал (на короткое время) в какой-то программе социального обеспечения, которая рассчитывала против вас и всех в вашей семье.
Список литературы
Хафф, Д. (1993). Как врать со статистикой. W. W. Norton & Company
Gonick, L. (1993). Мультяшный справочник по статистике. HarperPerennial.