Está en la página 1de 61

Capítulo 7

Arreglos II: Matrices


Matrices
Las matrices surgen en matemáticas cuando deseamos manejar datos que se pueden
almacenar en forma de vectores pero que además requieren el uso de varios vectores
para manejar la información.
Son arreglos con dimensión mayor a 1, es decir, pueden ser de n renglones y m columnas.

Una matriz es una tabla de datos numéricos,


alfanuméricos o booleanos. Los datos se
encuentran arreglados en renglones y columnas,
como se muestra a continuación:
La dimensión de una matriz es el número de filas × número de columnas. Se
dice que la matriz es de dimensión n × m.

Para referirse a la posición de un elemento de la matriz A primero indicamos el


número de renglón seguido del número de columna. De esta manera, el
elemento del arreglo A que se encuentra en el p-ésimo renglón y en la q-ésima
columna lo referenciamos como:

Una matriz cuadrada de orden n es una matriz de


dimensión n × n.
Arreglos en Python
Las matrices en Python se describen como listas de listas. Una matriz como:

Se representa como:
Generación de arreglos por indexación

Para generar un arreglo, que es una lista de listas, podemos generar un


arreglo que tenga el tamaño deseado en blanco y posteriormente
llenarlo con los datos requeridos. Para esto usamos un ciclo for y
hacemos variar el índice, de aquí el nombre de método por indexación.

Podemos mostrar la matriz con un ciclo for anidado en otro ciclo for, de la siguiente manera:
Generación de un arreglo

Supongamos que deseamos generar un arreglo


de None de cuatro renglones y cuatro columnas.
El procedimiento es el siguiente:
Generación de arreglos por
comprensión

El método de comprensión se usa cuando los elementos del arreglo están definidos
por una función o por un valor.

Para definir un arreglo se tiene el siguiente formato:


Métodos alternos de escritura de
matrices
Existen maneras alternas de desplegar y leer matrices. La primera
de ellas usa iteradores de listas, como el uso de iteradores de listas
que se refiere simplemente al manejo de renglones de una matriz

Se puede escribir en
Python como:

Para desplegarla usamos un El resultado es:


iterador de listas como:
Selección de filas y columnas de un arreglo

Para un arreglo A en Python, dado que un arreglo es una lista


de listas, donde cada lista es un renglón de la matriz,
seleccionar una fila del arreglo es equivalente a seleccionar un
elemento de la lista A.
Suma, resta y multiplicación de
matrices
Para arreglos existen las operaciones de:
• Suma y resta de matrices de la misma dimensión.
• El producto de un escalar por una matriz.
• El producto de una matriz por otra matriz.

Existen algunas matrices que tienen características que las hacen


distintas de otras matrices y que merecen una atención especial.
Matrices especiales
Entre estas matrices especiales tenemos la matriz identidad, la
transpuesta, la inversa, la triangular, la matriz diagonal, entre otras.
Capítulo 8
Subalgoritmos
Los subalgoritmos en general tienen datos de entrada y proporcionan
como salida otros datos. Ejemplos de subalgoritmos lo constituyen las
funciones trigonométricas como y = senx, la raíz cuadrada y = √x, entre
otras, las cuales tienen un dato de entrada que es x y regresan un dato de
salida y.

Funciones
Las funciones son un tipo especial de subalgoritmos.
Las funciones son subalgoritmos cuyo formato es el
siguiente:
Funciones en Python
Existen dos categorías de funciones en Python: Las funciones incluidas
en las bibliotecas que se incluyen con Python y las funciones que se
crean por el usuario. Las funciones en Python usan el mismo formato
descrito para el pseudocódigo.
Funciones definidas por el usuario
Las funciones definidas en las bibliotecas no son siempre todas las
que el diseñador necesita, por lo tanto en la mayoría de las
ocasiones es necesario diseñar nuestras propias funciones.

Los subalgoritmos implementados como funciones


