domingo, 5 de enero de 2025

Configurar Ubuntu Linux y un ambiente de programación Python3 con el IDE Spyder en WSL de Windows 10

Cárdenas, Tabasco.- Windows 10 ofrece la posibilidad de instalar un módulo de Linux para ejecutar en modo nativo aplicaciones Linux y es posible programar en Linux mientras se trabaja con Windows, así como ejecutar aplicaciones graficas de Linux en Windows sin requerir una maquina virtual. ¿Cómo hacerlo?, bueno seré lo más simple posible porque se que a la mayoría no nos gusta perder tiempo leyendo cosas innecesarias.

Como primer paso debemos tener instalado el componente de Linux en Windows y una vez que lo tengamos habilitado deberemos de abrir una sesiónde Power Shell en la cual introducirás el siguiente comando:

wsl --install

Esta instrucción instalará por defecto una versión de ubuntu Linux en nuestro entorno WSL. Como paso final nos solicitará establecer un nombre de usuario y una contraseña para ubuntu Linux.

Este entorno tiene preinstalado el Python 3, git tambien esta preinstalado en el sistemaLinux,  por lo que no requeriremos instalar el lenguaje, ni el git, solo actualizar el sistema u las librerias del mismo con los siguientes comandos:

Para actualizar el sistema teclear

sudo apt update

Para obtener la última versión de todas las aplicaciones instaladas teclear

sudo apt upgrade -y

Para instalar el gestor de paquetes pip de python3 deberemos teclear

sudo apt install -y python3-pip

para manipular datos instalaremos la libreria pandas (misma que cargará las librerias numpy y matplotlib entre otras muchas), por lo general con esta libreria podemos hacer casí todo lo básico de trabajo con datos, para ello teclearemos

sudo apt install python3-pandas

Para trabajar con un ambiente integrado (IDE) nativo de Linux instale el paquete spyder tecleando

sudo apt install python3-spyder

finalizada la instalación de estos paquetes bastará con teclear en la línea de comandos "spyder" y podremos ver la aplicación que nos permitirá programar en Python desde ubuntu Linux.

Hecho esto podemos salir de spyder y cerrar nuestra sesión de Power Shell. para entrar al entorno linux desde Windows deberemos seguri cualquiera de los siguientes pasos:

Abrir una sesión de Power Shell y teclear en la línea de comandos

wsl

y obtendremos la siguiente línea de comandos de Linux dentro de la consola de powershell

Linea de comandos dentro de la consola WSL

 

Buscar WSL en el menú de inicio de Windows y hacer clic en el icono. Hecho esto obtendremos la siguiente pantalla de línea de comandos con una bienvenida genérica.

Bienvenida genérica WSL

Al teclear spyder en la línea de comandos podremos ver la pantalla de inicio del entorno.

Splash screen Spyder


Y posteriormente se desplegará el IDE de spyder en su versión más reciente compatible con el ubuntu Linux.

IDE Spyder

 Podemos observar que la interfaz de la ventana es un poco diferente a la de las aplicaciones de Windows, esto se debe a que es una aplicación gráfica de ubuntu Linux ejecutandose en el subsistema Linux de Windows.

La otra opción para acceder a ubuntu Linux es buscar su icono en el menú de Windows y hacer clic sobre el mismo, así entraremos directo a la línea de comandos de ubuntu Linux sin la pantalla de bienvenida antes mencionada.

Línea de comandos desde Windows

Y en el caso de la aplicación spyder podremos ver que en el grupo del ubuntu Linux se encuentra un icono para acceder directamente al IDE sin pasar por la línea de comandos, la forma en que decidamos acceder a la herramienta y el ambiente de programación integrado ya dependerá de nuestra preferencia.

Por lo pronto tienes todo lo necesario para empezar a programar con Python en ubuntu Linux, desde tu Windows 10 en tu computadora habitual, sin tener que lidiar con maquinas virtuales.

Espero te sea de utilidad lo aquí expuesto y facilite el desarrollo de tus actividades cotidianas con python en ubuntu Linux desde tu computadora con windows.

Quizá esto sea el inicio de la intercompatibilidad entre sistemas operativos y la transparecia de aplicaciones en las computadoras personales como lo tenemos en Internet.

lunes, 11 de marzo de 2024

Desempeño comparativo de los presidentes Mexicanos 2000-2023

H. Cárdenas, Tabasco a 07 de marzo de 2023.- Aprovechando la gran disponibilidad de datos sobre la economía mexicana que nos proporciona el portal de datos macro, me he permitido hacer un breve análisis del desempeño económico obtenido por los diferentes presidentes de México a través de sus sexenios los datos tienen su origen portal de datos macro, la tabla se ha preparado considerando 100% año base el inicio del sexenio para cada presidente y en relación a este año base la economía comparada con años previos y años posteriores, un buen desempeño tendría los años previos con números menores de 100 y los años posteriores con números mayores que 100.

Se ha creado una columna de pronóstico que sirve para crear una tendencia estimada del resultado de un segundo sexenio del mismo mandatario vs los resultados del nuevo, lo ideal sería que siempre esta estimación sea inferior a lo real, ya que eso significa que el presidente sucesor tuvo un mejor desempeño del que habría tenido el segundo mandato del mismo presidente; lo que observamos es que siempre el cambio da mejores resultados que la continuidad esperada, sin embargo podemos notar que en el sexenio de López es el único en el que todos los años con datos ya disponibles son menores que los del año base del sexenio, y solo el último año (que fue estimado) da un resultado positivo. Lo cual nos indica que este es el único cambio de sexenio en dos décadas en el que el cambio no fue positivo para la economía, pese a los múltiples factores favorables para el país debido a la guerra comercial con China, la guerra de Ucrania, los altos precios del crudo y la reactivación de la economía post-Covid-19, México perdió una enorme oportunidad de crecimiento en este sexenio debido a las políticas retrogradas, el alto gasto social y la estatización de la economía que eliminaron las ventajas económicas del momento.

Tabla comparativa presidentes
Gráfico 1. Desempeño comparativo por sexenio 2000-2023.
Fuente elaboración propia.

Gráfico real vs prospectado
Gráfico 2. evolución del crecimiento de la economía pronosticado vs el real. fuente: elaboración propia
 
En la gráfica 2, podemos observar que el único sexenio en el cual la economía tuvo un retroceso fue en el 2018-2023 que corresponde a la aplicación de medidas regresivas y estatizadoras del C. López obrador, las cuales demostraron su ineficacia ante las condiciones del mercado ya que la inflación anulo todos los esfuerzos del gobierno por distribuir la riqueza mediante programas sociales debido a que las políticas anti empresariales no permitieron que la riqueza se distribuyera de forma natural y al no haber productividad los bienes se encarecieron; otro aspecto que afecto el mercado interno fue la merma que sistemáticamente hizo el estado mexicano de las prestaciones de los trabajadores estatales al dejar de pagarles prestaciones extralegales, ello contribuyó a la contracción de los servicios ya que la derrama económica que estos recursos representaban para el merado interno cesó y los apoyos sociales no pudieron sustituirla debido a que se utilizaron en necesidades básicas y a que la corrupción desenfrenada en el gobierno desvió miles de millones de recursos de programas sociales y obra pública a terceros que no contribuyeron a reactivar la economía del país.
México tendrá que dar un cambio en sus políticas económicas restituyendo las prestaciones a los trabajadores del estado, abandonando la política de estatización de la economía y regresando los mecanismos de control del gasto público a los órganos autónomos para evitar que el mercado sufra distorsiones que anulen sus ventajas, como paso en este sexenio en que el enorme gasto en obra pública no llegó al mercado debido a que las obras se asignaron de manera directa y el beneficio económico no se permeó a la sociedad debido a la intervención del ejercito como "ejecutor virtual" de las obras.

