使用python创建一个使用归一化、Xavier初始化、正则化方法和MSGD的BP网络,该网络有8个输入1个输出1层隐藏层,要求分为两个模块(py文件),在确认输入、输出的训练集之后,模型不会出现shape类报错,且一个是BP网络,另一个是主函数,在每句代码后添加注释;训练集数据存于xlsx表格前3000行中,测试集为之后的40行,且均为float类型。并且能够输出各输入的权重。尝试在main模块中实现将训练后的BP网络模型输出为一个文件,绘制R2图来说明模型的拟合度,并且输出MAE、MSE、预测值和真实值之间的相对误差平均百分比,绘制测试集的各输入对应的实际输出和预测输出的拟合折线图,且R2图和折线图中使用的数据均为未变换数据。

时间: 2023-11-22 12:56:50 浏览: 16
很高兴回答您的问题。这是一个比较复杂的问题,需要涉及到许多知识点,我会尽可能详细地给出代码和注释。首先,我们需要安装一些必要的库,包括pandas,numpy和openpyxl,可以使用以下命令进行安装: ```python !pip install pandas numpy openpyxl ``` 接下来,我们分为两个模块进行编写,第一个是BP网络模块,我们将其命名为bp_network.py。代码如下: ```python import numpy as np import pandas as pd class BPNetwork: def __init__(self, input_size, hidden_size, output_size, learning_rate, reg_lambda, momentum): """ 初始化网络参数,并进行归一化和Xavier初始化 :param input_size: 输入层大小 :param hidden_size: 隐藏层大小 :param output_size: 输出层大小 :param learning_rate: 学习率 :param reg_lambda: 正则化项系数 :param momentum: 动量因子 """ self.input_size = input_size self.hidden_size = hidden_size self.output_size = output_size self.learning_rate = learning_rate self.reg_lambda = reg_lambda self.momentum = momentum # 初始化权重和偏置 self.W1 = np.random.randn(self.input_size, self.hidden_size) * np.sqrt(2.0 / (self.input_size + self.hidden_size)) # Xavier初始化 self.b1 = np.zeros((1, self.hidden_size)) self.W2 = np.random.randn(self.hidden_size, self.output_size) * np.sqrt(2.0 / (self.hidden_size + self.output_size)) # Xavier初始化 self.b2 = np.zeros((1, self.output_size)) # 初始化动量参数 self.v_W1 = np.zeros((self.input_size, self.hidden_size)) self.v_b1 = np.zeros((1, self.hidden_size)) self.v_W2 = np.zeros((self.hidden_size, self.output_size)) self.v_b2 = np.zeros((1, self.output_size)) def sigmoid(self, x): """ sigmoid激活函数 """ return 1 / (1 + np.exp(-x)) def sigmoid_derivative(self, x): """ sigmoid激活函数的导数 """ return x * (1 - x) def forward(self, X): """ 前向传播 """ self.z1 = np.dot(X, self.W1) + self.b1 self.a1 = self.sigmoid(self.z1) self.z2 = np.dot(self.a1, self.W2) + self.b2 self.y_hat = self.z2 return self.y_hat def backward(self, X, y, y_hat): """ 反向传播 """ # 计算输出层误差 delta2 = y_hat - y # 计算隐藏层误差 delta1 = np.dot(delta2, self.W2.T) * self.sigmoid_derivative(self.a1) # 计算输出层权重和偏置的梯度 dW2 = np.dot(self.a1.T, delta2) + self.reg_lambda * self.W2 db2 = np.sum(delta2, axis=0, keepdims=True) # 计算隐藏层权重和偏置的梯度 dW1 = np.dot(X.T, delta1) + self.reg_lambda * self.W1 db1 = np.sum(delta1, axis=0) # 更新权重和偏置 self.v_W2 = self.momentum * self.v_W2 - self.learning_rate * dW2 self.v_b2 = self.momentum * self.v_b2 - self.learning_rate * db2 self.W2 += self.v_W2 self.b2 += self.v_b2 self.v_W1 = self.momentum * self.v_W1 - self.learning_rate * dW1 self.v_b1 = self.momentum * self.v_b1 - self.learning_rate * db1 self.W1 += self.v_W1 self.b1 += self.v_b1 def train(self, X_train, y_train, X_test, y_test, epochs): """ 训练网络 """ train_loss = [] test_loss = [] for i in range(epochs): # 前向传播 y_hat_train = self.forward(X_train) y_hat_test = self.forward(X_test) # 计算训练集和测试集的损失 train_loss.append(np.mean(np.square(y_train - y_hat_train))) test_loss.append(np.mean(np.square(y_test - y_hat_test))) # 反向传播 self.backward(X_train, y_train, y_hat_train) # 输出每100个epoch的损失 if i % 100 == 0: print("Epoch: {}, train_loss: {:.4f}, test_loss: {:.4f}".format(i, train_loss[i], test_loss[i])) # 输出每个输入的权重 print("Weights of input features:") for i in range(self.input_size): print("Feature {}: {}".format(i+1, self.W1[i])) # 返回训练集和测试集的损失 return train_loss, test_loss def predict(self, X): """ 预测 """ return self.forward(X) ``` 上面的代码定义了一个BP网络类,包括初始化参数、sigmoid激活函数、前向传播、反向传播、训练和预测方法。其中,前向传播和反向传播分别计算输出和隐藏层的输出,以及权重和偏置的梯度,并进行更新。训练方法使用了动量的梯度下降法进行优化。在训练完成后,我们可以输出每个输入的权重,用于分析各个输入对输出的影响。 接下来,我们编写主函数模块,命名为main.py。代码如下: ```python import numpy as np import pandas as pd from bp_network import BPNetwork # 读取训练集和测试集数据 train_data = pd.read_excel('data.xlsx', nrows=3000) test_data = pd.read_excel('data.xlsx', skiprows=range(1, 3000), nrows=40) # 将数据转换为numpy数组,并进行归一化 X_train = train_data.iloc[:, :-1].values y_train = train_data.iloc[:, -1:].values X_mean = np.mean(X_train, axis=0) X_std = np.std(X_train, axis=0) X_train = (X_train - X_mean) / X_std y_mean = np.mean(y_train, axis=0) y_std = np.std(y_train, axis=0) y_train = (y_train - y_mean) / y_std X_test = test_data.iloc[:, :-1].values y_test = test_data.iloc[:, -1:].values X_test = (X_test - X_mean) / X_std y_test = (y_test - y_mean) / y_std # 创建BP网络模型 model = BPNetwork(input_size=8, hidden_size=16, output_size=1, learning_rate=0.01, reg_lambda=0.01, momentum=0.9) # 训练模型 train_loss, test_loss = model.train(X_train, y_train, X_test, y_test, epochs=1000) # 预测测试集并进行反归一化 y_pred = model.predict(X_test) y_pred = y_pred * y_std + y_mean y_test = y_test * y_std + y_mean # 计算MAE和MSE mae = np.mean(np.abs(y_pred - y_test)) mse = np.mean(np.square(y_pred - y_test)) print("MAE: {:.4f}, MSE: {:.4f}".format(mae, mse)) # 计算预测值和真实值之间的相对误差平均百分比 error = np.abs((y_pred - y_test) / y_test) mean_error = np.mean(error) * 100 print("Mean relative error: {:.2f}%".format(mean_error)) # 绘制R2图 import matplotlib.pyplot as plt from sklearn.metrics import r2_score r2 = r2_score(y_test, y_pred) plt.scatter(y_test, y_pred) plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=4) plt.xlabel('Actual') plt.ylabel('Predicted') plt.title('R2: {:.4f}'.format(r2)) plt.show() # 绘制测试集的各输入对应的实际输出和预测输出的拟合折线图 fig, ax = plt.subplots(figsize=(10, 6)) for i in range(X_test.shape[1]): ax.plot(X_test[:, i], y_test, 'o', label='Actual') ax.plot(X_test[:, i], y_pred, 'x', label='Predicted') ax.set_xlabel('Feature {}'.format(i+1)) ax.set_ylabel('Output') ax.set_title('Input Feature {} vs Output'.format(i+1)) ax.legend() plt.show() # 将训练后的模型保存为文件 import pickle with open('model.pkl', 'wb') as f: pickle.dump(model, f) ``` 上面的代码首先读取了训练集和测试集数据,并进行了归一化处理。接着,我们使用BPNetwork类创建了一个BP网络模型,并进行了训练。训练完成后,我们使用模型对测试集进行了预测,并进行了反归一化处理。然后,我们计算了MAE和MSE,并输出了预测值和真实值之间的相对误差平均百分比。接着,我们绘制了R2图和测试集的各输入对应的实际输出和预测输出的拟合折线图。最后,我们将训练后的模型保存为文件,以便以后使用。 综上所述,我们完成了一个使用归一化、Xavier初始化、正则化方法和MSGD的BP网络,并使用训练集和测试集进行了训练和测试,并且能够输出各输入的权重。我们还实现了将训练后的模型保存为文件,绘制R2图,计算MAE和MSE,并输出预测值和真实值之间的相对误差平均百分比,以及绘制测试集的各输入对应的实际输出和预测输出的拟合折线图。

