Analysis of stroke admission numbers and types using NIHSS 11+ as a surrogate for large vessel occlusions#

Aims:

  • Analyse proportion of haemorrhagic vs ischaemic stroke by arrival time.

  • Analyse proportion of ischaemic stroke by NIHSS 0-10 vs 11+ by arrival time.

# import libraries
import pandas as pd

# import data
data = pd.read_csv(
    './../data/2019-11-04-HQIP303-Exeter_MA.csv', low_memory=False)

Remove unknown stroke type or unknown NIHSS#

mask = (data['S2StrokeType'].isnull() == False) & (data['S2NihssArrival'].isnull() == False)
proportion_removed = (data.shape[0] - mask.sum()) / data.shape[0]
data = data[mask]
all_arrivals_count = data.shape[0]
print(f'Percent data removed: {proportion_removed*100:0.1f}')
Percent data removed: 7.8

All admissions#

Get proportion with haemorrhagic stroke:

prop_bleed = (data['S2StrokeType'] == 'Primary Intracerebral Haemorrhage').mean()
print (f'Percent haemorrhage: {prop_bleed * 100:0.1f}')
Percent haemorrhage: 11.5

Analyse infarction stroke:

mask = data['S2StrokeType'] == 'Infarction'
data_infaction = data[mask]
prop_nlvo = (data_infaction['S2NihssArrival'] < 11).mean()
prop_lvo = (data_infaction['S2NihssArrival'] > 10).mean()
print (f'Percent infarction with NIHSS 0-10: {prop_nlvo * 100:0.1f}')
print (f'Percent infarction with NIHSS 11+: {prop_lvo * 100:0.1f}')
Percent infarction with NIHSS 0-10: 77.2
Percent infarction with NIHSS 11+: 22.8

Restrict to admissions within 6 hours of known stroke onset#

mask = (data['S1OnsetToArrival_min'] <= 360) & (data['S1OnsetToArrival_min'] >= 0)
prop_6_hour_arrival = mask.sum() / all_arrivals_count
print (f'Percent with known onset of up to 6 hours: {prop_6_hour_arrival * 100:0.1f}')
data = data[mask]
Percent with known onset of up to 6 hours: 42.9

Get proportion with haemorrhagic stroke:

prop_bleed = (data['S2StrokeType'] == 'Primary Intracerebral Haemorrhage').mean()
print (f'Percent haemorrhage: {prop_bleed * 100:0.1f}')
Percent haemorrhage: 13.6

Analyse infarction stroke:

mask = data['S2StrokeType'] == 'Infarction'
data_infaction = data[mask]
prop_nlvo = (data_infaction['S2NihssArrival'] < 11).mean()
prop_lvo = (data_infaction['S2NihssArrival'] > 10).mean()
print (f'Percent infarction with NIHSS 0-10: {prop_nlvo * 100:0.1f}')
print (f'Percent infarction with NIHSS 11+: {prop_lvo * 100:0.1f}')
Percent infarction with NIHSS 0-10: 70.5
Percent infarction with NIHSS 11+: 29.5

Restrict to admissions within 4 hours of known stroke onset#

mask = (data['S1OnsetToArrival_min'] <= 240) & (data['S1OnsetToArrival_min'] >= 0)
prop_6_hour_arrival = mask.sum() / all_arrivals_count
print (f'Percent with known onset of up to 4 hours: {prop_6_hour_arrival * 100:0.1f}')
data = data[mask]
Percent with known onset of up to 4 hours: 37.1

Get proportion with haemorrhagic stroke:

prop_bleed = (data['S2StrokeType'] == 'Primary Intracerebral Haemorrhage').mean()
print (f'Percent haemorrhage: {prop_bleed * 100:0.1f}')
Percent haemorrhage: 14.1

Analyse infarction stroke:

mask = data['S2StrokeType'] == 'Infarction'
data_infaction = data[mask]
prop_nlvo = (data_infaction['S2NihssArrival'] < 11).mean()
prop_lvo = (data_infaction['S2NihssArrival'] > 10).mean()
print (f'Percent infarction with NIHSS 0-10: {prop_nlvo * 100:0.1f}')
print (f'Percent infarction with NIHSS 11+: {prop_lvo * 100:0.1f}')
Percent infarction with NIHSS 0-10: 68.9
Percent infarction with NIHSS 11+: 31.1

Summary#

Admission type

All arrivals

Arrival within 6 hrs known onset

Arrival within 4 hrs known onset

Proportion all admissions

100

42.9

37.1

Proportion haemorrhagic

11.5

13.6

14.1

Proportion ischaemic

88.5

86.4

85.9

Proportion ischaemic with NIHSS 0-10

77.2

70.5

68.9

Proportion ischaemic with NIHSS 11+

22.8

29.5

31.1