基于以下代码,不要改变其逻辑和目的,将其修改得更加灵活。例如直接抓path = r’D:\Users\x00197\Desktop\SRAM_Result_data中存在的log文件名中按照下划线拆分,得到r’D:\Users\x00197\Desktop\SRAM_Result_data\第一个元素\第二个元素,将以下代码修改为一个def函数,方便引用
import pandas as pd
import Config
import os
import Plot_map
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy import stats
path = r’D:\Users\x00197\Desktop\SRAM_Result_data\AE0095.041\13’
LotID = ‘AE0095.041’
WaferID = ‘09’
Scramble_path = f’{path}/02_Test_Pattern’
def get_filenames(directory):
filenames = os.listdir(directory)
return filenames
files = get_filenames(f’{Scramble_path}')
wafer = pd.read_csv(‘55_wafermap.csv’)
wafer = pd.read_csv(r"D:\Users\x00708\SRAM_Classification-242终极版\55_wafermap.csv")
data = []
for ind in wafer.index:
Die_X = wafer[‘Die_X’][ind]
Die_Y = wafer[‘Die_Y’][ind]
num1 = 0 num2 = 0 for file in files: if Die_X == int(file.split('_')[0]) and Die_Y == int(file.split('_')[1]): if 'normal_r' in file: if float(file.split('_')[6]) > num1: num1 = float(file.split('_')[6]) if 'normal_w' in file: if float(file.split('_')[6]) > num2: num2 = float(file.split('_')[6]) if not (num1 == 0 and num2 == 0): data.append([Die_X, Die_Y, num1, num2]) # 每个die在read/write时fail的最高电压(也可以是pass的最低电压,pass未显示)
data = pd.DataFrame(data)
data.columns = [‘Die_X’, ‘Die_Y’, ‘W’, ‘R’]
data[‘R’] = data[‘R’] + 0.02 # ?为啥+0.02
data[‘W’] = data[‘W’] + 0.02
data.to_csv(f’{path}/R_W.csv’)
data_sorted1 = np.sort(data[data[‘R’] < 1.32][‘R’]) # 取R列<1.32时的R列的值并排序
将序列中的每个值除以数据点总数,序列中的值是长度/数值的数量,并非以data里的具体数值来除,该除表示小于data里具体数值的概率
cdf1 = np.arange(1, len(data_sorted1) + 1) / len(data_sorted1) # cdf1是一个数组,表示每个数据点对应的累积概率
cdf_nor1 = stats.norm.ppf(cdf1) # 标准化/归一化
data_sorted2 = np.sort(data[data[‘W’] < 1.32][‘W’])
print(data_sorted2)
cdf2 = np.arange(1, len(data_sorted2) + 1) / len(data_sorted2)
cdf_nor2 = stats.norm.ppf(cdf2)
data = np.array([0.0001, 0.001, 0.1, 0.5, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 0.95, 0.99, 0.999, 0.9999])
data = np.array([0.01, 0.1, 0.30, 0.50, 0.70, 0.90, 0.99])
xtick = [0.68,0.72,0.76,0.8,0.84,0.88,0.92,0.96,1.0,1.04,1.08,1.12,1.16,1.2,1.24,1.28,1.32,1.36]
normalized_data = stats.norm.ppf(data)
print(normalized_data)
tick = []
for i in range(len(data)):
tick.append(str(data[i] * 100) + ‘%’)
plt.figure(figsize=(10, 6))
plt.plot(data_sorted1, cdf_nor1, marker=‘.’, linestyle=‘-’, color=‘green’, label=‘Read’)
plt.plot(data_sorted2, cdf_nor2, marker=‘.’, linestyle=‘-’, color=‘orange’, label=‘Write’)
plt.plot(data_sorted, cdf, marker=‘.’, linestyle=‘none’, color=‘green’)
plt.title(‘AE0095#13 R/W Fail CDF’)
plt.xlim(0.68, 1.34)
plt.yticks(normalized_data, tick)
plt.xticks(xtick, xtick)
plt.xlabel(‘Voltage’)
plt.ylabel(‘CDF’)
plt.legend()
plt.grid(True)
plt.savefig(f’{path}/R_W.jpg’, dpi=200)
plt.close()
plt.show()
# 示例数据
print(normalized_data)
# sns.scatterplot(x=data, y=normalized_data)
# plt.show()
最新发布