Kodomo

User

Учебная страница курса биоинформатики,
год поступления 2012

Визуализация данных средствами Python.

Самый наглядный способ анализировать данные – тем или иным способом их нарисовать и посмотреть что получилось. Для этого в Python есть пакет matplotlib (документация находится по адресу http://matplotlib.org/contents.html, который содержит много различных видов графиков. Для начала работы с графиками необходимо импортировать набор функции из пакета matplotlib:

import matplotlib.pyplot as plt

plt.plot(x,y) – рисуем набор точек (x,y). В нашем случае x, y – два числовых списка одинаковой длины, по умолчанию соседние точки списка соединены линией. plt.show() – показать объект. Простейший график:

import matplotlib.pyplot as plt
y=[1,4,9,2,6]
plt.plot(y)
plt.show()

Случайное блуждание:

import matplotlib.pyplot as plt
import argparse, sys, random, math

parser=argparse.ArgumentParser()
parser.add_argument('-n', dest='n', type=int, default=100)
parser.add_argument('--sigma', dest='sigma', type=float, default=1)
options=parser.parse_args()

x=list()
y=list()
value=0
for i in range(1,options.n):
        value=value+random.gauss(0,options.sigma)
        x.append(i)
        y.append(value)
        
plt.plot(x,y)
plt.show()

К графику можно добавить информацию, например подпись осей, название графика, текст, изменить область осей и многое другое. Добавим к нашему пример:

plt.plot(x,y,linewidth=1,color=[random.random(),random.random(),random.random()])
plt.xlabel("step")
plt.ylabel("value")
plt.title("Brownian motion")
boundary=2*options.sigma*math.sqrt(options.n)
plt.axis( [1,options.n,-boundary,boundary] )
plt.text(options.n/2, boundary/2, "sigma: "+str(options.sigma))
plt.grid()
plt.show()

Также можно менять тип линий, цвет, толщину и т.д. Добавим к нашему примеру много разных линий разного цвета с помощью параметра color.

import matplotlib.pyplot as plt
import argparse, sys, random, math

parser=argparse.ArgumentParser()
parser.add_argument('-n', dest='n', type=int, default=100)
parser.add_argument('--sigma', dest='sigma', type=float, default=1)
parser.add_argument('--runs', dest='runs', type=int, default=1)

options=parser.parse_args()

for j in range(0,options.runs):
        x=list()
        y=list()
        value=0
        for i in range(1,options.n):
                value=value+random.gauss(0,options.sigma)
                x.append(i)
                y.append(value) 
        plt.plot(x,y,linewidth=1,color=[random.random(),random.random(),random.random()],label=str(j))
plt.xlabel("step")
plt.ylabel("value")
plt.title("Brownian motion")
boundary=4*options.sigma*math.sqrt(options.n)
plt.axis( [1,options.n,-boundary,boundary] )
plt.text(options.n/2, boundary/2, "sigma: "+str(options.sigma))
plt.grid()
plt.legend(fontsize=8,loc="best")
plt.show() 

Scatter plot изображает набор точек на плоскости. Например, для каждого участка генома длинной 50000 нк запишем два числа – скорость мутирования этого участка и время его репликации. Тогда функция scatter(…) построит scatter plot:

import matplotlib.pyplot as plt
import math

fin=open("mutation.txt","r")
rate=list()
timing=list()
gc_state=list()
for line in fin:
        elements=line.split(' ')
        rate.append( float(elements[0]) )
        timing.append( float(elements[1]) )
        gc_state.append( elements[2] )
plt.scatter(timing,rate,s=1)
plt.xlabel("replication timing")
plt.ylabel("mutation rate")
plt.title("mutation rate is lined to replication timing")
plt.ylim((0.002,0.01))
plt.show()

Можно изменять размер, вид и цвет точек. У каждого участка генома дополнительно рассмотрим его GC-состав (классифицируем его на низкий, средний и высокий) и раскрасим точки в соответствии с GC-составом:

import matplotlib.pyplot as plt
import math
fin=open("mutation.txt","r")
rate=list()
timing=list()
gc_state=list()
mp={ "low": "red", "medium": "white", "high": "green" }  
col=list()
for line in fin:
        elements=line.split()
        rate.append( float(elements[0]) )
        timing.append( float(elements[1]) )
        gc_state.append( elements[2] )
        col.append( mp[elements[2]] )
plt.scatter(timing,rate,s=30,c=col)
plt.xlabel("replication timing")
plt.ylabel("mutation rate")
plt.title("mutation rate is lined to replication timing")
plt.ylim((0.002,0.01))
plt.show()

Другой полезный класс графиков – гистограмма. Представим, что нам дан набор последовательностей в fasta формате, какие характерные длины у этих последовательностей? Для этого используется функция hist(…):

plt.hist(sizes, bins=20)

2012/4/Python/12/Record (last edited 2014-04-21 19:54:09 by stavrovskaya)