У меня есть набор данных, в котором каждый образец состоит из координат x и y, метки времени и значения давления сенсорного ввода на смартфоне. Я загрузил набор данных здесь (OneDrive): данные.csv
Его можно прочитать:
import pandas as pd
df = pd.read_csv('data.csv')
Теперь я хотел бы создать тепловую карту, визуализирующую распределение давления в пространстве xy.
Я представляю тепловую карту, которая выглядит как левое или правое изображение:
Для тепловой карты пространственных позиций можно использовать подход, аналогичный заданному здесь. Для тепловой карты значений давления проблема заключается в том, что есть 3 измерения, а именно координаты x и y и давление.
Я рад каждому вкладу в создание тепловой карты.
@Joe Почему ускорение не имеет смысла? Конечно, может быть ускорение набора текста с течением времени.
@Joe Не могли бы вы объединить только давление или также возможно объединить x, y и давление вместе? В противном случае, возможно, бины были бы очень загромождены в пространстве x-y. Не могли бы вы привести пример, как это сделать? Большое спасибо! Меня больше не волнуют ускорение и скорость, а только давление.
Хорошо, ускорение может иметь смысл. Вы хотите показать, что кто-то учится печатать и т.д.? Но ускорение легко вычислить по скорости, и вы должны сначала рассчитать ее. У вас есть приблизительное представление о том, что делает биннинг? Вы группируете значения давления в x-y-пространстве. Во-первых, просто нанесите события на экран в виде точек, где они произошли. см. de.mathworks.com/matlabcentral/fileexchange/… или stackoverflow.com/questions/40641895/… или stackoverflow.com/a/19391256/7919597
Найдите «гистограмму 2d matplotlib numpy».
@Джо Большое спасибо. Да, я как бы хочу показать обучение. Да, я примерно знаю, что такое биннинг, но я совершенно запутался в значении давления бининга в пространстве xy и в том, как его впоследствии обработать для создания графика. Просто создать тепловую карту значений xy не проблема, но я полностью застрял, когда в игру вступает давление (z.value). Я был бы очень признателен, если бы вы могли кратко показать некоторые строки кода для решения проблемы, если это не слишком сложно для вас.
@Joe все примеры, которые вы предоставили, относятся только к 2D-данным (x, y), но у меня есть 3D-данные (x, y, z).
Существует несколько способов объединения данных. Один только по количеству событий. Такие функции, как numpy.histogram2d или гист2д, позволяют указывать веса для каждой точки данных, чтобы управлять весом каждого события.
Но есть более общая функция гистограммы, которая может быть полезна в вашем случае: scipy.stats.binned_statistic_2d
Используя аргумент ключевого слова statistic
, вы можете выбрать, как значение каждого бина рассчитывается на основе значений, которые лежат внутри:
Я думаю, в вашем случае среднее значение или медиана могут быть хорошим решением.
scipy.stats.binned_statistic_2d звучит интересно. Значения давления, которые я могу указать в качестве параметра значений для функции, это правильно? Какое количество контейнеров вы бы использовали?
Да исправить. Насчет разрешения бина, всегда надо пробовать. Это всегда компромисс между усреднением ваших данных, когда сетка слишком грубая, и отсутствием каких-либо полезных закономерностей, потому что вы видите все одновременно. Существуют также функции биннинга, которые регулируют размер бина, и в итоге вы получаете неравномерную сетку. Существует множество статистических подходов к «идеальному размеру корзины», просто найдите его.
Прочтите о объединении данных и о том, как это можно сделать с помощью Pandas. Затем объедините свои данные, выберите подходящую сетку и, возможно, сначала постройте график давления. Следующий шаг — обработка данных. Ускорение набора текста не имеет особого смысла, верно? Вы имеете в виду скорость печати? Это можно рассчитать на основе последовательных событий и их временной разницы, результат выражается в событиях в секунду или минуту. Как только это будет сделано, соберите данные и постройте их.