如何从文件中读取两行并在 for 循环中创建动态键?

2023-12-06

在以下数据中,我尝试运行一个简单的马尔可夫模型。

假设我有一个具有以下结构的数据:

pos   M1  M2  M3  M4  M5  M6  M7  M8  hybrid_block    S1    S2    S3    S4  S5  S6  S7  S8
1     A   T   T   A   A   G   A   C       A|C         C     G     C     T    T   A   G   A
2     T   G   C   T   G   T   T   G       T|A         A     T     A     T    C   A   A   T
3     C   A   A   C   A   G   T   C       C|G         G     A     C     G    C   G   C   G
4     G   T   G   T   A   T   C   T       G|T         C     T     T     T    A   T   C   T 

Block M表示来自一组类别的数据,也是如此block S.

数据是strings它们是通过沿位置线连接字母而成的。所以M1 的字符串值为 A-T-C-G,对于其他每个块也是如此。

还有一个hybrid block它有两个以相同方式读取的字符串。问题是我想找到混合块中的哪个字符串最有可能来自哪个块(M 与 S)?

我正在尝试建立一个马尔可夫模型,它可以帮助我识别哪个字符串hybrid block来自哪些街区。在这个例子中我可以说混合块 ATCG来自block M and CAGT来自block S.

我将问题分解为不同的部分读取和挖掘数据:

问题级别 01:

  • 首先,我阅读第一行(标题)并创建unique keys对于所有列。
  • 然后我读了第二行(pos有价值1)并创建另一个密钥。在同一行中,我读取了值hybrid_block并读取其中的字符串值。这pipe |只是一个分隔符,所以有两个字符串index 0 and 2 as A and C。所以,我想要从这条线上得到的只是

