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

У меня есть набор данных, в котором каждый образец состоит из координат x и y, метки времени и значения давления сенсорного ввода на смартфоне. Я загрузил набор данных здесь (OneDrive): данные.csv

Его можно прочитать:

import pandas as pd
df = pd.read_csv('data.csv')

Теперь я хотел бы создать тепловую карту, визуализирующую распределение давления в пространстве xy.

Я представляю тепловую карту, которая выглядит как левое или правое изображение:

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

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

Я рад каждому вкладу в создание тепловой карты.

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

Joe 29.05.2019 21:31

@Joe Почему ускорение не имеет смысла? Конечно, может быть ускорение набора текста с течением времени.

machinery 30.05.2019 00:28

@Joe Не могли бы вы объединить только давление или также возможно объединить x, y и давление вместе? В противном случае, возможно, бины были бы очень загромождены в пространстве x-y. Не могли бы вы привести пример, как это сделать? Большое спасибо! Меня больше не волнуют ускорение и скорость, а только давление.

machinery 30.05.2019 02:11

Хорошо, ускорение может иметь смысл. Вы хотите показать, что кто-то учится печатать и т.д.? Но ускорение легко вычислить по скорости, и вы должны сначала рассчитать ее. У вас есть приблизительное представление о том, что делает биннинг? Вы группируете значения давления в x-y-пространстве. Во-первых, просто нанесите события на экран в виде точек, где они произошли. см. de.mathworks.com/matlabcentral/fileexchange/… или stackoverflow.com/questions/40641895/… или stackoverflow.com/a/19391256/7919597

Joe 30.05.2019 07:00

Найдите «гистограмму 2d matplotlib numpy».

Joe 30.05.2019 07:02

@Джо Большое спасибо. Да, я как бы хочу показать обучение. Да, я примерно знаю, что такое биннинг, но я совершенно запутался в значении давления бининга в пространстве xy и в том, как его впоследствии обработать для создания графика. Просто создать тепловую карту значений xy не проблема, но я полностью застрял, когда в игру вступает давление (z.value). Я был бы очень признателен, если бы вы могли кратко показать некоторые строки кода для решения проблемы, если это не слишком сложно для вас.

machinery 30.05.2019 12:38

@Joe все примеры, которые вы предоставили, относятся только к 2D-данным (x, y), но у меня есть 3D-данные (x, y, z).

machinery 30.05.2019 21:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
10
133
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Но есть более общая функция гистограммы, которая может быть полезна в вашем случае: scipy.stats.binned_statistic_2d

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

  • иметь в виду
  • станд.
  • медиана
  • считать
  • сумма
  • мин
  • Максимум
  • или определяемая пользователем функция

Я думаю, в вашем случае среднее значение или медиана могут быть хорошим решением.

scipy.stats.binned_statistic_2d звучит интересно. Значения давления, которые я могу указать в качестве параметра значений для функции, это правильно? Какое количество контейнеров вы бы использовали?

machinery 30.05.2019 23:45

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

Joe 31.05.2019 07:35

Другие вопросы по теме