频率计算及筛选.py

# -*- coding: utf-8 -*-
# @Time    : 2021/5/17 
# @Author  : Henrette_L

import os
import pandas as pd

path = input("请输入文件所在路径:")
# path = '/Users/数据分析/Henriette/data/'
file_list = os.listdir(path)
file_list.remove('.DS_Store')

for i in file_list:
    df = pd.read_table(path + i, compression='gzip', header=0, sep="\t")
    col_list = df.columns.to_list()
    res_df = pd.DataFrame(columns=col_list)

for i in file_list:
    file_name = i
    print(file_name)
    df = pd.read_table(path + file_name, compression='gzip', header=0, sep="\t")
    main = df.loc[:, 'REF':"L9"]  # 需要计算区域
    index_list = df.index.to_list()  # 行索引列表
    col_list = df.columns.to_list()
    #     print(col_list)

    """计算四列数据"""
    ref_number_list = []
    alt_number_list = []
    # 低频位点比例
    res1 = []
    # 正常位点比例
    res2 = []
    for i in index_list[:]:
        REF = df.loc[i]['REF']
        ALT = df.loc[i]['ALT']
        col_data = df.loc[i]["REF":"L9"].values.tolist()
        num = pd.value_counts(col_data)
        try:
            ref_number = num[REF * 2]
        except:
            ref_number = 0

        try:
            alt_number = num[ALT * 2]
        except:
            alt_number = 0
        ref_number_list.append(ref_number)
        alt_number_list.append(alt_number)
        # print(ref_number, alt_number)

        # 低频位点
        num1 = min(ref_number, alt_number) / (ref_number + alt_number)
        res1.append(num1)

        # 正常位点
        num2 = (ref_number + alt_number) / (len(col_data) - 2)
        res2.append(num2)
    df['ref_number'] = ref_number_list
    df['alt_number'] = alt_number_list
    df['低频位点比例'] = res1
    df['正常位点比例'] = res2

    # 筛选低频位点比例 >0.05 的
    res = df[df['低频位点比例'] > 0.05]
    #     print(res)
    res_df = pd.merge(res_df, res, how='outer')

res_df.to_csv('result.csv', index=None, encoding='utf_8_sig')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值