defaultdict(<class 'dict'>, {'M1': ['A'], 'M2': ['T'], 'M3': ['T']...., 'hybrid_block': ['A'], ['C']...}

当我继续阅读该行时,我想附加每列中的字符串值并最终创建。

defaultdict(<class 'dict'>, {'M1': ['A', 'T', 'C', 'G'], 'M2': ['T', 'G', 'A', 'T'], 'M3': ['T', 'C', 'A', 'G']...., 'hybrid_block': ['A', 'T', 'C', 'G'], ['C', 'A', 'G', 'T']...}

问题级别 02:

  • 我读取了数据hybrid_block对于第一行是A and C.

  • 现在,我想创建keys' but unlike fixed keys, these key will be generated while reading the data from混合块. For the first line since there are no preceding line thekeyswill simply beAgAandCgCwhich means (A given A, and C given C), and for the values I count the number ofAinblock Mand块S`。因此,数据将存储为:

defaultdict(<class 'dict'>, {'M': {'AgA': [4], 'CgC': [1]}, 'S': {'AgA': 2, 'CgC': 2}}

因为,我通读了其他行,我想根据其中的字符串创建新键hybrid block并计算该字符串出现的次数M vs S块给定前一行中的字符串。这意味着keys在读的时候line 2将会TgA' which means (T given A) and AgC. For the values inside this key I count the number of times I found本行中的 T,上一行中的 A 之后and same forAcG`.

The defaultdict读完3行之后就是了。

defaultdict(<class 'dict'>, {'M': {'AgA': 4, 'TgA':3, 'CgT':2}, {'CgC': [1], 'AgC':0, 'GgA':0}, 'S': {'AgA': 2, 'TgA':1, 'CgT':0}, {'CgC': 2, 'AgC':2, 'GgA':2}}

我明白这看起来太复杂了。我经历了几个dictionary and defaultdict教程,但找不到执行此操作的方法。

高度赞赏任何部分(如果不是两者)的解决方案。


pandas setup

from io import StringIO
import pandas as pd
import numpy as np

txt = """pos   M1  M2  M3  M4  M5  M6  M7  M8  hybrid_block    S1    S2    S3    S4  S5  S6  S7  S8
1     A   T   T   A   A   G   A   C       A|C         C     G     C     T    T   A   G   A
2     T   G   C   T   G   T   T   G       T|A         A     T     A     T    C   A   A   T
3     C   A   A   C   A   G   T   C       C|G         G     A     C     G    C   G   C   G
4     G   T   G   T   A   T   C   T       G|T         C     T     T     T    A   T   C   T """

df = pd.read_csv(StringIO(txt), delim_whitespace=True, index_col='pos')

df

enter image description here

solution

mostly pandas和一些numpy


  • 分体混合柱
  • 前置相同的第一行
  • 添加自我的移位版本以获得'AgA'输入字符串

d1 = pd.concat([df.loc[[1]].rename(index={1: 0}), df])

d1 = pd.concat([
        df.filter(like='M'),
        df.hybrid_block.str.split('|', expand=True).rename(columns='H{}'.format),
        df.filter(like='S')
    ], axis=1)

d1 = pd.concat([d1.loc[[1]].rename(index={1: 0}), d1])
d1 = d1.add('g').add(d1.shift()).dropna()

d1

enter image description here

将方便的块分配给它们自己的变量名称

m = d1.filter(like='M')
s = d1.filter(like='S')
h = d1.filter(like='H')

计算每个块中有多少个并连接

mcounts = pd.DataFrame(
    (m.values[:, :, None] == h.values[:, None, :]).sum(1),
    h.index, h.columns
)
scounts = pd.DataFrame(
    (s.values[:, :, None] == h.values[:, None, :]).sum(1),
    h.index, h.columns
)

counts = pd.concat([mcounts, scounts], axis=1, keys=['M', 'S'])
counts

enter image description here

如果你真的想要一本字典

d = defaultdict(lambda:defaultdict(list))

dict_df = counts.stack().join(h.stack().rename('condition')).unstack()
for pos, row in dict_df.iterrows():
    d['M']['H0'].append((row.loc[('condition', 'H0')], row.loc[('M', 'H0')]))
    d['S']['H0'].append((row.loc[('condition', 'H0')], row.loc[('S', 'H0')]))
    d['M']['H1'].append((row.loc[('condition', 'H1')], row.loc[('M', 'H1')]))
    d['S']['H1'].append((row.loc[('condition', 'H1')], row.loc[('S', 'H1')]))

dict(d)

{'M': defaultdict(list,
             {'H0': [('AgA', 4), ('TgA', 3), ('CgT', 2), ('GgC', 1)],
              'H1': [('CgC', 1), ('AgC', 0), ('GgA', 0), ('TgG', 1)]}),
 'S': defaultdict(list,
             {'H0': [('AgA', 2), ('TgA', 1), ('CgT', 0), ('GgC', 0)],
              'H1': [('CgC', 2), ('AgC', 2), ('GgA', 2), ('TgG', 3)]})}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从文件中读取两行并在 for 循环中创建动态键? 的相关文章

  • 在python中合并3个dict()

    如果多个字典之间有公共字符串 是否有逻辑合并多个字典的方法 即使这些公共字符串在一个 dict 的值与另一个 dict 的键之间匹配 我在 SO 上看到了很多类似的问题 但似乎没有一个问题能解决我将 较低级别文件 中的多个键与较高键 值中的
  • nginx/uwsgi 服务器的持久内存中 Python 对象

    我怀疑这是否可能 但这是问题和提出的解决方案 提出的解决方案的可行性是这个问题的对象 我有一些需要可用于所有请求的 全局数据 我将这些数据保存到 Riak 并使用 Redis 作为缓存层以提高访问速度 目前 数据被分为约 30 个逻辑块 每
  • Heroku 上的 Django 应用程序在一段时间后删除对象

    我编写了一个简单的 Django 问答论坛应用程序并将其部署在 Heroku 上 该网站的本地版本运行良好 但是 生产版本不会将问题 答案等存储超过几个小时 我决定坚持使用 Django 附带的 sqlite3 我预计该网站不会有太多流量
  • SparkSession 初始化需要很长时间

    SparkSession 初始化需要很长时间才能成功 这是我的代码 import findspark findspark init import pyspark from pyspark sql import SparkSession sp
  • 来自 Pandas DataFrame 的用户定义的 Json 格式

    我有一个 pandas dataFrame 打印 pandas DataFrame 后 结果如下所示 country branch no of employee total salary count DOB count email x a
  • skpy 向包含用户提及的组发送消息

    我需要在发送给 Skype 群组的消息中提及特定用户 我可以使用 skpy 轻松发送消息 但不知道如何在消息中提及某人 sk Skype userid paasword SendMsgTo sk chats group id SendMsg
  • SQLAlchemy 在 MySQL 上使用什么列类型作为“文本”?

    我的总体用例是试图确定我是否可以编写一个与数据库无关的 至少支持 Postgres 和 MySQL 存储一些大数据作为原始文本 认为 500MB 作为粗略的理论上限 基于这个答案 https stackoverflow com a 2557
  • 安装 Ta-lib 会产生 gcc 错误

    当我尝试在我的 mac 上将 Ta lib 作为全局包安装时 出现 gcc 错误 我收到以下错误 gcc Wno unused result Wsign compare Wunreachable code DNDEBUG g fwrapv
  • 在 Tkinter 中调整另一个小部件内的一个小部件的大小

    我正在开发穆斯堡尔光谱 化学 的模拟软件 但在设计 UI 时 我在使用父窗口小部件调整子窗口小部件的大小时遇到 了问题 当窗口最大化时 父框架会填充额外的空间 但子窗口小部件不会更改其大小 from Tkinter import impor
  • 无法解析 ReferenceProperty -- App Engine

    我遇到了一个错误 无法找出其根本原因 错误如下 ReferenceProperty 无法解析 u StatusLog STATUSLOGSID 此错误仅有时发生 大约一天一次或两次 生成此错误的脚本成功的次数多于失败的次数 该错误最奇怪的事
  • 在 Windows 上安装 PyGIMP

    在网上 我可以找到有关使用 python 编写 gimp 脚本的各种示例 http www jamesh id au software pygimp http www jamesh id au software pygimp http ww
  • Keras 中的条件批量归一化

    我正在尝试在 Keras 中实现条件批量标准化 我假设我必须创建一个自定义层 因此 我从正常化 https github com keras team keras blob master keras layers normalization
  • matplotlib 中矩形面片之间存在不需要的空间

    以下代码绘制两个红色矩形 红色矩形应该彼此相邻 之间没有空间 在 python 图中 这是可以的 在导出的 pdf 中 矩形之间有一个细长但明显的空白 有什么方法可以解决这个问题吗 import matplotlib pyplot as p
  • Python、Oracle DB、列中的 XML 数据,获取 cx_Oracle.Object

    我正在使用 python 从 Oracle DB 获取数据 所有行都有一个包含 XML 数据的列 当我使用 python 打印从 Oracle DB 获取的数据时 包含 XML 数据的列将打印为 0x7fffe373b960 处的 cx O
  • 在类方法 Python 中调用多处理

    最初 我有一个类来存储一些处理后的值 并通过其他方法重用这些值 问题是当我尝试将类方法划分为多个进程以加速时 python 生成了进程 但它似乎不起作用 正如我在任务管理器中看到的那样 只有 1 个进程在运行 并且结果从未传递 我做了几次搜
  • 我以为 Python 通过引用传递了所有内容?

    采取以下代码 module functions py def foo input new val input new val module main py input 5 functions foo input 10 print input
  • 函数调用中的星号[重复]

    这个问题在这里已经有答案了 我正在使用 itertools chain 以这种方式 展平 列表列表 uniqueCrossTabs list itertools chain uniqueCrossTabs 这与说有什么不同 uniqueCr
  • WTforms 表单未提交但不输出验证错误

    我正在尝试使用以下方式上传文件flask uploads工作和遇到一些障碍 我会告诉你我的flask查看函数 html 希望有人能指出我缺少的内容 基本上发生的情况是我提交了表格但失败了if request method POST and
  • 将 PySpark RDD 作为新列添加到 pyspark.sql.dataframe

    我有一个 pyspark sql dataframe 其中每一行都是一篇新闻文章 然后我有一个 RDD 来表示每篇文章中包含的单词 我想将单词的 RDD 作为名为 单词 的列添加到我的新文章数据框中 我试过 df withColumn wo
  • 关闭 IPython Notebook 中的自动保存

    我正在寻找一种方法来关闭 iPython 笔记本中的自动保存 我已经通过 Google Stack Overflow 搜索看到了有关如何打开自动保存的参考资料 但我想要相反的内容 关闭自动保存 如果这是可以永久设置的东西而不是在每个笔记本的

随机推荐

  • 在 sed 中查找并替换文本文件中的多个字符串[重复]

    这个问题在这里已经有答案了 下面是一个玩具文本文件 其中包含样本和特征信息以及测量值 Sample3 trait1 8 5 Sample6 trait2 2 2 Sample7 trait1 9 2 Sample3 trait2 1 3 S
  • 向空手道框架添加自定义步骤定义

    我需要提取从 复杂 响应标头解析的字段 并在稍后的测试中使用该值 看来空手道中的 header 关键字是为了设置请求头而设置的 而不是解析响应头 有没有办法添加自定义步骤定义来维护对场景变量存储的访问 看来变量存储在StepDefs类 并且
  • 从小写转换为大写

    我正在尝试从小写转换为大写 我知道这很容易做到 SUB AL 20H 但我得到了另一种解决方案 AND AL 0DFH 请帮助我理解这一点 谢谢 查看位模式 答 0x41 0100 0001 一个 0x61 0110 0001 中号 0x4
  • 如何在 Three.js 中获取蒙皮网格顶点的全局位置?

    在 Three js 中 我们现在能够获取 a 顶点的全局位置不带皮的网格感谢这个问题 但是我怎样才能获得 a 顶点的全局位置skinned与骨骼和变形目标进行网格划分 例如 如何打印 2 5 1 5 0 5 在以下情况下 mesh geo
  • 注意:如果您发送了值,则被调用的函数应该是付费的,并且您发送的值应该小于您当前的余额

    我正在尝试使用 openzeppelin 的 ERC20 实现 但出现错误 tokenAddress 是现有 ERC20 代币的地址 例如 USDC 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 im
  • 在 PIL 中使用 TIFF G4 图像

    我编写了一个纯 python TIFF G4 解压缩以供使用tifffile py 我知道有一些方法可以添加libtiff自定义 PIL 但我永远无法让它在混合 virtualenv 中很好地工作 我想在PIL中操作图像 我正在寻找将我的减
  • 没有端口的 HTTP X 转发主机行为

    我发现X Forwarded Host对于端口而言 HTTP 标头没有很好地定义 也许这就是为什么不同的实现在涉及这个标头时表现不同的原因 通常 此标头可以包含端口 例如b com 123这很简单 但如果真的发生了怎么办NOT包含端口并且服
  • Swift:IOS7 设备上的核心数据 -> 第二个实体上的entityForName 为零

    我已经使用 Xcode 6 beta 2 在一个小型 iPhone 项目上测试了 swift 该项目使用核心数据来访问数据模型中的 2 个实体 用户 合同 在 IOS 模拟器中一切正常 问题 当我为 IOS7 构建应用程序并在 iPhone
  • 请参阅场景大纲示例中定义的变量[重复]

    这个问题在这里已经有答案了 Feature Test Type Background url host def name test name def label name Scenario Outline Test 2 Given url
  • 判断两个矩形是否重叠?

    我正在尝试编写一个 C 程序 它接受用户的以下输入来构造矩形 2 到 5 之间 高度 宽度 x 位置 y 位置 所有这些矩形都将平行于 x 和 y 轴存在 即它们的所有边都将具有 0 或无穷大的斜率 我试图实现中提到的内容this问题 但我
  • 是否可以声明一个同时适用于数字和 bigint 的打字稿函数?

    在普通的无类型 JavaScript 中 编写一个可以对数字或 bigint 进行操作的函数并不难 具体取决于传入的参数 const sumOfSquares a b gt a a b b sumOfSquares 3 4 returns
  • DynamoDB 突发容量和自适应扩展

    我正在浏览 AWSblog从那里开始AWS re Invent 视频了解 DynamoDB 的自适应扩展和突发概念 我理解WCU和RCU的概念 以及突发桶堆积长达300秒的想法 并且分区的峰值WCU RCU是1000 3000 视频开始时间
  • c# DataSet.Fill Firebird 2.5 可怕的性能问题

    REMARK我完全重写了这个问题 因为在探索选项和获得见解时 我意识到问题的根源根本不是我想象的那样 我使用 Firebird 作为数据库引擎和标准 Net 提供程序 v 5 11 0 来使用以下代码获取数据 myBlob1 is BLOB
  • PHP计算两个日期之间的天数

    我正在开发一个围绕日期的网络应用程序 例如 我需要根据经过的天数计算数字 伪代码 count only array monday wednesday friday count only these days start date 12985
  • 如何确定 TensorFlow 中的占位符依赖性

    给定一些要获取的符号变量 我需要知道哪些占位符是依赖项 在 Theano 中 我们有 import theano as th import theano tensor as T x y z T scalars xyz u v x y y z
  • Java 中的布尔函数

    String s1 hi String s2 hi boolean b1 true boolean b2 false 1 System out println s1 s2 true 2 System out println s1 s2 s1
  • Webstorm:ColdFusion 语法

    有没有办法在 Web Storm 8 中获得 ColdFusion 语法高亮显示 有人在这方面取得过成功吗 如果不是 从哪里开始 或者可以采取什么措施来获得此选项 我目前使用 Web Storm 处理所有事情 它是一个很棒的编辑器 但目前我
  • 为什么此映射会导致我的 REPL 冻结?

    In 这个非常有用的答案 建议我可以替换这段代码 defun describe paths location edges apply function append mapcar describe path cdr assoc locati
  • 在 matplotlib/seaborn 中向箱线图添加图例

    我是Python新手 我使用以下代码在 matplotlib seaborn 中生成了一个箱线图 带有群图叠加 我现在想添加一个遵循每个框的配色方案的图例 我在网上找到的许多解决方案似乎不适用于这种特定类型的图表 例如 仅适用于分组箱线图
  • 如何从文件中读取两行并在 for 循环中创建动态键?

    在以下数据中 我尝试运行一个简单的马尔可夫模型 假设我有一个具有以下结构的数据 pos M1 M2 M3 M4 M5 M6 M7 M8 hybrid block S1 S2 S3 S4 S5 S6 S7 S8 1 A T T A A G A