相关推荐

很好,让我们按照您的要求逐步实现所需的功能。 首先,我们需要创建BP网络模块。在BP网络中,我们使用Sigmoid函数作为激活函数,同时使用归一化、Xavier初始化、正则化方法和MSGD来提高模型的稳定性和准确性。以下是BP网络模块代码实现:(命名为BPNet.py) python import numpy as np import pandas as pd class BPNet: def __init__(self, input_size, hidden_size, output_size, learning_rate, weight_decay, momentum): self.input_size = input_size self.hidden_size = hidden_size self.output_size = output_size self.learning_rate = learning_rate self.weight_decay = weight_decay self.momentum = momentum # 初始化权重 self.weights_ih = np.random.randn(self.hidden_size, self.input_size) / np.sqrt(self.input_size) self.weights_ho = np.random.randn(self.output_size, self.hidden_size) / np.sqrt(self.hidden_size) # 初始化偏置 self.bias_h = np.zeros((self.hidden_size, 1)) self.bias_o = np.zeros((self.output_size, 1)) # 初始化动量 self.velocity_ih = np.zeros((self.hidden_size, self.input_size)) self.velocity_ho = np.zeros((self.output_size, self.hidden_size)) def sigmoid(self, x): return 1 / (1 + np.exp(-x)) def sigmoid_derivative(self, x): return x * (1 - x) def normalize(self, X): return (X - np.mean(X)) / np.std(X) def forward(self, X): X = self.normalize(X) # 归一化 X = np.array(X).reshape(-1, 1) # 输入层到隐藏层 hidden = np.dot(self.weights_ih, X) + self.bias_h hidden = self.sigmoid(hidden) # 隐藏层到输出层 output = np.dot(self.weights_ho, hidden) + self.bias_o output = self.sigmoid(output) return output def backward(self, X, y, output): # 计算误差 y = np.array(y).reshape(-1, 1) error = y - output # 输出层到隐藏层 output_derivative = self.sigmoid_derivative(output) delta_ho = error * output_derivative gradient_ho = np.dot(delta_ho, self.weights_ho) gradient_ho = gradient_ho.reshape(self.hidden_size, 1) # 输入层到隐藏层 hidden_derivative = self.sigmoid_derivative(hidden) delta_ih = gradient_ho * hidden_derivative gradient_ih = np.dot(delta_ih, self.weights_ih) gradient_ih = gradient_ih.reshape(self.input_size, 1) # 更新权重和偏置 hidden = np.array(hidden).reshape(self.hidden_size, 1) X = np.array(X).reshape(self.input_size, 1) self.velocity_ih = self.momentum * self.velocity_ih + (1 - self.momentum) * self.learning_rate * gradient_ih * X.T self.velocity_ho = self.momentum * self.velocity_ho + (1 - self.momentum) * self.learning_rate * delta_ho * hidden.T self.weights_ih += self.velocity_ih - self.learning_rate * self.weight_decay * self.weights_ih self.weights_ho += self.velocity_ho - self.learning_rate * self.weight_decay * self.weights_ho self.bias_h += self.learning_rate * delta_ih self.bias_o += self.learning_rate * delta_ho def train(self, X_train, y_train, epochs): for epoch in range(epochs): for i in range(len(X_train)): X = X_train[i] y = y_train[i] output = self.forward(X) self.backward(X, y, output) def predict(self, X_test): outputs = [] for X in X_test: output = self.forward(X) outputs.append(output[0]) return outputs 接下来,我们需要创建主函数模块,实现绘制R2图、输出MAE、MSE、预测值和真实值之间的相对误差平均百分比、绘制各输入输出的拟合折线图等功能。以下是主函数模块代码实现:(命名为main.py) python import numpy as np import pandas as pd import matplotlib.pyplot as plt from BPNet import BPNet # 读取数据 data = pd.read_excel('data.xlsx') X_train = data.iloc[:3000, :-1].values y_train = data.iloc[:3000, -1].values X_test = data.iloc[3000:, :-1].values y_test = data.iloc[3000:, -1].values # 创建BP网络模型 input_size = 8 hidden_size = 10 output_size = 1 learning_rate = 0.1 weight_decay = 0.001 momentum = 0.9 bpnet = BPNet(input_size, hidden_size, output_size, learning_rate, weight_decay, momentum) # 训练模型 epochs = 100 bpnet.train(X_train, y_train, epochs) # 预测结果 y_pred = bpnet.predict(X_test) # 绘制R2图 plt.scatter(y_test, y_pred) plt.xlabel('True Values') plt.ylabel('Predictions') plt.xlim([0, plt.xlim()[1]]) plt.ylim([0, plt.ylim()[1]]) plt.plot([0, 1], [0, 1], 'r--') plt.title('R2 Score: {:.3f}'.format(np.corrcoef(y_test, y_pred)[0][1]**2)) plt.show() # 输出MAE、MSE、预测值和真实值之间的相对误差平均百分比 mae = np.mean(np.abs(y_pred - y_test)) mse = np.mean((y_pred - y_test)**2) mape = np.mean(np.abs((y_test - y_pred) / y_test)) * 100 print('MAE: {:.3f}'.format(mae)) print('MSE: {:.3f}'.format(mse)) print('MAPE: {:.3f}%'.format(mape)) # 绘制各输入输出的拟合折线图 fig, axs = plt.subplots(nrows=2, ncols=4, figsize=(15, 6)) for i in range(input_size): row = i // 4 col = i % 4 axs[row, col].scatter(X_test[:, i], y_test, s=1) axs[row, col].scatter(X_test[:, i], y_pred, s=1) axs[row, col].set_xlabel('Input {}'.format(i+1)) axs[row, col].set_ylabel('Output') plt.tight_layout() plt.show() 以上代码实现了使用归一化、Xavier初始化、正则化方法和MSGD的BP网络,以及主函数模块中的绘制R2图、输出MAE、MSE、预测值和真实值之间的相对误差平均百分比、绘制各输入输出的拟合折线图等功能。您可以在自己的机器上运行这些代码,看看是否能够成功实现。
这里是一个示例代码,分为两个模块:bp.py 和 main.py bp.py: python import numpy as np class BPNN: def __init__(self, input_size, hidden_size, output_size, lr=0.1, regularization=0.01): self.input_size = input_size self.hidden_size = hidden_size self.output_size = output_size self.lr = lr self.regularization = regularization # 初始化权重 self.W1 = np.random.randn(hidden_size, input_size) * np.sqrt(1/input_size) # Xavier 初始化 self.b1 = np.zeros((hidden_size, 1)) self.W2 = np.random.randn(output_size, hidden_size) * np.sqrt(1/hidden_size) # Xavier 初始化 self.b2 = np.zeros((output_size, 1)) def sigmoid(self, x): return 1 / (1 + np.exp(-x)) def d_sigmoid(self, x): return x * (1 - x) def train(self, X, y, epochs=1000): for i in range(epochs): # 前向传播 a1 = X.T z2 = np.dot(self.W1, a1) + self.b1 a2 = self.sigmoid(z2) z3 = np.dot(self.W2, a2) + self.b2 y_pred = z3 # 计算损失函数 mse = np.mean((y_pred - y.T) ** 2) # 反向传播 d3 = y_pred - y.T d2 = np.dot(self.W2.T, d3) * self.d_sigmoid(a2) # 更新权重和偏置 self.W2 -= self.lr * (np.dot(d3, a2.T) + self.regularization * self.W2) self.b2 -= self.lr * np.mean(d3, axis=1, keepdims=True) self.W1 -= self.lr * (np.dot(d2, a1.T) + self.regularization * self.W1) self.b1 -= self.lr * np.mean(d2, axis=1, keepdims=True) return mse, y_pred.T main.py: python import pandas as pd import matplotlib.pyplot as plt from bp import BPNN # 读取数据 df = pd.read_excel('data.xlsx') X = df.iloc[:3000, :-1].values y = df.iloc[:3000, -1:].values # 归一化 X = (X - X.mean(axis=0)) / X.std(axis=0) y = (y - y.mean(axis=0)) / y.std(axis=0) # 划分训练集和测试集 X_train, y_train = X[:2500], y[:2500] X_test, y_test = X[2500:], y[2500:] # 初始化模型 model = BPNN(input_size=8, hidden_size=4, output_size=1) # 训练模型 mse, y_pred = model.train(X_train, y_train, epochs=10000) # 预测测试集 y_pred_test = model.sigmoid(np.dot(model.W2, model.sigmoid(np.dot(model.W1, X_test.T) + model.b1)) + model.b2).T # 计算MAE, MSE和相对误差平均百分比 mae = np.mean(np.abs(y_pred_test - y_test)) mse = np.mean((y_pred_test - y_test) ** 2) error = np.mean(np.abs((y_pred_test - y_test) / y_test)) * 100 # 绘制R2图 plt.scatter(y_test, y_pred_test) plt.plot([-3, 3], [-3, 3], 'r--') plt.xlabel('True Value') plt.ylabel('Predicted Value') plt.title('R2') plt.show() # 绘制各输入输出的拟合折线图 for i in range(8): plt.scatter(X_test[:, i], y_test) plt.scatter(X_test[:, i], y_pred_test) plt.xlabel(f'Input {i+1}') plt.ylabel('Output') plt.legend(['True', 'Predicted']) plt.show() print(f'MAE: {mae:.2f}') print(f'MSE: {mse:.2f}') print(f'Relative Error: {error:.2f}%') 需要注意的几点: 1. 在 BPNN 类中,我们定义了 sigmoid 函数和其导数 d_sigmoid 函数,用于激活和反向传播。 2. 在训练时,我们使用了均方误差作为损失函数。 3. 在更新权重时,我们使用了正则化项,以避免过拟合。 4. 在 main.py 中,我们首先读取了数据,并将其归一化。 5. 我们将前 2500 行作为训练集,后面的行作为测试集。 6. 我们使用了 BPNN 类来训练模型,并在测试集上进行预测。 7. 我们计算了 MAE、MSE 和相对误差平均百分比,并绘制了 R2 图和各输入输出的拟合折线图。
好的,这里是一个简单的实现,仅供参考: python import numpy as np import pandas as pd import matplotlib.pyplot as plt # sigmoid函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) # sigmoid函数的导数 def sigmoid_derivative(x): return x * (1 - x) # 归一化 def normalize(X): X = (X - np.min(X)) / (np.max(X) - np.min(X)) return X # Xavier初始化 def xavier_init(n_input, n_output): W = np.random.randn(n_input, n_output) * np.sqrt(1 / (n_input + n_output)) return W # 正则化 def regularization(W, lambd): return W * (1 - lambd) class NeuralNetwork: def __init__(self, n_input, n_hidden, n_output, learning_rate, lambd): self.n_input = n_input self.n_hidden = n_hidden self.n_output = n_output self.learning_rate = learning_rate self.lambd = lambd self.W1 = xavier_init(n_input, n_hidden) self.W2 = xavier_init(n_hidden, n_output) def forward(self, X): self.z1 = np.dot(X, self.W1) self.a1 = sigmoid(self.z1) self.z2 = np.dot(self.a1, self.W2) self.y_hat = sigmoid(self.z2) return self.y_hat def backward(self, X, y, y_hat): delta2 = (y_hat - y) * sigmoid_derivative(y_hat) dW2 = np.dot(self.a1.T, delta2) delta1 = np.dot(delta2, self.W2.T) * sigmoid_derivative(self.a1) dW1 = np.dot(X.T, delta1) # 添加正则化项 dW1 = regularization(dW1, self.lambd) dW2 = regularization(dW2, self.lambd) self.W1 -= self.learning_rate * dW1 self.W2 -= self.learning_rate * dW2 def train(self, X, y, epochs): m = X.shape[0] for i in range(epochs): y_hat = self.forward(X) loss = np.mean(np.square(y_hat - y)) self.backward(X, y, y_hat) print('Epoch:', i+1, 'Loss:', loss) def predict(self, X): return self.forward(X) # 读取数据 data = pd.read_excel('data.xlsx', sheet_name='Sheet1') X_train = data.iloc[:10, :8].values y_train = data.iloc[:10, 8:].values X_test = data.iloc[10:, :8].values y_test = data.iloc[10:, 8:].values # 归一化 X_train = normalize(X_train) y_train = normalize(y_train) X_test = normalize(X_test) y_test = normalize(y_test) # 训练模型 model = NeuralNetwork(n_input=8, n_hidden=5, n_output=1, learning_rate=0.1, lambd=0.01) model.train(X_train, y_train, epochs=1000) # 预测并计算指标 y_pred = model.predict(X_test) r2 = 1 - np.sum(np.square(y_test - y_pred)) / np.sum(np.square(y_test - np.mean(y_test))) mae = np.mean(np.abs(y_test - y_pred)) mse = np.mean(np.square(y_test - y_pred)) error = np.mean(np.abs(y_test - y_pred) / y_test) * 100 print('R2:', r2) print('MAE:', mae) print('MSE:', mse) print('Error:', error) # 绘制拟合折线图 plt.plot(y_test, label='True') plt.plot(y_pred, label='Predicted') plt.legend() plt.show() # 绘制R2图 plt.scatter(y_test, y_pred) plt.plot([0, 1], [0, 1], '--', color='red') plt.xlabel('True') plt.ylabel('Predicted') plt.title('R2: {}'.format(r2)) plt.show() 需要注意的是,这里使用的是全样本梯度下降法,可能会存在过拟合的问题,可以通过加入早停法等方法进行改进。另外,这里使用的是最简单的单层网络,如果需要提高拟合度,可以考虑使用多层神经网络。

最新推荐

基于深度学习的电力工控网络异常流量检测技术研究(毕设&课设论文参考).caj

资源说明 【1】资源属于对应项目写的论文,写作规范、逻辑紧密、用语专业严谨,内容丰富饱满,可读性强,很适合对该领域的初学者、工程师、在校师生、毕业生等下载使用。 【2】论文适合学习借鉴参考,为您的类似项目开发或写作提供专业知识介绍及思路。 【3】资源非项目源码,如需项目源码,请私信沟通,不Free。 【4】可用于毕业设计、课程设计,切记完全照抄! 【5】鼓励大家下载后仔细研读,多看、多思考!搞懂里面的知识点及实验内容。欢迎交流学习!

SLAM-使用多波束声纳的机器人水下SLAM导航定位-优质项目实战.zip

SLAM_使用多波束声纳的机器人水下SLAM导航定位_优质项目实战

electron vue/cli 文件

electron vue/cli 文件

手机wrap网站元HTML5移动WEBAPP果蔬菜类购物手机模板源码

手机wrap网站元HTML5移动WEBAPP果蔬菜类购物手机模板源码本资源系百度网盘分享地址

【路径规划】基于matlab人工电场算法栅格地图机器人最短路径规划【含Matlab源码 2861期】.mp4

CSDN佛怒唐莲上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描视频QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

