Как построить многомерную точку данных в Python

Сначала немного предыстории:

Я хочу построить Кепстральные коэффициенты Mel-Frequency для разных песен и сравнить их. Я вычисляю MFCC на протяжении всей песни, а затем усредняю ​​их, чтобы получить один массив из 13 коэффициентов. Я хочу, чтобы это представляло одну точку на графике, который я рисую.

Я новичок в Python и очень новичок в любых формах построения графиков (хотя я видел некоторые рекомендации по использованию matplotlib).

Я хочу иметь возможность визуализировать эти данные. Есть мысли о том, как я могу это сделать?


person CatLord    schedule 13.01.2015    source источник
comment
Прежде всего вы должны подумать, как бы вы изобразили точку (x1, ..., x13) на плоскости вашего видео .... после этого вы можете начать это делать. Это не проблема питона ... Я думаю, что не существует языка, который бы ее решал.   -  person Michele d'Amico    schedule 13.01.2015
comment
Сначала вам нужно будет спроецировать в 2D. Тогда ваш сюжет будет выглядеть как трехмерный (но на самом деле он отображается на экране, который в любом случае является двухмерным).   -  person Yan King Yin    schedule 25.08.2015


Ответы (1)


Во-первых, если вы хотите представить массив из 13 коэффициентов в виде единой точки на вашем графике, вам нужно разбить 13 коэффициентов до количества измерений на вашем графике, как указал Ян Царь Инь в своем комментарии. Для проецирования данных в 2 измерения вы можете либо сами создать соответствующие индикаторы, такие как макс. / Мин. / Стандартное отклонение / ...., либо применить методы уменьшения размерности, такие как PCA. Стоит ли это делать и как это делать - другая тема.

Затем строить график очень просто: http://matplotlib.org/api/pyplot_api.html

Я привожу пример кода для этого решения:

import matplotlib.pyplot as plt
import numpy as np

#fake example data
song1 = np.asarray([1, 2, 3, 4, 5, 6, 2, 35, 4, 1])
song2 = song1*2
song3 = song1*1.5

#list of arrays containing all data
data = [song1, song2, song3]

#calculate 2d indicators
def indic(data):
    #alternatively you can calulate any other indicators
    max = np.max(data, axis=1)
    min = np.min(data, axis=1)
    return max, min

x,y = indic(data)
plt.scatter(x, y, marker='x')
plt.show()

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

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

import pandas as pd
pd.DataFrame(data).T.plot()
plt.show()

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

ОБНОВЛЕНИЕ:

Тем временем я обнаружил галерею изображений Python, которая содержит два хороших примера многомерной визуализации со ссылкой код:

введите здесь описание изображения

введите здесь описание изображения

person Nikolas Rieble    schedule 27.05.2016
comment
Есть ли другой способ разбросать данные с высокой яркостью? Более того, график с использованием pandas Dataframe немного запутан из-за имен на оси x. - person Eswar; 19.07.2019