Gestión de datos con csvkit#

  • Última modificación: Mayo 16, 2022 | YouTube

Preparación#

[1]:
!mkdir -p /tmp/csvkit_tutorial
%cd /tmp/csvkit_tutorial
!curl -L -O --silent https://raw.githubusercontent.com/wireservice/csvkit/master/examples/realdata/ne_1033_data.xlsx
!in2csv ne_1033_data.xlsx > data.csv
/tmp/csvkit_tutorial
[2]:
!curl -L -O --silent https://raw.githubusercontent.com/wireservice/csvkit/master/examples/realdata/acs2012_5yr_population.csv
[3]:
!csvstat acs2012_5yr_population.csv
  1. "fips"

        Type of data:          Number
        Contains null values:  False
        Unique values:         93
        Smallest value:        31001
        Largest value:         31185
        Sum:                   2891649
        Mean:                  31093
        Median:                31093
        StDev:                 53.981
        Most common values:    31001 (1x)
                               31003 (1x)
                               31005 (1x)
                               31007 (1x)
                               31009 (1x)

  2. "name"

        Type of data:          Text
        Contains null values:  False
        Unique values:         93
        Longest value:         23 characters
        Most common values:    Adams County, NE (1x)
                               Antelope County, NE (1x)
                               Arthur County, NE (1x)
                               Banner County, NE (1x)
                               Blaine County, NE (1x)

  3. "total_population"

        Type of data:          Number
        Contains null values:  False
        Unique values:         93
        Smallest value:        348
        Largest value:         518271
        Sum:                   1827306
        Mean:                  19648.452
        Median:                6294
        StDev:                 62501.005
        Most common values:    31299 (1x)
                               6655 (1x)
                               490 (1x)
                               778 (1x)
                               584 (1x)

  4. "margin_of_error"

        Type of data:          Number
        Contains null values:  False
        Unique values:         15
        Smallest value:        0
        Largest value:         115
        Sum:                   1800
        Mean:                  19.355
        Median:                0
        StDev:                 37.897
        Most common values:    0 (73x)
                               73 (2x)
                               114 (2x)
                               97 (2x)
                               99 (2x)

Row count: 93

csvjoin#

[4]:
!csvjoin -c fips data.csv acs2012_5yr_population.csv > joined.csv
!head joined.csv
state,county,fips,nsn,item_name,quantity,ui,acquisition_cost,total_cost,ship_date,federal_supply_category,federal_supply_category_name,federal_supply_class,federal_supply_class_name,name,total_population,margin_of_error
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299,0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299,0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299,0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299,0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299,0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299,0
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Buffalo County, NE",46330,0
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Buffalo County, NE",46330,0
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Buffalo County, NE",46330,0
[5]:
!csvcut -c county,item_name,total_population joined.csv | csvsort -c total_population | csvlook | head
| county     | item_name                                                      | total_population |
| ---------- | -------------------------------------------------------------- | ---------------- |
| MCPHERSON  | RIFLE,5.56 MILLIMETER                                          |              348 |
| WHEELER    | RIFLE,5.56 MILLIMETER                                          |              725 |
| GREELEY    | RIFLE,7.62 MILLIMETER                                          |            2,515 |
| GREELEY    | RIFLE,7.62 MILLIMETER                                          |            2,515 |
| GREELEY    | RIFLE,7.62 MILLIMETER                                          |            2,515 |
| NANCE      | RIFLE,5.56 MILLIMETER                                          |            3,730 |
| NANCE      | RIFLE,7.62 MILLIMETER                                          |            3,730 |
| NANCE      | RIFLE,7.62 MILLIMETER                                          |            3,730 |

csvstack#

[6]:
!curl -L -O --silent https://raw.githubusercontent.com/wireservice/csvkit/master/examples/realdata/ks_1033_data.csv
[7]:
!head ks_1033_data.csv
state,county,fips,nsn,item_name,quantity,ui,acquisition_cost,total_cost,ship_date,federal_supply_category,federal_supply_category_name,federal_supply_class,federal_supply_class_name
KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,4/16/2012 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
KS,ALLEN,20001,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1,Each,138,138,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
KS,ALLEN,20001,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1,Each,138,138,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
KS,ALLEN,20001,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1,Each,138,138,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
KS,ALLEN,20001,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1,Each,138,138,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
[8]:
!in2csv ne_1033_data.xlsx > ne_1033_data.csv
[9]:
!head ne_1033_data.csv
state,county,fips,nsn,item_name,quantity,ui,acquisition_cost,total_cost,ship_date,federal_supply_category,federal_supply_category_name,federal_supply_class,federal_supply_class_name
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
[10]:
!csvstack ne_1033_data.csv ks_1033_data.csv > region.csv
!head region.csv
state,county,fips,nsn,item_name,quantity,ui,acquisition_cost,total_cost,ship_date,federal_supply_category,federal_supply_category_name,federal_supply_class,federal_supply_class_name
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm"
[11]:
!csvstat -c state,acquisition_cost region.csv
  1. "state"

        Type of data:          Text
        Contains null values:  False
        Unique values:         2
        Longest value:         2 characters
        Most common values:    KS (1575x)
                               NE (1036x)

  8. "acquisition_cost"

        Type of data:          Number
        Contains null values:  False
        Unique values:         127
        Smallest value:        0
        Largest value:         658000
        Sum:                   9440445.91
        Mean:                  3615.644
        Median:                138
        StDev:                 23730.631
        Most common values:    120 (649x)
                               499 (449x)
                               138 (311x)
                               6800 (304x)
                               58.71 (218x)

Row count: 2611
[12]:
!csvstack -g ne_1033_data.csv ks_1033_data.csv > region.csv
!head region.csv
group,state,county,fips,nsn,item_name,quantity,ui,acquisition_cost,total_cost,ship_date,federal_supply_category,federal_supply_category_name,federal_supply_class,federal_supply_class_name
ne_1033_data.csv,KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
ne_1033_data.csv,KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
ne_1033_data.csv,KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
ne_1033_data.csv,KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
ne_1033_data.csv,KS,ALLEN,20001,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1,Each,499,499,4/16/2012 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
ne_1033_data.csv,KS,ALLEN,20001,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1,Each,138,138,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
ne_1033_data.csv,KS,ALLEN,20001,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1,Each,138,138,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
ne_1033_data.csv,KS,ALLEN,20001,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1,Each,138,138,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"
ne_1033_data.csv,KS,ALLEN,20001,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1,Each,138,138,5/19/2006 0:00:00,10,WEAPONS,1005,"Guns, through 30 mm"

csvsql y sql2csv#

[13]:
#
# Muestra el comando SQL para crear la tabla
#
!csvsql -i sqlite joined.csv
CREATE TABLE joined (
        state VARCHAR NOT NULL,
        county VARCHAR NOT NULL,
        fips FLOAT NOT NULL,
        nsn VARCHAR NOT NULL,
        item_name VARCHAR,
        quantity FLOAT NOT NULL,
        ui VARCHAR NOT NULL,
        acquisition_cost FLOAT NOT NULL,
        total_cost FLOAT NOT NULL,
        ship_date DATE NOT NULL,
        federal_supply_category FLOAT NOT NULL,
        federal_supply_category_name VARCHAR NOT NULL,
        federal_supply_class FLOAT NOT NULL,
        federal_supply_class_name VARCHAR NOT NULL,
        name VARCHAR NOT NULL,
        total_population FLOAT NOT NULL,
        margin_of_error FLOAT NOT NULL
);
[14]:
#
# Inserta la tabla en la bd
#
!csvsql --db sqlite:///leso.db --insert joined.csv
OperationalError: (sqlite3.OperationalError) table joined already exists
[SQL:
CREATE TABLE joined (
        state VARCHAR NOT NULL,
        county VARCHAR NOT NULL,
        fips FLOAT NOT NULL,
        nsn VARCHAR NOT NULL,
        item_name VARCHAR,
        quantity FLOAT NOT NULL,
        ui VARCHAR NOT NULL,
        acquisition_cost FLOAT NOT NULL,
        total_cost FLOAT NOT NULL,
        ship_date DATE NOT NULL,
        federal_supply_category FLOAT NOT NULL,
        federal_supply_category_name VARCHAR NOT NULL,
        federal_supply_class FLOAT NOT NULL,
        federal_supply_class_name VARCHAR NOT NULL,
        name VARCHAR NOT NULL,
        total_population FLOAT NOT NULL,
        margin_of_error FLOAT NOT NULL
)

]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
[15]:
#
# Consulta la bd
#
!sql2csv --db sqlite:///leso.db --query "select * from joined" | head
state,county,fips,nsn,item_name,quantity,ui,acquisition_cost,total_cost,ship_date,federal_supply_category,federal_supply_category_name,federal_supply_class,federal_supply_class_name,name,total_population,margin_of_error
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299.0,0.0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299.0,0.0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299.0,0.0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299.0,0.0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299.0,0.0
NE,ADAMS,31001.0,1005-00-589-1271,"RIFLE,7.62 MILLIMETER",1.0,Each,138.0,138.0,2008-07-11,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Adams County, NE",31299.0,0.0
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Buffalo County, NE",46330.0,0.0
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Buffalo County, NE",46330.0,0.0
NE,BUFFALO,31019.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-09-24,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Buffalo County, NE",46330.0,0.0
[16]:
!sql2csv --db sqlite:///leso.db --query "select * from joined where county='DOUGLAS';" > douglas.csv
!head douglas.csv
state,county,fips,nsn,item_name,quantity,ui,acquisition_cost,total_cost,ship_date,federal_supply_category,federal_supply_category_name,federal_supply_class,federal_supply_class_name,name,total_population,margin_of_error
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
NE,DOUGLAS,31055.0,1005-00-073-9421,"RIFLE,5.56 MILLIMETER",1.0,Each,499.0,499.0,2008-05-20,10.0,WEAPONS,1005.0,"Guns, through 30 mm","Douglas County, NE",518271.0,0.0
[17]:
!csvsql --query "select county,item_name from joined where quantity > 5;" joined.csv | csvlook
| county  | item_name                              |
| ------- | -------------------------------------- |
| DAKOTA  | SPECTACLES SET,BALL                    |
| DAKOTA  | SPECTACLES SET,BALL                    |
| DOUGLAS | CAMOUFLAGE NET SYSTEM,RADAR SCATTERING |
| DOUGLAS | SPECTACLE KIT,INTER                    |
| DOUGLAS | SAFETY GLASSES,REVI                    |
| DOUGLAS | GOGGLES,INDUSTRIAL                     |
| DOUGLAS |                                        |
| DOUGLAS | CASE SHIPPING                          |
| DOUGLAS | GAITER,NECK                            |
| DOUGLAS | INSECT NET PROTECTO                    |
| DOUGLAS | SHELTER HALF,TENT                      |
| DOUGLAS | LINER,WET WEATHER P                    |
| DOUGLAS | BAG,FLYER'S HELMET                     |
| DOUGLAS | GLOVES,FLYERS'                         |
| DOUGLAS | COVERALLS,COMBAT VE                    |
| DOUGLAS | VEST,TACTICAL LOAD                     |
| DOUGLAS | UNDERSHIRT,COLD WEA                    |
| DOUGLAS | UNDERSHIRT,COLD WEA                    |
| DOUGLAS | SHIRT,COLD WEATHER                     |
| DOUGLAS | SHIRT,COLD WEATHER                     |
| DOUGLAS | SHIRT,COLD WEATHER                     |
| DOUGLAS | OVERALLS,COLD WEATH                    |
| DOUGLAS | SHIRT,COLD WEATHER                     |
| DOUGLAS | SHIRT,COLD WEATHER                     |
| DOUGLAS | ELBOW,PAD                              |
| DOUGLAS | ELBOW,PADS                             |
| DOUGLAS | GLOVES,MEN'S AND WO                    |
| DOUGLAS | PULLOVER FLEECE  POLARTEC  CO          |
| DOUGLAS |                                        |
| DOUGLAS | CASE,SMALL ARMS AMM                    |
| DOUGLAS | BAG DUFFEL                             |
| DOUGLAS | BAG,CLOTHING                           |
| DOUGLAS | FIELD PACK                             |
| DOUGLAS | CANTEEN,WATER                          |
| DOUGLAS | MAT,SLEEPING,SELF-I                    |
| DOUGLAS | SLEEPING BAG                           |
| DOUGLAS | SLEEPING BAG                           |
| DOUGLAS | SLEEPING BAG                           |
| DOUGLAS | SLEEPING BAG                           |
| DOUGLAS | BIVY COVER                             |
| DOUGLAS | FIELD PACK                             |
| DOUGLAS | FIELD PACK                             |
| DOUGLAS | FIELD PACK                             |
| DOUGLAS | FIELD PACK                             |
| DOUGLAS | POUCH,RADIO                            |
| DOUGLAS | LID                                    |
| DOUGLAS | MEDIC BAG                              |
| DOUGLAS | EXTERNAL MEDICAL MO                    |
| DOUGLAS | RIFLEMAN SET                           |
| HALL    | MAGAZINE,CARTRIDGE                     |
| HALL    | LINER,COLD WEATHER                     |
| HALL    | LINER,COLD WEATHER                     |
| HALL    | HOOD,COLD WEATHER                      |
| HALL    | SHIRT,COLD WEATHER                     |
| HALL    | GOGGLES,SUN,WIND AN                    |
| HALL    | MAT,SLEEPING,SELF-I                    |