“Increase in the wealth per capita fosters democracy; but the latter, at least according to what we have been able to observe up to now, entails great destruction of wealth and even eventually dries up the sources of it. Hence it is its own grave-digger, it destroys what gave it birth.”

“For many events, roughly 80% of the effects come from 20% of the causes”

Vilfredo Pareto

Čeprav bi moral biti Pareto bolj poznan po svojih knjigah o ekonomiji (npr. The Rise and Fall of Elites), pa ga večina pozna po pravilu 80 - 20, ki ga je po Paretu poimenoval J. M. Juran.

Zanimivosti:

  • Revolucije se ne zgodijo od spodaj navzgor ampak ob menjavi elit. Običajni ljudje zgolj podpirajo ene ali druge.

  • Socialistične voditelje je poimenoval “aristokracija razbojnikov” in Marxa ni maral.

  • Demokracija je iluzija, vladajoči razred se vedno pojavi in se obogati. Ključno vprašanje je, kako aktivno vladajoči vladajo.

  • Paretov optimum: sistem se nahaja v ekonomskem maksimumu, ko nihče ne more izboljšati svojega položaja, brez da ga komu poslabša.

Paretov diagram: To je histogram, ki je urejen glede na frekvenco pojavov, ki prikazujejo, koliko rezultatov je povzročil posamezni prepoznani vzrok. Uporablja se med drugim v procesih zagotavljanja kakovosti.

R

V R ga najlažje narišeš s paketom qcc:

library(qcc)

napake        <- c( 73,  25,  12,  14,  8)
names(napake) <- c("A", "B", "C", "D", "E")

pareto.chart(napake, 
             ylab = "Frekvenca napak",
             ylab2 = "Komulativa v %",
             main="Vzorec pareto diagrama")

##    
## Pareto chart analysis for napake
##      Frequency  Cum.Freq. Percentage Cum.Percent.
##   A  73.000000  73.000000  55.303030    55.303030
##   B  25.000000  98.000000  18.939394    74.242424
##   D  14.000000 112.000000  10.606061    84.848485
##   C  12.000000 124.000000   9.090909    93.939394
##   E   8.000000 132.000000   6.060606   100.000000

Več o paketu qcc:

Če primerjam podoben vzorec s običajnim ggplot2 načinom, je qcc mnogo enostavnejši, samo oblikovanje po meri, pa je možno v obeh primerih.


KLIKNI ZA 2. PRIMER

library(knitr)
library(ggplot2)

imena    <- c("A", "B", "C", "D", "E")
napake   <- c( 73,  25,  12,  14,  8)

df <- data.frame(ime = imena, napake = napake, stringsAsFactors = FALSE)

#razporedim padajoče brez tidyversa
df <- df[order(df$napake, decreasing = TRUE), ]

#kategorične spremenljivke v faktorje in levelse določim enako razporejene, 
#drugače ggplot razporedi sam razporedi po abecedi
df$ime <- factor(df$ime, 
                    levels = df$ime[order(df$napake, decreasing = TRUE)])

#komulativa
df$komulativa <- cumsum(df$napake)

knitr::kable(df) #samo prikaz df v tabeli
ime napake komulativa
1 A 73 73
2 B 25 98
4 D 14 112
3 C 12 124
5 E 8 132
ggplot(df, aes(x= df$ime, y=df$napake)) +
  geom_bar(fill = "#EE7600", stat="identity") + 
  geom_point(aes(x= df$ime, y=df$komulativa), color = "#1874CD", pch=16, size=2)  +
  geom_path(aes(x= df$ime, y=df$komulativa, group=1), color = "#1874CD", lty=2, size=0.9) + 
  theme(axis.text.x = element_text(angle=90, vjust=0.6)) +
  labs(title = "Pareto diagram", subtitle = "vzorec", x = "vzorci", y ="napake")


Python

V Pythonu je zadeva podobna. Obstajajo paketi za izdelavo in obstaja “ročni” načih. V nadaljevanje izdelano z matplotlib brez kakšnih “import pareto”.

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter
imena    = ["A", "B", "C", "D", "E"]
napake   = [73,  25,  12,  14,  8]
df = pd.DataFrame({'napake': napake})
df.index = imena
df = df.sort_values(by="napake", ascending=False)
df["cumpercentage"] = df["napake"].cumsum()/df["napake"].sum()*100
fig, ax = plt.subplots()
ax.bar(df.index, df["napake"], color="C0")
ax2 = ax.twinx()
ax2.plot(df.index, df["cumpercentage"], color="C1", marker="D", ms=7)
ax2.yaxis.set_major_formatter(PercentFormatter())
ax.tick_params(axis="y", colors="C0")
ax2.tick_params(axis="y", colors="C1")
plt.show()

Excel

Da ne pozabim na excel, kjer je vstavljanje Pareto diagrama v Excel2016 lepo integrirano in enostavno. Makro spodaj je samo za reproduktivni prikaz, enostavneje je preko menija.


'Podatki
    Range("A1").Value = "ime"
    Range("A2").Value = "A"
    Range("A3").Value = "B"
    Range("A4").Value = "C"
    Range("A5").Value = "D"
    Range("A6").Value = "E"

    Range("B1").Value = "napaka"
    Range("B2").Value = "73"
    Range("B3").Value = "25"
    Range("B4").Value = "12"
    Range("B5").Value = "14"
    Range("B6").Value = "8"

'Tabela iz podatkov
    Set tabela = ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$B$6"), , xlYes)
    tabela.Range.Select
'Pareto diagram
    Set graf = ActiveSheet.Shapes.AddChart2(366, xlPareto)
    graf.Chart.ChartTitle.Text = "Pareto"
    With graf
        .Top = Range("B8").Top
        .Left = Range("B8").Left
    End With

Ukaz za vstavljanje najdeš v meniju “Vstavi” med grafikoni.