Laboratory values vs outcome

Get the first laboratory measurements for patients admitted to the ICU. Plot the distribution of measurements for survival and non-survival groups.


In [17]:
# Import libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import psycopg2
from scipy.stats import ks_2samp
%matplotlib inline
plt.style.use('ggplot')

In [18]:
# create a database connection
sqluser = 'postgres'
dbname = 'mimic'
schema_name = 'mimiciii'

Lab ranges

'Normal' ranges for lab values:

Lab Value Lower limit Upper Limit Units
Bicarbonate 22 32 mEq/L
BUN 6 20 mEq/L
Calcium 8.4 10.3 mg/dL
Chloride 96 108 mEq/L
Creatinine 0.4 1.1 mEq/L
Hemoglobin 11.2 15.7 g/dL
Lactate 0.5 2 mmol/L
Magnesium 1.6 2.6 mg/dL
Phosphate 2.7 4.5 mg/dL
Platelet count 150 400 K/uL
Potassium 3.3 5.1 mEq/L
Sodium 133 145 mEq/L

In [19]:
# Create dictionary of ranges
# Keys should match the lab names in the query below
# Are these values correct given the units? Need to check.

lab_ranges = {'BICARBONATE': [22,32],
              'BUN': [6,20],
              'CALCIUM': [8.4,10.3],
              'CHLORIDE': [96,108],
              'CREATININE': [0.4,1.1],
              'HEMOGLOBIN': [11.2,15.7],
              'LACTATE': [0.5,2.0],
              'MAGNESIUM': [1.6,2.6],
              'PHOSPHATE': [2.7,4.5],
              'PLATELET': [150,400],
              'POTASSIUM': [3.3,5.1],
              'SODIUM': [133,145]
             }

Get first laboratory measurement on ICU admission


In [20]:
# Connect to local postgres version of mimic
con = psycopg2.connect(dbname=dbname, user=sqluser)
cur = con.cursor()
cur.execute('SET search_path to ' + schema_name)

# Modify first day labs code: 
# https://github.com/MIT-LCP/mimic-code/tree/master/etc/firstday
query = \
"""
WITH pvt AS (
  SELECT ie.subject_id, ie.hadm_id, ie.outtime, ie.icustay_id, le.charttime, ad.deathtime
  , CASE when ad.deathtime between ie.intime and ie.outtime THEN 1 ELSE 0 END AS mort_icu
  , CASE when ad.deathtime between ad.admittime and ad.dischtime THEN 1 ELSE 0 END AS mort_hosp
  -- here we assign labels to ITEMIDs
  -- this also fuses together multiple ITEMIDs containing the same data
  , CASE
        when le.itemid = 50868 then 'ANION GAP'
        when le.itemid = 50862 then 'ALBUMIN'
        when le.itemid = 50882 then 'BICARBONATE'
        when le.itemid = 50885 then 'BILIRUBIN'
        when le.itemid = 50912 then 'CREATININE'
        when le.itemid = 50806 then 'CHLORIDE'
        when le.itemid = 50902 then 'CHLORIDE'
        when itemid = 50809 then 'GLUCOSE'
        when itemid = 50931 then 'GLUCOSE'
        when itemid = 50810 then 'HEMATOCRIT'
        when itemid = 51221 then 'HEMATOCRIT'
        when itemid = 50811 then 'HEMOGLOBIN'
        when itemid = 51222 then 'HEMOGLOBIN'
        when itemid = 50813 then 'LACTATE'
        when itemid = 50960 then 'MAGNESIUM'
        when itemid = 50970 then 'PHOSPHATE'
        when itemid = 51265 then 'PLATELET'
        when itemid = 50822 then 'POTASSIUM'
        when itemid = 50971 then 'POTASSIUM'
        when itemid = 51275 then 'PTT'
        when itemid = 51237 then 'INR'
        when itemid = 51274 then 'PT'
        when itemid = 50824 then 'SODIUM'
        when itemid = 50983 then 'SODIUM'
        when itemid = 51006 then 'BUN'
        when itemid = 51300 then 'WBC'
        when itemid = 51301 then 'WBC'
      ELSE null
      END AS label
  , -- add in some sanity checks on the values
    -- the where clause below requires all valuenum to be > 0, 
    -- so these are only upper limit checks
    CASE
      when le.itemid = 50862 and le.valuenum >    10 then null -- g/dL 'ALBUMIN'
      when le.itemid = 50868 and le.valuenum > 10000 then null -- mEq/L 'ANION GAP'
      when le.itemid = 50882 and le.valuenum > 10000 then null -- mEq/L 'BICARBONATE'
      when le.itemid = 50885 and le.valuenum >   150 then null -- mg/dL 'BILIRUBIN'
      when le.itemid = 50806 and le.valuenum > 10000 then null -- mEq/L 'CHLORIDE'
      when le.itemid = 50902 and le.valuenum > 10000 then null -- mEq/L 'CHLORIDE'
      when le.itemid = 50912 and le.valuenum >   150 then null -- mg/dL 'CREATININE'
      when le.itemid = 50809 and le.valuenum > 10000 then null -- mg/dL 'GLUCOSE'
      when le.itemid = 50931 and le.valuenum > 10000 then null -- mg/dL 'GLUCOSE'
      when le.itemid = 50810 and le.valuenum >   100 then null -- % 'HEMATOCRIT'
      when le.itemid = 51221 and le.valuenum >   100 then null -- % 'HEMATOCRIT'
      when le.itemid = 50811 and le.valuenum >    50 then null -- g/dL 'HEMOGLOBIN'
      when le.itemid = 51222 and le.valuenum >    50 then null -- g/dL 'HEMOGLOBIN'
      when le.itemid = 50813 and le.valuenum >    50 then null -- mmol/L 'LACTATE'
      when le.itemid = 50960 and le.valuenum >    60 then null -- mmol/L 'MAGNESIUM'
      when le.itemid = 50970 and le.valuenum >    60 then null -- mg/dL 'PHOSPHATE'
      when le.itemid = 51265 and le.valuenum > 10000 then null -- K/uL 'PLATELET'
      when le.itemid = 50822 and le.valuenum >    30 then null -- mEq/L 'POTASSIUM'
      when le.itemid = 50971 and le.valuenum >    30 then null -- mEq/L 'POTASSIUM'
      when le.itemid = 51275 and le.valuenum >   150 then null -- sec 'PTT'
      when le.itemid = 51237 and le.valuenum >    50 then null -- 'INR'
      when le.itemid = 51274 and le.valuenum >   150 then null -- sec 'PT'
      when le.itemid = 50824 and le.valuenum >   200 then null -- mEq/L == mmol/L 'SODIUM'
      when le.itemid = 50983 and le.valuenum >   200 then null -- mEq/L == mmol/L 'SODIUM'
      when le.itemid = 51006 and le.valuenum >   300 then null -- 'BUN'
      when le.itemid = 51300 and le.valuenum >  1000 then null -- 'WBC'
      when le.itemid = 51301 and le.valuenum >  1000 then null -- 'WBC'
    ELSE le.valuenum
    END AS valuenum
  FROM icustays ie

  LEFT JOIN labevents le
    ON le.subject_id = ie.subject_id 
    AND le.hadm_id = ie.hadm_id
    AND le.charttime between (ie.intime - interval '6' hour) 
    AND (ie.intime + interval '1' day)
    AND le.itemid IN
    (
      -- comment is: LABEL | CATEGORY | FLUID | NUMBER OF ROWS IN LABEVENTS
      50868, -- ANION GAP | CHEMISTRY | BLOOD | 769895
      50862, -- ALBUMIN | CHEMISTRY | BLOOD | 146697
      50882, -- BICARBONATE | CHEMISTRY | BLOOD | 780733
      50885, -- BILIRUBIN, TOTAL | CHEMISTRY | BLOOD | 238277
      50912, -- CREATININE | CHEMISTRY | BLOOD | 797476
      50902, -- CHLORIDE | CHEMISTRY | BLOOD | 795568
      50806, -- CHLORIDE, WHOLE BLOOD | BLOOD GAS | BLOOD | 48187
      50931, -- GLUCOSE | CHEMISTRY | BLOOD | 748981
      50809, -- GLUCOSE | BLOOD GAS | BLOOD | 196734
      51221, -- HEMATOCRIT | HEMATOLOGY | BLOOD | 881846
      50810, -- HEMATOCRIT, CALCULATED | BLOOD GAS | BLOOD | 89715
      51222, -- HEMOGLOBIN | HEMATOLOGY | BLOOD | 752523
      50811, -- HEMOGLOBIN | BLOOD GAS | BLOOD | 89712
      50813, -- LACTATE | BLOOD GAS | BLOOD | 187124
      50960, -- MAGNESIUM | CHEMISTRY | BLOOD | 664191
      50970, -- PHOSPHATE | CHEMISTRY | BLOOD | 590524
      51265, -- PLATELET COUNT | HEMATOLOGY | BLOOD | 778444
      50971, -- POTASSIUM | CHEMISTRY | BLOOD | 845825
      50822, -- POTASSIUM, WHOLE BLOOD | BLOOD GAS | BLOOD | 192946
      51275, -- PTT | HEMATOLOGY | BLOOD | 474937
      51237, -- INR(PT) | HEMATOLOGY | BLOOD | 471183
      51274, -- PT | HEMATOLOGY | BLOOD | 469090
      50983, -- SODIUM | CHEMISTRY | BLOOD | 808489
      50824, -- SODIUM, WHOLE BLOOD | BLOOD GAS | BLOOD | 71503
      51006, -- UREA NITROGEN | CHEMISTRY | BLOOD | 791925
      51301, -- WHITE BLOOD CELLS | HEMATOLOGY | BLOOD | 753301
      51300  -- WBC COUNT | HEMATOLOGY | BLOOD | 2371
    )
    AND le.valuenum IS NOT null 
    AND le.valuenum > 0 -- lab values cannot be 0 and cannot be negative
    
    LEFT JOIN admissions ad
    ON ie.subject_id = ad.subject_id
    AND ie.hadm_id = ad.hadm_id
    
    -- WHERE ie.subject_id < 10000
    
),
ranked AS (
SELECT pvt.*, DENSE_RANK() OVER (PARTITION BY 
    pvt.subject_id, pvt.hadm_id,pvt.icustay_id,pvt.label ORDER BY pvt.charttime) as drank
FROM pvt
)
SELECT r.subject_id, r.hadm_id, r.icustay_id, r.mort_icu, r.mort_hosp
  , max(case when label = 'ANION GAP' then valuenum else null end) as ANIONGAP_1st
  , max(case when label = 'ALBUMIN' then valuenum else null end) as ALBUMIN_1st
  , max(case when label = 'BICARBONATE' then valuenum else null end) as BICARBONATE_1st
  , max(case when label = 'BILIRUBIN' then valuenum else null end) as BILIRUBIN_1st
  , max(case when label = 'CREATININE' then valuenum else null end) as CREATININE_1st
  , max(case when label = 'CHLORIDE' then valuenum else null end) as CHLORIDE_1st
  , max(case when label = 'GLUCOSE' then valuenum else null end) as GLUCOSE_1st
  , max(case when label = 'HEMATOCRIT' then valuenum else null end) as HEMATOCRIT_1st
  , max(case when label = 'HEMOGLOBIN' then valuenum else null end) as HEMOGLOBIN_1st
  , max(case when label = 'LACTATE' then valuenum else null end) as LACTATE_1st
  , max(case when label = 'MAGNESIUM' then valuenum else null end) as MAGNESIUM_1st
  , max(case when label = 'PHOSPHATE' then valuenum else null end) as PHOSPHATE_1st
  , max(case when label = 'PLATELET' then valuenum else null end) as PLATELET_1st
  , max(case when label = 'POTASSIUM' then valuenum else null end) as POTASSIUM_1st
  , max(case when label = 'PTT' then valuenum else null end) as PTT_1st
  , max(case when label = 'INR' then valuenum else null end) as INR_1st
  , max(case when label = 'PT' then valuenum else null end) as PT_1st
  , max(case when label = 'SODIUM' then valuenum else null end) as SODIUM_1st
  , max(case when label = 'BUN' then valuenum else null end) as BUN_1st
  , max(case when label = 'WBC' then valuenum else null end) as WBC_1st

FROM ranked r
WHERE r.drank = 1
GROUP BY r.subject_id, r.hadm_id, r.icustay_id, r.mort_icu, r.mort_hosp, r.drank
ORDER BY r.subject_id, r.hadm_id, r.icustay_id, r.mort_icu, r.mort_hosp, r.drank;
"""

data = pd.read_sql_query(query,con)

In [ ]:
data.head()

First laboratory measurement on ICU admission vs ICU mortality


In [22]:
# Plot first laboratory measurement on ICU admission vs ICU mortality
# Would be clearer to plot CDF
# Additional variables to be added: magnesium, phosphate, calcium

labs = {'ANIONGAP': 'mEq/L',
        'ALBUMIN': 'g/dL',
        'BICARBONATE': 'mEq/L',
        'BILIRUBIN': 'mg/dL',
        'BUN': '',
        'CHLORIDE': 'mEq/L',
        'CREATININE': 'mg/dL',
        'GLUCOSE': 'mg/dL',
        'HEMATOCRIT': '%',
        'HEMOGLOBIN': 'g/dL',
        'INR': '',
        'LACTATE': 'mmol/L',
        'MAGNESIUM': 'mmol/L',
        'PHOSPHATE': 'mg/dL',
        'PLATELET': 'K/uL',
        'POTASSIUM': 'mEq/L',
        'PT': '',
        'PTT': 'sec',
        'SODIUM':'mmol/L',
        'WBC': ''}

for l, u in iter(sorted(labs.iteritems())):
    # count patients
    n_nonsurv = data[l.lower()+'_1st'][data.mort_icu==1].dropna().count()
    n_surv = data[l.lower()+'_1st'][data.mort_icu==0].dropna().count()
    
    # get median, variance, skewness
    med_nonsurv = data[l.lower()+'_1st'][data.mort_icu==1].dropna().median()
    med_surv = data[l.lower()+'_1st'][data.mort_icu==0].dropna().median()
    var_nonsurv = data[l.lower()+'_1st'][data.mort_icu==1].dropna().var()
    var_surv = data[l.lower()+'_1st'][data.mort_icu==0].dropna().var()
    skew_nonsurv = data[l.lower()+'_1st'][data.mort_icu==1].dropna().skew()
    skew_surv = data[l.lower()+'_1st'][data.mort_icu==0].dropna().skew() 
    
    # Are the 2 samples drawn from the same continuous distribution? 
    # Try Kolmogorov Smirnov test 
    ks_stat, p_val = ks_2samp(data[l.lower()+'_1st'][data.mort_icu==1].dropna(),
                              data[l.lower()+'_1st'][data.mort_icu==0].dropna())

    # plot
    plt.subplots(figsize=(13,6))
    data[l.lower()+'_1st'][data.mort_icu==1].dropna().plot.kde(
        alpha=1.0,label='Non-survival (n={})'.format(n_nonsurv))
    data[l.lower()+'_1st'][data.mort_icu==0].dropna().plot.kde(
        alpha=1.0,label='Survival (n={})'.format(n_surv))
    
    # fake plots for KS test, median, etc
    plt.plot([], label=' ',color='lightgray')
    plt.plot([], label='KS test: p={}'.format(format(p_val,'.3f')),
             color='lightgray')
    plt.plot([], label='Median (non-surv): {}'.format(format(med_nonsurv,'.2f')),
             color='lightgray')
    plt.plot([], label='Median (surv): {}'.format(format(med_surv,'.2f')),
             color='lightgray')
    plt.plot([], label='Variance (non-surv): {}'.format(format(var_nonsurv,'.2f')),
             color='lightgray')
    plt.plot([], label='Variance (surv): {}'.format(format(var_surv,'.2f')),
             color='lightgray')
    plt.plot([], label='Skew (non-surv): {}'.format(format(skew_nonsurv,'.2f')),
             color='lightgray')
    plt.plot([], label='Skew (surv): {}'.format(format(skew_surv,'.2f')),
             color='lightgray')

    # add title, labels etc.
    plt.title('First {} measurement on ICU admission '.format(l.lower()) +
               'vs ICU mortality \n')
    plt.xlabel(l + ' ' + u)
    plt.legend(loc="upper left", bbox_to_anchor=(1,1),fontsize=12)
    plt.xlim(0, data[l.lower()+'_1st'].quantile(0.99))
    
    # Add lab range if available
    if l in lab_ranges:
        plt.axvline(lab_ranges[l][0],color='k',linestyle='--')
        plt.axvline(lab_ranges[l][1],color='k',linestyle='--')



In [30]:
# Risk of patients with labs outside the normal range
data.loc[data['mort_icu']==0].head()


Out[30]:
subject_id hadm_id icustay_id mort_icu mort_hosp aniongap_1st albumin_1st bicarbonate_1st bilirubin_1st creatinine_1st ... magnesium_1st phosphate_1st platelet_1st potassium_1st ptt_1st inr_1st pt_1st sodium_1st bun_1st wbc_1st
0 2 163353 243653 0 0 NaN NaN NaN NaN NaN ... NaN NaN 5 NaN NaN NaN NaN NaN NaN 0.1
1 3 145834 211552 0 0 17 1.8 25 0.8 3.2 ... 2.4 4.8 282 5.4 30.7 1.3 13.5 136 53 12.7
2 4 185777 294638 0 0 15 2.8 21 1.9 0.5 ... 1.9 3.1 201 3.3 33.2 1.1 12.8 141 10 9.7
3 5 178980 214757 0 0 NaN NaN NaN NaN NaN ... NaN NaN 309 NaN NaN NaN NaN NaN NaN 13.9
4 6 107064 228232 0 0 23 3.0 15 0.2 11.7 ... 2.0 8.5 315 4.7 139.0 1.4 14.6 134 62 10.6

5 rows × 25 columns


In [37]:
for l in lab_ranges:
    print l
    