deben definirse antes de usarse, por lo tanto se colocan
antes del programa principal. La definición de una
función en Python debe cumplir las mismas reglas que
cumple el programa principal. Estas reglas son:

+ El nombre de la función solamente debe usarse para definir la función y sus llamados.

+Los parámetros de una función deben tener el mismo orden en la función y en el llamado
de ella en el programa principal.
El formato en Python para definir las funciones es:
Solución de una ecuación de segundo grado
En la solución de una ecuación de segundo grado ax2+bx+c =0es necesario calcular la raíz
cuadrada del discriminante d = √b2 −4ac que recibe los valores de a, b y c del programa
principal. La función que calcula la raíz cuadrada del discriminante puede escribirse como:

y el llamado a esta función desde


el programa principal es:
Procedimientos
Los procedimientos, al igual que las funciones, son subalgoritmos que
realizan tareas que forman parte de una solución general.

A diferencia de las funciones, NO devuelven o regresan una


variable. Se usan directamente como una instrucción del
algoritmo principal. Entonces el formato es:
Cálculo del factorial de un número
Ahora podemos calcular el factorial de un número por medio del uso
de una función. La función factorial y el programa principal son:
Funciones lambda
En ocasiones las funciones solamente requieren dos o tres renglones para su realización.
En esos casos Python tiene otra forma de declarar las funciones en un sólo renglón. Dichas
funciones se conocen como funciones anónimas lambda y su formato es el siguiente:

Llamado por valor y llamado por referencia


Los ejemplos de funciones que hemos presentado hasta este momento pasan las variables
usando lo que en otros lenguajes como Java y C++ se conoce como “paso por valor”.
En el caso de que la variable sea una lista, para pasar este tipo de variables Python, al igual
que otros lenguajes de programación, usa lo que se conoce como “paso por referencia”.
En ese caso la variable se puede modificar en la función o procedimiento y el cambio
siempre se realiza usando la referencia a la localidad de memoria donde se almacena la
variable.
Variables locales y globales
Las variables que se definen en el programa principal se pueden usar en las
funciones o procedimientos que las reciben como argumentos. Por otro
lado, las variables que se definen dentro de una función solamente son
válidas dentro de esa función. A las variables de una función se les llama
variables locales.

Las variables globales son aquellas que no importa donde se


usen o modifiquen siempre conservan los valores asignados, ya
sea en el algoritmo principal o en las funciones o procedimientos.
Para hacer que una variable sea global hay que definirla como tal
por medio de la instrucción: global variables.
Instrucciones de Python del Capítulo 8
Capítulo 9
Entrada y salida y de datos con
archivos
Para escribir datos en un archivo usamos una variable que se llama
identificador (handle en inglés). Esta variable permite a Python hacer
referencia al archivo. El valor que Python le asigna a la variable no es
tan importante como su nombre, que es el que usamos para
referenciar el archivo donde vamos a escribir o del que vamos a leer
datos. Para abrir un archivo lo hacemos de la siguiente manera:
Escritura de datos alfanuméricos
Una vez abierto el archivo, el siguiente paso es
escribir en él. Esto lo hacemos con la instrucción
write con el siguiente formato:

Una vez que se escribe lo deseado, lo


siguiente es cerrar el archivo con:
La instrucción with
La instrucción with proporciona otra manera de abrir un archivo para
escritura o lectura. La ventaja de usar with es que el archivo se cierra
después de usarlo. El formato es:

La primera línea termina con dos puntos y las siguientes


líneas deben estar con sangría.
Escritura de datos numéricos

Con la instrucción write, hasta ahora solamente hemos escrito datos


alfanuméricos, por lo que si deseamos escribir datos numéricos los tenemos que
convertir a datos alfanuméricos, es decir, convertirlos a cadenas con la instrucción
str( ) o incluirlos dentro de una cadena.
Lectura de datos de un archivo
Para leer datos de un archivo necesitamos saber el formato de los datos. De la sección
anterior sabemos que los datos se almacenan como cadenas, de esta manera, si son
numéricos tenemos que convertirlos de cadena al formato adecuado. La primera acción
que tenemos que realizar es abrir el archivo para lectura. Esto lo hacemos con:
Lectura y escritura de datos en Excel

