Numworks (Python): Control Charts
The following Python script develops the x-bar and R control charts.
Formulas used:
mean_average = Σ(mean of each sample)
range_average = Σ(range of each sample)
x-Bar Chart:
low = mean_average - a2 * range_average
high = mean_average + a2 * range_average
R chart:
low = d3 * range_average
high = d4 * range_average
Python script (done with Numworks): ctrlchart.py
from math import *
# control chart function
# run as a defined function
# HP 65 Stat Pac 2, 1975
def ctrlchart():
#elements
a2=[0,0,1.88,1.02,.73,.58,.48,.42,.37,.34,.31,.29,.27,.25,.24,.22,.21,.20,.19,.19,.18]
d3=[0,0,0,0,0,0,0,.08,.14,.18,.22,.26,.28,.31,.33,.35,.36,.38,.39,.4,.41]
d4=[0,0,3.27,2.57,2.28,2.11,2,1.92,1.86,1.82,1.78,1.74,1.72,1.69,1.67,1.65,1.64,1.62,1.61,1.6,1.59]
# calculation
meansum=0
rangesum=0
n=int(input("number of samples? "))
m=int(input("sample size (2-20)? "))
for i in range(n):
x=[]
for j in range(m):
# adjust to show proper numbering
s="x("+str(i+1)+","+str(j+1)+")? "
p=eval(input(s))
x.append(p)
rangesum+=max(x)-min(x)
meansum+=sum(x)/m
rangeavg=rangesum/n
meanavg=meansum/n
lowmean=meanavg-rangeavg*a2[m]
highmean=meanavg+rangeavg*a2[m]
lowrange=d3[m]*rangeavg
highrange=d4[m]*rangeavg
print("x-bar chart")
print("L: "+str(lowmean))
print("H: "+str(highmean))
print("range chart")
print("L: "+str(lowrange))
print("H: "+str(highrange))
Source
“x-bar and R Control Charts”. HP 65 Stat Pac 2. Hewlett Packard. 1975. pp. 98 – 101
Eddie
All original content copyright, © 2011-2026. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.