数据挖掘 | SQL应用

蛋白酶概述

何为蛋白酶

蛋白酶,也称多肽酶、蛋白水解酶。是水解蛋白质或多肽中氨基酸之间肽键的酶,可在肽链中的特定位置将肽链切断

何为底物

酶所作用的分子,即被酶切断的多肽或蛋白质,称为底物

蛋白酶在生物体内有何重要作用

  • 使蛋白质功能激活或失活
  • 内分泌
  • 信号通路
  • 消化
  • 蛋白质降解
  • 免疫
  • 细胞凋亡
  • 很多疾病的致病过程

何为蛋白酶对底物的专一性

蛋白酶在水解蛋白质时,不同蛋白酶对底物的作用部位不同。这种蛋白酶对切点的特异性要求叫做蛋白酶的底物专一性。如胃蛋白酶要求切点两端有芳香族氨基酸,胰蛋白酶要求切点的羧基侧为碱性氨基酸(精氨酸、赖氨酸),枯草杆菌碱性蛋白酶要求切点的羧基侧为疏水性芳香族氨基酸( 色氨酸、酪氨 酸、苯丙氨酸)

何为底物上的P1位点

数据挖掘 | SQL应用_第1张图片

酶切位置位于P1位点之后

本项目主要研究内切酶

  • 内肽酶(内切酶)从肽链的中间切断肽链,产生长度较短的短肽片段。
  • 外肽酶(外切酶)从肽链的两端切断肽链,产生两个氨基酸组成的二肽,或产生单个氨基酸。
  • 在本项目中,我们只研究内切酶

数据来源和数据前处理

蛋白酶数据库MEROPS

  • 网址为 https://www.ebi.ac.uk/merops/
  • 此数据库收录了全世界所有已知的多肽酶,及其底物的酶切位点信息。在数据库中,为每个蛋白酶都分配了一个唯一的编号(Peptidase Code),如A01.001、A01.009、C01.032、M10.001、S01.151等。编号前的字母代表了酶的催化类型,后面的数字代表了酶所属的家族以及在家族中的编号。在数据库中同时也存储了酶的所有已知底物(蛋白序列)及其中所能被酶切的位置。本项目就是从该数据库中获得的数据

数据挖掘 | SQL应用_第2张图片

数据前处理

  • 从MEROPS数据库中下载目前所有已知的蛋白酶及其已知的底物酶切位点
  • 去除底物过少或其酶切位点过少的酶;
  • 同种酶的所有底物蛋白的氨基酸序列经过序列比对,去除相似度大于25%的序列;即如果其中有一批序列彼此很相似(相似度大于25%),则只从这批序列中选择一条序列作为代表,其他序列都删除
  • 最终收集数据——这些将作为本项目分析的数据源:l92种不同的蛋白酶、l6,421条底物蛋白质分子(包含序列)、l28,059个酶切位点

基于access平台实现蛋白酶数据库的构建

创建氨基酸信息表AAs

  • 氨基酸信息表包含AASingleChar(氨基酸单字母名称 )、AAThreeChar(氨基酸三字母名称 )、AAFullName(氨基酸完整英文名称 )、AAChinese(氨基酸中文名称 )、HydroEisen(Eisenberg疏水值)五列,主键为氨基酸单字母名称

创建蛋白质底物的酶切位点信息表CleaProts

  • 蛋白质底物的酶切位点信息表包含PepCode(酶ID(MEROPS编号))、UniprotID(底物蛋白质ID)、P1(酶切的P1位置)、CleavageType(酶切类型)四列,主键由酶ID、底物蛋白质ID、酶切的P1位置共同构成

创建作业任务分配表HomeWorkStuPeps

  • 作业任务分配表包含StuID(学号)、PepCode(酶ID(MEROPS编号) )两列,主键由这两列共同构成

创建酶信息表PepInfos

  • 酶信息表包含PepCode(酶ID(MEROPS编号))、PeptidaseName(酶名称)、PeptidaseDescrip(酶的有关描述)三列,主键为酶ID

创建底物蛋白质序列表ProtSeqs

