Учебная страница курса биоинформатики,
год поступления 2012
Визуализация данных средствами Python.
Самый наглядный способ анализировать данные – тем или иным способом их нарисовать и посмотреть что получилось. Для этого в Python есть пакет matplotlib (документация находится по адресу http://matplotlib.org/contents.html, который содержит много различных видов графиков. Для начала работы с графиками необходимо импортировать набор функции из пакета matplotlib:
1 import matplotlib.pyplot as plt
plt.plot(x,y) – рисуем набор точек (x,y). В нашем случае x, y – два числовых списка одинаковой длины, по умолчанию соседние точки списка соединены линией. plt.show() – показать объект. Простейший график:
Случайное блуждание:
1 import matplotlib.pyplot as plt
2 import argparse, sys, random, math
3
4 parser=argparse.ArgumentParser()
5 parser.add_argument('-n', dest='n', type=int, default=100)
6 parser.add_argument('--sigma', dest='sigma', type=float, default=1)
7 options=parser.parse_args()
8
9 x=list()
10 y=list()
11 value=0
12 for i in range(1,options.n):
13 value=value+random.gauss(0,options.sigma)
14 x.append(i)
15 y.append(value)
16
17 plt.plot(x,y)
18 plt.show()
К графику можно добавить информацию, например подпись осей, название графика, текст, изменить область осей и многое другое. Добавим к нашему пример:
1 plt.plot(x,y,linewidth=1,color=[random.random(),random.random(),random.random()])
2 plt.xlabel("step")
3 plt.ylabel("value")
4 plt.title("Brownian motion")
5 boundary=2*options.sigma*math.sqrt(options.n)
6 plt.axis( [1,options.n,-boundary,boundary] )
7 plt.text(options.n/2, boundary/2, "sigma: "+str(options.sigma))
8 plt.grid()
9 plt.show()
Также можно менять тип линий, цвет, толщину и т.д. Добавим к нашему примеру много разных линий разного цвета с помощью параметра color.
1 import matplotlib.pyplot as plt
2 import argparse, sys, random, math
3
4 parser=argparse.ArgumentParser()
5 parser.add_argument('-n', dest='n', type=int, default=100)
6 parser.add_argument('--sigma', dest='sigma', type=float, default=1)
7 parser.add_argument('--runs', dest='runs', type=int, default=1)
8
9 options=parser.parse_args()
10
11 for j in range(0,options.runs):
12 x=list()
13 y=list()
14 value=0
15 for i in range(1,options.n):
16 value=value+random.gauss(0,options.sigma)
17 x.append(i)
18 y.append(value)
19 plt.plot(x,y,linewidth=1,color=[random.random(),random.random(),random.random()],label=str(j))
20 plt.xlabel("step")
21 plt.ylabel("value")
22 plt.title("Brownian motion")
23 boundary=4*options.sigma*math.sqrt(options.n)
24 plt.axis( [1,options.n,-boundary,boundary] )
25 plt.text(options.n/2, boundary/2, "sigma: "+str(options.sigma))
26 plt.grid()
27 plt.legend(fontsize=8,loc="best")
28 plt.show()
Scatter plot изображает набор точек на плоскости. Например, для каждого участка генома длинной 50000 нк запишем два числа – скорость мутирования этого участка и время его репликации. Тогда функция scatter(…) построит scatter plot:
1 import matplotlib.pyplot as plt
2 import math
3
4 fin=open("mutation.txt","r")
5 rate=list()
6 timing=list()
7 gc_state=list()
8 for line in fin:
9 elements=line.split(' ')
10 rate.append( float(elements[0]) )
11 timing.append( float(elements[1]) )
12 gc_state.append( elements[2] )
13 plt.scatter(timing,rate,s=1)
14 plt.xlabel("replication timing")
15 plt.ylabel("mutation rate")
16 plt.title("mutation rate is lined to replication timing")
17 plt.ylim((0.002,0.01))
18 plt.show()
Можно изменять размер, вид и цвет точек. У каждого участка генома дополнительно рассмотрим его GC-состав (классифицируем его на низкий, средний и высокий) и раскрасим точки в соответствии с GC-составом:
1 import matplotlib.pyplot as plt
2 import math
3 fin=open("mutation.txt","r")
4 rate=list()
5 timing=list()
6 gc_state=list()
7 mp={ "low": "red", "medium": "white", "high": "green" }
8 col=list()
9 for line in fin:
10 elements=line.split()
11 rate.append( float(elements[0]) )
12 timing.append( float(elements[1]) )
13 gc_state.append( elements[2] )
14 col.append( mp[elements[2]] )
15 plt.scatter(timing,rate,s=30,c=col)
16 plt.xlabel("replication timing")
17 plt.ylabel("mutation rate")
18 plt.title("mutation rate is lined to replication timing")
19 plt.ylim((0.002,0.01))
20 plt.show()
Другой полезный класс графиков – гистограмма. Представим, что нам дан набор последовательностей в fasta формате, какие характерные длины у этих последовательностей? Для этого используется функция hist(…):
1 plt.hist(sizes, bins=20)