1. 生物信息學入門書籍推薦
生物信息學參考書籍(入門級) 1、 David W.Mount 《Bioinformatics sequence and genome analysis》影印本,科學出版社,2002 2、 Durbin R,Eddy S,Krogh A,et al.生物序列分析,蛋白質和核酸的概率論模型[M].北京清華大學出版社,2002 3、 帕夫納,計算分子生物學 演算法逼近,化學工業出版社,2004 4、 (巴西) J.塞圖寶,J.梅丹尼斯著,朱浩 等譯,計算分子生物學導論 ,科學出版社,2003 5、 Masatoshi Nei(根井正利) Sudhir Kumar. 譯者:呂寶忠,鍾揚,高莉萍,高等教育出版社,2002 6、 [美][巴森文尼斯]Andreas D.Baxevanis,[美]B.F.Francis Ouellette著;李衍達,孫之榮等譯,生物信息學基因和蛋白質分析 的實用指南,,清華大學出版社, 2000 7、 鮑爾迪,DNA晶元和基因表達從實驗到數據分析與模建,科學出版社,2003 8、 (美)利布萊爾,蛋白質組學導論:生物學的新工具,科學出版社,2005 9、 張亮,M.謝納[美] ,生物晶元分析,科學出版社,2004 10、 盧因,基因VⅢ,科學出版社,2005 11、 (英)D.R.韋斯特海德(D.R. Westhead)等著;王明怡等譯, 生物信息學,科學出版社 2004 12、 (法)皮埃爾·巴爾迪(Pierre Baldi),(丹)索恩·布魯納克(Soren Brunak)著;張東暉等譯,生物信息學:機器學 習方法,中信出版社,2003 13、 (美)Cyntbia Gibas,Per Jambecks著;孫超等譯 《生物信息學中的計算機技術》中國電力出版社,2002 14、 (美) Dan E. Krane, Michael L. Raymer著, 孫嘯,陸祖宏,謝建明 等譯,生物信息學概論, 清華大學出版社2004 15、 (加)S.米塞諾, (美)S.A.克拉維茨著;歐陽紅生, 阮承邁, 李慎濤等譯,生物信息學方法指南,科學出版社, 2005 16、 孫之榮 主譯 探索基因組學、蛋白質組學和生物信息學(中譯版) , 科學出版社, 2004年8月出版 17、 哈特爾,遺傳學基因與基因組分析,科學出版社,2002 18、 生物信息學若干前沿問題的探討:中國科協第81次青年科學家論壇論文集/黃德雙等主編, 中國科學技術大學出版社 2004 19、 胡松年 , 薛慶中 主編,《基因組數據分析手冊》浙江大學出版社, 2003 20、 胡松年 ,基因表達序列標簽(EST)數據分析手冊,浙江大學出版社, 2005。
2. 生物信息學一些基本的常用軟體有哪些
必學:1、計算機基礎(linux+perl+R 或者 python+matlab)
2、生信基礎知識(測序+資料庫+數據格式)
3、生信研究領域(全基因組,全轉錄組,全外顯子組,捕獲目標區域測序)
4、生信應用領域(腫瘤篩查,產前診斷,流行病學,個性化醫療)
分而治之:
一、計算機基礎,需要看三本書,一步步的學會學通,不需要刻意去找哪個書,一般linux是鳥哥私房菜,perl是小駱駝咯,R是R in action,但是看一本書只能入門,真正想成為菜鳥,必須每個要看五本書以上!我雲盤裡面有這基本上的高清列印版,大家可以去淘寶列印一下才幾十塊錢還包郵,對書比較講究的也可以買正版,也不過是一百多塊錢而已!
二、生信基礎知識,測序方面,在網路文庫找十幾篇一代二代三代測序儀資料仔細研讀,然後去優酷下載各大主流測序儀的動畫講解,再看看陳巍學基因的講解;資料庫先看看三大主流資料庫——NCBI,ENSEMBL,UCSC,還有一些也可以了解一些(uniprot,IMGT,KEGG,OMIN,TIGR,GO)同樣也是網路文庫自己搜索資料,但是這次需要自己去官網一個個頁面點擊看,一個個翻譯成中文理解吃透;數據格式講起了就多了,這個主要是在項目流程中慢慢學,或者你有機會去上課,不然你看來也是立馬忘記的,主要有sam,vcf,fasta,fastq,bed,gtf,gff,genbank,ensembl,psl等等
三、生信研究領域,各個領域主要是軟體繁多,合起來常用的估計有上百個軟體了,一般只有從業五六年以上的人才有可能把它們全部用過一遍,而且這也完全需要項目來訓練,而不能僅僅是看看軟體手冊,但是研究領域最重要的是背後的原理,需要看各大牛的綜述。
a) 生信基礎軟體(blast++套件,fastqc,flash,blast,solexaQA,NGS-QC-toolkit,SRA-toolkit,fastx-toolkit)
b) snp-calling相關軟體(bwa,bowtie,samtools,GATK,VarScan.jar,annovar)
c) 基因組相關軟體(velvet,SOAPdenovo2,repeatmasker,repeatscount,piler,orthMCL,inparanoid,clustw,muscle,MAFFT,quickparanoid,blast2go,RAxML,phyML)
d) 轉錄組相關軟體(trinity,tophat,cufflinks,RseQC,RNAseq,GOseq,MISO,RSEM,khmer,screed,trimmomatic,transDecoder,vast-tools,picard-tools,htseq,cuffdiff,edgeR,DEseq,funnet,davidgo,wego,kobas,KEGG,Amigo,go)
1 mysql存儲大容量的二進制文件的格式是longblob ,其實除了圖片還可以存別的
CREATE TABLE `abc`.`images` (
`name` varchar(10) NOT NULL,
`chang` int(10) unsigned NOT NULL,
`content` longblob NOT NULL,
PRIMARY KEY (`name`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
2 要向資料庫存儲二進制的文件一定要把要存儲的數據轉換成二進制流
廢話就不多說了,大家看看代碼很容易明白,先來看一個app程序,當然首先您要在資料庫中先建立一個用於保存圖片的表和相應的列,
數據格式為blob
package com.lizhe;
import java.io.*;
import java.sql.*;
public class PutImg {
public void putimg() {
try {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url = "jdbc:mysql://localhost/img?user=root&password=root&useUnicode=true&characterEncoding=gbk";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
//stmt.execute("insert into imgt (id) values (5)");
stmt.close();
PreparedStatement pstmt = null;
String sql = "";
File file = new File("c:\\blog.jpg");
InputStream photoStream = new FileInputStream(file);
//sql = " UPDATE imgt SET img = ? ";
sql = "INSERT INTO imgtable (img) VALUES (?)";
pstmt = conn.prepareStatement(sql);
pstmt.setBinaryStream(1, photoStream, (int) file.length());
pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]){
PutImg pi=new PutImg();
pi.putimg();
}
}
InputStream photoStream = new FileInputStream(file);
可以很清楚的看到我們首先把一個圖片文件(當然也可以是別的什麼文件)轉換成了一個二進制輸入流
pstmt.setBinaryStream(1, photoStream, (int) file.length());
這個方法建議大家去查一下API文檔,第一個參數是通配符位置沒的說,第二個參數是流,這和以往的string類型的參數不太一樣,
我剛看到的時候也覺得豁然開朗了,但是到這里還沒完,不同於以往的字元串參數,這里我們還需要第三個參數來設置這個流的長度,
這里也就是這個文件的長度,導出資料庫中的sql,一切都清楚了
INSERT INTO `m_diy` VALUES (2,?\0 JFIF\0 \0H\0H\0\0?? Exif\0\0MM\0*\0\0\0 \0 \0 \0\0\0 \0 \0\0 \0 \0\0\0 \0\0\0b
\0 \0\0\0 \0\0\0j (\0 \0\0\0 \0 \0\0 1\0 \0\0\0 \0\0\0r 2\0 \0\0\0 \0\0\0?i\0 \0\0\0 \0\0\0\0\0\0\0\0\0H\0\0\0
\0\0\0H\0\0\0 Adobe Photoshop CS Windows\02007:03:18 23:08:15\0\0\0\0\0 ?\0 \0\0\0 ??\0\0?\0 \0\0\0 \0\0\0? \0
........等等
其實就是將文件先轉換成了二進制的流,然後插入到了sql語言中,向資料庫寫入了很長很長的一段sql語句
然後我們再來寫一個app程序將這個文件讀出來,存儲成一個圖片文件
package com.lizhe;
import java.io.*;
import java.sql.*;
class GetImg {
private static final String URL = "jdbc:mysql://localhost/img?user=root&password=root&useUnicode=true&characterEncoding=gbk";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private File file = null;
public void blobRead(String outfile, int picID) throws Exception {
FileOutputStream fos = null;
InputStream is = null;
byte[] Buffer = new byte[4096];
try {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);
pstmt = conn.prepareStatement("select img from imgt where id=?");
pstmt.setInt(1, picID); // 傳入要取的圖片的ID
rs = pstmt.executeQuery();
rs.next();
file = new File(outfile);
if (!file.exists()) {
file.createNewFile(); // 如果文件不存在,則創建
}
fos = new FileOutputStream(file);
is = rs.getBinaryStream("img");
int size = 0;
while ((size = is.read(Buffer)) != -1) {
// System.out.println(size);
fos.write(Buffer, 0, size);
}
} catch (Exception e) {
System.out.println( e.getMessage());
} finally {
// 關閉用到的資源
fos.close();
rs.close();
pstmt.close();
conn.close();
}
}
public static void main(String[] args) {
try {
GetImg gi=new GetImg();
gi.blobRead("c:/getimgs/1.jpg", 5);
} catch (Exception e) {
System.out.println("[Main func error: ]" + e.getMessage());
}
}
}
這里需要注意的是
is = rs.getBinaryStream("img");
img是資料庫中相應的列名,其實和rs.getString()方法差不多,只不過這個方法是讀取二進制流的
最後在帖兩個bs系統上用的文件給大家參考
通過struts的action向資料庫寫入二進制圖片
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.lizhe.struts.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import com.lizhe.struts.form.UpimgForm;
/**
* MyEclipse Struts
* Creation date: 05-18-2007
*
* XDoclet definition:
* @struts.action path="/upimg" name="upimgForm" input="/userhomepage.jsp"
* @struts.action-forward name="userhome" path="/userhomepage.jsp" redirect="true" contextRelative="true"
*/
public class UpimgAction extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
* @throws IOException
* @throws FileNotFoundException
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException, IOException {
UpimgForm upimgForm = (UpimgForm) form;// TODO Auto-generated method stub
FormFile file=upimgForm.getFile();
InputStream is=file.getInputStream();
try {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url = "jdbc:mysql://localhost/blog?user=root&password=root&useUnicode=true&characterEncoding=gb2312";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
//stmt.execute("insert into img (id) values (5)");
stmt.close();
PreparedStatement pstmt = null;
String sql = "";
//File file = new File("c:\\blog.jpg");
//InputStream photoStream = new FileInputStream(file);
//sql = " UPDATE imgt SET img = ? ";
sql = "INSERT INTO img (img) VALUES (?)";
pstmt = conn.prepareStatement(sql);
pstmt.setBinaryStream(1, is, (int) file.getFileSize());
pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return mapping.findForward("userhomepage");
}
}
和app的方式幾乎是一樣的
第二個文件是通過jsp將資料庫中的圖片顯示在頁面上
這個有些不同
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.awt.*"%>
<html>
<body>
<%
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url="jdbc:mysql://localhost/img?user=root&password=root";
Connection con = DriverManager.getConnection(url);
String sql = "select * from imgt where id=5";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if(rs.next()) {
InputStream in = rs.getBinaryStream("img");
ServletOutputStream op = response.getOutputStream();
int len;
byte[] buf=new byte[1024];
while((len= in.read(buf))!=-1) {
op.write(buf, 0, len);
}
op.close();
in.close();
}
rs.close();
stmt.close();
con.close();
%>
</body>
</html>
4. iapp怎麼用代碼控制另一個界面的控制項
首先,你的圖片必須是以二進制輸入流的形式保存在資料庫中。 其實,從資料庫讀二進制保存的圖片的時候,就是存的一個逆過程,重新再生成一個圖片文件而已。 簡單給出下面的代碼,你研究研究。 import java.io.*; import java.sql.*; class GetImg { private static final String URL = "jdbc:mysql://localhost/img?user=root&password=root&useUnicode=true&characterEncoding=gbk"; private Connection conn = null; private PreparedStatement pstmt = null; private ResultSet rs = null; private File file = null; public void blobRead(String outfile, int picID) throws Exception { FileOutputStream fos = null; InputStream is = null; byte[] Buffer = new byte[4096]; try { Class.forName("org.gjt.mm.mysql.Driver").newInstance(); conn = DriverManager.getConnection(URL); pstmt = conn.prepareStatement("select img from imgt where id=?"); pstmt.setInt(1, picID); // 傳入要取的圖片的ID rs = pstmt.executeQuery(); rs.next(); file = new File(outfile); if (!file.exists()) { file.createNewFile(); // 如果文件不存在,則創建 }
5. 如何批量下載IMGT/HLA資料庫 的序列
首先到JGI主頁,選擇一個物種,然後用Key Words search,或者Blast,找到目的序列。點這個目的序列。會出現一排目錄,一個基因,一般是About this gene, Sequences,peptide Homologs, Gene Ancestry, Get Data,點Sequences就可以得到DNA,cDNA等。如果你想得到兩端更長序列,還可以在Show flanking sequence調 upstream和downstream,然後點Update sequence
6. 如何將資料庫中的圖片(二進制),讀出並顯示在界面的Image控制項[VB6.0]
摘 要 本文以VB6與Access97作為開發工具,介紹了圖像在資料庫中的存儲與顯示技術。
關鍵詞 資料庫,數據控制項,二進制,圖像存儲,圖像顯示,ADODB,Recordset
資料庫是數據管理的最新技術,是計算機科學的重要分支,是現代計算機信息系統和計算機應用的基礎和核心。在科學技術高速發展的今天,在信息資源無處不在、無處不用,已成為各部門的重要財富的時候,對於從事程序開發的人員來說顯得尤為重要。
如今,對資料庫的操作不僅僅滿足於對字元和數字的單一操作,圖像的存儲與顯示已顯得尤為重要。下面作者將以VB6.0與Access97作為開發工具,分別介紹兩種圖像顯示與存儲的方法。
利用數據控制項和數據綁定控制項
利用這種方法,不寫或寫少量代碼就可以構造簡單的資料庫應用程序,這種方法易於被初學者接受。在舉例之前,先把數據綁定功能簡要的說明一下,凡是具有DataSource屬性的控制項都是對數據敏感的,它們都能通過數據控制項直接使用資料庫里的數據。比如CheckBox Control , ComboBox Comtrol , TextBox Comtrol , PictureBox Control ,Image Comtrol … 因為這種方式涉及到的知識點比較少,也比較容易理解,不多作說明,現直接介紹編程步驟。
1、從資料庫中顯示所需要的圖片
首先,添加一個Data數據控制項,設置它的DatabaseName和RecordSource屬性,
strPath = App.Path
If Right(strPath, 1) <> "\" Then
strPath = strPath & "\"
MyData.DatabaseName = strPath & "ExampleDB.mdb" '資料庫存地址
MyData.RecordSource = "Info" '表名
第二步,添加Image控制項用來顯示圖片,設置它的DataSource和DataField屬性。例如本例中: Image1.DataSource="MyData"和Image1.DataField=" MyPhoto" 。然後設置其它具有數據綁定功能的控制項用來顯示所要的其它內容,經過這兩步的操作,運行程序就可以顯示你要的數據了。
2、向資料庫中添加需要存儲的圖片
首先,利用數據控制項所具有的AddNew屬性,添加一個按鈕,雙擊後添加如下代碼MyData.Recordset.AddNew
第二步,為Image控制項圖片指定圖片路徑Image1.Picture = LoadPicture("圖片路徑"),經過這兩步的操作,就可以向資料庫中添加圖片了。
這種方法最簡單快捷,要寫的代碼量很少。但是這種方法在運行速度和靈活性方面有一定的限制,適合於初學者和一些簡單的應用,要想靈活多變的顯示圖像,下面介紹的方法或許更適應您的要求。
利用編寫代碼實現圖片的存儲與顯示
這種方法相對於方法一來說,代碼量大,但是它操作靈活,能夠滿足多樣形式下的操作,受到更多編程者的青睞。但是涉及到的知識面相對要多一些,不僅要掌握資料庫的操作方法,還要二進制文件的讀寫作進一步的了解。關於資料庫及二進制文件的基本操作很多參考書上都介紹的比較詳細,需要時請查閱即可。在編程之前把本部分用到的變數說明如下:
Dim RS As New ADODB.Recordset
Dim Chunk() As Byte
Const ChunkSize As Integer = 2384
Dim DataFile As Integer, Chunks, Fragment As Integer
Dim MediaTemp As String
Dim lngOffset, lngTotalSize As Long
Dim i As Integer
1、從資料庫中顯示所需要的圖片
第一步首先打開資料庫,看有沒有要查找的內容,有則繼續執行,沒有就退出
RS.Source = "select * from Info Where Name='" & sparaName &"';"
RS.ActiveConnection = "UID=;PWD=;DSN=TestDB;"
RS.Open
If RS.EOF Then RS.cCose : Exit Sub
第二步,讀出長二進制數據即圖片數據,把它轉換成圖片文件,操作過程如下
MediaTemp = strPath & "picturetemp.tmp"
DataFile = 1
Open MediaTemp For Binary Access Write As DataFile
lngTotalSize = RS!MyPhoto.ActualSize
Chunks = lngTotalSize \ ChunkSize
Fragment = lngTotalSize Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = RS!MyPhoto.GetChunk(Fragment)
Put DataFile, , Chunk()
For i = 1 To Chunks
ReDim Chunk(ChunkSize)
Chunk() = RS!MyPhoto.GetChunk(ChunkSize)
Put DataFile, , Chunk()
Next i
Close DataFile
第三步,關閉資料庫,這樣就可以顯示所要的圖片了。
RS.Close
If MediaTemp = "" Then Exit Sub
Picture1.Picture = LoadPicture(MediaTemp)
If Picture1.Picture = 0 Then Exit Subj
2、向資料庫中添加需要存儲的圖片
向資料庫添加存儲的圖片是顯示圖片逆過程,只要掌握了顯示圖片的操作,存儲圖片的操作也就迎刃而解了,下面將操作步驟介紹如下
第一步首先打開資料庫,過程如下:
RS.Source = "select * from Info ;"
RS.CursorType = adOpenKeyset
RS.LockType = adLockOptimistic
RS.ActiveConnection = "UID=;PWD=;DSN=TestDB;"
RS.Open
第二步,把要存儲的圖片轉換成二進制長文件存入資料庫中,操作過程如下
RS.AddNew
DataFile = 1
Open strPathPicture For Binary Access Read As DataFile
FileLen = LOF(DataFile) ' 文件中數據長度
If FileLen = 0 Then : Close DataFile : RS.Close : Exit Sub
Chunks = FileLen \ ChunkSize
Fragment = FileLen Mod ChunkSize
ReDim Chunk(Fragment)
Get DataFile, , Chunk()
RS!MyPhoto.AppendChunk Chunk()
ReDim Chunk(ChunkSize)
For i = 1 To Chunks
Get DataFile, , Chunk()
RS!MyPhoto.AppendChunk Chunk()
Next i
Close DataFile
第三步,更新紀錄後,關閉資料庫,就完成了數據圖片到資料庫的存儲。
RS.Update
RS.Close
Set RS = Nothing
兩種方法在使用方面各有所長,讀者可以針對自己的情況做出合理的選擇。
方法很容易實現的.和樓上的不太一樣.