Infrastructure as Code – AWS Redshift (Boto3)

The following is an example/template of Infrastructure as Code (IAC) for deploying an AWS Redshift cluster using Python and Boto3. Here’s the target architecture:

Target Redshift AWS Architecture

For this to work, you will need to create an AWS account and IAM user with appropriate permissions to Redshift and S3. After that, just input your own user secret and key into the attached notebook.

You can download the ipynb notebook. Or just check the Jupyter notebook below:

On the next post, we will discuss how to Extract, Transform and Load (ETL) data into this Redshift Database via parallel imports using S3.

Python, primero en el ranking de la IEEE

Fuente: IEEE

Python ha continuado su trayectoria ascendente desde el año pasado y saltó dos lugares a la ranura N º 1, aunque los cuatro primeros (Python, C, Java y C++) – siguen estando muy cerca de popularidad.

Sin embargo, por segundo año consecutivo, no se han introducido nuevos idiomas en el ranking:

Parece que hemos entrado en un período de consolidación en la codificación como programadores digerir las herramientas creadas para atender a la explosión de la nube, móviles y grandes aplicaciones de datos.

Fuente: https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2017

Referencia Rápida: Scikit-learn de Python

Scikit-learn es una librería de código abierto para Python, que implementa un rango de algoritmos de Machine Learning, pre-procesamiento, referencias cruzadas y visualización usando una interfaz unificada.

Un Ejemplo Básico

from sklearn import neighbors, datasets, preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
iris = datasets.load_iris()
X, y = iris.data[:, :2], iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=33)
scaler = preprocessing.StandardScaler().fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
knn = neighbors.KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy_score(y_test, y_pred)

Cargar la data

Nuestra data debe ser numérica y estar almacenada como arreglos de NumPy o matrices de SciPy. Otro tipo de data que pueda convertirse en arreglos numericos tambien se aceptan, como los DataFrames de Panda.

import numpy as np
X = np.random.random((10,5))
y = np.array(['M','M','F','F','M','F','M','M','F','F','F'])
X[X < 0.7] = 0 Preprocessing The Data Standardization
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler().fit(X_train)
standardized_X = scaler.transform(X_train)
standardized_X_test = scaler.transform(X_test)
NORMALIZACIÓN
from sklearn.preprocessing import Normalizer
scaler = Normalizer().fit(X_train)
normalized_X = scaler.transform(X_train)
normalized_X_test = scaler.transform(X_test)
BINARIZACIÓN
from sklearn.preprocessing import Binarizer
binarizer = Binarizer(threshold=0.0).fit(X)
binary_X = binarizer.transform(X)
CODIFICAR ATRIBUTOS CATEGÓRICOS
from sklearn.preprocessing import LabelEncoder
enc = LabelEncoder()
y = enc.fit_transform(y)
IMPUTAR VALORES FALTANTES
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values=0, strategy='mean', axis=0)
imp.fit_transform(X_train)
GENeraR atributos polinomiales
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(5)
oly.fit_transform(X)
entrenaR y probaR la data
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=0)

Crear el Modelo

Estimadores Supervisados

REGRESIÓN lineal
from sklearn.linear_model import LinearRegression
lr = LinearRegression(normalize=True)
Support Vector Machines (SVM)
from sklearn.svm import SVC
svc = SVC(kernel='linear')
Naive Bayes
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
KNN
from sklearn import neighbors
knn = neighbors.KNeighborsClassifier(n_neighbors=5)

Estimadores No Supervisados

ANÁLISIS de Componente principal (PCA)
from sklearn.decomposition import PCA
pca = PCA(n_components=0.95)
K Means
from sklearn.cluster import KMeans
k_means = KMeans(n_clusters=3, random_state=0)

Ajustar el Modelo

Aprendizaje supervisado
lr.fit(X, y)
knn.fit(X_train, y_train)
svc.fit(X_train, y_train)
aprendizaje no supervisado
k_means.fit(X_train)
pca_model = pca.fit_transform(X_train)

