# -*- coding: utf-8 -*-
# @Time : 2021/5/17
# @Author : Henrette_L
########################################----READ ME----########################################
'''
1.选取需要将结果保存的路径
Eg:保存在F:\geno result\
打开cmd后输入f:
回车
cd geno result
2.运行程序 在上述路径下输入 python Frequency calculation and screening.py(这个地方需要把py文件拖过去即可)
3.请输入文件所在路径(确保文件夹下只有geno压缩后的文件,没有其他格式文件,否则会报错)
4.请输入文件保存名称(此处可自定义,最终格式均为csv)
5.出现“结束”字样即说明运行完毕
#####################################------注意事项------#############################
如果文件较大,最好拆开运行,否则会出现内存溢出报错
如果电脑RAM为16GB以上,可尝试直接运行大文件
如有其它问题请联系3312065512@qq.com
'''
#####################################----End----#############################################################
#######################运行部分#######################
import os
import pandas as pd
path = input("请输入文件所在路径:")
filename = input('请输入文件保存名称:')
# path = r'D:\data\data/'
file_list = os.listdir(path)
for i in file_list:
df = pd.read_table(path +"/"+ i, compression='gzip', header=0, index_col=False, sep="\t")
col_list = df.columns.to_list()
res_df = pd.DataFrame(columns=col_list)
# print('空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, index_col=False, sep="\t", )
main = df.loc[:, 'REF':"L9"] # 需要计算区域
index_list = df.index.to_list() # 行索引列表
col_list = df.columns.to_list()
# print('原始数据columns',col_list)
print("开始计算数据"+"*"*100)
"""计算四列数据"""
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)
# 低频位点
try:
num1 = min(ref_number, alt_number) / (ref_number + alt_number)
except:
num1 = 0
res1.append(num1)
# 正常位点
try:
num2 = (ref_number + alt_number) / (len(col_data) - 2)
except:
num2 = 0
res2.append(num2)
df['ref_number'] = ref_number_list
df['alt_number'] = alt_number_list
df['低频位点比例'] = res1
df['正常位点比例'] = res2
print("筛选数据"+"*"*100)
# 筛选低频位点比例 >0.05 的
res = df[df['低频位点比例'] > 0.05]
print(res)
res_df = pd.concat([res_df, res], join='outer')
# 保存文件
print('保存文件')
res_df.to_csv(filename+".csv", index=None, encoding='utf_8_sig')
print("结束")
res_df
Frequency calculation and screening.py
最新推荐文章于 2023-02-22 15:13:07 发布