2017IIT Economía

Propuesta de solución, usando conceptos básicos.

Referencia: http://programacion.espol.edu.ec/static/media/uploads/reto_econom%C3%ADa_enero_2018_.pdf

Usted cuenta con una base de datos de accionistas que ha sido proporcionada por un organismo de control ecuatoriano https://goo.gl/5kD5A2 .

Esta base contiene información relacionada con la participación accionaria (local y extranjera) de empresas radicadas en el Ecuador. Sin embargo, existe un inconveniente: en algunas de las empresas el porcentaje total de accionistas supera el 100%.

Por lo tanto, se pide:

1. Identifique el número total de y las empresas cuya suma total de acciones excede el 100%

Propuesta de solución: Para encontrar esta respuesta es necesario leer el archivo y procesar cada registro (línea). Sin embargo, al leer el archivo, se determina que hay errores en línea por falta de datos.

Se propone inicialmente separar los registros entre los validados y con errores

# Reto Economia

# Lectura de Archivo
# Separa registros validos, que tengan todos los campos

# narchivo = input('nombre del archivo: ')
narchivorecibido = 'accionistas_nuevo'
narchivorecibido = narchivorecibido+'.csv'
narchivovalidado = 'accionista_validado.txt'
narchivoerrores  = 'accionista_errores.txt'

leidos  = 0
validos = 0
errores = 0

# Abre archivos de trabajo
archivorecibido = open(narchivorecibido, encoding="utf8")
archivovalidado = open(narchivovalidado, 'w')
archivoerrores  = open(narchivoerrores, 'w')

# línea encabezado
linea  = archivorecibido.readline()
partes = linea.split(';')
# columnas en cada registro
campos = len(partes) 
archivovalidado.write(linea)
archivoerrores.write(linea)

while not(linea==''):
    linea  = archivorecibido.readline()
    leidos = leidos + 1
    sinsaltos = linea.strip('\n')
    partes  = sinsaltos.split(';')
    tamano  = len(partes)
    unerror = 0 
    if (tamano == campos):
        # Revisa que exista ruc
        truc = len(partes[0])
        tparticipa = len(partes[4])
        if (truc>0 and tparticipa>0):
            archivovalidado.write(linea)
            validos = validos +1
        else:
            unerror = 1
        
    if (unerror == 1):
        archivoerrores.write(linea)
        errores = errores +1

archivorecibido.close()
archivovalidado.close()
archivoerrores.close()

print('registros leidos: ', leidos)
print('validos: ', validos)
print('errores: ', errores)
print('revisar archivo de errores.txt generado')

obteniendo los siguientes resultados de los archivos separados:

registros leidos:  437228
validos:  427575
errores:  9646
revisar archivo de errores.txt generado

Se procesa los registros en ‘accionista_validado.txt’

# RETO ECONOMIA 02

# Procesa los registros validos, que tengan todos los campos

# narchivo = input('nombre del archivo: ')
narchivo = 'accionista_validado.txt'

leidos   = 0
# Abre archivos de trabajo
archivo  = open(narchivo, 'r')
acciones = {}

# línea encabezado
linea  = archivo.readline()
partes = linea.split(';')

# columnas en cada registro
campos = len(partes) 
while not(linea==''):
    linea  = archivo.readline()
    leidos = leidos + 1
    # linea = linea.strip('\n')
    partes = linea.split(';')
    tamano = len(partes)
    unruc  = partes[0]
    participa = partes[4]
    if (len(participa)>0):
        if not(unruc in acciones):
            acciones[unruc] = 0
        if (unruc in acciones):
            acciones[unruc] = acciones[unruc] + float(participa)
    linea = archivo.readline()

archivo.close()
print('El número de empresas encontrado es:')
print(len(acciones))

excede = []
for unruc in acciones:
    if (acciones[unruc]>100.00000000000001):
        excede.append([unruc,acciones[unruc]])
n = len(excede)
print('Empresas que exceden el 100.00000000000001 % de acciones:',n)
for i in range(0,n,1):
    print(excede[i])

con lo que las empresas con exceso de registro de accionistas es:

