Z-score标准化的python代码

部分代码如下

import numpy as np
import pandas as pd
import xlrd
import xlwt
from numpy import ravel
from xlutils.copy import copy

def Z_Score(data):
    lenth = len(data)
    total = sum(data)
    ave = float(total) / lenth
    tempsum = sum([pow(data[i] - ave, 2) for i in range(lenth)])
    tempsum = pow(float(tempsum) / lenth, 0.5)
	......

def excel_one_line_to_list():
    df = pd.read_excel("XXX.xls", usecols=[0],names=None)  # 读取项目名称和行业领域两列,并不要列名
    df1 = np.array(df)
    df2 = ravel(df1)
    df3 = df2.tolist()
    list = Z_Score(df3)
    excel1 = '表格1.xls'  # 表名
    # 想写入哪个表格后面就跟哪个表格
    excel_name = 'excel/' + excel1  # 记得新建一个文件夹“excel”(在项目下面)
    # sheet名称
    sheet_name = '测试数据'
    # 表头
    title = ['Sequence']
	......

完整代码链接:Z-score标准化的python代码

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是您所需的Python代码: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt from pandas.api.types import CategoricalDtype from sklearn.preprocessing import MinMaxScaler, StandardScaler # 生成100*5的随机数值矩阵 np.random.seed(0) data = np.random.rand(100, 5) # 随机生成10%的缺失值 mask = np.random.choice([True, False], size=data.shape, p=[0.1, 0.9]) data[mask] = np.nan # 填充缺失值为均值和最可能出现的数值 data_mean = pd.DataFrame(data).fillna(pd.DataFrame(data).mean()).values data_mode = pd.DataFrame(data).fillna(pd.DataFrame(data).mode().iloc[0]).values data_mode = np.round(data_mode) # 0-1规范化 scaler = MinMaxScaler() data_mean_norm = scaler.fit_transform(data_mean) data_mode_norm = scaler.fit_transform(data_mode) # Z-score规范化 scaler = StandardScaler() data_mean_zscore = scaler.fit_transform(data_mean) data_mode_zscore = scaler.fit_transform(data_mode) # 将数据划分为三个分箱 bin_labels = ['A', 'B', 'C'] data_bins = np.zeros_like(data_mode, dtype=str) for i in range(data_mode.shape[1]): bin_edges = pd.cut(data_mode[:, i], bins=3, labels=bin_labels, retbins=True)[1] data_bins[:, i] = pd.cut(data_mode[:, i], bins=bin_edges, labels=bin_labels) # 绘制平行坐标图 fig, axs = plt.subplots(1, 3, figsize=(15, 5)) for i, (data_norm, title) in enumerate(zip([(data_mean_norm, '均值填充'), (data_mode_norm, '众数填充'), (data_mode_zscore, 'Z-score规范化')], axs)): data_norm, norm_title = data_norm df = pd.DataFrame(data_norm, columns=['A1', 'A2', 'A3', 'A4', 'A5']) df['bins_A1'] = pd.cut(data_mode[:, 0], bins=bin_edges, labels=bin_labels) df['bins_A2'] = pd.cut(data_mode[:, 1], bins=bin_edges, labels=bin_labels) df['bins_A3'] = pd.cut(data_mode[:, 2], bins=bin_edges, labels=bin_labels) df['bins_A4'] = pd.cut(data_mode[:, 3], bins=bin_edges, labels=bin_labels) df['bins_A5'] = pd.cut(data_mode[:, 4], bins=bin_edges, labels=bin_labels) df = df.melt(id_vars=['bins_A1', 'bins_A2', 'bins_A3', 'bins_A4', 'bins_A5'], var_name='attribute', value_name='value') df['value'] = np.round(df['value'], 2) df = df.sort_values(by=['bins_A1', 'bins_A2', 'bins_A3', 'bins_A4', 'bins_A5']) palette = dict(zip(bin_labels, ['tab:blue', 'tab:orange', 'tab:green'])) axs[i].set_title(title) axs[i].set_xticks(range(len(df['attribute'].unique()))) axs[i].set_xticklabels(['A1', 'A2', 'A3', 'A4', 'A5']) axs[i].set_yticks(range(len(bin_labels))) axs[i].set_yticklabels(bin_labels) axs[i].set_ylim(-0.1, 1.1) for j, (label, group) in enumerate(df.groupby(['bins_A1', 'bins_A2', 'bins_A3', 'bins_A4', 'bins_A5'])): axs[i].plot(range(len(df['attribute'].unique())), group['value'], color=palette[label[0]], alpha=0.7) if j == 0: axs[i].fill_between(range(len(df['attribute'].unique())), 0, group['value'], color=palette[label[0]], alpha=0.2) elif j == len(df.groupby(['bins_A1', 'bins_A2', 'bins_A3', 'bins_A4', 'bins_A5'])) - 1: axs[i].fill_between(range(len(df['attribute'].unique())), df['value'].min(), group['value'], color=palette[label[0]], alpha=0.2) fig.tight_layout() plt.show() ``` 说明: 1. 首先使用`numpy.random.rand`生成100*5的随机数值矩阵,然后使用`numpy.random.choice`生成10%的缺失值掩码,并将对应位置的数据置为`np.nan`。 2. 对于每一列缺失值,使用`pandas.DataFrame.fillna`方法将其分别填充为该列的均值和最可能出现的数值(取整数)。 3. 对于填充后的数据,分别使用`sklearn.preprocessing.MinMaxScaler`和`sklearn.preprocessing.StandardScaler`进行0-1规范化和Z-score规范化。 4. 对于分箱,使用`pandas.cut`方法将每个属性划分为三个等宽的分箱,并标记每个数据样本在对应Ai的分箱值。 5. 最后,使用`matplotlib.pyplot.subplots`方法创建平行坐标图,并使用`matplotlib.pyplot.plot`和`matplotlib.pyplot.fill_between`方法绘制每个分箱内的数据线和区域。其中,使用`pandas.DataFrame.melt`方法将数据转换为长格式,以便于使用`seaborn`等绘图库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郁慕斯-ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值