¿Qué ocurre con el avión Douglas DC-3?

Trasteando con el Notebook de Sofia2, pero esta vez no con Zeppelin si no con Anaconda / Jupyter / Python y con uno de los dataset típicos que hay en la red, el de los accidentes de aviones desde 1908 (Airplane Crashes Since 1908), me encuentro que el modelo de avión Douglas DC-3 tiene en su haber la triste marca de más de 4000 muertos en accidentes de vuelo más de 4 veces que el siguiente modelo. ¿Por qué?

Es una pena que en el dataset sólo venga información de los accidentes y no de todos lo vuelos porque de cara a extraer conclusiones sobre los accidentes es necesario contrastar siniestros frente a uso, pero es lo que hay.

 

In [1]:
# Importamos las librerías necesarias
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import re
import operator
from IPython.core.display import display, HTML
import matplotlib
%matplotlib inline
In [2]:
# Carga de los datos de los accidentes de avión deslde 1908
data=pd.read_csv("./Downloads/PythonRecursos/3-Airplane_Crashes_Since_1908.txt",sep=',')
In [3]:
data.sample()
Out[3]:
Date Time Location Operator Flight # Route Type Registration cn/In Aboard Fatalities Ground Summary
794 08/21/1946 04:19 Moline, Illinois Trans Luxury Airlines 878 Teterboro – Chicago – San Francisco Douglas C-47-DL N51878 4542 25.0 2.0 0.0 While the aircraft was flying near Moline, the…
In [4]:
matplotlib.rcParams['figure.figsize'] = (16.0, 8.0)
In [5]:
# Gráfica con los muertos en accidentes para los distintos modelos de avión
type_fatalities_sum = data[['Type','Fatalities']].groupby('Type').agg(['sum'])
type_fatalities_sum['Fatalities','sum'].sort_values(ascending=False).head(20).plot(kind='bar')
Out[5]:
<matplotlib.axes._subplots.AxesSubplot at 0xab3b0f0>
 Type
  • Con el modelo Douglas DC-3 han muerto más de 4000 personas más de 4 veces más que el siguiente modelo de avión con más siniestros.

 

In [7]:
# Creamos la columna con el año
data['Date'] = pd.to_datetime(data['Date'])
data['year'] = data['Date'].dt.year
In [8]:
# Filtrado de datos para el modelo de avión Douglas DC-3 
data_Douglas_DC_3 = data[(data.Type == 'Douglas DC-3')]
# Y a partir del año 1937 
data_Douglas_DC_3_1937 = data[(data.Type == 'Douglas DC-3') & (data.year >= 1937)]
In [9]:
# Gráfico de muertos por año en accidentes de avión Douglas DC-3
year_Douglas_DC_3_1937 = data_Douglas_DC_3_1937[['year','Fatalities']].groupby('year').agg(['sum'])
data_Douglas_DC_3_1937[['year','Fatalities']].groupby('year').agg(['sum']).plot(kind='bar')
Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0xbd344e0>
 Year
  • Los accidentes van decayendo con el tiempo aunque sorprende que con la cantidad de siniestros que ha tenido el avión se haya seguido utilizando hasta 1994.
  • El avión se utilizó en la II guerra mundial y aunque se observa en la gráfica un pequeño incremento en el número de accidentes en las años de la guerra no es sustancial.

 

In [11]:
# Gráfico con las aerolineas con más accidentes con el avión Douglas DC-3
operador_Douglas = data_Douglas_DC_3[['Operator','Fatalities']].groupby('Operator').agg(['count'])
operador_Douglas['Fatalities','count'].sort_values(ascending=False).head(25).plot(kind='bar')
Out[11]:
<matplotlib.axes._subplots.AxesSubplot at 0xc2ee358>
 Operador
  • El Douglas DC-3 lo utilizan casi todas las operadoras de aviación.
  • Las aerolineas con más accidentes son: Philippine Air Lines (10), Indian Airlines (9) y Ethiopian Airlines (8).
  • Las operadoras con más siniestros son las Asiáticas y luego las Africanas.

 

In [13]:
# Muertos por aerolínea por año divididos en tres bloques los 10 primeros, del 10 al 20 y del 20 al 30
accidents_Douglas = operador_Douglas['Fatalities','count'].sort_values(ascending=False)
topOps_10 = accidents_Douglas.index.values.tolist()[0:10]
topOps_20 = accidents_Douglas.index.values.tolist()[10:20]
topOps_30 = accidents_Douglas.index.values.tolist()[20:30]

fig,ax = plt.subplots(3,1,figsize=(15,10))

for op in topOps_10:
    ope = data_Douglas_DC_3[data_Douglas_DC_3['Operator']==op]
    ope[['year','Fatalities']].groupby('year').agg(['sum']).plot(ax=ax[0],grid=True,linewidth=2)

for op in topOps_20:
    ope = data_Douglas_DC_3[data_Douglas_DC_3['Operator']==op]
    ope[['year','Fatalities']].groupby('year').agg(['sum']).plot(ax=ax[1],grid=True,linewidth=2)

for op in topOps_30:
    ope = data_Douglas_DC_3[data_Douglas_DC_3['Operator']==op]
    ope[['year','Fatalities']].groupby('year').agg(['sum']).plot(ax=ax[2],grid=True,linewidth=2)

    
ax[0].set_title('Fatality Trend by Operator 0-10')
ax[1].set_title('Fatality Trend by Operator 10-20')
ax[2].set_title('Fatality Trend by Operator 20-30')
lines_10, labels_10 = ax[0].get_legend_handles_labels()
lines_20, labels_20 = ax[1].get_legend_handles_labels()
lines_30, labels_30 = ax[2].get_legend_handles_labels()
ax[0].legend(lines_10, topOps_10)
ax[1].legend(lines_20, topOps_20)
ax[2].legend(lines_30, topOps_30)

plt.tight_layout()
 FatalityOperator
  • Se muestra que las mayor parte de accidentes y muertos son compañías asiáticas y africanas.
  • Deja entrever que es un avión más utilizado por esos países.
  • En los países europeos y americanos los siniestros casi desaparecen a partir de los 60 posiblemente porque dejen de utilizarlo.
  • Llama la atención la cantidad de accidentes en la aerolínea de Etiopía y en los años posteriores a los 60.

 

In [15]:
# Gráfico de accidentes del Douglas DC-3 por localización
location_accidents_Douglas_DC_3 = data_Douglas_DC_3[['Location','Fatalities']].groupby('Location').agg(['count'])
location_accidents_Douglas_DC_3['Fatalities','count'].sort_values(ascending=False).head(30).plot(kind='bar')
Out[15]:
<matplotlib.axes._subplots.AxesSubplot at 0xc489048>
 Location
  • Los accidentes están muy distribuidos por localidad, llama la atención los 3 de Sao Paulo.
  • Por país hay numerosos accidentes en la India aunque siendo un país con tanta población parece normal.

 

In [17]:
# Algunas de las causas de los accidentes para el Douglas DC 3
# Se utiliza una función es de la página https://www.kaggle.com/junzis/d/saurograndi/airplane-crashes-since-1908/causes-of-aircraft-crash
# Funciona mediante expresiones regulares y no identifica la mayor parte de los casos

failures = {    
    'pilot error': '(pilot|crew) (error|fatigue)',
    'engine failure': 'engine.*(fire|fail|falling|failure)',
    'structure failure': '(structural fail)|(fuel leak)|(langing gear)',
    'electrical problem': 'electrical',
    'poor weather': '((poor|bad).*(weather|visibility)|thunderstorm)',
    'stall': 'stall',
    'on fire': '(caught fire)|(caught on fire)',
    'turbulence': 'turbulence',
    'fuel exhaustion': '(out of fuel)|(fuel.*exhaust)',
    'terrorism': 'terrorist|terrorism',
    'shot down': 'shot down',
}

failure_counts = {'other':0}

for s in data_Douglas_DC_3.Summary.dropna():
    other = True
    for failure, exp in failures.items():
        if re.search(exp, s.lower()):
            other = False
            if failure in failure_counts:
                failure_counts[failure] += 1
            else:
                failure_counts[failure] = 1
    if other:
        failure_counts['other'] += 1

nan_counts = len(data_Douglas_DC_3.Summary.isnull())
print('causes not avaiable: %d' % nan_counts)
print('unindentified causes: %d' % failure_counts['other'])

del failure_counts['other']

sortedcauses = sorted(failure_counts.items(), key=operator.itemgetter(1), reverse=True)
for k, v in sortedcauses:
    print(k, v)

plt.figure(figsize=(14, 8))
x, y = zip(*sortedcauses)
sns.barplot(x=x, y=y)
plt.xticks(rotation=25, horizontalalignment='right')
plt.show()
causes not avaiable: 334
unindentified causes: 219
('poor weather', 33)
('engine failure', 27)
('stall', 18)
('turbulence', 12)
('pilot error', 11)
('shot down', 10)
('structure failure', 5)
('fuel exhaustion', 4)
('electrical problem', 2)
('on fire', 2)
 Causes1
In [18]:
# Algunas de las causas de los accidentes para todos los modelos de aviones
failure_counts = {'other':0}

for s in data.Summary.dropna():
    other = True
    for failure, exp in failures.items():
        if re.search(exp, s.lower()):
            other = False
            if failure in failure_counts:
                failure_counts[failure] += 1
            else:
                failure_counts[failure] = 1
    if other:
        failure_counts['other'] += 1

nan_counts = len(data.Summary.isnull())
print('causes not avaiable: %d' % nan_counts)
print('unindentified causes: %d' % failure_counts['other'])

del failure_counts['other']

sortedcauses = sorted(failure_counts.items(), key=operator.itemgetter(1), reverse=True)
for k, v in sortedcauses:
    print(k, v)

plt.figure(figsize=(14, 8))
x, y = zip(*sortedcauses)
sns.barplot(x=x, y=y)
plt.xticks(rotation=25, horizontalalignment='right')
plt.show()
causes not avaiable: 5268
unindentified causes: 3318
('engine failure', 422)
('poor weather', 416)
('stall', 271)
('pilot error', 152)
('shot down', 133)
('turbulence', 117)
('on fire', 116)
('fuel exhaustion', 71)
('electrical problem', 41)
('structure failure', 39)
('terrorism', 12)
 Causes2
  • La comparativa sobre la causa de los accidentes entre el modelo Douglas DC-3 y el resto no aporta un motivo de diferencial claro.
  • Hay que tener en cuenta que se utiliza una expresión regular por lo que no es un método nada preciso y que la mayor parte de los casos no están clasificados.
  • El porcentaje de derribados (shot down) es similar por lo que no parece relevante que se haya utilizado en la II guerra mundial.

 

Resumiendo

  • No se acaba de identificar un motivo claro de porqué existe una mayor siniestralidad en el modelo Douglas DC-3, por lo que puede estar asociado a que haya tenido un mayor uso que otros modelos.
  • Se observa que ese modelo que ha estado en activo durante muchos años lo que aumenta el riesgo de accidentes.
  • Se ha utilizado mucho por compañías de países en desarrollo y posiblemente las medidas de seguridad y de mantenimiento no fuesen las ideales.
  • Los accidentes han ido decreciendo con el tiempo posiblemente porque su uso ha ido menguando, hay casos como el de Etiopía donde aumentan porque se habrán comprado a otros países aviones con bastantes años de uso.
  • El uso del Douglas DC-3 en la II guerra mundial pero no justifica su alta siniestralidad.
  • La información que se tiene es sólo de accidentes sería necesario contrastarla con el uso que ha tenido cada avión.
Con estos datos, y aun teniendo en cuenta que es una muestra incompleta porque no tenemos los datos sobre viajes realizados (no accientados), no recomendaría viajar en un Douglas DC-3.

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: