У меня есть база данных, которая содержит информацию о коммитах, сделанных в репо.Например,
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>