Гистограмма отображает более высокие значения, чем в наборе данных - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь создать трехмерную гистограмму, используя некоторые случайные данные. Данные поступают из 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()

Column Correlations Image

...