DAC简介及参考电路PPT学习教案.pptx

DAC简介及参考电路PPT学习教案.pptx

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

OceanBase数据库简介及原理解析

# 1. OceanBase数据库概述 ## 1.1 OceanBase数据库的发展历程 OceanBase数据库是由阿里巴巴集团自主研发的一款分布式关系型数据库系统,起源于阿里集团的业务需求和技术挑战。自2010年开始研发,经过多年的迭代和优化,OceanBase已经成为阿里巴巴集团重要的核心数据库产品之一。在实际的业务场景中,OceanBase已经被广泛应用于金融、电商、物流等各个领域。 ## 1.2 OceanBase数据库的特点和优势 OceanBase数据库具有以下特点和优势: - **分布式架构**:OceanBase采用多副本分布式架构,可以实现高可用和数据容灾。 -

python的pandas读取excel怎么将excel表里的列从1开始而不是0

在 Pandas 中,数据框的列默认从0开始编号,但我们可以通过自定义函数来进行数据列的转换。可以先将读取的数据框列的第一个值设为1,然后对后续列进行递增处理。 以下是示例代码: ```python import pandas as pd # 读取 Excel 文件 df = pd.read_excel('your_excel_file.xlsx') # 定义函数将列从1开始 def reset_column(x): return str(int(x) + 1) # 应用函数到所有列名 df = df.rename(columns=reset_column) # 打印数据框

第三章薪酬水平、薪酬系统的运行与控制.pptx

第三章薪酬水平、薪酬系统的运行与控制.pptx