Nota: las cantidades se consideran en pesos a un tipo de cambio de $17.00 MXP por dólar. 

Fuente:

Datosmacro.com (2024),  PIB de México, consultado el 11/03/2024, disponible en https://datosmacro.expansion.com/pib/mexico.

jueves, 29 de febrero de 2024

¿Cómo definir adecuadamente un indicador?

Concepto de indicador.

Un indicador representa los productos obtenidos en las actividades de medición, y deben emplearse como fuente de información de soporte para la toma de decisiones. Para el diseño de los indicadores es importante considerar la frecuencia adecuada de toma de datos, el tiempo requerido para generarlo, la necesidad de datos históricos, entre otros factores.

Tipos de indicadores.

Indicadores de progreso: se utilizan para dar seguimiento a la ejecución de tareas definidas. El cumplimiento del indicador es señal de que la tarea se sta cumpliendo, más no significa que este garantizado el logro de los objetivos del negocio, el incumplimiento de un indicador por otra parte si es indicativo de problemas.
Indicadores de análisis: se emplean para ayudar en el análisis de las salidas producidas por las tareas. Pueden resultar positivos o negativos dependiendo del resultado del cálculo fijado como base para el análisis.
Ejemplo indicador
Indicador en estilo coordenadas polares.
Fuente: elaboración propia


Requisitos previos para generar un indicador

  1. Diseñar las preguntas clave que se busca responder con el indicador es el primer paso para que los mismos sean de utilidad.
  2. Seleccionar los elementos de datos necesarios y adecuados para generar el indicador es la base para que el mismo cumpla su objetivo.
  3. Definir las métricas adecuadas para el indicador es la base para que el mismo responda a las preguntas que se plantearon al diseñarlo.

¿Qué hacer con los valores obtenidos por los indicadores?

Una vez que se  ponen en marcha los indicadores es importante que previamente se haya definido que pasos seguir en consecuencia de los valores que los mismos devuelvan.
Los resultados de los indicadores definidos (si es que contaremos con más de uno) y su evolución a través de los tiempos de medición definidos deberán servir de base para la planificación de las acciones correctivas, preventivas, de mantenimiento o mejora a seguir para asegurar el éxito del negocio.
¿Qué puntos deben definirse al elaborar un indicador?
  • Objetivo del indicador: su propósito.
  • Preguntas: la lista de preguntas que intentan responderse con el indicador.
  • Representación gráfica del indicador: definiendo su correcta representación en cuanto a simbología, colores, escalas.
  • Perspectiva: la descripción de la audiencia de interés para la que se definió el indicador.
  • Entradas: la lista y definiciones de las métricas para construir el indicador, así como de las fuentes de los datos.
  • Algoritmos: descripción de los pasos necesarios para construir el indicador a partir de las métricas definidas.
  • Suposiciones: lista de supuestos de la organización, sus procesos modelo del ciclo de vida, y demás datos importantes para obtener y usar el indicador.
  • Información de la toma de datos: Cómo, cuándo y con que frecuencia se recolectaran los datos para construir el indicador, así como las consideraciones sobre la calidad de los datos y su proceso previo (si es que lo tuviesen). 
  • Información de la generación de informes de los datos: quien será responsable de generar los informes,   para quienes y la frecuencia de almacenamiento, recuperación, seguridad de los datos, así como su conservación.
  • Análisis e interpretación de resultados: información sobre como interpretar el resultado del indicador.

¿Cómo dar seguimiento a los indicadores?

Las principales actividades que deben cumplirse para dar utilidad al establecimiento de indicadores en una organización son:
Planificar la medición basandose en los destinatarios de la medición, las entidades a ser medidas, y las métricas adecuadas para los mismos.
Realizar la medición y presentar los resultados.
Evaluar la medida y ajustarla periodicamente en caso necesario.
Establecer y mantener el compromiso de mantener los indicadores validados, es decir, capacitar, formar y dotar de herramientas a la parte encargada de realizar las mediciones, así como asegurarse de que los mismos dispongan de los medios para cumplir su función adecuadamente.

Bibliografía.

Piattini, Mario G.; García, Felix O.; Caballero, Ismael (2009) Calidad de sistemas informáticos, Tercera reimpresión, Alfaomega-Ra-Ma, México.

martes, 22 de agosto de 2023

Crear gráficos a partir de un conjunto de datos con pandas y Python

 Cárdenas, Tabasco a 22 de agosto de 2023.- Cuando se trabaja con datos por lo general se nos pide que realicemos tareas de clasificación, comparación y gráficos con los mismos, en esta ocasión trabajaremos en la creación de tablas resumen de los datos y en sus gráficos respectivos utilizando como entrada archivos csv (valores separados por comas) que bien podrían ser datos obtenidos directamente de una consulta SQL a la base de datos, pero como casi todas las bases de datos tienen inconsistencias en los datos almacenados, en preferencia vamos primero a obtener los datos en un archivo csv, y posteriormente procederemos a limpiar los datos para que nuestros resúmenes de los datos y sus gráficas sean lo más precisas y claras posible.

El primer paso consiste en leer los datos usando la librería pandas a través de las siguientes instrucciones:

importación de librerias python
Paso 1.- importar la librería pandas, leer el archivo y colocarlo en un DataFrame.  

Con estas instrucciones iniciales creamos el conjunto de datos que va a ser la base de la creación de nuestro archivo xlsx de resumen y sus gráficas.

Paso 2.- Creamos dos DataFrames adicionales que contengan el resumen de los datos creado con un pivoteo de los datos.
Los DataFrames creados contendrán la información resumida por los índices definidos en el pivoteo, los valores a contar será un campo que nos sirva para contar en este caso las matrícula y el conteo lo realizará la función agregada "count",  las columnas serán a aquellos valores contenido en la columna que deseamos clasificar, en este caso los sexos (Masculino/Femenino) y los turnos (Matituno/Vespertino); así mismo, utilizaremos la opción fill_value= para indicar que rellene con ceros aquellos espacios de columna que no tengan ningún elemento (por ejemplo filas en las que solo hay sexo femenino, o turnos vespertinos)
Resultado de pivotear la tabla sobre varios índices presentes en nuestro DataFrame.
Podemos observar que los datos se han agrupado y se han contado cuantas matrículas están presentes en cada uno de los planes, en este caso vemos que todas las columnas tienen valores. Pero hay ocasiones en las que alguna de las columnas no registra valores como es el caso de los turnos, en este caso el valor no presente se rellena con un cero.

La columnas sin valores en este resumen se rellenan con cero.
En los dos ejemplos anteriores, se realizó un resumen sobre una columna que contaba con dos posibles valores (Sexo y Turno), sin embargo, existen situaciones en las que las columnas resultantes son múltiples o solo una, en estos casos para facilitar el resumen de los datos vamos a hacer uso del agrupamiento de datos en lugar del pivoteo de tablas, como podemos ver a continuación.

Este otro método permite clasificar fácilmente datos cuando solo nos interesa la sumatoria final de los mismos. 
Como podemos ver el objetivo es conocer la cantidad de incidencias que hay en cada uno de los municipios que aparecen en la columna de municipios de procedencia (MUN_PROC), para ello usamos una función muy similar a los comandos de SQL que se denomina "groupby" e indicamos que queremos en conteo de apariciones de cada valor, podemos observar que en este caso los diferentes nombres se organizan en filas, en lugar de hacerlo en forma de columnas como en el caso de los sexos y los turnos.