一种避免复制粘贴的创建方式——导入方式
  • 数据挖掘 | SQL应用_第3张图片
  • 底物蛋白质序列表由UniprotID(底物蛋白质ID)、SpTr(数据库来源类型)、UniprotEntryName(在Uniprot数据库中的名称)、ProteinName( 蛋白质名称)、Organism( 蛋白质来源物种)、GeneName( 对应的编码基因)、Seq( 氨基酸序列)七列组成,主键为底物蛋白质ID
  • 值得注意的是,氨基酸序列的数据类型必须为备注类型。因为氨基酸序列的字符串长度可多于255,而文本型最大只能保存长度为255的字符串

通过查询创建新表TrainTestSets

  • CleaProts表包含PepCode和UniprotID( 酶和对应底物蛋白)这些信息,然而由于一种酶在一种底物蛋白上有多个P1酶切位点,因此只看这两列信息的话,会存在重复。
  • 由于信息存在重复,所以使用DISTINCT语句,去除重复信息。 又因为这一信息将来要被经常反复使用,所以为了提高效率,使用INTO语句将查询的结果生成一张新的基本表——TrainTestSets
SELECT  DISTINCT  PepCode,  UniprotID
INTO  TrainTestSet
FROM  CleaProts 
ORDER  BY  PepCode,  UniprotID
修改TrainTestSets表的设计
  • 设置已存在的两个字段为主键,然后增加一列:TrainTest

数据挖掘 | SQL应用_第4张图片

划分训练集和测试集

  • 在数据分析中,为了后续数据挖掘的需要,会把样本集划分训练集和测试集。训练集用于用于完成训练过程,使计算机总结规则和经验;测试集用于完成测试过程,获得测试准确率,以判断计算机总结的规律经验的准确性。
  • 值得注意的是,在划分时要以底物蛋白(而非酶切位点)为最小单位。对于同一种酶,在它的一个底物蛋白中可有多个酶切位点;我们不应以酶切位点为最小单位划分训练集和测试集,而应以“一种酶+一种底物蛋白”为最小单位。数据挖掘 | SQL应用_第5张图片
  • 在TrainTest表中进行划分:

首先新建并执行以下查询,将新列 TrainTest 的值全部设置为1,即先全设为训练集:

UPDATE  TrainTestSets

SET  TrainTest=1

然后导入表Test来存储测试集的样本

数据挖掘 | SQL应用_第6张图片
最后,在TrainTestSets表中:将应属于测试集的“酶+底物”样本置TrainTest值为2

UPDATE     TrainTestSets, Tests
SET     TrainTestSets.TrainTest=2
WHERE     TrainTestSets.PepCode=Tests.PepCode AND
     TrainTestSets.UniprotID=Tests.UniprotID
新建查询 ViewSiteTrainTestSets

TrainTestSets表给出了“一种酶+一种底物”属于训练集或测试集。我们进一步使用查询ViewSiteTrainTestSets,以给出每一个酶切位点属于训练集或测试集。

SELECT  CleaProts.PepCode, CleaProts.UniprotID, P1, CleavageType, TrainTest

FROM  CleaProts, TrainTestSets

WHERE  CleaProts.PepCode =TrainTestSets.PepCode  AND  CleaProts.UniprotID = TrainTestSets.UniprotID;

创建/绘制数据库关系图

数据挖掘 | SQL应用_第7张图片

创建关系后,数据表可形成嵌套表格的效果,方便查看

蛋白酶和底物的数据统计

  • 使用查询ViewSubsCounts统计各酶的底物蛋白数、酶切位点数
   

SELECT  T1.PepCode, T1.蛋白底物数, T2.蛋白底物的酶切位点数

FROM

(SELECT PepCode, COUNT(*) AS 蛋白底物数 FROM

 ( SELECT DISTINCT PepCode, UniprotID FROM CleaProts  )

GROUP BY PepCode

) AS  T1

,

(SELECT PepCode, COUNT(*) AS 蛋白底物的酶切位点数

 FROM CleaProts

GROUP BY PepCode

) AS  T2

WHERE  T1.PepCode = T2.PepCode
预统计每个酶分别在训练集、测试集中,都分别有多少个蛋白质底物、多少个酶切位点
  • 求训练集中蛋白质底物数,保存为查询 ProteinsTrain

SELECT PepCode, COUNT(*) AS  训练集蛋白底物数

FROM  TrainTestSets

WHERE  TrainTest=1

GROUP BY PepCode
  • 求测试集中蛋白质底物数,保存为查询 ProteinsTest
   

SELECT PepCode, COUNT(*) AS  测试集蛋白底物数

FROM TrainTestSets

WHERE TrainTest=2

GROUP BY PepCode
  • 求训练集中酶切位点数,保存为查询 SitesTrain
   

SELECT  PepCode, COUNT(*) AS  训练集酶切位点数

FROM ViewSiteTrainTestSets

WHERE  TrainTest=1

GROUP BY PepCode
  • 求测试集中酶切位点数,保存为查询 SitesTest
   

SELECT PepCode, COUNT(*) AS  测试集酶切位点数

FROM ViewSiteTrainTestSets

WHERE TrainTest=2

GROUP BY PepCode
  • 组合以上查询,获得最终数据统计结果
SELECT
ViewSubsCounts.*, ProteinsTrain.训练集底物蛋白数,
ProteinsTest.测试集底物蛋白数,SitesTrain.训练集酶切位点数,
SitesTest.测试集酶切位点数
FROM ViewSubsCounts,
( SELECT PepCode,COUNT(*) AS 训练集底物蛋白数
FROM TrainTestSets 
WHERE TrainTest=1
GROUP BY PepCode
) AS ProteinsTrain,
( SELECT PepCode,COUNT(*) AS 测试集底物蛋白数
FROM TrainTestSets
WHERE TrainTest=2
GROUP BY PepCode
) AS ProteinsTest,
( SELECT PepCode,COUNT(*) AS 训练集酶切位点数
FROM ViewSiteTrainTestSets
WHERE TrainTest=1
GROUP BY PepCode
) AS SitesTrain ,
( SELECT PepCode,COUNT(*) AS 测试集酶切位点数
FROM ViewSiteTrainTestSets
WHERE TrainTest=2
GROUP BY PepCode
) AS SitesTest
WHERE
ViewSubsCounts.PepCode = ProteinsTrain.PepCode AND
ProteinsTrain.PepCode = ProteinsTest.PepCode AND
ProteinsTest.PepCode = SitesTrain.PepCode AND
SitesTrain.PepCode = SitesTest.PepCode
ORDER BY ViewSubsCounts.PepCode
  • 将数据结果导出,转换为Word表格形式写在Word文档中

数据挖掘 | SQL应用_第8张图片

蛋白酶底物专一性的统计分析

获得各酶切情况的底物氨基酸序列

CleaProts表列出了各酶的底物的酶切位点位置P1,但没有氨基酸序列。因此与ProtSeqs表做连接查询,获得每种酶切情况的底物氨基酸序列,借助这个查询进一步获得各酶切情况的酶切位点附近氨基酸(此查询省略也对整体无妨,只是为了较为连贯的理解下一个查询)

   

SELECT CleaProts.*, Seq

FROM CleaProts, ProtSeqs

WHERE CleaProts.UniprotID = ProtSeqs.UniprotID

获得各酶切情况的酶切位点附近氨基酸

  • 借助ViewPepAAs查询获得P1位置的氨基酸、前一个氨基酸、后一个氨基酸
   

SELECT CleaProts.*, Seq, MID(Seq, P1-1, 1)  AS  PreAA,

 MID(Seq, P1, 1)  AS  P1AA, MID(Seq, P1+1, 1)  AS  NextAA

FROM CleaProts, ProtSeqs

WHERE CleaProts.UniprotID  = ProtSeqs.UniprotID  AND P1>1
  • MID()函数:截取字符串中间的一部分。MID(字符串, 从第几个字符开始截取, 共截取几个字符) (参数3不是截取到第几个)

例如: MID("abcde", 3, 2)获得"cd",MID("abcde", 4, 1)获得"d"

  • 查询自己的作业任务,得到要分析的三种酶S08.073、C02.002、S01.153
SELECT * 
FROM  HomeWorkStuPeps  
WHERE StuID='3019244229'