El número de empresas encontrado es:
60946
Empresas que exceden el 100.00000000000001 % de acciones: 14
['0991317791001', 200.0]
['0992297492001', 100.00000000000003]
['0990261431001', 900.0]
['0992829222001', 487.5]
['0992719125001', 1575.0]
['0992718641001', 1200.0]
['1291750156001', 114.875]
['0991282017001', 187.5]
['0992685549001', 21350.0]
['1792040833001', 2331.795]
['1790084949001', 1250.0]
['1792232929001', 112.5]
['1791249704001', 115.0]
['1791909038001', 200.0]
>>> 

2. ¿Podría indicar los motivos por los cuales esta suma excede el 100%? ¿Existe duplicación de registros por ejemplo?

duplicación de registros,
errores en la escritura de los valores
registros por venta de acciones sin marcar el cambio de propietario

3. ¿Podría solucionar el problema con la información disponible? De ser positiva la respuesta, desarrolle el procedimiento para realizarlo y muestre los resultados.

Una vez determinadas las empresas, se presenta sus registros para analizar caso por caso
# RETO ECONOMIA 03

# Procesa los registros validos, que tengan todos los campos

# narchivo = input('nombre del archivo: ')
narchivo = 'accionista_validado.txt'
buscado  = '0991317791001'

leidos = 0
# Abre archivos de trabajo
archivo =  open(narchivo, 'r')
acciones = []

# línea encabezado
linea  = archivo.readline()
partes = linea.split(';')

# columnas en cada registro
campos = len(partes) 
while not(linea==''):
    linea  = archivo.readline()
    leidos = leidos + 1
    # linea = linea.strip('\n')
    partes = linea.split(';')
    tamano = len(partes)
    unruc  = partes[0]
    participa = partes[4]
    if unruc == buscado:
        acciones.append(linea)
    linea = archivo.readline()

archivo.close()
print('El número de accionistas de empresa encontrado es:')
print(len(acciones))
print(acciones)

con lo que se puede observar que:

El número de accionistas de empresa encontrado es:
2
['0991317791001;CENTRO DE ASESORAMIENTO Y SEGURIDAD EMPRESARIAL (CENASE) CIA. LTDA.;0701547267;ECUADOR;50.0000000000000000000000000\n', '0991317791001;CENTRO DE ASESORAMIENTO Y SEGURIDAD EMPRESARIAL (CENASE) CIA. LTDA.;1715182604;ECUADOR;150.0000000000000000000000000\n']
>>> 

donde se ve que hay problemas en el registro del segundo accionista con 150%.

se observa otro caso como ejemplo:

El número de accionistas de empresa encontrado es:
2
['0990261431001;SERVISEGUROS S.A.;0901692822;ECUADOR;855.0000000000000000000000000\n', '0990261431001;SERVISEGUROS S.A.;0991448012001;ECUADOR;45.0000000000000000000000000\n']

donde se determina que el primer registro está fuera de rango.
se puede continuar con los otros casos.


Adicionalmente, varios de los accionistas están ubicados en jurisdicciones de menor imposición o paraisos fiscales (paraisosfiscales.csv).
Con esta información adicional se pide:

4. ¿Cuántas empresas ecuatorianas tienen al menos un accionista en paraísos fiscales?

5. ¿Cuántas empresas ecuatorianas tienen accionistas con más del 51% en paraísos fiscales?

6. Genere un ranking de empresas ecuatorianas con accionistas en paraísos fiscales.

7. ¿Cuál es el porcentaje de accionistas que están ubicados en paraísos fiscales?

8. Genere un gráfico para mostrar la proporción del total de empresas con accionistas en paraísos fiscales y aquellas que no.

9. Genere otro gráfico para mostrar la proporción de empresas únicamente con accionistas locales vs aquellas que tienen al menos un accionista extranjero.

Finalmente, se le adjunta una base adicional con los sectores económicos (sectoreseconomicos.csv) a los cuales pertenecen de las empresas en Ecuador.
Con esa información:

10. ¿Qué sectores económicos son los que mayor cantidad de accionistas tienen en paraísos fiscales? Genere un ranking de estos sectores.

Entregables

Subir en la dirección https://goo.gl/Ymn3jT un archivo rar con el formato NombreGrupo_Paralelo.rar lo siguiente:

1. Código utilizado para responder a las preguntas

2. Una presentación en Power Point de sus hallazgos para ser presentada en 5 min. Utilice gráficos descriptivos (barras, pastel, etc) para crear una buena presentación.