Эффективное сопоставление средних баллов по интервальным окнамPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Эффективное сопоставление средних баллов по интервальным окнам

Сообщение Anonymous »

Например, у меня есть df геномных интервалов с миллионами строк:
chromosome start end
1 300 500
1 400 600
... ... ...
  • найти центр каждого интервала (+/- 250 от центра начала/конца)
chromosome start end center
1 300 500 400
1 400 600 500
... ... ...
  • Создать новые окна (-/+ 250 вокруг центра)
chromosome start end center window_start window_end
1 300 500 400 50 750
1 400 600 500 150 850
... ... ...

  • получить оценки для каждой отдельной позиции в этих окнах (используя мою собственную функцию). Сначала необходимо воссоздать df, используя только Chr, window_start и window_end.
chromosome start end
1 50 750
1 150 850
... ... ...
Моя функция оценки выведет следующий df (намного больше, для каждого интервала будет 500 строк, потому что 1 строка = 1 позиция. В этом примере это будет 1000 строк, потому что у нас 2 интервала). :
chromosome start end score
1 50 50 .8
1 51 51 .2
1 52 52 .12
...
1 750 750 .43
... ... ...
  • ФИНАЛ: мне нужен график, на котором ось X будет представлять положение относительно центра (-250-е до +250-й позиции), а по оси Y будет средний балл. Поэтому я бы занял -250-ю позицию во всех своих интервалах (здесь у меня только 2 интервала) и усреднил бы эти результаты.
Пример то, что мне нужно, находится здесь:
Изображение

Чаще всего мне нужна помощь, чтобы перейти от шага 4 к шагу 5 наиболее эффективным способом (шаг 4 не требует много времени, а шаг 5 — в зависимости от того, как я сейчас пишу свой код).
Этот код работает отлично, но он слишком медленный.
def get_postional_avgs(promoter_df):
promoter_df['center'] = (promoter_df['Start'] + promoter_df['End']) // 2

# Calculate window start and end
promoter_df['window_start'] = promoter_df['center'] - 250
promoter_df['window_end'] = promoter_df['center'] + 250

# Prepare a new DataFrame for conservation score requests
conservation_intervals = promoter_df[['Chromosome', 'window_start', 'window_end']]
conservation_intervals.columns = ['Chromosome', 'Start', 'End'] #create a new start/end

# Retrieve base-level conservation scores
base_level_scores = get_base_scores(conservation_intervals)

# Initialize a DataFrame to hold average scores
average_scores = []

for index, row in promoter_df.iterrows():
center = row['center']

# Extract scores for the current cCRE
scores_for_cCRE = base_level_scores[
(base_level_scores['Chromosome'] == row['Chromosome']) &
(base_level_scores['Start'] >= (center - 250)) &
(base_level_scores['End']

Подробнее здесь: https://stackoverflow.com/questions/790 ... al-windows
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»