In [89]:
# special IPython command to prepare the notebook for matplotlib
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import random
from sklearn.linear_model import LinearRegression
from scipy import polyval, polyfit
from scipy.stats import pearsonr, linregress
# set some nicer defaults for matplotlib
from matplotlib import rcParams
#colorbrewer2 Dark2 qualitative color table
dark2_colors = [(0.10588235294117647, 0.6196078431372549, 0.4666666666666667),
(0.8509803921568627, 0.37254901960784315, 0.00784313725490196),
(0.4588235294117647, 0.4392156862745098, 0.7019607843137254),
(0.9058823529411765, 0.1607843137254902, 0.5411764705882353),
(0.4, 0.6509803921568628, 0.11764705882352941),
(0.9019607843137255, 0.6705882352941176, 0.00784313725490196),
(0.6509803921568628, 0.4627450980392157, 0.11372549019607843)]
rcParams['figure.figsize'] = (12, 6.5)
rcParams['figure.dpi'] = 150
rcParams['axes.color_cycle'] = dark2_colors
rcParams['lines.linewidth'] = 2
rcParams['axes.facecolor'] = 'white'
rcParams['font.size'] = 18
rcParams['patch.edgecolor'] = 'white'
rcParams['patch.facecolor'] = dark2_colors[0]
rcParams['font.family'] = 'StixGeneral'
def remove_border(axes=None, top=False, right=False, left=True, bottom=True):
"""
Minimize chartjunk by stripping out unnecesary plot borders and axis ticks
The top/right/left/bottom keywords toggle whether the corresponding plot border is drawn
"""
ax = axes or plt.gca()
ax.spines['top'].set_visible(top)
ax.spines['right'].set_visible(right)
ax.spines['left'].set_visible(left)
ax.spines['bottom'].set_visible(bottom)
#turn off all ticks
ax.yaxis.set_ticks_position('none')
ax.xaxis.set_ticks_position('none')
#now re-enable visibles
if top:
ax.xaxis.tick_top()
if bottom:
ax.xaxis.tick_bottom()
if left:
ax.yaxis.tick_left()
if right:
ax.yaxis.tick_right()
In [30]:
hist_df = pd.read_csv(r'C:\Users\Sebastian\Dropbox\Semester 6\BPM QM\Werkzeuge des Qualitaetsmanagements\Fallstudien\Histogramm\Fallstudie_Histogramm_raw_data.csv')
In [31]:
hist_df.head()
Out[31]:
In [32]:
hist_df['Dauer [Stunden]'].mean()
Out[32]:
In [33]:
hist_df['Dauer [Stunden]'].std()
Out[33]:
In [34]:
bin_num = hist_df['Dauer [Stunden]'].max()/float(20)
hist_df['Dauer [Stunden]'].hist(bins=bin_num)
remove_border()
plt.grid(False)
plt.grid(axis = 'y', color ='white', linestyle='-')
plt.show()
In [35]:
z = [50*.995 ** k for k in xrange(1200)]
plt.plot(z)
remove_border()
In [36]:
scatter_df = pd.read_csv(r'C:\Users\Sebastian\Dropbox\Semester 6\BPM QM\Werkzeuge des Qualitaetsmanagements\Fallstudien\Scatter-Diagramm\Scatter-Diagramm-raw_data.csv')
In [52]:
scatter_df = scatter_df.astype(float)
scatter_df = scatter_df.dropna()
In [65]:
print scatter_df.head()
In [54]:
#print scatter_df.corr()
print pearsonr(scatter_df['Abwicklungszeit [sec]1'], scatter_df['Auftragsvolumen1'])
print pearsonr(scatter_df['Abwicklungszeit [sec]2'], scatter_df['Auftragsvolumen2'])
In [55]:
mean_abw_1 = scatter_df['Abwicklungszeit [sec]1'].mean()
mean_abw_2 = scatter_df['Abwicklungszeit [sec]2'].mean()
mean_auf_1 = scatter_df['Auftragsvolumen1'].mean()
mean_auf_2 = scatter_df['Auftragsvolumen2'].mean()
std_abw_1 = scatter_df['Abwicklungszeit [sec]1'].std()
std_abw_2 = scatter_df['Abwicklungszeit [sec]2'].std()
std_auf_1 = scatter_df['Auftragsvolumen1'].std()
std_auf_2 = scatter_df['Auftragsvolumen2'].std()
In [61]:
cov_1 = 0
zw_1 = 0
cov_2 = 0
zw_2 = 0
N = 0
for i in scatter_df.iterrows():
N += 1
zw_1 += (i[1][1] - mean_abw_1)*(i[1][2] - mean_auf_1)
zw_2 += (i[1][4] - mean_abw_2)*(i[1][5] - mean_auf_2)
cov_1 = zw_1/float(N)
cov_1 = cov_1/(std_abw_1 * std_auf_1)
cov_2 = zw_2/float(N)
cov_2 = cov_2/(std_abw_2 * std_auf_2)
print cov_1
print cov_2
Das ist eine sehr hohe Correlation. Durch die P-Value < .001 ist das Ergebnis statistisch signifikant und ist es wahrscheinlich, dass der eine Wert den anderen erklärt. Auch wenn Correlation nicht gleich Causation ist, macht es sinn, dass ein hohes Auftragsvolumen der Grund für lange Reperaturzeiten ist.
In [90]:
def rsquared(x, y):
""" Return R^2 where x and y are array-like."""
slope, intercept, r_value, p_value, std_err = linregress(x, y)
return r_value**2
In [92]:
(ar1, br1) = polyfit(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'],1)
xr1=polyval([ar1,br1],scatter_df['Auftragsvolumen1'])
print "alpha 1", ar1
print "beta 1", br1
print "r square 1", rsquared(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'])
print
(ar2, br2) = polyfit(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'],1)
xr2=polyval([ar2,br2],scatter_df['Auftragsvolumen2'])
print "alpha 2", ar2
print "beta 2", br2
print "r square 2", rsquared(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'])
In [94]:
plt.scatter(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'], color=dark2_colors[1])
plt.plot(scatter_df['Auftragsvolumen1'],xr1,'.-', color=dark2_colors[2])
remove_border()
plt.title('Stichprobe 1')
plt.xlabel('Auftragsvolumen')
plt.ylabel('Abwicklungszeit')
plt.xlim([0, 25000])
plt.show()
plt.scatter(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'], color=dark2_colors[3])
plt.plot(scatter_df['Auftragsvolumen2'],xr2,'.-', color=dark2_colors[4])
plt.title('Stichprobe 2')
plt.xlabel('Auftragsvolumen')
plt.ylabel('Abwicklungszeit')
plt.xlim([0, 25000])
remove_border()
plt.show()
In [116]:
z1 = polyfit(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'],2)
z2 = polyfit(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'],2)
In [124]:
plt.scatter(scatter_df['Auftragsvolumen1'], scatter_df['Abwicklungszeit [sec]1'], color=dark2_colors[1])
plt.plot(scatter_df['Auftragsvolumen1'],xr1,'.-', color=dark2_colors[2])
remove_border()
plt.title('Stichprobe 1')
plt.xlabel('Auftragsvolumen')
plt.ylabel('Abwicklungszeit')
plt.xlim([0, 25000])
#polyfit
xp = np.linspace(0, 25000, 100)
p = np.poly1d(z1)
plt.plot(xp, p(xp) )
plt.legend(['linear', 'quadratic'], loc=4)
plt.show()
In [120]:
plt.scatter(scatter_df['Auftragsvolumen2'], scatter_df['Abwicklungszeit [sec]2'], color=dark2_colors[3])
plt.plot(scatter_df['Auftragsvolumen2'],xr2,'.-', color=dark2_colors[5])
plt.title('Stichprobe 2')
plt.xlabel('Auftragsvolumen')
plt.ylabel('Abwicklungszeit')
plt.xlim([0, 25000])
remove_border()
#polyfit
xp = np.linspace(0, 25000, 100)
p = np.poly1d(z2)
plt.plot(xp, p(xp) )
plt.legend(['linear', 'quadratic'], loc=4)
plt.show()
In [ ]: