import numpy as np import matploplib.pyplot as plt import pandas as pd import openpyxl from sklearn import decomposition def loadDataSet(filename): ex = openpyxl.load_workbook(filename) sheet = ex.get_sheet_by_name("高钾") data1 = [] data2 = [] for i in range(2,20): res = [] for j in range (2,16): res.append(sheet.cell(row=i,column = j).value) data1.append(res) sheet = ex.get_sheet_by_name("铅钡") for i in range(2,51): res = [] for j in range (2,16): res.append(sheet.cell(row=i,column = j).value) data2.append(res) return data1 , data2 def process(data,n,n): a=[] for i in range(0,n): down = 1 num = 0 b = [] for j in range(0,m): if data[i][j] == 0:continue else: down = down*float(data[i][j]) num += 1 down = pow(down,1/num) for j in range(0,m): if data[i][j]: b.append(0) else: b.append(np.log(float(data[i][j])/down)) a.append(b) return a filename = '归一化后用于log变换.xlsx' data1 , data2 = loadDataSet(filename) data1 = process(data1,len(data1),len(data1[0])) data2 = process(data2,len(data1),len(data2[0])) wk = openpyxl.Workbook sheet1 = wk.create_sheet("高钾") sheet1 = wk.create_sheet("铅钡") for i in range(1,len(data1) + 1): for j in range(1,len(data1[0]) + 1): sheet1.cell(row = i,column = j).value = data1[i-1][j-1] for i in range(1,len(data2) + 1): for j in range(1,len(data2[0]) + 1): sheet2.cell(row = i,column = j).value = data2[i-1][j-1] wk.save('../第二小问/Log-ratio变换.xlsx')分析代码工作流程
时间: 2024-04-19 09:24:52 浏览: 135
这段代码的工作流程如下:
1. 导入所需的库:导入numpy、matplotlib.pyplot、pandas、openpyxl和sklearn中的decomposition模块。
2. 定义loadDataSet函数:该函数用于加载Excel文件并读取数据。它通过openpyxl库打开指定的Excel文件,并从不同的工作表中获取数据。获取的数据存储在data1和data2两个列表中,并返回这两个列表。
3. 定义process函数:该函数用于进行log-ratio变换。它接收一个数据集data,以及数据集的行数n和列数m作为参数。在函数内部,它遍历数据集的每个元素,计算log-ratio变换,并将结果存储在新的列表a中。具体的计算过程如下:
- 对于每一行的数据,首先计算乘积down和非零元素个数num。
- 然后,计算down的n次方根(down的平均值),得到down。
- 对于每个元素,如果为零,则将其转换为0;否则,计算该元素与down的log-ratio并将结果存储在列表b中。
- 将列表b添加到列表a中,表示一行数据的log-ratio变换结果。
- 最后,返回列表a。
4. 加载数据和进行log-ratio变换:首先指定要处理的Excel文件的路径。然后,调用loadDataSet函数加载数据,并将加载的数据存储在data1和data2中。接着,调用process函数对data1和data2进行log-ratio变换,并将结果保存回相应的变量。
5. 创建新的Excel文件并保存处理后的数据:使用openpyxl库创建一个新的Excel文件,然后创建两个工作表"高钾"和"铅钡"。接着,将处理后的data1和data2数据写入到对应的工作表中。
6. 最后,使用save函数将新的Excel文件保存到指定路径。
需要注意的是,代码中存在一些语法错误和逻辑问题,例如变量命名错误(`matploplib`应为`matplotlib`,`numpy`应为`np`),缩进错误,以及函数调用错误(如`openpyxl.Workbook`没有加括号)等。在运行之前,你需要修复这些错误。另外,你还需要确保安装了所需的库。
阅读全文