Панди за съвпадение на колони

Често може да искаме да сравним стойностите на колони в различни файлове на Excel една с друга, за да търсим съвпадения и/или прилики. С помощта на библиотеката Pandas от Python това става лесна задача. За да демонстрира как това е възможно, този урок ще се фокусира върху прост генетичен пример. Не са необходими генетични познания!

Помислете за следната ситуация; Имам някои неизвестни проби от ДНК последователности (прости низове, съставени от буквите A, T, G и C. За всяка от тези неизвестни ДНК последователности присвоявам уникален идентификатор. За да опростя нещата, първата неизвестна последователност ще бъде идентифицирана като 1 , втората като 2 и така нататък, както е показано по-долу.

В този донякъде измислен пример искам да сравня моите неизвестни последователности с известни референтни последователности.

Накратко, въпросът ми е дали някой от „Unknown_sample_no“ съвпада с моя „Reference_sequences_ID“? Ако да, с коя последователност(и) съвпадат.

За да започна да отговарям на този въпрос, първо импортирам модула pandas и чета съответните си файлове като csv файлове. Забележка: Запазих тези файлове в Excel като файлове със стойности, разделени със запетая (csv файлове) и използвах функцията read_csv(), за да ги анализирам. Това не е строго необходимо, но предпочитам работен навик. Можете алтернативно да оставите вашите Excel файлове с родното разширение .xlsx и да използвате функцията pandas.read_excel(), за да запазите стъпка тук.

На последователностите от заявки DataFrame беше присвоена променливата A, а на референтните последователности DataFrame беше присвоена променливата B. За да проверя дали нещата работят, анализирам проверката на DataFrames специално за техните колони.

След това преобразувам и двете колони в двата DataFrames в списъци на Python. За да направя това, използвам метода .tolist() в определена колона на определен DataFrame. Като пример, колоната „Unknown_sample_no“ в DataFrame A се преобразува в списък. Изпълнявам тази стъпка за всяка от другите три колони, разпределени в двата файла на Excel, както е показано в кодовия фрагмент по-долу.

Искам да запазя връзката между „Unknown_sample_no“ и съответстващия му „Unknown_sample_seq“. Освен това искам да запазя връзката между „Reference_sequences_ID“ и съответните им „Reference_sequences“. Python предлага лесен начин за поддържане на тази връзка. Преобразувам списъците си в 2 речника.

Използвам функцията zip, за да присъединя списъците и след това използвам функцията dict, за да ги конвертирам в подходящо присвоени речници.

За да потвърдя, че речниците са направени правилно, стартирам скрипта в моя терминал. Кратка проверка за валидиране ме информира, че нещата работят по предназначение. От Ref_dict например, ключовете „Reference_sequences_ID“ съвпадат правилно със съответните им стойности „Reference_sequences“: „{'A': 'AAAAGCGCGAGGGGGGA', 'K': 'GGGAGAGAGGG', 'Y': 'CGGAGCGTTT'….. }

Вече мога да сравня двата си речника един с друг. За да направя това, използвам for цикъл за итерация през моя „Unknown_dict“ и вложен for цикъл за итерация през Ref_dict. При всяка итерация искам да знам дали последователността в Unknown_dict съвпада с някоя от последователностите в Ref_dict (някои ще , нарочно включих 8 съвпадения). За да проверя за съвпадения, използвам функцията re.search() от модула re (модул за регулярен израз).

Когато има съвпадение, мисля, че би било полезно да се знае коя последователност е съвпаднала, къде се е появило това съвпадение в ДНК последователността и най-важното какво „Unknown_sample_no“ съвпада с кой „Reference_sequences_ID“.

За да станат нещата изрично ясни, би било идеално всички съвпадения да бъдат записани в един csv файл, който може да се отвори в Excel. В идеалния случай амбицията е да стане ясно на всеки, който иска да интерпретира данните, кои последователности съвпадат, каква е съвпадащата последователност и къде съвпада.

За да постигна тази цел, пиша във файл със заглавие „seq_match_compare.csv“ и вола, когато отворя csv файла, цялата информация, която искам, се появява по интерпретируем начин!

Сега знам например, че Query_ID: 1 съответства на Ref_species A и това съвпадение започва от позиция 4 в последователността.

Има няколко начина за сравняване на стойности на колони в 2 различни файла на Excel. Подходът тук проверява всяка последователност в колоната Unknown seq от първия файл с всяка последователност в колоната Reference_sequences от втория файл.

Този начин представлява прост начин за съпоставяне и сравняване и предлага голяма мащабируемост, ако искаме да анализираме произволен брой проби!

Всичко стана възможно с помощта на Pandas!