Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >pandas+maplotlib 计算并绘制柏拉图(排列图)

pandas+maplotlib 计算并绘制柏拉图(排列图)

作者头像
用户6021899
发布于 2020-12-14 03:43:23
发布于 2020-12-14 03:43:23
91200
代码可运行
举报
运行总次数:0
代码可运行

某型号电子产品有两三百个测试参数,下图是一批该产品的测试数据,每一行代表一个unit,每一列代表一个测试参数。

下面是利用pandas,依据文本文件中自定义的参数优先级,计算各个参数坏品的百分比:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
import numpy as np
import pandas as pd
import matplotlib
from matplotlib import pyplot as plt
import matplotlib.ticker as ticker
matplotlib.rcParams.update({"font.sans-serif": "SimHei",
                            "axes.unicode_minus": False,
                            'mathtext.fontset': "cm"})

csvPath = r"H:\test.csv" 
Lot = os.path.basename(csvPath).split("_")[0]
print("Lot: %s" %Lot)

df = pd.read_csv(csvPath,skiprows=[0])
print("初始的总行数(含两行specs):", df.shape[0])
#有复测,去重,保留靠后的数据
df_specs = df.loc[0:2,:].copy()
df_data = df.loc[2:,:].copy()#去重不能包含spec定义所在的两行
del df
df_data.drop_duplicates(subset=["Part ID"], keep = "last",inplace = True)
print("去重后的测试数据行数:", df_data.shape[0])
#for col in df:
    #print(col)
df_fail = df_data[df_data["Pass/Fail"] =="Fail"]
print("去重后的坏品数:", df_fail.shape[0]) 
#print(len(df_fail))
yield_ = 1-len(df_fail)/(len(df_data))
print("yield:","%.2f%%"%(yield_*100))
#df_pass = df[df["Pass/Fail"] =="Pass"]

with open("spec priority.txt","rt")as priority:
    cols_withSpecs = priority.readlines()
    cols_withSpecs = [line.rstrip("\n") for line in cols_withSpecs if not (line=="\n" or line.startswith("#"))] #remove \n
#print(cols_withSpecs)
fail = df_fail.loc[:,cols_withSpecs]
pareto_dict = dict()
NG_qty = len(fail)
NG_qty_ = NG_qty
print("坏品总数", NG_qty)
su = 0
for s in cols_withSpecs:
    #求出当前参数在spec 以内的dataFrame
    #发现 压线也算成fail,所有下面的>= 改成>, <= 改成<!  错误的,至少在 DUT_READ2_VALUE, 值为0可以pass
    fail = fail[(fail[s] >= df_specs[s][0]) & (fail[s]<= df_specs[s][1])]# & 的优先级高于比较运算。左右两边须括号
    pareto_dict [s] = NG_qty - len(fail)
    su += NG_qty - len(fail)
    #print(su)
    NG_qty = len(fail)
print("共%d项有spec的参数"%len(cols_withSpecs))
pareto  = [[k,v] for k,v in pareto_dict.items() if v>0] #去掉为0的项
pareto.sort(key = lambda x: x[1],reverse = True)

pareto.insert(0,["Pass",len(df_data)- NG_qty_])
#print(pareto)
def to_percent(temp, position):
    return '%.2f'%(100*temp) + '%'

acc =[]
sum_ = 0
for s,qty in pareto:
    sum_ += qty
    acc.append(float(sum_) / len(df_data)

再根据计算得到的数据绘制Pareto 图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with plt.style.context('bmh'):    
    fig, ax = plt.subplots(1,1)
    xlabels = [s for s,qty in pareto]
    y = [float(qty)/len(df_data) for s,qty in pareto]
    ax.bar(xlabels, y)
    #data label
    for i in range(len(xlabels)):
        plt.text(xlabels[i], y[i]+0.0002, '%.2f%%' % (y[i]*100), ha='center', va= 'bottom',fontsize=10,color="red")
    ax.set_title("xxxxx Yield bridge" +"\n(yield:%.2f%%)"%(100*yield_),fontsize =18)
    for ticklabel in ax.xaxis.get_ticklabels():
        ticklabel.set_rotation(+90)#0度表示水平从左向右
    ax.yaxis.set_major_formatter(ticker.FuncFormatter(to_percent))
    ax.set_ylabel("ration[%] out of input")
    ax.set_ylim(0,0.1)
    #ax.grid(axis="y",which='minor') # ax.grid(axis="y",which='major')
    ax2 = ax.twinx()
    ax2.plot([s for s,qty in pareto], acc,'go--', linewidth=2, markersize=5)
    ax2.yaxis.set_major_formatter(ticker.FuncFormatter(to_percent))
    ax2.set_ylabel("acc.[%]")
    ax2.set_ylim(0.8,1.0)
fig.show()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python-Pandas_Alive包-动态图表全搞定
关于动态条形图,小F以前推荐过「Bar Chart Race」这个库。三行代码就能实现动态条形图的绘制。
DataCharm
2021/02/22
2.6K0
Python-Pandas_Alive包-动态图表全搞定
利用Python绘制全国各省新型冠状病毒疫情变化动态图
题图:Image by enriquelopezgarre from Pixabay
猴哥yuri
2020/02/25
2.6K0
增强分析可读性-Pandas教程
作者 | Pathairush Seeda 编译 | VK 来源 | Towards Data Science
磐创AI
2021/04/21
1K0
增强分析可读性-Pandas教程
Python数据分析---matplotlib可视化(热图-空气质量)
偶然看到网上国家统计数据,利用Python数据分析自己做了几种图表练习。主要采用Pandas来做数据统计,matplotlib来做图表可视化。
MiaoGIS
2020/03/10
1.5K0
Python数据分析---matplotlib可视化(热图-空气质量)
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
一章内容介绍三块内容,感觉哪个都没说清。 In[1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline 1. matplotlib入门 Matplotlib提供了两种方法来作图:状态接口和面向对象。 # 状态接口是通过pyplot模块来实现的,matplotlib会追踪绘图环境的当前状态 # 这种方法适合快速画一些简单
SeanCheney
2018/11/29
1.7K0
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
从入门到冠军 中国移动人群画像赛TOP1经验分享
郑雨轩,Datawhale数据科学团队负责人,长期活跃在国内外数据竞赛领域,拥有较为丰富的竞赛经验,最近比赛经历:
Datawhale
2019/07/08
1.6K0
从入门到冠军 中国移动人群画像赛TOP1经验分享
用Python绘制全国各省新型冠状病毒疫情状况
本文使用数据说明:数据截至2月2日24时,累计报告确诊病例17205例,现有重症病例2296例,累计死亡病例361例,累计治愈出院475例。疑似病例21558例。
博文视点Broadview
2020/06/10
1.3K0
用Python绘制全国各省新型冠状病毒疫情状况
读者答疑 | python怎么计算流函数
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/08/29
2660
读者答疑 | python怎么计算流函数
Python数据分析---matplotlib可视化(热图-污染物排放)
偶然看到网上国家统计数据,利用Python数据分析自己做了几种图表练习。主要采用Pandas来做数据统计,matplotlib来做图表可视化。
MiaoGIS
2020/03/10
1.3K0
Python数据分析---matplotlib可视化(热图-污染物排放)
数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(上)
50个Matplotlib图的汇编,在数据分析和可视化中最有用。此列表允许您使用Python的Matplotlib和Seaborn库选择要显示的可视化对象。
石晓文
2019/10/31
1.6K0
机器学习扩展包MLXtend绘制多种图形
mlxtend(machine learning extensions,机器学习扩展)是一个用于日常数据分析、机器学习建模的有用Python库。mlxtend可以用作模型的可解释性,包括统计评估、数据模式、图像提取等。
皮大大
2024/06/13
2870
Python-Matplotlib 动态柱形图绘制(数据分享)
这期开始,我们将公众号刚开始的不成熟风格文章推文改成与现在相统一的风格,同时也为了解决大家复制不了代码的问题,本期推文,将介绍使用Python-matplotlib 绘制动态柱形图的教程推文,主要涉及的知识点如下:
DataCharm
2021/02/22
1.6K0
Python-Matplotlib 动态柱形图绘制(数据分享)
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
参考:Rougier N P, Droettboom M, Bourne P E, et al. Ten Simple Rules for Better Figures[J]. PLOS Computational Biology【IF 4.7】, 2014, 10(9).感兴趣戳:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4161295/pdf/pcbi.1003833.pdf
DataCharm
2021/02/22
1.5K0
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
Matpotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法
最近有小伙伴私信我关于matplotlib时间类型刻度的设置问题,第一感觉就是官网有好多例子介绍啊
数据森麟
2020/09/24
2.9K0
Matpotlib绘图遇到时间刻度就犯难?现在,一次性告诉你四种方法
趋势(一)利用python绘制折线图
折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。折线图既能直观地显示数量随时间的变化趋势,也能展示两个变量的关系。
HsuHeinrich
2024/11/23
2060
趋势(一)利用python绘制折线图
用 Python 制作子弹图也这么简单,爱了~
众所周知,Python 的应用是非常广泛的,今天我们就通过 matplotlib 库学习下如何制作精美的子弹图
周萝卜
2021/10/25
9110
matplotlib绘图基础[通俗易懂]
http://blog.csdn.net/pipisorry/article/details/37742423
全栈程序员站长
2022/09/01
6.6K0
matplotlib绘图基础[通俗易懂]
数据科学 IPython 笔记本 8.13 自定义刻度
Matplotlib 的默认刻度定位器和格式化程序,在许多常见情况下通常都足够了,但对于每个绘图都不是最佳选择。本节将提供几个刻度位置和格式的示例,它们调整你感兴趣的特定绘图类型。
ApacheCN_飞龙
2022/05/07
4.4K0
数据科学 IPython 笔记本 8.13 自定义刻度
Matplotlib从入门到精通04-文字图例尽眉目
参考: https://datawhalechina.github.io/fantastic-matplotlib/%E7%AC%AC%E4%B8%80%E5%9B%9E%EF%BC%9AMatplotlib%E5%88%9D%E7%9B%B8%E8%AF%86/index.html
用户2225445
2023/10/16
2940
Matplotlib从入门到精通04-文字图例尽眉目
显示组成一个图的多个元素的名称的分布。
import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import AutoMinorLocator, MultipleLocator, FuncFormatter np.random.seed(19680801) X = np.linspace(0.5, 3.5, 100) Y1 = 3+np.cos(X) Y2 = 1+np.cos(1+X/0.75)/2 Y3 = np.random.uniform(Y
裴来凡
2022/05/28
8120
显示组成一个图的多个元素的名称的分布。
推荐阅读
相关推荐
Python-Pandas_Alive包-动态图表全搞定
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验