Comandos para crear un proyecto en Laravel

laravel

He aquí dos sencillos comandos para crear un proyecto en Laravel, que siempre nos serán útiles y necesarios.

Crear proyecto

composer create-project --prefer-dist laravel/laravel nombre del proyecto

Crear modelos y toda la estructura al mismo tiempo

php artisan make:model Company-mcr
•	-m  crea el archivo de la migración o sea la tabla
•	-c   crea  el controlador
•	-r   indica que el controlador es un controlador de recurso preparado para un CRUD(create, read, update, delete), compatible con REST

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

subir montañas hermana hombres…..

Diferencia entre número de coma flotante y decimal

logo python

5 y 5.0 no son iguales desde el punto de vista de la programación. A diferencia de otros lenguajes,  en Python es importante conocer la diferencia entre número de coma flotante y decimal.

Cuando pasamos un dato a Python, este  intenta determinar a que tipo de dato corresponde

 La lógica que aplica Python, es considerar que si haces una división entre enteros, estas esperando un entero como resultado, y eso es lo que ofrece.

Pero si lo que esperamos es un resultado en fracción, hay que decirle a Python que al menos uno de elloslo es, haciendo una declaración del tipo  foo  = x.0

Entonces si , el  lenguaje retornará un valor del tipo flotante, al dividir. 

En Python 3, esto ya funciona de modo automático, e incluso sin colocar el punto devolverá un flotante, por una cuestión de optimización del funcionamiento del lenguaje.

 Una forma de ayudar a Python, es indicando que uno de los elementos de la división es del tipo float, haciendo una conversión sencilla del tipo z = float (x) / y  de modo que transformamos el valor  de x en un número de coma flotante, antes de operar con el.  

Este comporamientos heredado de C, tiene su base en la diferencia que existe al operar a bajo nivel con números enteros, de coma flotante o decimales.

Conocer esta diferencia sobre todo  nos hará entender mejor lo que hacemos.

Los números de coma flotante, no representan todas las  fracciones decimales, sino que algunas son redondeadas; sin embargo el  Decimal, es capaz de representar estas, obedeciendo al limite de precisión qué le indiquemos. 

La diferencia entre coma flotante y decimal

Coma flotante

Como decía antes, los números de coma flotante obvian ciertas representaciones.

Estos se componen de un signo, ya sea negativo o positivo, la mantisa, que es el número binario de un solo dígito seguido por una parte fraccional y el exponente que indica en qué lugar se ubica la coma decimal.

Por ejemplo, el número 1,25 tiene signo positivo, una mantisa de 1,01 (en binario) y un exponente de 0.

 El número 5 también es positivo, y posee la misma mantisa,  y su exponente es 2, pero cómo hay que multiplicar su mantisa por 4 (2 a la 2); 1,25 x 4 vale 5.

Hay que decir que la norma IEEE 754, que define el tratamiento de los números con coma flotantes, esta presente en casi todos los sistemas. 

Debido a esto es lógico, que el tipo de datos de coma flotante basados en  C doublé, es común que aparezca implementado en un número de 64 bits del IEEE 754, que al mismo tiempo emplea un espacio de  52 bits para la mantisa.

Esto equivale a  que las cifras de coma flotante, sólo se pueden definir  hasta 54 bits de precisión.

Todo lo que exceda de ese espacio, será recortado,.

El problema surge cuando se requiere o se posee una salida en base 10, que como sucede a menudo con fracciones en base 10, estas son del tipo periódico en base 2.

Entonces como expresar estas fracciones periódicas, sin exceder los 52 bits pues creando una ligera imprecisión, que puede acarrear inexactitudes importantes a la larga.

Muchas veces esto es imperceptible y puede dejarse pasar. Si consideramos la magnificencia de C al devolver los datos, y la poca falta que puede hacernos una exactitud rigurosa, puede no ser necesario incluso considerarlo.

No obstante en cálculos aritméticos exigentes, esta omisión puede requerir soluciones complejas.  

 Decimal

Decimal, es un modulo creado para resolver esta situación.

Posee en su estructura las clases Decimal y Context, que le aportan una estructura útil, para los que extrañaban algo así en Python 2.

Las instancias de estas clases, se reparten la responsabilidad de ofrecer una solución robusta para construir el redondeo.

Mientras la clase Decimal representa a los números; Context se usa para agrupa aquellas propiedades, que definirán el resultado esperado, como son el modo de redondeo y la precisión

Una vez creado el numero es inmutable, por lo que no puede cambiarse su valor, y  es muy ductil ya que las instancias de Decimal se pueden crear a partir de enteros, cadenas y tuplas:

import decimal 
decimal.Decimal(567)
Decimal("1972")
>>>decimal.Decimal("9.8")
Decimal("1.1")

En el caso de las tuplas, se puede complejizar un poco mas y ofrecerle a Python en una tupla el signo, la mantisa como tupla de dígitos decimales, y el exponente:

>>> decimal.Decimal((1, (2, 3, 2, 3), -1))
Decimal('-232.3')

En estos casos hay que respetar que el  bit de signo es Booleano, por lo que 0 significa positivo y 1 significa negativo.

¿Y los flotantes?

Otro punto importante es que los creadores de Python dejaron fuera la conversión directa de números de coma flotante. La solución es convertir el número de coma flotante en una cadena con la precisión esperada y luego pasar esta al constructor de Decimal:

>>> f = 2.2
decimal.Decimal(str(f))
Decimal('2.2')
>>> decimal.Decimal('%.8f' % f)
Decimal('2.20000000')
La única limitación que nos da decimal ahora es que el exponente sea un numero entero.  Una operación en la que no se cumpla ese principio arrojara errores de estos tipos 
decimal.InvalidOperation: x ** (non-integer)
unsupported operand type(s) for ** or pow(): 'str' and 'str'

Otra muestra de la fortaleza de decimal es que permite combinar instancias de Decimal con enteros,  sin embargo esto no es posible con números de coma flotante:

Por otro lado, no todo podía ser color rosa, cuando utilizamos los modulos de Python math y cmath, estos se convierten a números de coma flotante antes de operar, y por supuesto el resultado del calculo será también un numero de coma flotante 

Usando Context

Las instancias de Context encapsulan las propiedades que deseamos asignar a nuestra operación de redondeo

  • prec es la precisión, el número de decimales.
  • rounding especifica el modo de redondeo. Existen varias constantes para las diferentes opciones: ROUND_DOWN (hacia cero), ROUND_CEILING (hacia arriba),   ROUND_HALF_EVEN (al más cercano), ROUND_UP, ROUND_05UP    ROUND_HALF_DOWN  ROUND_HALF_UP ROUND_FLOOR
  • • traps es un diccionario, que indica como tratar los errores.

Dentro de esto tenemos la opción de utilizar getcontext(), que como su nombre indica no es mas que un  contexto predeterminado local, que establece el hilo de ejecución  y que permite cambiar las propiedades en búsqueda de cambios en la precisión, el redondeo o captura de errores.

 Ahora cuando trabajes con un numero de coma flotante o con decimal, ya sabes un poco mas de que va el tema.

«Quien va en busca de montañas, no puede detenerse a recoger las piedras del camino»

Instalar una versión anterior en Laravel

laravel

Una de las cuestiones que podemos necesitar hacer es instalar una versión anterior en Laravel.

Las razones pueden ser varias : estudiar las modificaciones entre versión y versión, mantener la compatibilidad de un proyecto, o de un desarrollo previo, testear una app, o como sucede en algunos servidores cloud, adecuarse a la versión de que estos disponen.

La solucion es sencilla y composer nos permite incorporarla al iniciar nuestro proyecto

Basta con añadir a la consola la versión que necesitamos:

 composer create-project laravel/laravel [nombreproyecto] [version.*]

seria algo como esto:

composer create-project laravel/laravel ProyectoTest 6.*

Aquí estamos instalando la versión 6 en su última variante, podríamos escribirlo también asi:

composer create–project laravel/laravel=6.* ProyectoTest

Donde 6 será la versión que necesitamos, acepta  incluso 6.2  o 5.1, y el asterisco indica dentro de ella la que incorpora la última actualización, lo  que significa que se han  reparado los bugs, o sea es una versión Bugfixed.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

….un sueño es casi todo  y más que  nada, más que todo al soñarlo, casi nada después……

Entendiendo Vue (ficheros)

Vue es un framework para crear código javascript, y está basado en el uso de componentes.

Podríamos decir para que se entienda mejor,  que los componentes son pequeños trozos de código javascript con funcionalidades  y estilos propios,  que insertamos dentro de la pagina html de nuestra aplicación, pudiendo ser reusables y facilmente manejables..

Dentro de nuestra app veremos que existen diferentes archivos. De ellos los que más nos interesan, para comenzar a programar nuestra app en Vue, son :

Public:

Dentro de esta carpeta se guarda nuestra pagina html(index) y el favicon de la aplicación.

Vue crea una SPA, o sea una single page application, una sola pagina sobre la cual se inserta todo el código que vamos a mostrar en nuestra web.

Si nos fijamos dentro del index  encontraremos un div con el id app, es ahí donde Vue, cargará todo nuestro código.

Tambien en index configuraremos las etiquetas meta, favicon, el titulo, mensajes si js no esta activado y  en definitiva, todo lo referente a la base html.

src:

En esta carpeta se concentra la mayor parte de nuestro desarrollo, aquí es donde crearemos la magia.

Dentro de src existen dos carpetas y dos archivos:

assets: es donde se guardan útiles necesarios, el css, las imágenes, etc

components: es donde guardaremos los componentes que creemos

El archivo App.vue:

Es el componente principal, sobre el que se cargaran el resto de los componentes. Los archivos vue, deben terminar siempre con la extensión vue.

Dentro de él, se importaran el resto de los componentes en import … from…. y se cargarán luego dentro de components{}.

El archivo main.js:

Es un documento de configuración, principalmente dentro de el se importa Vue, se determina en que estado esta la app, ya sea produccion y desarrollo y se  crea un nuevo objeto, además se determina la etiqueta donde ese nuevo objeto se cargará que por defecto tiene el id App, y que ya mencione cuando vimos el archivo index.html-

package.json:

Este archivo contiene un array de arrays, con la configuración inicial de la app, es el lugar para ajustar el nombre de la app, algunos script, comandos, configurar las diferentes dependencias con que trabajará  durante toda su vida el proyecto, y las devDependencies que son aquellas dependencias que solo estarán disponibles para trabajar  en local.

node_modules:

como su nombre lo indica contiene todos los módulos de nodejs, instalados en la app.

Y estos son los más importantes y que debemos conocer para comenzar a desarrollar en Vue.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Subir montañas hermana hombres……

El uso de save

laravel

El método Save,  tiene multiple usos en laravel y es una de esas herramientas que siempre es bueno tener a mano. Aquí les muestro algunos usos

Save con condición

En el siguiente ejemplo le pasamos a una función Save, un array con las opciones , y como puede apreciarse en la función protegida, pasamos el arreglo options condicionandom que si se cumplen determinada condición se actualice el Timestamp, al final a la variable products, le pasamos la función save() con el parámetro que necesitamos.

// src/Illuminate/Database/Eloquent/Model.php
public function save(array $options = [])

// src/Illuminate/Database/Eloquent/Model.php
protected function performUpdate(Builder $query, array $options=[])
{
  if ($this->timestamps && array_get($options, 'timestamps', true))
	{
	  $this->updateTimestamps();
	}
}

$product = Product::find($id);
$product->updated_at = '2015-01-01 00:00:00';
$product->save(['timestamps'=>false]);

Para devolver relaciones de los modelos

En este caso vemos su uso en el método store, donde le indicamos que si el usuario está autenticado guarde el  nuevo Post.

public function store()
{
	$post = new Post;
	$post->fill(Input::all());
	$post->user_id = Auth::user()->user_id;

	$post->user;

	return $post->save();
}

Tiene otros usos más, por ejemplo para insertar registros en la base de datos, dentro de los métodos update o store, en los controladores

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Subir montañas hermana a los hombres……

Serializar y deserializar en Laravel.

laravel

Al estar desarrollado sobre PHP, utiliza también las propiedades para serializar y deserializar en Laravel.

Laravel  posee una Api que trabaja en segundo plano, cuyo  nombre es Queue, que se vincula estrechamente a la clase Job, para ejecutar tareas de modo asíncrono.

Job por su parte, es una clase tipo Trait, que posee un conjunto de parámetros. Sus instancias son objetos que serán alineados dentro de la cola, en su momento, y extraídos al ser ejecutados.

Es en su uso donde tenemos un ejemplo de la importancia del uso de la serialización:

Los valores que recibe la clase,  son  contenidos dentro de un objeto Php (que no es más  que un array  de su tipo) y necesitan ser pasados a los modelos.

Un elemento que hemos de saber para entender esto es que:   un array de este tipo, fuera de un script Php, no puede ser usado, y  por tanto  no puede ser introducido  directamente en la base de datos, ni leído como otro tipo de file diferente al Php.

Para lograrlo PHP(Laravel), lo lleva a un formato que pueda se común a otros lenguajes, o sea los serializa primero, los añade al  modelo(objeto) y al obtenerlos de vuelta los des-serializa.

Dicho de un modo más  resumido aun: la serialización en si,  consiste en pasar los datos de un objeto  a un formato de string  y guardarlos en la BD.

Solo las propiedades del objeto aceptan ser serializadas.

Si entendemos el sistema de modelos de Laravel, entonces comprenderemos  que al convertir un modelo(objeto) en serializado, ejemplo un determinado Job, estamos preparando para que los valores de sus columnas puedan ser convertidos a  un tipo de string ,específico reconocido por el Framework, guardados en la BD y en el momento de su ejecución, extraídos, leídos y reconvertidos a una sintaxis original.

Esto puede sin dudas, compararse con convertir los datos a JSON, cuando intentamos conectar con Javascript.

En definitiva ambas son alternativas de PHP, para transmitir datos que necesitan ser procesados por otras aplicaciones.

Laravel lo usa en las colas (queues) y los trabajos(Jobs), y su gran ventaja es que Laravel (Php) no solo recuerda el tipo de dato nativo para cada ítem serializado, sino que además luego de des-serializar el método, este desaparece.

La validez de la necesidad de su uso, no solo son las colas, podríamos necesitar utilizarlo para aquellos casos en los que trabajamos con valores cuyo uso es temporal: por ejemplo para procesar   un modelo que contabiliza las conexiones diarias a la bd de un determinado grupo de empleados.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…un sueño es casi todo y más que nada, más que todo al soñarlo, casi nada después……..

Usando Google Analytics

La herramienta Google Analytics, una de las más conocidas de Google, para aquellos interesados en el tema de posicionamiento de  webs, y aunque  no es la única de la que podemos valernos,  si es quizás la que nos ofrece una interfaz más amigable, amplia y gratis, para implementar campañas y estrategias en cualquier sitio web, de que dispongamos y deseemos obtener un comportamiento.

Desde mi modesta experiencia,  no todo en GA es perfecto, y el uso de su herramienta requiere una curva de aprendizaje que aunque no es alta, necesita mantenerse actualizada, entre otras cuestiones por las propias variaciones que hace Google.

Un uso adecuado de GA, incluye la combinación de otras herramientas que también forman parte de Google Marketing Platform, como Google Data Studio o Google Tag Manager, sobre todo si se pretende trabajar con informes ampliados.

En esta ocasión, hablaré del tema de los informes que Google entrega, por lo que este articulo, será mas entendible para aquellos que ya disponen  y usan cuentas de GA.

Los informes que pone a nuestro alcance Google Analytics, son dos  : Estándar y Mejorado.

Ambos se basan,  en el supuesto de que usted necesita conocer: a quien, que, cuanto y como vende, lo que ofrece en su tienda;  y  para ello le ofrecen diferentes opciones de configuración.

Los elementos básicos que nos brindan son entre otros:

  • Cuántos visitantes únicos hacen clic en el sitio y  en que páginas específicas dentro de él.
  • Cuántas vistas de página en general,  llevan  a  determinadas páginas
  • Cuánto tiempo pasan los visitantes en cada página durante su visita.
  • Cuál es su tasa de rebote
  • Datos demográficos de sus visitantes,  y su origen.

Dicho esto podemos decir que :

El punto de partida para obtener un informe Google Analytics útil,   radica en que esté bien configurado.

Informe Standard

Ofrece varios elementos:

Visión General de Ecommerce: Muestra aquellos datos imprescindibles: el número de transacciones realizadas, la tasa de conversión, y la cantidad de ingresos.

Desempeño del Producto: Permite observar los productos que aparecen en su tienda, los que han sido vendidos, y los ingresos que ha obtenido con ellos, así como el precio promedio de su tienda y la cantidad media de productos.

El Informe de rendimiento de ventas: Recopila, la misma información que el informe de rendimiento de productos, pero hace hincapié en los niveles de ingreso hasta la fecha y establece comparativas, en fechas diferentes.

El informe Transacciones: nos da el comportamiento de los pedidos, listándolos según su ID.

El informe de Tiempo de Compra, indica la demora en que tarda en ejecutarse una transacción desde que se inicia hasta que se ejecuta totalmente la conversión.

Informe mejorado

Como indica su nombre se diferencia del informe estándar al ofrecer detalles adicionales, que debidamente usados y comprendidos , lo ayudaran a mejorar la gestión de su tienda.

La principal diferencia radica en que el informe mejorado, aporta una visión relacionada con el marketing, centrándose en la experiencia de usuario de los visitantes de la tienda, lo cual construye una opción mas profesional y completa del comportamiento de una tienda online.

El informe desempeño del producto mejorado: muestra además de los mismos elementos que su versión estándar, detalles del carrito y los reembolsos.

Esta información como explicaba antes nos dota del conocimiento para una análisis más profundo, acerca de  cómo se comportan, sus clientes dentro de la tienda, el interés generado por su web y en que medida  su diseño es lo suficientemente efectivo para llevar a los clientes hasta la compra real.

El informe de Comportamiento de Compras: requiere un conocimiento básico de conceptos de marketing online, como funnels, conversión y embudo, para comprender como funciona nuestra estructura online, en su objetivo de   conseguir una venta y cuan efectiva es.

Uno de sus elementos más importantes  es que muestra las capas o etapas que componen el embudo y el número de sesiones en cada una.

El informe de comportamiento de pago: detalla  el proceso de pago,  los pasos que esta contiene y las personas que retiene.

El informe de rendimiento de ventas: se extiende con respecto a su versión estándar al mostrar información relacionada con los impuestos, envíos,  y reembolsos.

El Informe de rendimiento del listado de productos de la tienda, nos facilita realizar análisis individuales dentro de un conjunto de productos dado.

Otros informes como las Promociones internas: Ofrecen el rendimiento detallado de las promociones para una categoría.

El informe ampliado también ofrece información sobre la gestión del marketing de afiliados y la efectividad del cuponeo como parte de la estrategia de marketing online que hayamos escogido.

La necesidad el quid de la cuestión

Antes de decidir que análisis usar, o incluso si usarlos ambos, hay que partir de saber que quieres conocer.

Como todas las cosas complejas de este mundo, todo empieza por una pregunta sencilla:

¿qué información quieres obtener?

Esta respuesta dependerá, según mi criterio de tres cuestiones básicas:

  • El conocimiento que tengas de tus clientes y tu entorno de mercado,
  •  tu conocimiento de Google Analytics, 
  • ….y del tiempo de que dispongas para estudiar métrica y trabajar con ella, 

No ahondaré en este tema, pero explicado de un modo suscinto, podríamos decir que si llevas una pequeña tienda de corbatas física y online, donde lo haces todo, y tu mercado objetivo son los caballeros de tu ciudad, debería bastarte con un análisis standard, de cómo marcha tu tienda; pero si tu negocio crece, intentas vender a todo el país, e incluso internacionalmente y comienzas a tener trabajadores que atiendan diferentes áreas del negocio, dejándote el tiempo necesario para poder estudiar y comprender mejor a tus clientes, el informe ampliado comienza a ser una oportunidad que no debes dejar pasar de largo.

La complejidad.

El diseño del informe responde a estas mismas preguntas, y debemos evitar llenarnos de información que no necesitamos ni utilizamos, porque convertirá en poco relevante, complejizando innecesariamente una tarea que debes ser fácil de entender y de llevar a cabo periódicamente .

Un informe debe ser tan sencillo de comprender que hasta nuestra abuela lo entienda, sino logramos esto, no estamos en el camino correcto  y hay que trabajarlo hasta que lo simplifiquemos lo suficiente, para que sea entendible y útil.

Lamentablemente en este sentido Google, no lo pone del todo fácil.

El informe estándar es por supuesto más fácil de configurar y existen herramientas adicionales (plugins) para integrarlo a Woocommerce, UltraCart , Shopify,  y Prestashop, en otros casos será necesario la ayuda de especialistas en programación.

No obstante es necesario configurar adecuadamente  lo que queremos recibir desde  nuestra cuenta en GA.

El informe mejorado es mucho más complejo de configurar, lo cual es lógico ya que siguen más comportamientos y por tanto incluyen mas variables en los procesos de compra.

No obstante, esa complejidad  se minimiza si tenemos claro que deseamos obtener, y se  convierte en bastante intuitiva la operación, al margen de modificaciones que Google puede hacer sobre el modo en que se obtienen o se configuran sus herramientas

Lo recomendable si se usa el informe mejorado, es usar otras herramientas que redondeen y complementen su información como el Google Data Studio.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

….un sueño es casi todo  y más que  nada, más que todo al soñarlo, casi nada después……

Entendiendo Vue(instalación)

Para instalar Vue, basta con ir a la raíz z de la carpeta donde crearemos el proyecto, en xamp podria ser htdocs o alguna carpeta dentro de htdocs, donde construiremos uno o varios proyecto.

En este ejemplo usamos la bandera -g para hacer una instalación global.

npm install –g global @vue /cli

Es muy importante recordar que Vue corre sobre Nodejs, por tanto, para que la instalación funcione, es necesario tener instalado node.js antes

Una vez instalado comprobamos la la version instalada con:

vue –version

Crear un nuevo proyecto

vue create nombre_del_proyecto

El instalador preguntará, si deseas instalar  algún linting (herramienta para detectar  dentro del código errores de sintaxis o programáticos), si no tenemos preferencias , clicamos enter para continuar.

Una vez se cree el proyecto, nos recomendará para comenzar, correr estos comandos:

$ cd nuevoproyecto
 $ npm run serve 

Los corremos y estaremos ya dentro del proyecto, luego de correr el servidor de npm, obtendremos la información del la dirección donde corre nuestro app en vue:

App running at:
Local:       http//localhost:8080/
Network: http//192.168.0.102:8080/

Note  that the development build  is not optimized. 
To create a production build, run npm run build.  

Si entramos ahora al navegador y escribimos http:localhost:8080, obtendremos la web donde corre nuestra app.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…., si avanzo sígueme, si me detengo empújame, si retrocedo mátame…….

Uso de Calc

laravel

 La función calc(), que se añade a la propiedad width nos permite calcular o definir el ancho esperado de un div 

#div1 {
  position: absolute;
  left: 25px;
  width: calc(100% - 120px);
  border: 1px solid 0e0e0e;
  background-color: #000;
  padding: 5px;
  text-align: center;
} 

Pueden usarse los operadores + - * /, la expresión requiere siempre una expresión matemática y puede ser usada para casos como los div que se cambian de tamaño, al deslizarse otro.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…..lo que realmente importa no es lo que te da la vida, sino lo que haces con ello….

El uso de NumPy.

laravel

NumPy, es  una de las librerías  de Python  mas conocida, debido  a la fortaleza que da al lenguaje en el procesamiento de matrices y arrays de diferente complejidad.

Su uso, es ampliamente reconocido como procesador de cálculos científicos, (que entre otras muchas opciones permite procesar matrices multidimensionales, ejecutar funciones de transmisión o de Algebra Lineal, integrar scripts de otros lenguajes  como C y Fortran y  trabajar con números aleatorios ), también es utilizado a menudo para almacenar datos genéricos, con la propiedad de que podemos definir tipos de datos arbitrarios, que pueden integrarse  con múltiples tipos de bases de datos.  

Recordando que en Python todo es un objeto, diremos que NumPy establece entonces un arreglo multidimensional y otras matrices derivadas, que no son más que otros  objetos.

 Lo que hace Numpy,  es dotarnos una herramienta que nos permite realizar operaciones en un arreglo de cualquier dimensión.

Python ofrece otras opciones para procesar  datos,  como  son sus listas, la diferencia es que Numpy permite realizar operaciones estadísticas y de álgebra, crear  funciones de entrada y salida de datos, ordenar los integrantes de un arreglo y ejecutar operaciones lógicas, extendiendo la capacidad de Python para procesar matrices e información científica

A continuación mostrar algunos de los comandos más usados de esta extensión:

 Para instalar NumPy, en  Windows necesitas Python y Pip en tu sistema.

pip install numpy

#Luego importar la librería con Import

import numpy

Array()

Una lista de python no es un arreglo, sino elementos que se encuentran encerrados entre encerrados entre corchetes, para convertirlos en un array de Numpy, basta con aplicar la siguiente sintaxis:

elementoLista = numpy.array

 import numpy
 l = [1, 2, 3, 4, 5]
 nuevo = numpy.array(l)
 print("la lista convertida a array es = ", nuevo) 

y obtenemos el nuevo array:

>>la lista convertida a array
es =  [1 2 3 4 5]

Del mismo modo haríamos si en vez de ser una lista es una tupla. Sabemos que la tupla contiene una serie de elementos encerrados entre paréntesis, entonces será:

 import numpy
 tupla = (1, 2, 3, 4, 5)
 nuevoarray = numpy.array(tupla)
 print("El nuevo array a partir de la tupla es  = ", nuevoarray) 

La salida será:

>>El nuevo array a partir de
la tupla es  =  [1 2 3 4 5]

Append()

numpy.append(array, value, axis)

append() añade los elementos al final del arreglo, ya sean columnas o valores independientes, por lo que se obtiene entonces un nuevo array actualizado.

Si no definimos el valor de axis(es opcional y asimila valores enteros),  la nueva matriz obtenida se aplanará.

Para añadir una columna lo haríamos de este modo: Considere el siguiente ejemplo donde creamos un arreglo bidimensional e insertamos dos columnas:

 import numpy
 uno = numpy.array([[0, 1, 2, 3,], [4, 5, 6, 8,]])
 dos = numpy.array([[7], [9]])
 nuevo = numpy.append(uno, dos, axis = 1)
 print(nuevo) 

eso nos dará como resultado:

 [[0,1,2,3,7],
 [4,5,6,8,9]] 

Si no usaramos un valor para axis

newArray = numpy.append(a, b)

El resultado seria

 [0, 1,2, 3, 4, 5, 6, 8, 7, 9]

Añadir una fila

 import numpy
 a1 = numpy.array([[0, 1, 2, 3], [4, 5, 6, 7]])
 nuevo = numpy.append(a1, [[8, 9, 10, 11, 12]], axis = 0)
 print(nuevo)
 [[0, 1, 2, 3]
 [, 5, 6, 7]
 [8, 9, 10, 11, 12]] 

Añadir un arreglo a otro

 import numpy
 x = numpy.array([8, 12, 16, 20, 24])
 y = numpy.array([28, 32, 36, 40, 44])
 nuevo = numpy.append(x, y)
 print("Nuevo array resultante = ", nuevo) 

el resultado es:

Nuevo array resultante =  [ 8 12 16 20 24 28 32 36 40 44]

Insert()

La diferencia con append(), es que insert(), permite decidir donde exactamente queremos agregar el elemento,  seleccionando el índice que deseamos.

 import numpy
 ar = numpy.array([0, 1, 2,3])#declaramos el array tipo numpy
 nuevo = numpy.insert(a, 2, 55)#insertamos en el índice 2 el valor 55
 print(nuevo) 

La salida será la siguiente:

[0, 1, 55, 2, 3]

delete()

Se utiliza para  eliminar un elemento de un arreglo NumPy  

 import numpy
 restar = numpy.array([1, 2, 3, 4, 5])
 nuevo = numpy.delete(restar, 2, axis = 0)
 print(nuevo) 

Obtendremos:

[1 2 4 5]

Eliminar una fila

import numpy
valores = numpy.array([[1, 2, 3, 4, 5], [6, 7, 8, 9,10], [11, 12, 25, 22]])
nuevo = numpy.delete(valores, 1, axis = 0)
print(nuevo) 

 esto nos dara como resultado:

[list([1, 2, 3, 4, 5]) list([11, 12, 25, 22])]

Size

El método size tiene diferentes usos, como obtener el número de elementos  en un array o calcular la longitud de este:

Calcular el número de elementos en un array

 import numpy
 ar = numpy.array([1000, 2000, 3000, 6000])
 if(ar.size != 0):
     print("la matriz no esta vacia")
 else:
     print("ar contiene = ", ar) 

La salida es la siguiente:

>>la matriz no esta vacia

 Si moficaramos  el código y colocaramos

 import numpy
 ar = numpy.array([1000, 2000, 3000, 6000])
 if(ar.size == 0):
     print("la matriz no esta vacia")
 else:
     print("ar contiene = ", ar) 

Obtendriamos

>>ar contiene =  [1000 2000 3000 6000]

where()

Nos devuelve el índice de un valor

 import numpy
 lista = numpy.array(['a', 2, 'b', 4, 'c'])
 print("c is found at index: ", index[0]) 