Desde Python también podemos leer datos creados en Excel. Uno de los formatos
para guardar un archivo de Excel es csv que quiere decir comma-separated-values
(valores separados por comas). Para que Python pueda leer datos en este formato
se debe importar la biblioteca csv que contiene la función csv.reader para leer de
archivos y la función csv.writer para escribir en archivos en este formato.
Para abrir el archivo con:
archivo = open ( “datosExcel.csv”, “r”)

Procedimiento completo en pp 309.

Para escribir en un archivo con el formato


csv usamos la instrucción:
csv.writer Procedimiento completo en pp 312.
Instrucciones de Python del
Capítulo 9
Capítulo 10
Programación orientada a objetos
Conceptos asociados a la POO
La programación orientada a objetos requiere un entendimiento claro y preciso de los
siguientes términos:
1. Clase: permite que la creación y el manejo de los objetos sea sencillo.
2. Objeto: es el elemento fundamental en la programación orientada a objetos, puede
representar un objeto real como sería una cuenta bancaria, un cliente o una transacción o
puede representar un elemento abstracto como una ecuación, una fracción o un número
complejo.
3. Atributo: es el valor que almacena internamente el objeto (las características de un
objeto) y que pueden ser datos primitivos o incluso otros objetos.
4. Método: es un grupo de instrucciones asociadas al objeto a las que se les ha dado un
nombre específico.
5. Encapsulación: encapsular un objeto quiere decir que puede almacenar información y
trabajar con ella de tal manera que los cambios de estado solamente puedan ser
realizados por los métodos que pertenecen al objeto y que ningún otro objeto o función
externa puedan hacerlo.
6. Herencia: es una técnica de la POO en la
cual, se puede crear una clase nueva a través
de una clase existente, por medio de la
declaración de nuevos métodos y atributos
que extienden la funcionalidad de la clase de la
que se hereda.
7. Polimorfismo: es la característica de la POO
que permite a los valores de diferentes tipos
de datos, ser manejados usando una interfaz
uniforme. El mismo método puede ser usado
por varias clases, pero de forma diferente.
Primera clase en Python
Crear una clase en Python es muy sencillo y práctico, lo único que se debe
hacer es usar la palabra reservada class seguida del nombre de una clase,
tomando en cuenta que por convención el nombre debe empezar con una
letra mayúscula (no debe empezar con un número o un caracter especial).

Creación de la clase Numero Complejo


Con el propósito de profundizar a fondo acerca de las características especiales de la POO
en Python, crearemos un ejemplo que permitirá el manejo de números complejos, donde
mostraremos el uso de la encapsulación, el polimorfismo y los métodos de acceso a una
clase, con tal propósito iniciamos la definición de una nueva clase llamada
NumeroComplejo, en la cual declararemos la parte real e imaginaria del número así como
el constructor que inicializará los valores y una función que lo muestre en pantalla de la
siguiente manera:
Declaración y uso de Setters y Getters

La encapsulación se refiere a la delimitación del


acceso a determinados métodos y atributos de
los objetos en una clase. Esta propiedad es una
de las más importantes del paradigma, ya que
permite crear una interfaz segura entre el usuario
y el código interno de la clase, para ello, se crean
un conjunto de funciones especiales llamadas
Setters y Getters, las cuales su único propósito es
el de establecer (set) u obtener (get) los valores
de los atributos en una clase. Para la clase
NumeroComplejo se crean las siguientes
funciones:
Sobreescritura de operadores
Una característica clave del paradigma de orientación a objetos es la redefinición de métodos
existentes con el propósito de extender la funcionalidad de un método (herencia) o simplificar las
operaciones (sobrecarga de operadores) de los objetos en una clase. En esta sección, en específico
usamos la clase NumeroComplejo a la cual añadimos las dos operaciones básicas de números
complejos, la suma y la resta como se muestra en el siguiente código:

Para poder realizar alguna de las dos


operaciones basta con la creación de
dos objetos de tipo NumeroComplejo,
para posteriormente añadir a un objeto
la suma de otro por medio del método
numeroComplejoSuma.
Herencia

La herencia es la propiedad del paradigma de orientación a objetos que


permite reutilizar y extender clases previamente creadas, lo cual permite la
reutilización de código, en el sentido de que ya no es necesario escribir
métodos o atributos que son creados en las clases de las cuales se hereda.
En Python existen dos tipos de herencia, la simple y la múltiple.

La herencia simple en Python consiste en que una nueva clase hereda


u obtiene métodos y atributos previamente creados de otra clase a la
que llamaremos clase padre. La herencia se puede ver como una
jerarquía de clases donde, las clases hijo heredan de una clase padre,
pero puede ser heredada a su vez por múltiples clases hijo.
Para mostrar la herencia creamos una nueva clase llamada Operacion, la cual implementa las
características que comparten las operaciones aritméticas de suma y multiplicación. La clase
Operacion implementa el siguiente código:
Sobreescritura de métodos
Los métodos que una clase hereda de otra clase se
pueden usar por ella ya que hereda todos los
métodos definidos en la clase padre, junto con los
definidos en ella misma. Además, la clase puede
redefinir un método de la clase padre, creando un
nuevo método con la misma firma (nombre,
argumentos de entrada y salida), de manera que
los métodos de la clase padre son redefinidos o
remplazados. A esto se le conoce como
sobreescritura de métodos. En el caso de nuestro
ejemplo de operaciones aritméticas crearemos una
nueva clase llamada Multiplicacion la cual heredará
de la clase Operacion y redefinirá el método
imprimirValor de la siguiente manera:
Instrucciones de Python del Capítulo 10
Capítulo 11
Graficación en
Python
Visualización de datos
Visualización de datos es una característica importante de un programa, ya que
permite tener un panorama de como se comportan los datos.

Python puede emplear bibliotecas de graficación como las que tiene


matplotlib, el cual fue diseñado por John D. Hunter (1968-2012) y
que está disponible sin costo para poder realizar gráficas de muy alta
calidad a través de Python.

Dentro del paquete matplotlib existe una biblioteca construcciones para graficar.
Esta biblioteca es pyplot. De esta manera, siempre que vayamos a graficar
tenemos que importar esta biblioteca.
Gráficas en 2 dimensiones
La instrucción básica para graficar es plot(y) donde y es una lista de datos. Con el uso de plot se
abre una nueva ventana con la gráfica generada. La instrucción plot se encuentra en la biblioteca
pyplot del paquete matplotlib. Se carga con:

Para desplegar la gráfica debemos


incluir la instrucción show( ).
De manera alterna, podemos importar
solamente las instrucciones plot y show
con:
Figuras múltiples

Para poder realizar varias figuras es necesario numerarlas. Esto lo hacemos con
la instrucción figure. Es necesario asociarle un número de figura de la siguiente
manera:
Subgráficas
Para realizar varias gráficas en la misma figura usamos subgráficas que se generan con
la instrucción subplot, la cual se debe importar de matplotlib. El formato es:

Esta instrucción divide la figura en m × n subgráficas arregladas en forma de matriz de m


renglones y n columnas. La variable k numera las subgráficas de izquierda a derecha y de arriba
hacia abajo en numeración consecutiva y hace que se active la subgráfica correspondiente.
Otros tipos de gráficas bidimensionales
Gráfica polar Gráfica de pie
La gráfica polar se obtiene usando la La gráfica de pie se usa cuando
instrucción plot pero usando las queremos representar en
componentes r (radio vector) y θ porcentaje los datos.
(ángulo o argumento).
Gráfica de stem
Gráfica de histograma
La gráfica de stem o de puntos se usa
para graficar señales en forma de
La gráfica de histograma se usa para puntos. Se usa en procesado de
representar distribuciones de datos. señales digitales o de tiempo
Es una gráfica de barras. discreto.
Opciones de gráficas

Las gráficas las podemos


enriquecer con color,
cambio del grueso de la
traza o ticks, entre otras
cosas.
Gráficas tridimensionales
Las gráficas tridimensionales requieren tomar valores en dos variables que
generalmente son x, y para dar valores a un eje z.

Gráfica de una curva paramétrica Gráfica de superficie


de alambre (wireframe)
Gráfica de una superficie
Gráfica del campo magnético de un Gráfica de superficie con
alambre usando quiver proyección sobre el plano x, y
Instrucciones de Python
del Capítulo 11
Capítulo 12
Geolocalización y Análisis de Sentimientos
Geolocalización
La geolocalización es la capacidad para obtener la ubicación geográfica
real y latitud y longitud de un objeto o lugar tomando como referencia
distintos dispositivos de rastreo global como satélites o torres de
radiocomunicación, entre otros.

El análisis de este tipo de información referenciada puede ser


de gran ayuda para entender distintos problemas sociales
asociados al uso de datos en la web, por lo que en esta sección
se presenta geopy el cual es una herramienta muy útil para la
extracción de este tipo de datos.
El módulo geopy

geopy es un módulo en Python especialmente diseñado para obtener información


geolocalizada de ciudades, países o cualquier dirección a lo largo de todo el mundo a
través de una conexión tipo cliente servidor con otras populares herramientas de
geolocalización como OpenStreetMap Nominatim, Google Geocoding API (V3), Bing Maps,
Yahoo! PlaceFinder, ArcGIS, entre otros. geopy está especialmente diseñado para obtener
puntos de referencia de cualquier lugar así como también la medición de la distancia entre
dichos puntos.
Ejemplos de cómo poder usar este módulo para extraer
información geolocalizada utilizando código Python

• Geolocalización de un punto
de interés

Dentro de todas las posibles conexiones de


geopy con herramientas de geolocalización,
OpenStreetMap Nominatim ofrece la
posibilidad de obtener la latitud y longitud
asociada a una cadena de texto que contenga
una ciudad, país o cualquier dirección que
proporcionemos, para ello lo primero que
haremos será crear un objeto de tipo
Nominatim.
• Distancia de dos puntos de interés

Además de poder calcular la


posición de un punto específico,
geopy es también capaz de analizar
y obtener el camino más corto
entre dos puntos (en millas)
inicializando un objeto de tipo
vincenty o de tipogreat_circle1, los
cuales son dos algoritmos muy
conocidos para calcular la distancia
entre puntos tomando como
referencia la estructura terráquea.
• Visualización de distintos puntos de interés

Una de las opciones más


interesantes asociadas a la
extracción de información
geolocalizada es poder visualizar su
distribución en un mapa con el
propósito de analizar el
comportamiento de cierto problema
o fenómeno.
Análisis de sentimientos de Twitter
La información disponible en redes sociales se puede usar para conocer la
tendencia en las opiniones emitidas por los usuarios de estas redes.
Para este propósito se requiere software adicional que necesita instalarse así
como generar código en Python2 para la extracción de tweets, su
almacenamiento y su posterior análisis.

Extracción de tweets

Para poder extraer tweets es necesario hacerlo desde


una aplicación de Twitter. Esta aplicación se registra en
Twitter para obtener dos claves de acceso conocidas
como Access Token y Access Token Secret.
La base de datos MongoDB

Dado que los tweets no tienen una estructura


definida se requiere usar una base de datos no
estructurada como la que usa Mongo.
Análisis de los tweets

Una vez descargados los datos, procedemos a


analizarlos usando MeaningCloud. Esta es una
compañía que ofrece productos SAAS (Service As A
Software) enfocados al análisis semántico de texto,
permitiendo a usuarios embeber el procesamiento
en cualquier aplicación o sistema.

También podría gustarte