Я считаю, что мой вопрос еще не все понятен. Итак, время для другого подхода в объяснении моих квеста.Скользящее окно для определения локального адресата данных (AWK)
- У меня есть один файл данных, содержащий около 27 500 точек данных. Каждый datapoint имеет уникальные целые числа от 0 до 46041637 в первом столбце и описание в столбце 2-6.
- Я хотел бы знать, как целые числа распределяются по возможностям 46M. Например, сколько (и которые) datapoints попадает в диапазон 1-1000, сколько между 1001-2000 и так далее до 46M.
- В предыдущем примере будут созданы меньшие наборы данных (или бункеров) размером около 46 тыс. (46 М/1000). Некоторые бункеры будут содержать несколько точек данных, в то время как многие из них не будут содержать каких-либо данных.
- В приведенном выше примере размер/длина бункера (я бы назвал его windowsize) равным 1000. Я еще не знаю, какой лучший оконный код подходит для моих целей, поэтому я хотел бы иметь возможность сценарий, который имеет «настраиваемый» windowsize.
- Кроме того, пример 1-1000, 1001, 2001, [...], очевидно, не показывает перекрытия в бункерах. Однако это означает, что я теряю много «чувствительности» и, следовательно, знания/информации. Поэтому я хотел бы иметь возможность создавать окна/корзины, которые перекрываются. Например, 1-1000,501-1500, 1501-2500, 2001-3000. Эти ячейки имеют перекрытие 500. Я бы мог установить количество перекрытий между бункерами.
- Я хотел бы написать каждый bin в свой собственный файл, даже если bin не содержит каких-либо datapoints.
Вот объяснение, которое я дал раньше, что было не очень хорошо, по-видимому
Использование AWK Я пытаюсь «скользить окно» над списком целых чисел. Если бы я разделил этот набор данных, сколько точек данных было бы в каждом (возможно перекрывающемся) бине? Мне нравится устанавливать binsize (или windowsize) и перекрываться между бункерами. Такой подход позволяет мне получить представление о локальной плотности данных. -> У меня немного опыта AWK, и мне сказали, что AWK должен уметь выполнять эту работу, я предпочитаю использовать AWK. Тем не менее, я также открыт для других идей (например, Python).
- У меня есть один файл данных, содержащий около 27 500 целых чисел от 0 до 46041637 (46 миллионов) и описание для каждой точки данных.
- Как я хотел бы иметь представление об эффектах «изменения» разрешения, которое я хотел бы сыграть немного с разными размерами окон и перекрытием между отдельными окнами.
- Мне нравится писать все содержимое каждого «окна» в отдельный файл и называть файл в соответствии с «начальной точкой Windows».
Я подготовил несколько примеров файлов, которые прилагаются ниже.Однако, чтобы сделать его легче получить идея вот еще очень и очень упрощенный пример:
Datarange 1 - 10
Integers in dataset: 2,4,5,6,9
####
####Example 1: Windowsize=5,overlap=2####
####
file name ="1" contents are: (range is 1 - 5)
2
4
5
file name="3" contents are: (range is 4 - 8, that is, two overlap with previous range)
4
5
6
file name="7" contents are: (range is 7 - 10, if the range was larger, it would be 7 - 11)
9
####
####Example 2: Windowsize=3,overlap=0####
####
file name="1" contents are (range 1 - 3)
2
file name="4" contents are (range 4 - 6)
4
5
6
file name="7" contents are (range 7 - 9)
9
file name="9" contents are (range 10 - 10)
<none>
Пример входного файла
3579
3661
3752 EXON 3706 4407 + Solyc06g005000.2.1.1Solyc06g005000.2.1
3947 EXON 3706 4407 + Solyc06g005000.2.1.1Solyc06g005000.2.1
6734 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
6865 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
6915 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
8961
13471 EXON 13449 13532 + Solyc06g005020.1.1.2Solyc06g005020.1.1
13561 INTRON 13533 13710 + Solyc06g005020.1.1.2Solyc06g005020.1.1
22226 EXON 22106 22261 + Solyc06g005030.1.1.1Solyc06g005030.1.1
22516
22556
36903 INTRON 36836 36915 + Solyc06g005060.2.1.1Solyc06g005060.2.1
37377 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37605 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37935 3P_UTR 37801 38132 + Solyc06g005060.2.1.0Solyc06g005060.2.1
167942 5P_UTR 167930 167956 - Solyc06g005140.2.1.0Solyc06g005140.2.1
168020 INTRON 167957 169025 - Solyc06g005140.2.1.2Solyc06g005140.2.1
168153 INTRON 167957 169025 - Solyc06g005140.2.1.2Solyc06g005140.2.1
Пример выходного файла с различными windowsizes и перекрываться
> AWK -v windowsize=50000 -v overlap=0 -f awkscript input.file
> ls
1 50001
100001 150001
> cat 1
3579
3661
3752 EXON 3706 4407 + Solyc06g005000.2.1.1Solyc06g005000.2.1
3947 EXON 3706 4407 + Solyc06g005000.2.1.1Solyc06g005000.2.1
6734 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
6865 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
6915 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
8961
13471 EXON 13449 13532 + Solyc06g005020.1.1.2Solyc06g005020.1.1
13561 INTRON 13533 13710 + Solyc06g005020.1.1.2Solyc06g005020.1.1
22226 EXON 22106 22261 + Solyc06g005030.1.1.1Solyc06g005030.1.1
22516
22556
36903 INTRON 36836 36915 + Solyc06g005060.2.1.1Solyc06g005060.2.1
37377 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37605 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37935 3P_UTR 37801 38132 + Solyc06g005060.2.1.0Solyc06g005060.2.1
3752 EXON 3706 4407 + Solyc06g005000.2.1.1Solyc06g005000.2.1
3947 EXON 3706 4407 + Solyc06g005000.2.1.1Solyc06g005000.2.1
6734 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
6865 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
6915 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
8961
13471 EXON 13449 13532 + Solyc06g005020.1.1.2Solyc06g005020.1.1
13561 INTRON 13533 13710 + Solyc06g005020.1.1.2Solyc06g005020.1.1
22226 EXON 22106 22261 + Solyc06g005030.1.1.1Solyc06g005030.1.1
22516
22556
36903 INTRON 36836 36915 + Solyc06g005060.2.1.1Solyc06g005060.2.1
37377 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37605 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37935 3P_UTR 37801 38132 + Solyc06g005060.2.1.0Solyc06g005060.2.1
> cat 50001
> cat 100001
> cat 150001
167942 5P_UTR 167930 167956 - Solyc06g005140.2.1.0Solyc06g005140.2.1
168020 INTRON 167957 169025 - Solyc06g005140.2.1.2Solyc06g005140.2.1
168153 INTRON 167957 169025 - Solyc06g005140.2.1.2Solyc06g005140.2.1
> #And with some different paramenters
> AWK -v windowsize=160000 -v overlap=10000 -f awkscript input.file
> ls
1 10001
> cat 1
3579
3661
3752 EXON 3706 4407 + Solyc06g005000.2.1.1Solyc06g005000.2.1
3947 EXON 3706 4407 + Solyc06g005000.2.1.1Solyc06g005000.2.1
6734 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
6865 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
6915 INTRON 5605 7662 + Solyc06g005000.2.1.2Solyc06g005000.2.1
8961
13471 EXON 13449 13532 + Solyc06g005020.1.1.2Solyc06g005020.1.1
13561 INTRON 13533 13710 + Solyc06g005020.1.1.2Solyc06g005020.1.1
22226 EXON 22106 22261 + Solyc06g005030.1.1.1Solyc06g005030.1.1
22516
22556
36903 INTRON 36836 36915 + Solyc06g005060.2.1.1Solyc06g005060.2.1
37377 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37605 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37935 3P_UTR 37801 38132 + Solyc06g005060.2.1.0Solyc06g005060.2.1
> cat 10001
13471 EXON 13449 13532 + Solyc06g005020.1.1.2Solyc06g005020.1.1
13561 INTRON 13533 13710 + Solyc06g005020.1.1.2Solyc06g005020.1.1
22226 EXON 22106 22261 + Solyc06g005030.1.1.1Solyc06g005030.1.1
22516
22556
36903 INTRON 36836 36915 + Solyc06g005060.2.1.1Solyc06g005060.2.1
37377 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37605 EXON 36916 37800 + Solyc06g005060.2.1.2Solyc06g005060.2.1
37935 3P_UTR 37801 38132 + Solyc06g005060.2.1.0Solyc06g005060.2.1
167942 5P_UTR 167930 167956 - Solyc06g005140.2.1.0Solyc06g005140.2.1
168020 INTRON 167957 169025 - Solyc06g005140.2.1.2Solyc06g005140.2.1
168153 INTRON 167957 169025 - Solyc06g005140.2.1.2Solyc06g005140.2.1
Большое вам спасибо за вашу помощь!
Небольшая корректировка моего первоначального вопроса, потому что для меня требуется больше вычислительного времени, чем я ожидал.
Возможно ли, что вместо записи всех записей, которые попадают в конкретное окно в свой собственный файл, записывают «статистику» каждого окна в строку в таблице? Со статистикой я имею в виду, сколько записей содержит конкретное окно и сколько из каждого типа. Применительно к примеру выше это будет выглядеть следующим образом:
> python script.py 160000 10000 file (using the script from sidharth c nadhan)
> cat result
window | total | exons | intron | 3P_UTR | 5P_UTR
1 | 17 | 6 | 5 | 1 | 0
10001 | 12 | 4 | 4 | 1 | 1
Изменил мой вопрос, надеюсь, теперь это более «понятно»? Пожалуйста, дайте мне знать! Большое спасибо вам всем! – Elmer