# data.loc[(data['mort_icu']==0) & ((data['mort_icu'])]
data.loc[data[l.lower()+'_1st'] < 80]


HEMOGLOBIN
CALCIUM
PHOSPHATE
MAGNESIUM
LACTATE
CREATININE
BICARBONATE
POTASSIUM
SODIUM
PLATELET
BUN
CHLORIDE
Out[37]:
subject_id hadm_id icustay_id mort_icu mort_hosp aniongap_1st albumin_1st bicarbonate_1st bilirubin_1st creatinine_1st ... magnesium_1st phosphate_1st platelet_1st potassium_1st ptt_1st inr_1st pt_1st sodium_1st bun_1st wbc_1st
686 523 196271 227379 0 0 11 NaN 27 NaN 0.7 ... 1.4 4.6 491 2.6 NaN NaN NaN 86 8 13.1
962 757 149766 208658 0 0 20 NaN 21 0.7 0.6 ... 1.1 2.5 321 4.4 19.1 1.2 13.7 118 4 17.8
1094 852 162589 287998 0 0 7 3.3 12 0.4 0.7 ... 1.3 1.3 255 3.7 37.0 2.0 21.9 84 1 5.7
1402 1084 152984 212600 0 0 9 NaN 19 NaN 1.0 ... 1.2 2.2 172 3.4 22.7 1.2 13.6 100 13 14.3
1845 1446 150030 243265 0 0 22 3.8 18 0.8 1.8 ... 1.9 3.5 439 3.3 27.9 1.0 11.9 104 25 16.5
1993 1574 118935 232260 0 1 24 4.1 27 1.5 2.8 ... 3.1 6.5 416 6.5 34.2 6.5 31.3 120 82 14.7
2835 2246 182109 206293 0 0 31 3.9 19 0.7 2.2 ... 2.8 2.5 305 5.3 20.0 1.2 13.6 113 53 14.3
4329 3433 191469 213490 1 1 34 3.7 16 0.9 4.5 ... 1.4 8.4 NaN 4.3 26.0 1.2 13.7 124 118 22.3
4753 3786 123439 296542 0 0 11 1.7 30 0.2 3.7 ... 2.5 10.5 509 3.1 21.7 1.0 12.5 121 43 17.7
5030 3969 135568 277183 0 0 50 3.2 8 0.3 2.6 ... 3.9 7.7 159 9.3 17.9 1.0 11.6 127 76 8.2
5302 4171 122269 268233 0 0 25 NaN 12 0.5 0.8 ... 1.9 3.9 240 2.6 29.7 1.8 16.2 111 5 19.2
5911 4673 142612 281304 0 0 14 3.6 39 0.8 1.4 ... 2.2 3.5 155 1.7 35.0 3.7 33.9 120 26 5.9
6204 4905 108634 260148 0 0 23 3.5 18 2.0 0.6 ... 1.3 1.9 584 3.0 29.5 1.1 12.8 108 8 9.4
6205 4905 127949 287506 0 0 23 4.4 20 1.5 0.6 ... 1.4 2.0 322 2.6 NaN NaN NaN 104 5 6.5
6233 4926 146966 271339 0 0 21 NaN 21 NaN 4.3 ... 2.7 5.4 149 4.1 NaN NaN NaN 114 150 14.9
6818 5370 145390 201641 0 0 14 3.5 31 0.7 2.8 ... 2.2 7.1 255 5.4 28.6 1.0 12.8 119 36 8.3
6819 5370 151490 276687 1 1 13 3.5 40 1.3 1.0 ... 1.7 2.9 541 5.0 43.3 7.8 35.3 126 47 14.8
6857 5397 112979 272079 0 0 40 NaN 8 0.4 2.2 ... 1.7 1.9 268 5.7 26.7 1.2 13.1 120 64 21.0
6858 5397 138051 262012 0 0 53 3.4 5 NaN 2.4 ... 1.9 4.5 282 5.1 NaN NaN NaN 120 63 17.6
6862 5397 166056 286315 0 0 54 NaN 7 0.8 2.1 ... 1.7 8.9 281 5.1 24.4 1.1 12.9 129 47 20.6
6863 5397 190850 215172 0 0 35 3.3 15 0.6 1.9 ... 2.1 1.2 290 4.5 23.2 1.0 11.7 124 59 12.9
8132 6392 182162 234103 0 0 45 3.5 18 0.3 15.3 ... 2.2 10.0 274 8.6 30.0 1.3 13.6 134 99 13.9
8362 6579 115553 246944 0 0 16 2.8 41 1.6 3.1 ... 3.3 5.3 193 2.6 22.2 1.2 13.5 126 149 14.7
8384 6601 150624 289311 0 0 17 3.8 38 0.9 0.8 ... 1.6 3.9 268 2.9 26.4 1.0 12.8 130 12 9.1
8584 6759 121212 264628 1 1 11 3.9 33 1.2 0.4 ... 1.4 3.7 217 5.5 44.1 3.9 35.6 112 18 15.9
8735 6884 128932 211119 1 1 12 NaN 37 25.7 0.4 ... 1.6 4.2 428 4.3 31.9 1.2 14.3 123 16 18.1
8827 6953 108956 237382 0 0 22 4.2 26 1.4 2.4 ... 1.7 2.4 140 2.8 27.1 0.9 11.9 115 12 8.0
9051 7118 199855 202600 0 0 28 4.4 25 1.8 3.6 ... 2.1 5.2 345 6.2 36.8 2.8 21.1 122 68 18.1
9887 7755 121412 248095 0 0 6 2.7 45 0.3 0.6 ... 1.8 2.6 107 2.6 28.8 1.1 12.6 120 16 4.2
9949 7804 139468 245686 0 0 16 3.8 37 NaN 2.8 ... 2.2 4.1 206 3.9 26.8 2.1 22.1 125 70 14.4
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
53004 74545 127841 268706 0 0 12 NaN 27 NaN 0.6 ... 1.8 2.4 438 5.4 32.5 1.0 12.1 112 12 10.3
53362 75567 106747 271493 0 0 16 3.2 36 0.7 2.0 ... 2.6 4.4 228 7.5 34.3 1.3 15.0 125 101 7.5
53566 76151 183875 250028 0 0 14 2.8 29 NaN 0.4 ... 1.7 3.0 649 4.6 35.1 1.5 15.7 116 14 22.8
54550 79002 174343 299476 0 0 7 3.1 34 1.1 0.3 ... 1.6 1.7 49 2.1 49.3 1.0 12.1 115 14 15.8
54588 79118 110586 264337 0 0 11 3.6 38 0.7 1.1 ... 2.2 3.8 142 2.3 22.6 1.0 10.6 126 29 14.0
54807 79900 120644 221354 0 0 19 NaN 25 NaN 5.4 ... 2.0 6.7 94 3.3 34.9 2.4 25.3 119 108 5.3
54872 80106 104466 296360 0 0 10 NaN 31 NaN 0.7 ... 1.6 3.0 186 4.3 42.2 1.7 18.8 107 8 4.4
55279 81254 196317 206861 0 0 20 NaN 29 NaN 2.0 ... 2.9 3.8 464 6.7 NaN NaN NaN 118 37 6.3
55496 81810 147734 278458 0 0 9 3.9 35 0.7 0.9 ... 1.6 2.3 168 2.7 33.8 1.5 16.5 117 19 9.1
55882 82950 154983 238297 0 0 32 4.8 20 2.5 6.6 ... 2.2 5.2 687 6.2 30.5 1.6 17.3 124 129 12.3
55890 82982 126445 252090 0 0 18 NaN 38 0.9 1.5 ... 2.2 2.4 29 3.2 25.8 1.2 14.4 118 36 9.2
56250 84033 167689 275799 1 1 19 3.9 36 1.4 2.1 ... 2.6 4.5 107 3.7 38.9 2.4 25.1 128 107 11.9
56690 85490 177636 214898 0 0 8 NaN 40 0.3 0.6 ... 2.0 0.9 146 5.0 27.5 1.0 12.3 141 22 10.0
56706 85531 110644 245790 0 0 16 NaN 31 0.3 0.5 ... 1.9 3.2 353 4.9 25.1 1.1 13.3 117 11 9.4
56815 85853 137702 287229 0 0 17 3.6 23 0.8 0.6 ... 1.5 2.2 854 5.1 33.4 1.1 13.0 96 14 10.0
56888 86089 109354 245823 0 0 15 4.1 34 NaN 0.9 ... 2.1 1.8 310 2.9 35.4 1.1 12.8 113 10 9.8
56957 86306 158732 295079 0 0 19 NaN 20 NaN 0.8 ... 1.8 3.2 147 4.8 33.3 1.3 14.7 109 10 10.1
57819 89050 148150 254362 0 0 14 4.0 22 1.4 0.4 ... 1.3 1.8 83 2.9 48.9 5.2 52.3 106 15 5.8
58110 89971 106424 285917 0 0 19 3.3 21 NaN 0.6 ... 1.4 3.1 344 4.8 NaN NaN NaN 110 8 6.4
58212 90279 157435 230811 0 0 38 NaN 25 0.3 15.5 ... 2.5 11.7 180 3.8 24.1 1.1 13.2 133 97 12.8
58783 91827 161989 208132 0 0 33 4.4 7 0.3 2.8 ... 3.2 12.1 266 8.2 NaN NaN NaN 123 60 16.2
59025 92606 149752 250812 0 0 17 4.8 22 1.4 0.7 ... 1.7 2.6 317 4.1 32.5 1.1 13.3 108 15 21.9
59238 93290 161681 207793 0 0 16 NaN 26 NaN 0.5 ... 1.7 1.6 392 2.6 27.8 1.2 13.8 108 9 16.7
59373 93629 193430 274615 0 0 14 4.0 26 0.5 0.5 ... 1.4 2.5 203 4.2 21.9 1.0 12.2 113 11 7.5
60191 96066 167102 285583 0 0 26 2.2 18 0.4 2.8 ... 2.4 3.1 280 4.1 22.4 1.0 12.1 116 67 16.2
60272 96284 165127 207394 0 0 56 4.2 6 0.2 27.4 ... 6.6 17.6 523 8.9 28.8 1.2 13.6 125 224 22.2
60321 96429 126717 238766 0 0 16 3.6 24 0.7 0.9 ... 1.7 3.5 386 4.2 34.5 3.9 38.0 109 24 6.8
60369 96577 138443 220770 0 0 30 4.2 18 0.7 1.2 ... 2.9 5.9 415 5.3 22.5 0.9 9.3 121 27 14.3
60614 97206 148785 217154 0 0 17 3.6 28 0.9 2.7 ... 2.2 4.9 230 5.5 32.6 1.3 15.1 118 74 6.4
61326 99383 175736 262458 0 0 35 2.7 16 19.6 1.4 ... 1.2 3.3 215 3.6 48.5 1.6 17.8 118 14 23.4

161 rows × 25 columns