P1及前后1个位点的氨基酸种类的统计分析(以S08.073为例)

  • 针对某一种酶,对其能切断底物的P1位点、以及P1前、后位点的氨基酸种类进行统计分析,可探查该种酶对底物酶切的专一性。
P1前一位点氨基酸种类的统计分析

使用查询 ViewPreCountsTemp 统计S08.073这一种酶所有底物的P1前一位点的氨基酸种类

SELECT PreAA, COUNT(*) AS  PreCount

FROM ViewPepAAs

WHERE  PepCode="S08.073"

GROUP BY PreAA

然而以上查询有一个问题,即如果某种氨基酸在该位置上没有出现,则查询结果中也没有这种氨基酸。而需要在这种情况下能显示为0,而不是在结果中不存在。所以执行以下集合查询 ViewPreCounts,求两个查询的并集

   

SELECT * FROM

ViewPreCountsTemp

UNION

SELECT AAs.AASingleChar, 0

FROM ViewPreCountsTemp RIGHT JOIN AAs ON ViewPreCountsTemp.PreAA = AAs.AASingleChar

WHERE PreAA  IS NULL
P1位点氨基酸种类的统计分析

查询 ViewP1CountsTemp

SELECT P1AA, COUNT(*) AS  P1Count

FROM ViewPepAAs

WHERE PepCode="S08.073"

GROUP BY P1AA

查询 ViewP1Counts

   

SELECT * FROM

ViewP1CountsTemp

UNION

SELECT AAs.AASingleChar, 0

FROM ViewP1CountsTemp RIGHT JOIN AAs ON ViewP1CountsTemp.P1AA = AAs.AASingleChar

WHERE P1AA  IS NULL
P1后一位点氨基酸种类的统计分析

查询 ViewNextCountsTemp

   

SELECT NextAA, COUNT(*) AS  NextCount

FROM ViewPepAAs

WHERE PepCode="S08.073"

GROUP BY NextAA

查询 ViewNextCounts

   

SELECT * FROM

ViewNextCountsTemp

UNION

SELECT AAs.AASingleChar, 0

FROM ViewNextCountsTemp  RIGHT JOIN AAs ON ViewNextCountsTemp.NextAA = AAs.AASingleChar

WHERE NextAA  IS NULL

综合结果:酶切位点附近的氨基酸种类的统计分析

将上述三个查询组合起来, 将Count转换为百分比

SELECT     ViewPreCounts.PreAA  AS  AA, 
     PreCount  / (SELECT SUM(PreCount)  FROM ViewPreCounts ) AS PreRatio, 
            P1Count  / (SELECT SUM(P1Count) FROM ViewP1Counts ) AS P1Ratio, 
            NextCount  / (SELECT SUM(NextCount) FROM ViewNextCounts ) AS NextRatio
FROM     ViewPreCounts,  ViewP1Counts,  ViewNextCounts
WHERE      ViewPreCounts.PreAA = ViewP1Counts.P1AA  AND
     ViewP1Counts.P1AA = ViewNextCounts.NextAA

对三种蛋白酶的底物酶切位置的氨基酸偏好分析结论

对蛋白酶S01.161的底物酶切位置的氨基酸偏好分析结论

数据挖掘 | SQL应用_第9张图片
S01.161这种酶,更多地倾向于在精氨酸(R)后切断蛋白底物,对精氨酸(R)后的肽键具有较强专一性;少数情况下,也可能在其他氨基酸的肽键后切断底物。而对精氨酸(R)前后1个位置的氨基酸种类偏好性并不明显。

对蛋白酶C02.002的底物酶切位置的氨基酸偏好分析结论

数据挖掘 | SQL应用_第10张图片
C02.002这种酶,对P1位置及其后一个位置的氨基酸种类偏好性并不明显。对于P1的前一个位置,对L有更强的专一性。

对蛋白酶S01.153的底物酶切位置的氨基酸偏好分析结论

数据挖掘 | SQL应用_第11张图片
S01.153这种酶,对P1位置及其前后位置的氨基酸种类偏好性均不明显

你可能感兴趣的:(sql,数据库,数据挖掘)