Commit 0f0880ec authored by Cristian Aguirre's avatar Cristian Aguirre

Creating project

parents
Pipeline #138 failed with stages
FROM dokken/ubuntu-18.04
## Script para el Análisis de Archivos de Datos
## Finalidad del script
El script se usa para tener una información útil sobre un dataset de un archivo. Describe los campos de éste y muestra características importantes
## Requisitos del Sistema
- Instalar Python en su version minima de 3.7
- Tener mapeado el interprete en el path como: python3 (Alias)
- Tener mapeado el administrador de paquetes de python como: pip3 (Alias)
- Tener instalado la libreria para entornos virtuales: "virtualenv", si no se tiene, instalarla de la siguiente manera:
pip3 install virtualenv
## Creación de entorno virtual
```sh
python3 -m virtualenv analisis
source analisis/bin/activate
pip3 install -r dataset-descriptor/requirements.txt
```
## Configuración
- Configurar el separador de las tramas en el archivo dataset_descriptor/config.py. Por defecto traerá el separador=';'
- El formato de fecha que se muestra en consola también se puede cambiar en el archivo mencionado.
- El archivo dataset_descriptor/monedas.json contiene los símbolos de monedas que se detectará en el proceso y se indicará el tipo de dato Moneda si en caso encuentre una de ellas.
- Los formatos de fecha admitidos para el parseo de datos de tipo fecha esta en el archivo de configuración. Se pueden agregar tantos formatos se desee.
## Parámetros del script:
```sh
cd dataset-descriptor
python3 -m dataset_descriptor --help
```
- El parámetro header (--header) se pondrá como argumento si el archivo o los archivos de la carpeta contiene header
## Ejemplos de ejecución:
- Procesará el archivo train.csv y guardará el inforrme en prueba.json
```sh
python3 -m dataset_descriptor -f train.csv -o prueba.json
```
- Procesará los archivos de la carpeta test y guardará el inforrme integral en prueba.json
```sh
python3 -m dataset_descriptor -f test -o prueba.json
```
- Procesará los archivos de la carpeta test y guardará los informes en la carpeta salida
```sh
python3 -m dataset_descriptor -f test -o salida -s
```
- Procesará el archivo train.csv y muestra el informe en consola
```sh
python3 -m dataset_descriptor -f train.csv
```
- Procesará el archivo train.csv e indicar que contiene header
```sh
python3 -m dataset_descriptor -f train.csv --header
```
- Procesará los archivos de la carpeta salida y le indicamos que todos sus archivos contienen header (si no se especifica -o solo muestr en consola)
```sh
python3 -m dataset_descriptor -f salida --header
```
- Procesará el archivo prueba.csv y lo guardara en el archivo /prueba1/prueba2/test1/test2/salida.json (creará los directorios de forma recursiva si en caso no existen)
```sh
python3 -m dataset_descriptor -f prueba.csv -o /prueba1/prueba2/test1/test2/salida.json
```
\ No newline at end of file
from dataset_descriptor import app
if __name__=='__main__':
app.run()
import os
import coloredlogs, logging
import time
import datetime
import argparse as arg
import dask.dataframe as dd
from dataset_descriptor.src.utils import *
import warnings
warnings.filterwarnings("ignore")
logger = logging.getLogger(__name__)
coloredlogs.install(level='DEBUG', logger=logger)
coloredlogs.install(level='success', logger=logger)
# Get execution's parameters
parser = arg.ArgumentParser()
parser.add_argument("-f","--file",default="__n",type=str,help="Argumento donde se especifica el archivo o carpeta a procesar.\n"+\
"Si fuera una carpeta, se procesaran todos los archivos incluidos en ella.")
parser.add_argument('-o','--output',default='',type=str,help="Archivo(Carpeta) de salida la cual tendra el(los) reporte(s) con las descripciones "+\
"de los archivos procesados.")
parser.add_argument('--header',action='store_true',help="Indicar si el o los archivos presentan header.")
parser.add_argument('-s','--split',action='store_true',help="Si este flag esta presente, entonces el proceso construira un informe (archivo) para "+
"cada archivo procesado.")
args = vars(parser.parse_args())
if args["file"]=='__n':
logger.info("\nPor favor seleccione un archivo o carpeta para procesar con el comando -f o --file. Por ejemplo: '--file input1.csv'\n")
exit(0)
if args["split"]:
if args["output"]=='':
logger.info("\nPor favor seleccione un nombre de carpeta donde se alojaran los informes. Esto es requerido al usar el flag -s o --split.\n")
exit(0)
# Run function
def run():
start_time = datetime.datetime.now()
tic = time.time()
logger.info("Iniciando proceso de Análisis de Archivos. Hora actual: "+start_time.strftime(cfg.datetime_format_string))
logger.info("El token asignado es :'"+cfg.sep+"'")
try:
if os.path.isdir(args["file"]):
logger.info("Se procesaran los archivos de la carpeta: "+args["file"])
dfs,files = proccess_dir(args["file"],args["header"])
logger.info("Se encontraron "+str(len(dfs))+" archivos. Creando Informe ...")
write_from_dir(dfs,files,args["output"],args["file"],args["split"])
elif os.path.isfile(args["file"]):
logger.info("Se procesara el archivo: "+args["file"])
df = proccess_file(args["file"],args["header"])
write_from_file(df,args["output"],args["file"])
else:
logger.info("No se encuentra el archivo especificado")
exit(0)
logger.info("Fin de proceso, tomó "+str(round(time.time() - tic,3))+" segundos")
except Exception as error:
print(type(error))
logger.error("Existe un problema en el proceso : %s", error)
# Separador o token de las tramas
sep = ";"
# formato de fecha a usar en la consola o terminal
datetime_format_string = '%d/%m/%Y %H:%M:%S'
# formato de fechas a parsear
parse_dates = ['%d/%m/%Y %H:%M:%S','%Y-%m-%d %H:%M:%S','%Y/%m/%d %H:%M:%S','%d-%m-%Y %H:%M:%S','%Y-%m-%d','%d-%m-%Y','%Y/%m/%d','%d/%m/%Y']
# archivo de formato de las monedas
coins_file = "dataset_descriptor/monedas.json"
# sufijo a agregarle al archivo de salida, cuando se indica el parámetro --split
sufijo = "_output.json"
{
"Monedas": [
{
"Albania": "L"
},
{
"Reino Unido": "£"
},
{
"Argelia": "د.ج"
},
{
"Andorra": "€"
},
{
"Angola": "Kz"
},
{
"Argentina": "$"
},
{
"Aruba": "ƒ"
},
{
"Australia": "$"
},
{
"Austria": "€"
},
{
"Bahamas": "$"
},
{
"Baréin, Bahrein": ".د.ب"
},
{
"Bangladés, Bangladesh": "৳"
},
{
"Barbados": "$"
},
{
"Bielorrusia, Belarús": "Br"
},
{
"Bélgica": "€"
},
{
"Belice": "$"
},
{
"Bután": "Nu."
},
{
"Bolivia": "Bs."
},
{
"Bosnia y Herzegovina": "KM"
},
{
"Botsuana, Botswana": "P"
},
{
"Brasil": "R$"
},
{
"Brunéi": "$"
},
{
"Bulgaria": "лв"
},
{
"Burkina Faso": "Fr"
},
{
"Birmania, Myanmar": "K"
},
{
"Burundi": "Fr"
},
{
"Camboya": "៛"
},
{
"Canadá": "$"
},
{
"Cabo Verde": "Esc, $"
},
{
"Islas Caimán": "$"
},
{
"República Centroafricana": "Fr"
},
{
"Chad": "Fr"
},
{
"Chile": "$"
},
{
"China": "¥, 元"
},
{
"Colombia": "$"
},
{
"Comores": "Fr"
},
{
"República Democrática del Congo": "Fr"
},
{
"República del Congo": "Fr"
},
{
"Costa Rica": "₡"
},
{
"Costa de Marfil, Côte d'Ivoire": "Fr"
},
{
"Croacia": "kn"
},
{
"Cuba": "$"
},
{
"Curação": "ƒ"
},
{
"Chipre": "€"
},
{
"República Checa": "Kč"
},
{
"Dinamarca": "kr"
},
{
"Yibuti, Djibouti": "Fr"
},
{
"República Dominicana": "$"
},
{
"Ecuador": "$"
},
{
"Egipto": "£, ج.م"
},
{
"El Salvador": "₡"
},
{
"Guinea Ecuatorial": "Fr"
},
{
"Eritrea": "Nfk"
},
{
"Estonia": "€"
},
{
"Etiopía": "Br"
},
{
"Finlandia": "€"
},
{
"Francia": "€"
},
{
"Polinesia Francesa": "Fr"
},
{
"Gabón": "Fr"
},
{
"Gambia": "D"
},
{
"Georgia": "ლ"
},
{
"Alemania": "€"
},
{
"Gana": "₵"
},
{
"Gibraltar": "£"
},
{
"Grecia": "€"
},
{
"Guatemala": "Q"
},
{
"Guinea": "Fr"
},
{
"Guinea-Bisáu, Guinea Bissau": "Fr"
},
{
"Haití": "G"
},
{
"Honduras": "L"
},
{
"Hungria": "Ft"
},
{
"Islandia": "kr"
},
{
"India": "₹"
},
{
"Indonesia": "Rp"
},
{
"Irán": "﷼"
},
{
"Irak": "ع.د"
},
{
"Irlanda": "€"
},
{
"Israel": "₪"
},
{
"Italia": "€"
},
{
"Jamaica": "$"
},
{
"Japón": "¥"
},
{
"Jordania": "د.ا"
},
{
"Kazajistán, Kazajstán": "₸"
},
{
"Kenia, Kenya": "Sh"
},
{
"Corea del Norte": "₩"
},
{
"Corea del Sur": "₩"
},
{
"Kuwait": "د.ك"
},
{
"Kirguzistán": "лв"
},
{
"Laos": "₭"
},
{
"Letonia": "Ls"
},
{
"Líbano": "ل.ل"
},
{
"Lesoto, Lesotho": "L"
},
{
"Liberia": "$"
},
{
"Libia": "ل.د"
},
{
"Lituania": "Lt"
},
{
"Luxemburgo": "€"
},
{
"Macao": "P"
},
{
"Macedonia": "ден"
},
{
"Madagascar": "Ar"
},
{
"Malaui, Malawi": "MK"
},
{
"Malasia": "RM"
},
{
"Maldivas": ".ރ"
},
{
"Mali": "Fr"
},
{
"Malta": "€"
},
{
"Mauritania": "UM"
},
{
"Mauricio": "₨"
},
{
"México": "$"
},
{
"Estados Federados de Micronesia": "$"
},
{
"Moldavia": "L"
},
{
"Mónaco": "€"
},
{
"Mongolia": "₮"
},
{
"Montenegro": "€"
},
{
"Marruecos": "د.م."
},
{
"Mozambique": "MT"
},
{
"Namibia": "$"
},
{
"Nauru": "$"
},
{
"Nepal": "₨"
},
{
"Países Bajos": "€"
},
{
"Nueva Caledonia": "Fr"
},
{
"Nueva Zelanda": "$"
},
{
"Nicaragua": "C$"
},
{
"Níger": "Fr"
},
{
"Nigeria": "₦"
},
{
"Noruega": "kr"
},
{
"Omán": "ر.ع."
},
{
"Paquistán": "₨"
},
{
"Panamá": "B/."
},
{
"Papua-Nueva Guiné": "K"
},
{
"Paraguay": "₲"
},
{
"Perú": "S/"
},
{
"Filipinas": "₱"
},
{
"Polonia": "zł"
},
{
"Portugal": "€"
},
{
"Catar, Qatar": "ر.ق"
},
{
"Rumanía": "L"
},
{
"Rusia": "₽"
},
{
"Ruanda, Rwanda": "Fr"
},
{
"San Cristóbal y Nieves, Saint Kitts y Nevis": "$"
},
{
"Santa Lucía": "$"
},
{
"San Viccente y las Granadinas": "$"
},
{
"Samoa": "T"
},
{
"San Marino": "€"
},
{
"Santo Tomé y Príncipe": "Db"
},
{
"Arabia Saudí": "ر.س"
},
{
"Senegal": "Fr"
},
{
"Serbia": "дин. o din."
},
{
"Seichelles": "₨"
},
{
"Sierra Leona": "Le"
},
{
"Singapur": "$"
},
{
"Eslovaquia": "€"
},
{
"Eslovenia": "€"
},
{
"Islas Salomón": "$"
},
{
"Somalia": "Sh"
},
{
"Sudáfrica": "R"
},
{
"España": "€"
},
{
"Sudán del Sur": "£"
},
{
"Sri Lanka": "Rs"
},
{
"Sudán": "£"
},
{
"Surinám": "$"
},
{
"Suazilandia, Swazilandia": "L"
},
{
"Suecia": "kr"
},
{
"Suiza": "Fr"
},
{
"Siria": "£ o ل.س"
},
{
"Taiwán": "$"
},
{
"Tayikistán": "ЅМ"
},
{
"Tanzania": "Sh"
},
{
"Tailandia": "฿"
},
{
"Togo": "Fr"
},
{
"Tonga": "T$"
},
{
"Trindade e Tobago": "$"
},
{
"Túnez": "د.ت"
},
{
"Turkmenistán": "m"
},
{
"Uganda": "Sh"
},
{
"Ucrania": "₴"
},
{
"Emiratos Árabes Unidos": "د.إ"
},
{
"Estados Unidos": "$"
},
{
"Uruguay": "$"
},
{
"Uzbequistán": "лв"
},
{
"Vanuatu": "Vt"
},
{
"Ciudad del Vaticano": "€"
},
{
"Venezuela": "Bs F"
},
{
"Vietnam": "₫"
},
{
"Yemen": "﷼"
},
{
"Zambia": "ZK"
},
{
"Zimbabue, Zimbabwe": "$"
}
]
}
\ No newline at end of file
This diff is collapsed.
bokeh==2.3.2
click==8.0.1
cloudpickle==1.6.0
coloredlogs==15.0.1
dask==2.19.0
distributed==2.19.0
fsspec==2021.6.1
HeapDict==1.0.1
humanfriendly==9.2
Jinja2==3.0.1
locket==0.2.1
MarkupSafe==2.0.1
msgpack==1.0.2
numpy==1.21.0
packaging==20.9
pandas==1.2.4
partd==1.2.0
Pillow==8.2.0
psutil==5.8.0
pyparsing==2.4.7
python-dateutil==2.8.1
pytz==2021.1
PyYAML==5.4.1
six==1.16.0
sortedcontainers==2.4.0
tblib==1.7.0
toolz==0.11.1
tornado==6.1
typing-extensions==3.10.0.0
zict==2.0.0
Vt6,150,593;22;0.2;1
123;G_G;T_T;1
4.2;4.11;ASD;1.2
3333.22;25003;roberto;1332.3313
esto es una cadena;11123123;123123.12312312;otra cadena
20/01/2005 17:16:17;1;algo;12.11
Vt5,150.222;23;0.9;2
Vt6,150,593;22;0.2;1;10/02/2005 17:16:17
123;G_G;T_T;1;20-01-2005 12:16:17
4.2;4.11;ASD;1.2;20/01/2010 17:16:44
3333.22;25003;roberto;1332.3313;05/09/1998 04:22:17
esto es una cadena;11123123;123123.12312312;otra cadena;25/05/2015 12:16:17
20/01/2005 17:16:17;1;algo;12.11;20-1-2005 17:16:11
Vt5,150.222;23;0.9;2;20/01/2005
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment