Analyzing Data With Python 2
Analyzing Data With Python 2
Python
Por:
● Ing. María Fernanda Alvarado
● Ing. Juan Carlos González Chacón, MCSI, MAE
Agenda
1. Adquisición de datos
2. Pre-procesamiento de datos
3. Exploración y análisis de datos
4. Desarrollo del modelo
5. Evaluación del modelo
Introduccion
Motivación
Fuente:https://www.tiobe.com/tiobe-index/
Fuente: https://pypl.github.io/PYPL.html
(Google, Bing, Yahoo!, Wikipedia,
(Google Trends)
Amazon, YouTube and Baidu )
Historia
Guido
ABC van Python
Rossum
Centrum
Wiskunde
&
Informática
Evolución
• Clases con herencia
0. • Generación de listas y
generadores
9 V2
• Manejo de excepciones, Recolector de referencias cíclicas.
• Funciones Python Software Foundation
• Tipos: str, list, dict License
V1 V3
• Programación funcional: lambda, reduce, filter y map • Rediseño
• Eliminación de
duplicidad
• Funciones: reduce/print
Características
Multiparadigma
Fuertemente
Tipado
Propósitos
Web
Data
Scripting
Science
Análisis de datos
Análisis de datos
El análisis de datos juega un papel importante al ayudarnos a descubrir
información útil a partir de los datos, responder preguntas e incluso predecir
el futuro o lo desconocido.
Problema a resolver
Return:dataframe
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html
Manejo de datos faltantes - Reemplazar datos
DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')
Return: dataframe
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.replace.html
Formateo de datos
Llevar los datos a un estándar común de expresión que permite a los usuarios
hacer comparaciones significativas.
Métodos:
simple feature scaling Xnorm = Xv/Xmax df[“length”] = df[“length”] /df[“length”] .max()
Start: array_like
Valor Inicial
Stop: array_like
Valor final
retstepbool, optional
If True, return (samples, step), dónde step es el espaciado entre los grupos
dtypedtype, optional
Tipo de dato de la salida a retornar.
axisint, optional
Eje en el resultado donde se almacena los grupos/muestras.
https://numpy.org/doc/stable/reference/generated/numpy.linspace.html
Agrupamiento de datos
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise',
ordered=True)
X: array-like
Entrada a ser agrupadas
B: insint, sequence of scalars, or IntervalIndex
Grupos a utilizar
https://pandas.pydata.org/docs/reference/api/pandas.cut.html
Convertir variables
categóricas en variables
cuantitativas
Se codifican los valores agregando nuevas características correspondientes a cada elemento único en la característica
original que se desea codificar. Se conoce tambien cómo one-hot-encoding
Convertir variables categóricas a numéricas
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
https://pandas.pydata.org/docs/reference/api/pandas.get_dummies.html
Exploración y
análisis de datos
Exploración y análisis de datos
● Identificar las principales características de un dataset.
● Descubrir la relación que hay entre las diferentes variables.
● Extraer las variables que son más relevantes para resolver el problema.
Estadistica Descriptiva
Sintaxis: DataFrame.describe(percentiles=None,
include=None, exclude=None)
Parametros:
- Percentiles: lista como tipo de datos de
números entre 0-1 para devolver el percentil
Describe()
respectivo
- Include: Lista de tipos de datos que se
incluirán al describir el marco de datos. El
valor predeterminado es None
- Exclude:Lista de tipos de datos que se
excluirán al describir el marco de datos. El
valor predeterminado es None
Parámetros:
- Normalize (Bool, default false): Si es TRUE
retorna las frecuencias relativas de los valores
Value_counts()
-
-
únicos.
Sort (Bool, default True): Ordena por frecuencias
Ascending (Bool, default false): Ordena de forma
ascendente
- Bins (int,optional): Agrupa los valores en
contenedores, solo funciona con datos
numéricos.
- Dropna (Bool, default True): No incluye NaN.
df_gptest = df[['drive-wheels','body-style','price']]
Group by
grouped_test1 = df_gptest.groupby(['drive-
wheels','body-style'],as_index=False).mean()
grouped_test1
- Correlación: Medida del grado de
interdependencia entre variables.
- Causalidad: Relación entre causa y efecto
entre dos variables.
Correlación de Pearson:
grouped_test2=df_gptest[['drive-wheels', 'price']].groupby(['drive-wheels'])
grouped_test2.head(2)
df_gptest
grouped_test2.get_group('4wd')['price']
ANOVA
# ANOVA
f_val, p_val = stats.f_oneway(grouped_test2.get_group('fwd')['price'],
grouped_test2.get_group('rwd')['price'], grouped_test2.get_group('4wd')
['price'])
lm = LinearRegression()
Yhat=lm.predict(X)
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
Evaluación del
Modelo
Evaluación de modelo utilizando visualizaciones
Gráficos de regresión
https://seaborn.pydata.org/generated/seaborn.regplot.html
Evaluación de modelo utilizando visualizaciones
Gráficos residuales
sns.residplot(X, Y)
https://seaborn.pydata.org/generated/seaborn.residplot.html
Evaluación de modelo utilizando visualizaciones
Gráficos de distribución
https://seaborn.pydata.org/generated/seaborn.residplot.html
R2
Conocido como coeficiente de determinación, es una medida para indicar
qué tan cerca están los datos de la línea de regresión ajustada.
lm.fit(X, Y)
lm.score(X, Y)
Error cuadrático medio (MSE)
El error cuadrático medio mide el promedio de los cuadrados de los
errores. Es decir, la diferencia entre el valor real (y) y el valor estimado (ŷ).
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html
Gracias
https://jobs.intel.com/ShowJob/Id/3158375/IT-Data-Analytics-Student-Worker
[email protected]
Entrenamiento y testeo del módelo
y_data = df['price']
y_data = df['price']
Rcross
print("The mean of the folds are", Rcross.mean(), "and the standard deviation is" , Rcross.std())
-1 * cross_val_score(lre,x_data[['horsepower']], y_data,cv=4,scoring='neg_mean_squared_error')
Ridge Regression
from sklearn.linear_model import Ridge
pr=PolynomialFeatures(degree=2)
x_train_pr=pr.fit_transform(x_train[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg','normalized-
losses','symboling']])
x_test_pr=pr.fit_transform(x_test[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg','normalized-losses','symboling']])
RigeModel=Ridge(alpha=1)
RigeModel.fit(x_train_pr, y_train)
yhat = RigeModel.predict(x_test_pr)
print('predicted:', yhat[0:4])
print('test set :', y_test[0:4].values)
Grid Search
from sklearn.model_selection import GridSearchCV
parameters1= [{'alpha': [0.001,0.1,1, 10, 100, 1000, 10000, 100000, 100000]}]
parameters1
RR=Ridge()
RR
Grid1 = GridSearchCV(RR, parameters1,cv=4, iid=None)
Grid1.fit(x_data[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']], y_data)
BestRR=Grid1.best_estimator_
BestRR
BestRR.score(x_test[['horsepower', 'curb-weight', 'engine-size', 'highway-mpg']], y_test)
Df[“city-mpg”] = 235/df[“city-mpg”]
dataframe.rename()
dataframe.dtypes()
dataframe.astype()