Al usar la instrucción groupby los diferentes valores contenidos en la columna MUN_PROC se ordenan como filas de la tabla resumen, en lugar de hacerlo como columnas como en los resúmenes de sexos y turnos.

La misma operación de conteo podemos hacer la para las carreras, en cuyo caso nos interesa saber ya no la cantidad de personas de un sexo u otro, sino el total presente en cada programa educativo.

Con la función groupby obtenemos ahora los programas educativos y sus matrículas totales.
Resultado de contar el número de personas que están inscritas en cada programa educativo

El resultado de estos resúmenes de datos podemos trasladarlo ya fácilmente a un archivo formato xlsx, que deberá ser formateado para entrega a quien requiere la información, utilizando las instrucciones ExcelWriter y to_excel de los DataFrames de pandas.

Con estas sencillas instrucciones los DataFrames creados con los resúmenes de los datos son trasladados a un archivo formato xlsx que puede ser editado para su presentación ejecutiva.

Lo último que necesitamos son la generación de los gráficos que presenten la información de las tablas de manera visual y eso lo logramos con la instrucción plot de los DataFrames y la configuración de los correspondientes parámetros.

Creación del gráfico correspondiente para el conjunto de datos resumen de turnos.
Con las instrucciones anteriores lo que logramos es un gráfico en formato png, que tiene una resolución de 300 dpi, y un tamaño de 10 pulgadas por 3 pulgadas.

Resultado de usar el comando plot sobre el DataFrame que resume la matrícula por programa educativo.

Como podemos ver es posible definir el tipo de la imagen, su tamaño y los colores de las series de datos, así como, los títulos de los ejes y del gráfico. La imagen será guardada en un archivo en formato png con las características definidas en los parámetros que enviamos a la funcionalidad plot.

Resultado del procesamiento de los datos en un archivo xlsx

En el directorio que trabajemos la información quedarán guardados todos los archivos resultantes del procesamiento, en este caso podemos ver el archivo py de las instrucciones, el archivo csv que contienen los datos a procesar, los archivos png resultantes de la graficación del comando plot de los DataFrames, y el archivo xlsx resultante de la aplicación de los comandos ExcelWriter y to_excel, así como el archivo con el mismo nombre que el xlsx y la palabra gráficos que es donde integramos todo para su presentación ejecutiva.

Realizar la consulta a la BD y limpiar los datos nos tomará unos 30 minutos dependiendo de la cantidad de registros, escribir el código nos tomará aproximadamente 10 minutos, procesar los datos unos segundos,  y editar el archivo para su presentación ejecutiva otros 30 minutos, estos tiempo disminuyen mucho conforme más práctica vayamos tomando en el proceso de los datos. Y podrían beneficiarnos en disminuir el tiempo de generación de la información de días o semanas a minutos o en el peor de los casos horas.

Espero que las explicaciones proporcionadas basten para guiar la creación de tus propios cuadros resumen y sus correspondientes gráficos y faciliten tu trabajo administrativo.







viernes, 13 de mayo de 2022

Obtener datos de una consulta Oracle directo a un DataFrame de PANDAS y renombrar las columnas

