Я пытаюсь создать трехмерную гистограмму, используя некоторые случайные данные. Данные поступают из CSV случайных данных, и я пытаюсь смоделировать корреляции между всеми столбцами. Результирующая структура данных представляет собой кортеж из двух сравниваемых столбцов в качестве ключа и их корреляцию в качестве значения в словаре. Код работает хорошо, но, как вы можете видеть на изображении гистограммы, есть z-значения выше 1,0, что невозможно по отношению к корреляциям. Наибольшее значение z составляет 0,734, поэтому я понятия не имею, почему оно отображает такие высокие значения.
Вот код:
df = pd.read_csv("Random data v2 (1).csv",header=None)
def rowCorrelation():
xData = []
yData = []
zData = []
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# calculates the correlation between all columns and all other columns
for i in range(0,20):
for e in range(0,20):
dataFlow = dict(zip([(i,e+1)],[np.corrcoef(df[i],df[e+1])[0,1]]))
if list(dataFlow.values())[0] < .9:
xData.append(list(dataFlow.keys())[0][0])
yData.append(list(dataFlow.keys())[0][1])
zData.append(list(dataFlow.values())[0])
## tuple of the two columns being correlated and their correlation
## in the dictionary as key value pairs data structure.
## Ex: {(19, 17): -0.015262993060948592}
hist, xedges, yedges = np.histogram2d(xData, yData, bins=(20,20))
xpos, ypos = np.meshgrid(xedges[:-1]+xedges[1:], yedges[:-1]+yedges[1:])
xpos = xData.flatten()
ypos = yData.flatten()
zpos = np.array(zData).flatten()
dx = xedges [1] - xedges [0]
dy = yedges [1] - yedges [0]
dz = zpos
cmap = plt.get_cmap('jet')
max_height = np.max(dz)
min_height = np.min(dz)
# scale each z to [0,1], and get their rgb values
rgba = [cmap((k-min_height)/max_height) for k in dz]
ax.bar3d(xData, yData, zpos, dx, dy, dz, color=rgba, zsort='average')
plt.title("3d model of column correlations")
plt.xlabel("X data")
plt.ylabel("Y data")
plt.show()