Подразобрался с делами и разделил код на 2 части. Все, что связано только с хорошими делами (предсказание SNP и покраска карты) выделил в новую программу - yMapper и сделал вновь общедоступным https://github.com/Daemon2017/yMapper Остальную часть кода, занимающуюся нехорошими делами, сохранил в скрытом состоянии.
Из руководства пользователя тоже вычистил все упоминания всего нехорошего.
Как пользователь получил входные данные - его дело: купил, выменял, украл, подбросили и т.д.
Теперь все отвязано от FTDNA и будет работать с данными от любой лаборатории.
Планирую в будущем сделать некоторые доработки в области скорости как покраски карты, так и предсказания SNP: R-CTS1211 красило почти час - хочется побыстрее.
Подскажите пожалуйста, а как установить xgboost? Ни через pip ни anaconda не хочет. А без него не запускается
Странно, а какую ошибку бросает?
Руководство вот: https://xgboost.readthedocs.io/en/latest/build.html
https://docs.google.com/document/d/19konDhocQbGjQcmC0d5N4KuPj2gA0zm7g4KHjFoPttE/edit?usp=sharing
А можно еще вопрос? У вас там в папке есть ftdna_tree_collector_rest.py. А можно простым скриптом python json распарсить в cvs, чтобы вложенные гаплогруппы нормально группировались?
Я с python пока только знакомлюсь. В основном работа с данными через Power Querry. Через парсеры собрал базу FTDNA 245 тыс. строк. Для правильно группировки по гаплогруппам их дерево нужно распарсить, пока вручную делаю, очень муторно (через PQ).
Чуть позже гляну ошибку.
Да, JSON можно привести к таблице, если упразднить все списки.
Модуль ftdna_tree_collector_rest просто вытягивает 100 Мб древо Y-SNP с сайта FTDNA + умеет возвращать список родителей (всю цепочку) и детей (только 1 уровень) для выбранного SNP. Сейчас пара ключ-значение имеет такой формат:
"4352":{
"haplogroupId":4352,
"parentId":30484,
"name":"R-YP1019",
"isRoot":false,
"root":"R",
"artificialRoot":"R",
"kitsCount":1,
"subBranches":14,
"bigYCount":0,
"countryCounts":[
{
"countryCode":"LT",
"name":"Lithuania",
"kitsCounts":1
}
],
"variants":[
{
"variant":"YP1019",
"position":7935262,
"ancestral":"G",
"derived":"T",
"region":"p11.2"
},
{
"variant":"FT220644",
"position":10924666,
"ancestral":"T",
"derived":"A",
"region":"q11.21"
},
{
"variant":"YP1023",
"position":13154265,
"ancestral":"G",
"derived":"A",
"region":"q11.221"
},
{
"variant":"YP1032",
"position":20767427,
"ancestral":"A",
"derived":"G",
"region":"q11.223"
}
],
"children":[
13260,
13265,
33303
]
}
Но не очень понимаю, зачем Вам это. Если для работы с yMapper'ом, то это лишнее - мой код принимает на вход CSV, где один из столбцов это имя SNP, которое можно спокойно выдернуть потрошителем из таблиц FTDNA.