En esta ocasión les compartiré mi experiencia obteniendo datos directamente de la base de dsatos Oracle sin almacenar los resultados en un archivo CSV, para losgrar esto deberemos instalar el instant client correspondiente a nuestra versión de sistema operativo en el equipo (funciona para Linux Ubuntu 20.04, Windows 10) y ponerlo en la ruta de búsqueda definida del sistema (PATH), una vez realizado esto, podremos conectar a la BD de Oracle de forma habitual en cualquiera de los métodos que para ello nos propociona la libreria cx_Oracle, en mi caso me gusta conectarme en un solo paso escribiendo los datops de conexión en el programa (asumiendo que trabajamos en un entorno seguro, de no ser así, les aconsejo que pidan los datos de conexión a través de variables en cada ejecución (más tedioso, pero más seguro).

Librerias Python (cx_Oracle, pandas)
Figura 1.- Librerias necesarias para obtener los datos y manipularlos.
Fuente: elaboración propia.

El primer paso como se ve en la figura 1 es importar las librerias que nos permitirán realizar la conexión a la base de datos y almacenar los datos en un DataFrame. posteriormente se deberá de realizar las instrucciones necesarias para localizar la instancia de la base de datos, el alías del servidor, el usuario y la contraseña del mismo, como mencione antes, en mi caso escribo la cadena de conexión directamente en el script, ya que mi equipo se encuientra en una ubicación segura y el usuario que se emplea en la consulta no tiene ´rivilegios para afectar los datos consultados. En la figura 2 podemos observar las instrucciones necesarias para lograr la conexión, hecho esto el script de Python esta listo para realizar la consulta y devolvernos los datos.
Cadenas de conexión a oracle
Figura 2.- Instrucciones necesarias para preparar la consulta a la base de datos de oracle.
Fuente: elaboración propia. 
La cadena de conexión deberá estar formada por los siguientes datos <usuario oracle>/<contraseña>@<dirección del servidor>/<nombre de la instancia> todo ello concatenado en una cadena de texto, que se pasa a la variable conn_str.
Por ejemplo: si tu usuario es 'miguel', tu contraseña es 'm2022a', la dirección de servidor es '192.168.1.254', el puerto de Oracle es '1521' y la instancia se llama 'datawarehouse' la cadena de conexión será 'miguel/m2022a@192.168.1.254/datawarehouse'
Figura 3.- La consulta a la base de datos se puede escribir en una sola línea.
Fuente: elaboración propia.
Ya que para Python es indiferente que usemos un apostrofe simple o una comilla doble para definir textos, pero para Oracle no es así y se pide que los textos en una consulta se delimiten con apostrofes, se aconseja que la consulta SQL se entrecomille, y así podemos conservar la consulta SQL tal cual la tenemos escrita en nuestro ambiente PL/SQL.
Variables obtenidas
Figura 4.- En el explorador de variables del IDE Spyder podemos ver que el DataFrame dadm tiene como nombres de columna los números 0 a 22.
Fuente: elaboración propia.
Al ejecutar estas instrucciones podemos ver que despues de la consulta los resultados de la misma se almacenan en un objeto tipo DataFrame que se crea de forma dinámica (no se define su estructura con anterioridad), y que el mismo se popula con los resultados de la consulta con la instrucción fetchall(). 
Figura 5.- El DataFrame obtenido al ejecutar el script, con sus columnas numeradas de 0 a 23.
Fuente: elaboración propia.
La variable creada contendra todos los datos de la consulta pero los nombres de las columnas definidos en nuestra consulta SQL, que exportados a un CSV nos permitirian al cargarlos en un DataFrame con la instrucción read_csv() de pandas, obtener las columnas nombradas de forma correcta, en este caso dichos encabezados no existen y las columnas con datos se numeran a partir de 0 (cero), lo cual podría resultarnos dificil de manejar al procesar la información, para solucionar este inconveniente, es posible utilizar la instrucción rename y nombrar las columnas como mejor nos convenga.
rename()
Figura 6.- instrucciones necesarias para renombrar las columnas del DataFrame.
Fuente: elaboración propia.
Para renombrar las columnas tendremos que crear un diccionario al cual podremos nombrar como se nos ocurra, en este caso se nombro como colnom (abreviación de columnas nombre) y posteriormente aplicar la instrucción rename() sobre el propio DataFrame para que se actualicen los nombre de las colñumnas.
variables actualizadas
Figura 7
.- Variables despues del renombrado de las columnas, ahora existe una variable de tipo diccionario y el DataFrame tienen nombres en vez de números en sus columnas.
Fuente: elaboración propia.
Renombrar las columnas de un DataFrame nos será de mucha utilidad para clarificar nuestro código a futuros lectores, si bien, no es algo necesario, si es una buena práctica, es mucho más fácil inferir que una columna llamada promedios contiene el promedio de algo, que memorizar que la columna con los promedios es la numero 28. En el caso de la consulta de nuestro ejemplo, no hay níngún dato de dificil identificación para un ojo experto, pero los usuarios nuevos (recien contratados por lo general) suelen desconocer por completo los datos, no esta demás que tengamos la buena costumbre de facilitar las posibles revisiones de códigos por parte de terceros y disminuir la curva de aprendizaje de los mismos desde el origen mismo de nuestros scripts.
DataFrame nombrado
Figura 8.- El DataFrame con las columnas renombradas es más descriptivo de su contenido.
Fuente: elaboración propia.
Siempre srá más fácil para todos comprender un código donde cada cosa se nombra por su nombre común o por una abreviatura consistente que un código donde dejamos que el lenguaje asigne arbitrariamente los indices a nuestras estructuras de datos. Es posible que el programador autor del script sea muy bueno recordando como organizao la información, pero siempre es mejor preveer que es posible que en algún momento no estemos y nuestro código deberá ser modificado, y en caso de que no se logre modifiicar, indudablemente sera desechado y se escribirá un nuevo script que lo sustituya.
Espero que este pequeño aporte contribuya a facilitar el camino en el aprendizaje de Python para aquellos entusiastas del aprendelo por tu cuenta, y que este lenguaje gane cada vez más adeptos en el ambiente administrativo ya que la libreria pandas es como un Excel con super poderes, y facilita hasta la visualización de datos mediante la propia libreria pandas o mediante muchas otras librerias especializadas como matplotlib, seaborn y muchas otras. Trabajos administrativos que con Excel podrían tomar 7 o más días en lo que se realizan las consultas a base da datos, se depuuran los datos, se obtienen los archivos fuentes, se procesan para obtener las tablas de datos, se conviernten estás mismas en tablas dinámicas y se generan diferentes gráfi, es posible hacerlos en un solo día inviertiendo algo de tiempo en la elaboración de un script de Python que utilizando pandas, cx_Oracle y algunas otras librerias según la necesidad obtengan los datos y los procesen automáticamente.
En mi experiencia un proceso de generación de indicadores para informes trimestrales nos podía tomar entre 7 y 9 días debido a errores al mover los datos de una tabla a otra o en la escritura de las fómulas, hoy el script de Python se encarga de todo y tenemos la certeza de que los cálculos cuadran se manipulen de la forma que sea ya que las validaciones no permiten que haya esas problematicas diferencias de 1 dato más o un dato menos, que suelen ocurrir cuando movemos datos entre libros de Excel o hasta entre las hojas de un mismo libro de forma manual.



domingo, 27 de febrero de 2022

Como crear un índice a partir de una columna de datos de un DataFrame en Python

Cuando trabajamos con base de datos sin tener privilegios para crear procedimientos almacenados y funciones, es muy probable que los resultados de nuestras consultas siempre sean archivos CSV que contienen miles de datos y nos veamos forzados a trabajarlos en una hoja de cálculo creando ya sea tablas dinámicas, fórmulas, o bien validando datos todas estas opciones son relativamente sencillas para quienes tienen conocimientos más allá de lo básico en el manejo de hojas de cálculo, pero en ocasiones para los usuarios de nivel intermedio, el crear informes personalizados o procesar los datos de forma manual cada vez que piden un nuevo informe llega a ser una tarea engorrosa que consume muchas horas y en ocasiones hasta días, quedándose corta la funcionalidad de las hojas de cálculo y poniendo en entredicho nuestra productividad. Al llegar a este límite, los usuarios avanzados buscan como hacer las cosas en el menor tiempo posible y una forma de lograrlo es encontrar un lenguaje de programación que permita manipular los datos de forma automatizada y crear una hoja de Excel a la cual ya solo haya que darle un formato elegante para presentar la información, esto nos hace más productivos y nos permite dedicar tiempo a funciones laborales más importantes que estar armando reportes con fórmulas, funciones y tablas dinámicas.

Los datos fuente son archivos CSV obtenidos de una consulta SQL.
FUente: elaboración propia.

Una de las características de los reportes administrativos es el hecho de que los miles de datos obtenidos en una consulta a BD por lo general deben ser sumarizados en informes que presentan la misma información de muchas maneras, por ejemplo, las estadísticas escolares y sus indicadores suelen presentar los datos por programa educativo y sexo, por turno y sexo, por grado y sexo, por modalidad y sexo, por edad y sexo, por índices de reprobación y sexo, por índices de aprovechamiento y sexo, discapacidades, etnias, lugares de nacimiento y lugares de procedencia, los mismos datos una y otra vez, organizados por programa educativo, modalidad y nivel  académico. Es aquí donde debemos comenzar a plantear como programaremos está construcción de estructuras de datos que nos presenten ya organizados los datos para ponerlos directamente en una hoja de cálculo sin necesidad de hacer nada más que ejecutar el programa y revisar el formato de la presentación, el primer y más importante paso es obtener los índices que nos permitirán sumarizar los datos: programas educativos, sexo, modalidad, nivel, turno,  etnias reportadas, discapacidades reportadas, procedencias reportadas y lugares de nacimiento reportados, mismos que podrían ser solo uno o varios en cada programa educativo, y que la función que se presentará en esta entrada del blog permitirá obtener para cada columna que deseemos usar como índice en un ciclo de sumarización de datos.

El primer paso consiste en importar la librería Pandas.
Fuente: elaboración propia.

Esta librería nos proporciona métodos para trabajar con archivos CSV y crear DataFrames a partir de ellos, mismos que posteriormente podemos manipular de forma fácil a través de los diversos métodos que implementan.

Esta función permite crear índices a partir de los valores contenidos en una columna de datos.
Fuente: elaboración propia.

La función que se presenta en la imagen antecedente permite que obtengamos una lista de valores que podemos usar como índice para clasificar datos en un DataFrame, por ejemplo si existe una columna estados con 4000 filas en las cuales están los datos de los estados de procedencia de 4000 personas, esta función nos permitiría obtener la cantidad de estados presentes en la columna y posteriormente con esta información podríamos recorrer toda la columna contando los elementos que coinciden con alguno de los índices localizados.

Aquí se muestra como se obtienen los datos y como se ordena el DataFrame, para facilitar que los índices estén en el orden deseado.
Fuente: Elaboración propia.
Para obtener los datos usaremos la función read_csv de los DataFrames de Panda, misma que nos permitirá obtener los datos de un archivo ".csv" que previamente hemos obtenido de una consulta a base de datos o de algún otro tipo de fuente como es un sistema de información o Excel.
El DataFrame creado a partir de CSV luce así ya ordenado de acuerdo a las columnas de interés, podemos ver que en la columna de la derecha esta el orden real de los datos en el archivo .csv.
Fuente: Elaboración propia.
Ordenar el DataFrame es una buena idea para que al obtener los índices ya no tengamos que implementar un algoritmo de ordenación por cuenta propia y ahorremos tiempo de programación. Lo siguiente será tomar la columna de interés, en este caso los nombre de los programas educativos.
Es importante observar que se selecciona solo una columna llamándola por su encabezado, y que se especifica que será una tupla y no una serie, ya que las series no poseen ciertas cualidades.
Fuente: Elaboración propia. 
Ya teniendo la tupla de los programas educativos haremos uso de la función diseñada y obtendremos los valores indice para las consultas de todos los programas educativos que nos permitirán procesar nuestros indices y tablas para crear un archivo de Excel.
La función la invocamos pasando la tupla que contiene la columna 'Prog_educ' del DataFrame "datos", y en la variable programas educativos quedarán los valores índice.
Fuente: Elaboración propia.
El resultado de esta función se almacena en la tupla programas educativos el cual contendrá la lista de todos los programas educativos presentes en la columna 'prog_educ' y que nos permitirá realizar las operaciones de cálculo necesarias para procesar los datos de los diferentes programas educativos y aplicar los cálculos sobre los datos.
Contar con el índice de programas educativos nos permitirá realizar bucles for para ir recabando la información pertinente de nuestro interés de forma fácil.
El uso de un bucle for nos permitirá ir tomando cada valor del índice de nuestro interés para realizar los cálculos de los diferentes indicadores solicitados como son cantidad de alumnos por sexo, indice de reprobación, alumnos de nuevo ingreso por programa educativo, egresados por programa educativo, aprovechamiento por programa educativo y demás métricas que sean de nuestro interés y que se puedan calcular a través de la manipulación de los valores contenidos en nuestra consulta y que pusimos de forma ordenada en el DataFrame denominado "datos".
Espero que esta pequeña contribución le permita a aquellos que inician en Python desde cero y sin capacitación dar sus primeros pasos y tomar confianza para ir usando los métodos más avanzados y eficientes que las múltiples librerías nos ofrecen. 
Termine por escribir esta pequeña contribución debido a que en mi caso no hallaba ningún material nivel cero con el uso de datos locales en Internet, solo ejemplos basados en datos obtenidos de la nube y con funciones de análisis estadísticos que aunque no dudo que sean importantes para la investigación, la realidad es que son poco significativas para el trabajo administrativo que muchos deseamos automatizar en nuestras oficinas cuando nos encargan informes y la elaboración de indicadores.
El obtener los valores índices es lo que nos permite generar los conteos que nos llevarán a la creación de los índices que por lo general son el tipo:

índice de reprobación = alumnos irregulares / alumnos inscritos * 100

índice de aprovechamiento = suma de promedios / número de alumnos

egresados por programa educativo = conteo de alumnos que tienen el 100% de avance al final del ciclo.

Y por lo general en el área administrativo no suelen emplearse los métodos que se usan para el análisis de datos científicos, pero Pandas puede usarse fácilmente para ordenar nuestros datos y permitirnos diseñar fórmulas para obtener la información que deseamos sin tener que recurrir al uso de fórmulas, funciones y tablas dinámicas que aunque facilitan mucho el trabajo, suelen tomarnos mucho y en muchos casos requieren un trabajo adicional para acomodar los datos exactamente como los requerimos. En mi caso, llegue al límite de lo que las tablas dinámicas podían hacer por mi y después de llegar a ese límite tenía que pasar muchas horas procesando datos en nuevas hojas de Excel y terminaba con archivos en los que había n pestañas para los indicadores solicitados y m pestañas para los datos fuentes ordenados o sumarizados de diferentes formas, usar programación para realizar el trabajo nos permite que el archivo generado contenga solo la información deseada ya procesada y una hoja dedicada a los datos fuentes en la cual quien quiera auditar podrá realizar los cálculos y agrupaciones que desee, teniendo nosotros la seguridad de que obtendrán los mismos resultados, ya que el correcto diseño y validación de nuestras fórmulas y funciones en nuestro programa nos da la certeza de los resultados correcto, y con el plus que todo el proceso estará listo en minutos y no en días.






 



miércoles, 16 de febrero de 2022

Como crear un Libro de Excel y agregarle hojas desde Python

Para poner datos producto del tratamiento de información en un archivo de Microsoft Excel para facilitar su presentación y preservación, podemos hacer uso de la libreria "openpyxl" misma que nos permitirá personalizar muchas opciones del libro de Excel de forma fácil e intuitiva, a continuación explicaremos paso a paso cada una de los pasos necesarios y las instrucciones de la librería mencionada para lograr el objetivo.

Código python que crea un libro de Excel con varias hojas nombradas.
Fuente: Elaboración propia

EL primer paso es instalar la libreria requerida "openpyxl" ya sea a través de PIP o en su caso de la interfaz a través de la cual hacemos uso de Python.

Instalada la librería la llamaremos en nuestro código mediante la instrucción "import", como podemos notar en la línea 167 de la imagen previa, el aias "xl" para la libreria puede ser cualquiera que se nos antoje.

Posteriormente crearemos una variable (objeto) que mande llamar una instancia de un libro de Excel, en este caso en la linea 169 podemos ver como hacerlo, la variable wb será el medio por el cual podremos crear la hoja de cálculo a través de sus diversas propiedades.

En la línea 170 creamos una variable para almacenar los datos de la hoja de calculo en la cual comenzaremos a trabajar y para ello usamos la propiedad "active", si deseamos personalizar el nombre de dicha hoja usaremos la propiedad title como se muestra en la línea de código 172.

En la línea de código 174 podemos ver la forma de acceder a una celda específica y poner contenido en ella, por simplicidad aquí decidimos poner un texto, pero es posible pasar el valor de una variable.

Para crear una segunda hoja en el mismo libro como se  muestra en las líneas de código 176 a 178, hacemos uso de una segunda variable y definimos al momento de crearla sus atributos y la marcamos como activa.

Podemos notar que a las celdas específicas se accede mediante la nomenclatura conocida de ColumnaFila entrecomillados. 

Finalmente para guardar el libro de Excel en la línea de código 188 podemos ver la función utilizada, y que debemos proporcionar el nombre del libro entrecomillado, esto creará el archivo de Excel en el directorio en el que estemos trabajando en Python.

Como podemos ver es muy sencillo pasar los resultados de nuestros programas a Excel en sustitución del acostumbrado formato de archivo de texto plano o separado por comas.

Eso podría darle un plus a la presentación de tus datos en tu próximo encargo laboral o escolar.

Espero que esta pequeña guía te sea de utilidad.

jueves, 10 de febrero de 2022

Evolución de la economía mexicana de 2015 a 2022

Cárdenas, Tabasco a 10 de enero de 2022 - La economía mexicana esta siendo cuestionada a nivel mundial debido a lo inestable que se ha vuelto el país en lo económico, social y sobre todo al debilitamiento del sistema legal en el país que ha caído víctima de un régimen fascista  que se autodenomina "la cuarta transformación" y que sus detractores jocosamente denominan "la transformación de cuarta" o "la cuarta trastornación".

La caída de la economía mexicana del podio de las 15 mayores del mundo ha sido ocultada de forma magiustral por los políticos mexicanos, pero a nivel internacional encendió focos rojos para los inversores mismos que desde 2018 comenzaron a sacar sus capitales del país, el país ha sido tan mal manejado que ni el tradicional arrastre de la economía de su principal socio comercial los Estados Unidos de América, ha sido capaz de frenar el mal desempeño de la economía mexicana, misma que tomando como base el año 2015, se encuentra hoy en 2022 con la perspectiva de volver a colocarse a niveles de 2017, eso si logra crecer, porque si bien en un principio se esperaba que creciera un 5.7%, las decisiones del gobierno han logrado dañar tanto la imagen del país ante los inversores y generar tanta inestabilidad interna que actualmente se prevé quien el país apenas si alcance el 1.7% de crecimiento o se estanque.

Desempeño relativo de la economía mexicana tomando como base de cálculo el año 2015
Como puede observarse en la gráfica, y pese a todo lo que el gobierno actual diga y culpe a los gobiernos anteriores es innegable que algo se esta haciendo mal, en el inicio de la gráfica puede verse claramente un crecimiento prácticamente lineal hasta el año 2018, y una abrupta caída a partir de entonces, si bien es cierto que la pandemia agravó artificialmente la caída de la economía en el año 2020, durante el cual en México la economía se paralizó al trabajar y estudiar las personas desde casa, ajustando esa anomalía veremos que el decrecimiento de la economía que se esperaba de todas formas por las políticas gubernamentales era de 0.1%, basándonos en ello, y estando en la seguridad de que ningún cambio de política sería realizado por el actual gobierno, la gráfica que obtenemos no es nada esperanzadora. Vemos que la tendencia es a la baja sostenida, si el país fuese un vehículo podríamos decir que se quedo sin combustible y está perdiendo poco a poco el impulso hasta que eventualmente llegará a detenerse (con o sin pandemia).
Desempeño ajustado de la economía mexicana para los años 2019 y 2020
Es necesario un cambio de rumbo, cierto es que la corrupción frenó durante muchos años al país, aún con todas sus ventajas estratégicas como ubicación, clima, recursos naturales; es también necesario decir que ni en los peores años de corrupción anteriores a este sexenio el crecimiento del país se había visto tan afectado, ahora a la corrupción debemos sumar la ineptitud y la ideologización del aparato de gobierno, misma que hace imposible que corrijan errores o siquiera acepten que los tienen. ¿Cuánto más resistirá la economía? ¿Podrá evitarse la fractura del pacto federal? ¿Estaremos quizá ante el surgimiento de una nueva división geopolítica que divida a México en dos naciones? Podría ser, por lo pronto el tren de la cuarta transformación avanza a velocidad total y corre el riesgo de descarrilar al país como nunca nunca antes en los últimos 200 años.
Las reformas implementadas por gobiernos anteriores eran buenas, solo necesitábamos combatir la corrupción, como bien decía el actual gobierno en sus años previos a llegar al poder, por desgracia al llegar se dejaron conquistar por las mieles del poder y dejaron a los mismos de siempre haciendo lo que siempre hacen, el gobierno de la "transformación" en realidad esta compuesto por los mismos personajes de los gobiernos que hoy se denominan de la "corrupción", ¿Qué cambio podría haberse dado?.
Empieza el año que marca el inicio de la segunda mitad de este sexenio (2018-2024), tres años se han perdido, ¿tres más se perderán?, nadie lo sabe con exactitud, lo que si sabemos es que hoy día para los ciudadanos hay menores ingresos, mayor pobreza, mayor inseguridad, menos cobertura de salud, menos prestaciones laborales, menos estabilidad laboral, mayores costos, mayor inflación, menor seguridad jurídica, mayor impunidad, un peor sistema educativo, menos empleo, menos oportunidades, lo único que si ha aumentado son las remesas que el gobierno quiere considerar como logro propio, cuando en realidad es reflejo del fracaso de todo lo demás...
Así las cosas, iniciamos 2022 con muchas nubes negras, pero con muchas esperanzas de que se de un cambio de rumbo en la conducción de país, y que esta pesadilla se acabe y sea algo de que comentar en años futuros, a como paso con los terribles sexenios de Portillo, de la Madrid y Salinas. México requiere certeza, legalidad y sobre todo el cese de la impunidad y de la corrupción. Si esto no se detiene muy probablemente estaremos ante el principio del fin del país que conocimos y que tantos años nos llevo construir, destruido en tan solo un sexenio...


jueves, 25 de noviembre de 2021

Distribución de productos de la halogenación con Cloro de 2-5-Dimetilhexano


La halogenación con Cloro produce 3 productos, uno en el que el Cloro reacciona con los carbonos primarios (los que están interactuando sólo con otro Carbono); otro en el que reacciona con los carbonos secundarios (los que están interactuando con dos carbonos) y uno más en el que reacciona con los carbonos terciarios (los que están interactuando con tres carbonos).

Molécula de 2-5-Dimetil-Hexano

Molécula de Cloro

Productos de la halogenación con Cloro del 2,5 Dimetil Hexano.

1-Cloro 2,5 Dimetil Hexano
2-Cloro 2,5 Dimetil Hexano
3-Cloro 2,5 Dimetil Hexano

Por la simetría de la molécula solo son posibles tres combinaciones, ya que las posiciones 4,5,6 son equivalentes.
Se sabe que la reactividad del Cloro es (1:4:5), para los carbonos primarios, secundarios y terciarios respectivamente. Dado que la energía necesaria para sustituir un hidrógeno primario es mayor que la necesaria para  sustituir uno secundario o uno terciario, el número de productos de la halogenación, no es lineal, si no que tiene que calcularse tomando en consideración esta facilidad de sustitución.
Sabiendo lo anterior, lo que debemos hacer para calcular las cantidades de productos resultantes es identificar la cantidad de hidrógenos de cada tipo de carbono presentes, para el presente ejemplo, esas cantidades son:
  • 12 hidrógenos primarios.
  • 4 hidrógenos secundarios.
  • 2 hidrógenos terciarios 
Tipos de hidrógenos presentes en la molécula según los carbonos.
Con base en las cantidades presentes de hidrógeno en la molécula podemos saber la cantidad de cada combinación que resultaran finalmente, mediante el uso de la siguiente fórmula:

nHp * Rp + nHs * Rs  + nHt * Rt = 100%

donde:

nHp = número de hidrógenos primarios.
nHs = número de hidrógenos secundarios.
nHt = número de hidrógenos terciarios.
Rp = Reactividad primaria.
Rs = Reactividad secundaria.
Rt = Reactividad terciaria.

Sustituyendo los valores propios y conocidos en la ecuación tenemos:

12 * 1  + 4 * 4 + 2 * 5= 100%

desarrollando:

12 + 16 + 10 = 38

es decir:

38 equivale al 100% de los productos, por lo que debemos obtener la fracción correspondiente de cada producto, dividiendo entre 38 cada uno de los resultados, obteniendo la siguiente equivalencia, para cada producto:

12/38(x1)+16/38(x2)+10/38(x3)=100%

x1 = Fracción de hidrógenos primarios.
x2 = Fracción de hidrógenos secundarios.
x3 = Fracción de hidrógenos terciarios.

Sustituyendo y redondeando los valores en la cada uno de los términos por separado obtenemos los valores para cada una de las "x", estos valores los convertimos a porcentajes:

x1 = 12/38 = 0.315789 = 32%
x2 = 16/38 = 0.421052 = 42%
x3 = 10/38 = 0.263157 = 26%

Y ya podemos proceder a calcular la cantidad de productos a obtener desarrollando la ecuación completa, con los valores ya conocidos:

nHp * Rp * x1 + nHs * Rs *x2  + nHt * Rt * x3 = 100%

donde:

nHp = número de hidrógenos primarios.
nHs = número de hidrógenos secundarios.
nHt = número de hidrógenos terciarios.
Rp = Reactividad primaria.
Rs = Reactividad secundaria.
Rt = Reactividad terciaria.
x1 = Fracción de hidrógenos primarios.
x2 = Fracción de hidrógenos secundarios.
x3 = Fracción de hidrógenos terciarios.

12 * 1 * 0.32 + 4 * 4 * 0.42 + 2 * 5 * 0.26 = 100%

Es decir:

3.84 + 6.72 + 2.6 = 13.16

El número elevado resultante de esta ecuación nos indica que la reacción de halogenación de 2,5 dimetil hexano con cloro es poco selectiva, entre menor sea el número resultante mayor será la selectividad. 

Bibliografía

Germán Fernández (2011), Nomenclatura en Química Orgánica , Academia Minas, España.

Germán Fernández (2016), Química Orgánica, Academia Minas, España.

lunes, 1 de noviembre de 2021

El almacenamiento en la nube una realidad innegable, ¿una vida alterna en la nube es una posibilidad real?

 En 13 de julio de 2013 escribí una entrada titulada "Almacenamiento en la nube ¿una realidad que aceptaremos?" hoy a poco más de 8 años de escribir esa entrada, el almacenamiento en la nube es algo que las personas aceptan de forma natural y muchas veces insconsciente al darse de alta en redes social, es y diversos servicios que funcionan en linea, muchas veces ni siquiera cuestionan donde se encuentran sus datos, ni les preocupa queines puedan acceder a ellos, confian la seguridad de sus datos en las empresas que los manejan a discresión, ¿como paso esto?, que lo motivo si hace apenas unas décadas todos luchaban por mantener sus datos ocultos en su computadora personal protegidos por contraseñas y muchas veces encriptados; la respuesta: comodidad, para gozar de todos los beneficios de la tecnología el usaurio debe renunciar a su privacidad y a sus datos, estar todo el tiempo conectado y compartir su ubicación con quienes le proveen de servicios en su mayor parte lúdicos, juegos, citas, información turística, acceso a sus cuentas bancarias, compra de bienes y servicios, en fin, tantas cosas que es dificil enumerar, hasta el super se puede hacer sin preocuparse del lugar donde uno está.

¿Vale la pena?, la respuesta es que sí, sin esta concesión tácita del acceso a nuestros datos probablemente hoy muchas cosas no serían posibles y muchos negocios millonarios jamás podrían realizarse, si bien, es cierto que esta cesión de datos también es campo fértil para la comisión de delitos, el usuario de estos servicios es en todo momento responsable de la información que se permite poner en las aplicaciones que utiliza, y es posible, en un momento dado limitar lo que las empresas tecnológicas obtienen de parte nuestra a cambio de sus útiles servicios.

Hasta donde estamos dispuestos a llegar, no lo se con claridad, actualmente las empresas de tecnología parecieran querer vendernos una vida virtual que supla las frustraciones de la vida real y la cada vez mayor pobreza de la población mediante vidas alternas en el ciber espacio, donde se crearan comunidades que nos permitiran olvidarnos de nuestras carencias a cambio de pagar una renta en la nube, nube que ahora no solo será de datos, sino de todo una enorme cantidad de opciones de vida virtual y obviamente no solo habrá personas, habrá inteligencias artificiales y robots que permitiran al usuario humano vivir fantasias de todo tipo y liberar sus frustraciones reales, la pregunta en el aíre es ¿qué tanto nos desconectaremos del mundo con algo así?.

¿Cómo afectará las relaciones humanas este cambio? ¿podrán ahora las empresas ser dueñas hasta de nuestros actos más intimos en la vida virtual, llenará esta vida virtual las necesidades y deseos de los que menos tienen desconectandolos por completo de la realidad y haciendolos dueños de una absoluta felicidad virtual. Pronto lo sabremos una vez que las empresas de redes sociales comiencen a fabricar sus mundos virtuales con toda clase de servicios y ¿porque no? con toda clase de prendas sensoriales que nos hagan desonectarnos totalmente de la realidad y desear nunca volver a ella.

¿La realidad superando a la ficción? Esperemos vivir para verlo. Algo similar a lo que vemos en la película Ready Player One de la Warner Bros

En ustedes queda la última palabra, ¿les interesa ser parte de esta vida virtual? o se negaran a ella hasta que simplemente ya no puedan.


viernes, 9 de julio de 2021

¿Qué es un lenguaje de programación?

Un lenguaje de programación, consiste en todos los símbolos, caracteres y reglas de uso que permiten a las personas comunicarse con las computadoras. Existen varios cientos de lenguajes y dialectos de programación diferentes. Algunos se crean para una aplicación específica, otros tienen un carácter general. En cualquier caso los lenguajes de programación tienen instrucciones clasificadas por categorías como: Entrada/Salida, Cálculo/Manipulación, Lógica/Comparación, Almacenamiento/Recuperación.

Aunque todos los lenguajes de programación permiten hacer casi las mismas cosas, existen muchas diferencias en los conjuntos de instrucciones que permiten realizar dichas operaciones y en los símbolos definidos para llevar a cabo cada tarea. Existen tres tipos principales de lenguajes de programación: Lenguaje de bajo nivel, lenguaje de medio nivel y lenguajes de alto nivel.

Lenguaje de programación Python
Fuente: Elaboración propia.

La programación consiste en desarrollar programas (software) para procesar información, una computadora es totalmente inútil si no dispone de programas capaces de procesar adecuadamente la información, para que dicha información sea procesada, es necesario pensar, construir y crear un programa  que al ejecutarse complete las tareas para las que fue diseñado. Esta tarea de programar no está exenta de errores, y es allí donde se requiere de personas capacitadas para pensar utilizando la lógica de programación implementada por el lenguaje de programación que se está utilizando, realmente sería imposible dominar todos los lenguajes de programación que existen en el mercado, es por ello que los programadores expertos eligen de entre cientos, uno o algunos que sirvan a los propósitos de sus tareas específicas ya que entre mayor sea su nivel de dominio de los lenguajes seleccionados, más fácil será completar las tareas que le sean asignadas.

Un objetivo fundamental de la programación es que los programas se codifique de modo tal que si un programador inicia el desarrollo de un programa y por algún motivo lo abandona, cualquier otro programador sea capaz de continuar con el trabajo y finalizarlo, por desgracia, no todos los que aprenden a programar siguen las recomendaciones de diseño y codificación, y existe infinidad de programas que son difíciles de mantener funcionando debido principalmente a la falta de método en su diseño.

Existen dos tipos de lenguajes de programación, los lenguajes interpretados y los lenguajes compilados, la diferencia principal radica en que los programas interpretados pueden ejecutarse en diferentes entornos con pocas modificaciones pero generalmente se ejecutan más lento, y los programas compilados son específicos de las plataformas en las que fueron diseñados, en un principio todos los lenguajes solían ser compilados, ya que no existía tanta necesidad de compartir datos fuera de instalaciones específicas; pero hoy día con el ambiente interconectado de trabajo que nos permite disfrutar Internet, la mayor parte de las aplicaciones son interpretadas y pueden ejecutarse independientemente del ambiente de trabajo en el que deseemos visualizarla, como ejemplo están los contenidos manejados por  las aplicaciones de los teléfonos móviles que acceden a datos almacenados en la nube y que pueden ser visualizados en dispositivos muy distintos como son la tableta, el celular, la computadora de escritorio y las televisiones inteligentes.

Criterios de selección de lenguajes de programación.

Dado que existen muchos lenguajes de programación y muchas diferencias entre la orientación de los mismos, es recomendable seguir algunos consejos antes de seleccionar aquel que deseamos aprender.

  • Utilidad. Fácil de aprender.
  • Rendimiento. Velocidad de ejecución de los programas creados.
  • Portabilidad y flexibilidad. Posibilidad de crear aplicaciones que se ejecuten en distintos entornos operativos.
  • Continuidad. Que tenga el respaldo de una amplia comunidad de programadores que permita asegurar que estará disponible mucho tiempo y que será actualizado periódicamente.

Clasificación de los Lenguajes.

Lenguaje de bajo nivel.

Este tipo de lenguaje son específicos de la máquina en la que se encuentran, generalmente son los más eficientes para realizar las tareas en el equipo, pero nos obligan a la dependencia absoluta de la plataforma en la que programamos. Generalmente no son muy amigables con el programador y obligan al mismo a tener un amplio conocimiento del hardware.

Lenguaje de medio nivel.

Este tipo de lenguajes son más amigables con el usuario pero permite al mismo seguir teniendo un amplio dominio de la plataforma en la que programa, aunque no es tan fácil migrar al 100 por ciento, un programa a cualquier otro equipo sin modificar partes del código.

Lenguaje de alto nivel.

Este tipo de lenguajes son muy amigables con el programador y le permiten moverse de forma casi transparente entre diferentes plataformas, el programador gana en portabilidad, pero pierde en cuanto a dominio del equipo ya que muchas cosas que en otros lenguajes podía gestionar de forma directa, en este tipo de lenguajes quedan ocultos a su dominio y por lo general los programas creados en este tipo de lenguajes tienen un menor desempeño.

Ejemplos de lenguajes de programación. 

Lenguaje C, C++, C#

Estos lenguajes de programación derivan uno del otro pero, tienen diferencias muy claras.

Lenguaje C

Fue creado por Dennis Ritchie a principios de 1970, se basa en el paradigma de la programación estructurada. Pretende ser un lenguaje de propósito general que dé al programador control total sobre sus programas, permitiendo la programación a bajo nivel, pero a la vez, proporcionando estructuras de control de alto nivel que faciliten las tareas de programación. Se usó por primera vez en sistemas UNIX, en 1978 alcanzó gran popularidad y se convirtió en el lenguaje de referencia para la comunidad informática.

Lenguaje C++

Creado por Bjarne Stroustrup durante la primera mitad de los años 1980 con el fin de dotar a C de mecanismos que le permitieran usar el paradigma de la programación orientada a objetos. Su nombre original era C con clases, pero finalmente se decidió hacer un juego entre el nombre del lenguaje y uno de sus operadores más comunes (autoincremento ++) quedando su nombre como C++; inicialmente era totalmente compatible con C, es decir cualquier programa escrito en C se ejecutaba en C++, aunque lo contrario no siempre era cierto. Actualmente esa compatibilidad es menor, pero aún es significativa.

Lenguaje C#

Creado por Anders Hejlsberg en el año 2000 como una versión mejorada de C++ (C++++) C#; su objetivo es permitir la programación a alto nivel, la idea es que las capacidades de bajo nivel de C y C++ rara vez son utilizadas por los programadores, para los que el riesgo de manipular directamente la memoria y otros recursos es algo innecesario y peligroso; nace como un intento de Microsoft por hacer frente a la popularidad de Java, lenguaje que había arrebatado gran cantidad de adeptos a C y C++, debido a su facilidad de uso; además, se decidió hacerlo el lenguaje nativo de la plataforma .Net de Microsoft (Windows), originalmente C# estaba fuertemente basado en C++, pero con el paso del tiempo se ha ido separando y aún cuando mantiene compatibilidad, ya no es completa. C# es uno de los lenguajes más populares para programar aplicaciones para Windows.

BASIC (Beginners' All-purpose Symbolic Instruction Code)

El lenguaje BASIC surge con la finalidad de hacer fácil la programación para los principiantes, su nombre es un acrónimo en inglés de “código simbólico de instrucciones de propósito general para principiantes”, fue originalmente diseñado en 1964 por John Kemeny y Thomas Eugene Kurtz para estudiantes y profesores no científicos, de este lenguaje  han derivado cientos de versiones en todas las plataformas existentes, muchos nuevos lenguajes de programación, ya no directamente relacionados con BASIC, toman su modelo como  Gambas en GNU/Linux o Microsoft Visual Basic .NET en Windows.

Una de las desventajas más notables de BASIC era no manejar el acceso directo a archivos, sino depender de una aplicación externa para acceder a ellos.

Los ocho principios de BASIC:

  • Facilidad de uso.
  • Propósito general.
  • Capacidad de añadir características avanzadas, sin complicar el lenguaje.
  • Ser interactivo.
  • Proveer mensajes de error claros y amigables.
  • Desempeño.
  • No requerir conocimientos del hardware donde se ejecuta.
  • Proteger al usuario del sistema operativo.

Visual Basic

Con la llegada de Microsoft Visual Basic que usaba todas las sentencias, forma de manejo y tipos de datos de Basic, pero con mayor potencia, Visual Basic se convirtió en uno de los lenguajes más utilizados para desarrollar soluciones en la plataforma Windows para el año 2002 se estimaba que cerca del 70% de los programas desarrollados para Windows se programaba en Visual Basic; en 2002, y con la introducción de la plataforma .NET, Visual Basic se orienta a Objetos y se convierte en multiplataforma. Hoy día es parte de la suite de programación conocida como Visual Studio, y comparte muchas instrucciones comunes con otros lenguajes basados en .NET, más que conservar las estructuras del Basic original.

Java

El lenguaje para la programación en Java, es un lenguaje orientado a objeto, de una plataforma independiente, fue desarrollado por la compañía Sun Microsystems en 1995, con la idea original de usarlo para la creación de paginas WEB. Java permite crear complementos tipo Apps que se ejecutan en un navegador o bien aplicaciones independientes más complejas como procesadores de textos, o juegos.

La programación JAVA permite crear aplicaciones orientadas a una arquitectura cliente/servidor, lo que hace capaz a un programa de ejecutarse en múltiples ordenadores simultáneamente, ejecutando un mismo proceso, es decir distribuyendo el trabajo.

JavaScript

Lenguaje de programación interpretado del lado cliente (principalmente), está orientado a objetos, basado en prototipos, imperativo, débilmente tipado y dinámico. Se utiliza principalmente como parte de los navegadores (lado cliente) para dotar de funcionalidad a la páginas Web y permitir que sean dinámicas. Fue creado en 1995 por Netscape Communications Corp (Mozilla Foundation).

Todos los navegadores modernos interpretan el código JavaScript integrado en las páginas Web. Para interactuar con una página Web se provee JavaScript bajo el Modelo de Objetos Documento. Actualmente JavaScript se usa para interactuar con los servidores de Internet en conjunto con otras tecnologías del lado servidor como Ajax.

Python

Es un lenguaje de programación interpretado cuya filosofía es un código legible. Se trata de un lenguaje multiparadigma, soporta programación imperativa y orientada a objetos, así como en menor medida programación funcional. Es un lenguaje de tipado dinámico y multiplataforma. Posee licencia de código abierto.

Fue creado en 1991, por Guido van Rossum, su nombre proviene de la adicción de su creador por los humorista británicos Monty Python.

Filosofía de Python

  • Bello es mejor que feo.
  • Explícito es mejor que implícito.
  • Simple es mejor que complejo.
  • Complejo es mejor que complicado.
  • Plano es mejor que anidado.
  • Disperso es mejor que denso.
  • La legibilidad cuenta.
  • Los casos especiales no son tan especiales como para quebrantar las reglas.
  • Lo práctico gana a lo puro.
  • Los errores nunca deberían dejarse pasar silenciosamente.
  • A menos que hayan sido silenciados explícitamente.
  • Frente a la ambigüedad, rechaza la tentación de adivinar.
  • Debería haber una - y preferiblemente sólo una - manera obvia de hacerlo.
  • Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.
  • Ahora es mejor que nunca.
  • Aunque nunca es a menudo mejor que ya mismo.
  • Si la implementación es difícil de explicar, es una mala idea.
  • Si la implementación es fácil de explicar, puede que sea una buena idea.
  • Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!.

Bibliografía.

Fundamentos de la computación, (N/D), Instituto Politécnico Nacional, Unidad profesional de ingeniería y ciencias sociales y administrativas.