Predecir

 

estimadores supervisados
y_pred = svc.predict(np.random.random((2,5)))
y_pred = lr.predict(X_test)
y_pred = knn.predict_proba(X_test))
estimadores no supervisados
y_pred = k_means.predict(X_test)

Evaluar el Desempeño del Modelo

Métricas de Clasificación

puntaje de exactitud
knn.score(X_test, y_test)
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_pred)
reporte de CLASIFICACIÓN
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred)))
matriz de CONFUSIÓN
from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, y_pred)))

Métricas de Regresión

error absoluto promedio
from sklearn.metrics import mean_absolute_error
y_true = [3, -0.5, 2])
mean_absolute_error(y_true, y_pred))
error medio cuadrado
from sklearn.metrics import mean_squared_error
mean_squared_error(y_test, y_pred))
puntaje R2
from sklearn.metrics import r2_score
r2_score(y_true, y_pred))

Metricas de Agrupacion

ÍNDICE Ajustado en Radianes
from sklearn.metrics import adjusted_rand_score
adjusted_rand_score(y_true, y_pred))
Homogeneidad
from sklearn.metrics import homogeneity_score
homogeneity_score(y_true, y_pred))
V-measure
from sklearn.metrics import v_measure_score
metrics.v_measure_score(y_true, y_pred))
VALIDACIÓN cruzada
print(cross_val_score(knn, X_train, y_train, cv=4))
print(cross_val_score(lr, X, y, cv=2))

Ajustar el Modelo

BÚSQUEDA de Cuadrillas
from sklearn.grid_search import GridSearchCV
params = {"n_neighbors": np.arange(1,3), "metric": ["euclidean", "cityblock"]}
grid = GridSearchCV(estimator=knn,param_grid=params)
grid.fit(X_train, y_train)
print(grid.best_score_)
print(grid.best_estimator_.n_neighbors)
OPTIMIZACIÓN DE PARÁMETROS ALEATORIZADOS
from sklearn.grid_search import RandomizedSearchCV
params = {"n_neighbors": range(1,5), "weights": ["uniform", "distance"]}
rsearch = RandomizedSearchCV(estimator=knn,
param_distributions=params,
cv=4,
n_iter=8,
random_state=5)
rsearch.fit(X_train, y_train)
print(rsearch.best_score_)

Tomado DataCamp, donde hay una version descargable muy practica para imprimir y tener a la mano!.

Mi juego de Spaceships en CodeSkulptor

Hace bastante tiempo, termine mi primer MOOC en Coursera: Interactive Programming in Python. Lo recuerdo como uno de los mejores básicamente por la manera como los proyectos semanales crecían sobre la base del anterior.

Recientemente encontré el código usado en mi entrega final. Es nada más y nada menos que mi versión de Asteroids en CodeSkulptor. Para correrlo, solo hace falta ir aquí y hacer click en ►

Spaceship Game
Spaceship corriendo en Chrome!

Programacion Funcional en Python

Como parte de mi colaboración con el grupo de Meetup de PyData Panama, he creado una pequeña presentación a manera de introducción a los conceptos de la programación funcional que pueden ser usados en Python.

Además, como compañía, adjunto el excelente libro de Stephen Lott, «Functional Python Programming» publicado por PACKT Publishing.

Functional Python Programming – Steve Lott

Panama PyData 2: Spark vs Pandas Dataframes

Comparto con los asistentes al Meetup del 24 de Septiembre de PyData Panama, la presentación que acompaña mi taller: Pandas vs Spark Dataframes – Una introducción a las arquitecturas distribuidas.

Los notebooks de iPython que acompañaron el taller están disponibles en mi repo en GitHub: https://github.com/sansagara/Panama-PyData

PySpark Talk
PySpark Talk

Los invito entonces a unise al grupo  http://meetu.ps/e/C15vZ/xHDxP/f