Как сделать построение корреляции данных в Python? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть база данных, которая содержит информацию о коммитах, сделанных в репо.Например,

commit-sha1 | file1 | 
commit-sha1 | file2 |
commit-sha2 | file2 |
commit-sha2 | file3 | 

и так далее.По сути, показ того, что sha1 изменил файлы (file1, file2) и sha2 изменился (file2, file3) Теперь я хотел посмотреть, связаны ли некоторые файлы, то есть каковы шансы, что file1 и file2 зафиксированы вместе и т. Д. Для этого,сначала я обнаружил 50 самых популярных файлов, которые дали мне

file1 - 1500
file2 - 1423
file3 - 1222..
  • Для каждого файла f вычислите P (f) = коммиты, содержащие f / всего коммитов.
  • Для каждой пары файлов f1, f2 рассчитайте Q (f1, f2) = коммиты, содержащие оба f1, f2 / всего коммитов
  • Для каждой пары файлов f1, f2 рассчитайте D (f1,f2) = P (f1) * P (f2) / [Q (f1, f2) - P (f1) * P (f2)] или бесконечность, если Q (f1, f2) <= P (f1) * P (f2) После того, как я следовал вышеизложенному, у меня теперь есть 2 пары для файлов и их значение D (f1, f2), которое выглядит следующим образом </p>

    two_pair_list = [['file1', 'file2'], ['file1', 'file3'] ... ['file49', 'file50']]

    d_value = [3.2, -1, 0.12, 7.6, -1, ...]

Я поставил -1 как d_value, когда Q (f1, f2) <= P (f1) * P (f2) iНапример, поскольку в db не было коммитов, которые содержали одновременно и file1, и file3 (то есть Q (file1, file3) = 0), его d_value равно -1.Теперь, если у меня есть список d_value для пар файлов, как я могу выполнить иерархическую кластеризацию, чтобы увидеть, какие файлы связаны друг с другом?Я верю, что Python Linkage () API поможет, но я не уверен, как использовать его с этими данными.Любая помощь приветствуется Спасибо </p>

1 Ответ

0 голосов
/ 12 февраля 2019

Простой пример:

from scipy.cluster.hierarchy import dendrogram, linkage
import numpy as np
from matplotlib import pyplot as plt

d_value = np.array([ 3.2 , 100,  0.12,  7.6 , 100,  5.2 ])
Z = linkage(dm, 'ward')
fig = plt.figure()
dn = dendrogram(Z)

Результат:

enter image description here

Обратите внимание, что я изменил ваш -1в 100, поскольку расстояние file1 и file3 должно быть большим, если они не были зафиксированы вместе.

...