醫學資料處理1 病人樣本去重

2021-10-08 07:29:09 字數 4652 閱讀 9610

前言:

最近幫某三甲醫院做了一些醫學資料處理的程式

記錄一下

一  病人樣本去重

需要:第三列**病人的編號,第一列**病人的資料型別

統計的時候,出現同乙個病人有不同的資料型別,按照一定的優先級別,

只保留一類。 

sample

os_patient

os.time

mmrf_2226_1_pb_whole

0mmrf_2226

1mmrf_2226_1_bm_cd138pos

0mmrf_2226

1mmrf_2187_1_pb_cd138pos

0mmrf_2187

1

# -*- coding: utf-8 -*-

"""created on mon jul 20 14:10:43 2020

@author: chengxf2

去掉內容重複的

"""import os

from openpyxl import load_workbook

import numpy as np

from xlrd import open_workbook

import csv

import sys

class removerep:

"""獲取當前目錄下面的xls

args

none

return

path: 檔案路徑

"""def getpath(self):

root = os.getcwd()

files = os.listdir(root)

for file in files:

pos = file.find("xls")

if pos>1:

path = os.path.abspath(file)

filename = os.path.splitext(file)[0]

print("\n path ",path)

return path,filename

def __init__(self):

self.m = 0

self.n = 0

self.dictitem ={} #**裡面的所有內容

self.keylist =

"""獲得優先級別

args

tag1: cd138pos,whole,wbc

tag2: pb, bm

return

pri:優先級別,3 最高

"""def getpre(self, tag1, tag2):

# print("\n tag1 ",tag1,"\t tg2 ",tag2)

pri = -1

if tag1 =="cd138pos" and tag2 == "bm":

pri = 3

elif tag1 =="cd138pos" and tag2 =="pb":

pri = 2

else:

pri = 1

return pri

"""同乙個病人,有重複的資料,只儲存一種

[['cd138pos', 'pb', 3], ['cd3pos', 'pb', 4], ['cd138pos', 'bm', 5]]

args

items: 重複的列表項

return

maxindex: 選擇最優的

"""def getindex(self, items):

maxpri = -1 #最優級別的index

maxindex = -1 #最優級別的index

for item in items:

tag1 = item[0]

tag2 = item[1]

index = item[2]

pri = self.getpre(tag1, tag2)

# print("\n ","tag1",tag1,"\t tag2 ",tag2, "\t 優先級別: ",pri,"\t index ",index)

if pri>maxpri:

maxpri = pri

maxindex = index

# print("\n maxindex:",maxindex)

return maxindex

"""去除重複的

args

rows: 行

head: 頭

return

retrow: 去重後的列表

"""def merge(self, rows,head):

retrow =

index = #需要新增的列表

#print("head ",head)

for key in self.dictitem.keys(): #只留乙個

items = self.dictitem[key]

if len(items)>1: #有重複的

#print("++++++key +++++",key)

index = self.getindex(items) #多個只預留乙個

# print("item: ",rows[index])

else:

#print("\n item ",item[0][2])

index = items[0][2]

#print(index)

for key in index:

item = rows[key]

#print("\n 刪除後的**: \n ",retrow)

return retrow

"""讀取xls

args

path:

**路徑

cd138pos 排在第一優先順序

[bm,cd]

return

rows : **內容

head: **頭

"""def readxls(self,path):

rows =

workbook = open_workbook(path) # 開啟xls檔案

sh = workbook.sheet_by_index(0)

nrows = sh.nrows

ncols = sh.ncols

# print("sheets ",nrows,"\t ncols : ",ncols)

#獲取第一行,第一列資料

#whead = sh.cell_value(1,1)

head = sh.row_values(0) #從0 開始的

for i in range(1,nrows): #第一行不讀,為頭

row_data = sh.row_values(i)

#print("\n row_data ",row_data)

sample = row_data[0].split("_")

tag1 = sample[4]#cd138pos

tag2 = sample[3]#pb,bm

index = i-1 #頭不讀,所以減去1

patient = row_data[2] #病人標號

if patient not in self.dictitem.keys():

self.dictitem[patient]=[[tag1,tag2,index]]

else: #已經存在了

curitem = self.dictitem[patient] #當前列表

newitem = [tag1,tag2,index] #新的條目

self.dictitem[patient] = curitem

return rows,head

"""儲存到csv檔案裡面

arghead: **第一行 #head = ['標題列1', '標題列2']

rows: **內容 #rows = [['張三', 80],['李四', 90]]

return

rows: 檔案裡面的資料內容

head: [id,檔名]

"""def writecsv(self,rows, name):

print("\n *****儲存檔案 ********\n ") #4,60483

filename = name+".csv"

f= open(filename,'w', newline='')

# print("\n rows, ",rows)

writer = csv.writer(f)

writer.writerows(rows)

f.close()

print("\n *****儲存退出 ********\n ") #4,60483

""""""

def remove(self):

path,name = self.getpath()

print("\n 讀取** \n ")

xmlrows,head = self.readxls(path)

print("\n 合併** \n ")

rows = self.merge(xmlrows,head)

self.writecsv(rows,name)

move = removerep()

move.remove()

python 資料處理 1

python 基礎 各種資料型別的用途 1.字串 1 大小寫轉換 例 pharse he is very beautiful print pharse.upper other djfsdf print other.lower 以上 並沒有將變數永久改為大 小寫模式,若想永久改變 pharse he ...

Python 資料處理(1)

記錄最近處理資料集常用的幾個操作。刪除行之後行號就不是連續的了,索引行號的時候不方便。這裡重新設定行號,並把原先的行號drop掉。df df.reset index drop true 統計,排序。df.colnames.value counts sort index loc 引用行列名稱。str....

ORACLE資料處理要點1

縮小資料處理範圍 分割槽表定時資料爬取 縮小表資料 分時段 多執行緒處理 走索引避免重複資料插入可以用唯一鍵插入異常處理 insert into tb a exception when dup val on index then null when others then return 乙個幾億的表...