19 feb. 2013

Manejar información de un archivo csv con csvkit

El programa csvkit es una herramienta desarrollada en Python que facilita la manipulación de la información contenida en un archivo con formato csv.

Se utilizará como ejemplo los datos de la página data.gov. Los datos que se utilizará son del Departamento de Asuntos de Veteranos de beneficios educativos de los Estatos Unidos (disculpen la traducción) del año 2009.

Es necesario instalar csvkit, en este caso se usa el comando pip de python:
pip install csvkit

Obtener los datos:
mkdir beneficios

cd beneficios 

Bajar archivo 2009.csv con el comando wget:
wget -O 2009.csv -U "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (JHTML, like Gecko) chrome/10.0.648.205 Safari/534.16" http://www.data.gob/download/4029/csv 

Verificar las primeras 5 líneas del archivo:

head -n 5 2009.csv 

State Name,State Abbreviate,Code,Montgomery GI Bill-Active Duty,Montgomery GI Bill- Selective Reserve,Dependents' Educational Assistance,Reserve Educational Assistance Program,Post-Vietnam Era Veteran's Educational Assistance Program,TOTAL,

ALABAMA,AL,01,"6,718","1,728","2,703","1,269",8,"12,426",

ALASKA,AK,02,776,154,166,60,2,"1,158",

ARIZONA,AZ,04,"26,822","2,005","3,137","2,011",11,"33,986",

ARKANSAS,AR,05,"2,061",988,"1,575",886,3,"5,513",

Se puede usar el mismo comando wget para bajar los archivos de los años 2010.csv, 2011.csv y 2012.csv.

Obtener la información de las columnas con csvcut:

csvcut -n 2009.csv

  1: State Name

  2: State Abbreviate

  3: Code

  4: Montgomery GI Bill-Active Duty

  5: Montgomery GI Bill- Selective Reserve

  6: Dependents' Educational Assistance

  7: Reserve Educational Assistance Program

  8: Post-Vietnam Era Veteran's Educational Assistance Program

  9: TOTAL

 10: 

Como se puede observar, el archivo csv maneja 9 columnas. 

Con el comando csvcut se puede obtener información entre la fila 2 y 3 (State Abbreviate y Code), sólo se desea mostrar las primeras 5 líneas del archivo: 
csvcut -c 2,3 2009.csv | head -n 5
State Abbreviate,Code
AL,01
AK,02
AZ,04
AR,05


Se puede también manejar estadisticas bajo demanda con csvstat. Se genera la estadistica de la información de las columnas 1,4,9 y 10. Para este caso se utiliza csvcut y se pasa la información a csvstat:

csvcut -c 1,4,9,10 2009.csv | csvstat
  1. State Name
<type 'unicode'>
Nulls: True
Unique values: 52
Max length: 17
  2. Montgomery GI Bill-Active Duty
<type 'int'>
Nulls: True
Min: 435
Max: 34942
Sum: 325723
Mean: 6263.90384615
Median: 3548.0
Standard Deviation: 7537.86225373
Unique values: 52
  3. TOTAL
<type 'int'>
Nulls: True
Min: 768
Max: 46897
Sum: 506914
Mean: 9748.34615385
Median: 6520.0
Standard Deviation: 10070.4022127
Unique values: 52
  4. _unnamed
<type 'NoneType'>
Nulls: True
Values: 




Se puede realizar busquedas por filas con csvgrep. En este caso la información total del Estado de Illinois:

csvcut -c 1,"TOTAL" 2009.csv | csvgrep -c 1 -m ILLINOIS

State Name,TOTAL

ILLINOIS,"21,964"

Voltear orden de las columnas con csvcut: 
csvcut -c 9,1 2009.csv | head -n 5
TOTAL,State Name
"12,426",ALABAMA
"1,158",ALASKA
"33,986",ARIZONA
"5,513",ARKANSAS
En este caso se cambia el orden de las columnas al decirle a csvcut el orden de las columnas. 

Ordenar con csvsort: 
csvcut -c 9,1 2009.csv | csvsort -r | head -n 5
TOTAL,State Name
46897,CALIFORNIA
40402,TEXAS
36394,FLORIDA
33986,ARIZONA

Se puede dar un formato para que sea legible la información con csvlook:
csvcut -c 9,1 2009.csv | csvsort -r -l | csvlook
|--------------+-------+--------------------|
|  line_number | TOTAL | State Name         |
|--------------+-------+--------------------|
|  1           | 46897 | CALIFORNIA         |
|  2           | 40402 | TEXAS              |
|  3           | 36394 | FLORIDA            |
|  4           | 33986 | ARIZONA            |
|  5           | 21964 | ILLINOIS           |
|  6           | 20541 | VIRGINIA           |
|  7           | 18236 | GEORGIA            |
|  8           | 15730 | NORTH CAROLINA     |
|  9           | 13967 | NEW YORK           |
|  10          | 13962 | MISSOURI           |
|  11          | 13614 | COLORADO           |
|  12          | 13314 | OHIO               |
|  13          | 13011 | PENNSYLVANIA       |
|  14          | 12426 | ALABAMA            |
|  15          | 11492 | WASHINGTON         |
|  16          | 10085 | MARYLAND           |
|  17          | 9791  | MINNESOTA          |
|  18          | 9344  | MICHIGAN           |
|  19          | 9206  | OKLAHOMA           |
|  20          | 9013  | IOWA               |
|  21          | 8840  | WEST VIRGINIA      |
|  22          | 8757  | TENNESSEE          |
|  23          | 8081  | WISCONSIN          |
|  24          | 7872  | SOUTH CAROLINA     |
|  25          | 7809  | INDIANA            |
|  26          | 6652  | LOUISIANA          |
|  27          | 6388  | KENTUCKY           |
|  28          | 6009  | MASSACHUSETTS      |
|  29          | 5870  | OREGON             |
|  30          | 5513  | ARKANSAS           |
|  31          | 5511  | NEW JERSEY         |
|  32          | 5416  | NEBRASKA           |
|  33          | 5345  | UTAH               |
|  34          | 4947  | KANSAS             |
|  35          | 4551  | NEW MEXICO         |
|  36          | 4424  | PUERTO RICO        |
|  37          | 4299  | MISSISSIPPI        |
|  38          | 3728  | NEVADA             |
|  39          | 2997  | CONNECTICUT        |
|  40          | 2751  | IDAHO              |
|  41          | 2521  | HAWAII             |
|  42          | 1992  | SOUTH DAKOTA       |
|  43          | 1920  | MAINE              |
|  44          | 1795  | MONTANA            |
|  45          | 1778  | NORTH DAKOTA       |
|  46          | 1326  | NEW HAMPSHIRE      |
|  47          | 1175  | RHODE ISLAND       |
|  48          | 1158  | ALASKA             |
|  49          | 1145  | DELAWARE           |
|  50          | 1117  | WYOMING            |
|  51          | 1084  | DIST. OF COLUMBIA  |
|  52          | 768   | VERMONT            |
|  53          |       |                    |
|--------------+-------+--------------------|


Para finalizar se puede salvar el trabajo en un nuevo archivo csv:
csvcut -c 9,1 2009.csv | csvsort -r -l > 2009_ranking.csv

Si se desea aprender más de la herramienta csvkit se puede revisar la página de la documentación

En próximo artículo se mostrará como usar csvkit desde un programa en Python.
Publicar un comentario en la entrada

AddThis