El resultado será:

>>c is found at index:  (array([4]),)

Si cambiamos la última línea de nuestro código

 import numpy
 lista = numpy.array(['a', 2, 'b', 4, 'c'])
 print("c is found at index: ", numpy.where(lista == '5')) 

Obtendremos también el tipo de dato

>>c is found at index:  (array([], dtype=int64),)

Obtener la longitud de un array

 import numpy
 cuerpo = numpy.array([1, 2, 3, 4, 5, 6])
 print("El tamaño del cuerpo  = ", cuerpo.size) 

 el resultado será:

>>El tamaño del cuerpo  =  6

Dividir un arreglo

Para dividir un arreglo utilizaremos dos puntos (:) y la sintaxis es la siguiente :

array[from:to]

 Funciona de este modo:

 import numpy
 parte = numpy.array([1, 2, 3, 4, 5, 6, 7, 8])
 print("Un pedazo del array parte es = ", parte[2:5]) 

Obtendremos:

>>un pedazo del array parte es
=  [3 4 5]

Lo que hemos hecho ha sido extraer del arreglo parte una sección del mismo que va del índice 2 al 5.

 Extraer los dos últimos elementos

 import numpy
 two_last= numpy.array([0, 1, 2, 3, 4, 5, 6, 7, 8])
 print("A subset of array a = ", two_last[-2:]) 

Resultado:

>>A subset of array a =  [7 8]

addition()  

Numpy, también permite aplicar funciones a los miembros de un arreglo o matriz multidimensional, mediante el uso de addition()

 import numpy
 addition = lambda x: (x + x*2)
 conjunto = numpy.array([1, 2, 3, 4, 5, 6])
 print("Resultado: ", addition(conjunto)) 

La salida es:

Resultado:  [ 3 6  9 12 15 18]

tolist

El método tolist, nos permitirá convertir un arreglo en una lista.

 import numpy
 x = numpy.array([10, 20, 30, 40, 50, 60, 70, 80, 90])
 print("Convirtiendo un array en lista = ", x.tolist()) 

obtenemos entonces:

>>Convirtiendo un array en lista =  [10, 20, 30, 40, 50, 60, 70, 80,90]

savetxt()

Con savetxt(), podemos exportar un arreglo a formato de texto o csv: 

 import numpy
 a = numpy.array([16, 32, 48, 60])
 numpy.savetxt("mi.csv", a) 

Este código generará un archivo CSV en la ubicación donde se almacena nuestro archivo de código Python.

Puedes eliminar el relleno de ceros adicional de esta manera:

numpy.savetxt("miArray.csv", a,fmt='%.2f')

sort()

 Podemos  ordenar el arreglo NumPy usando el método sort (), que toma como eje  por defecto(-1), que indicará la forma en que queremos ordenar el arreglo, siendo  -1 el ultimo eje.

 import numpy
 x = numpy.array([56, 45, 17, 89, 3, 12, 5])
 print("array ordenado = ", numpy.sort(x)) 

el resultado:

>> array ordenado =  [ 3  5 12 17 45 56 89]

Normalizar un arreglo

Normalizar un arreglo, consiste en colocar los valores de un arreglo dentro de un  rango definido, siguiendo la sintaxís:

x = (x – xmin) / (xmax – xmin)

Con  los métodos max () y min () podemos organizar el array colocando los valores limites que esperamos:

 import numpy
 x= numpy.array([5000, 4800, 160, 80, 1200, 3000, 500])
 xmax = x.max()
 xmin = x.min()
 x = (x - xmin)/(xmax - xmin)
 print("array nomalizado x = \n", x)
 print(xmax )
 print(xmin ) 

 asi obtendremos:

 array nomalizado x =
 [1.  0.95934959 0.01626016 0.  0.22764228 0.59349593  0.08536585]
 5000
 80 

Indexar un arreglo

 import numpy
 x = numpy.array([40, 73, 77, 89])
 print("elemento en el indice 3 = ", x[3]) 

el resultado es:

>>elemento en el indice 3 =  89

Otro ejemplo, de su uso en un array multidimensional

 import numpy
 b = numpy.array([[10, 45, 36], [78, 9, 18]])
 print("elemento en el indice b[0][1] = ", b[0][1]) 

La salida será:

>>elemento en el indice
b[0][1] =  45

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Translate »