In [1]:
%matplotlib inline
%pylab inline
from IPython.display import display
from IPython.display import Image
In the past few years, Big Data has morphed from being yet another IT buzzword into a virtual tsunami sweeping over enterprises and consumers alike. Humans, organizations, devices, and machines of all types now contribute huge waves of data into what’s being called the data universe. And just like the other, real universe, the data universe continues to expand rapidly.
MIT Technology Review - Big Data: Creating the power to move heaven and earth
O cientista de dados, nome dado ao profissional desta área, vive em três mundos: o dos negócios, o da matemática e o de TI.
Que tipo de pessoa faz isso tudo? Que habilidades garantem o sucesso de um cientista de dados? Imagine um profissional que seja um híbrido de hacker de dados, analista, comunicador e assessor de confiança. É uma combinação formidável — e rara.
Harvard Business Review - Cientista de Dados: O profissional mais cobiçado do século 21
Talvez esteja ficando claro por que o termo “cientista” se aplica a essa nova função. O pessoal da física experimental, por exemplo, também tem de conceber equipamentos, coletar dados, conduzir experimentos e informar resultados obtidos.
Harvard Business Review - Cientista de Dados: O profissional mais cobiçado do século 21
IBM Developer Networks - Cientista de Dados: O profissional de big data
Profissionais que, conhecendo bem o negócio em que atuam, consigam formular as perguntas corretas. Analisar as respostas e tomar decisões estratégicas e táticas que alavanquem novos negócios ou aumentem a lucratividade da empresa. Estas função tende a ser acoplada às funções do cientista de dados.
In [17]:
Image(filename='imagens/mds-me.png')
Out[17]:
In [18]:
Image(filename='imagens/mds-cdhe.png')
Out[18]:
In [19]:
Image(filename='imagens/mds-pdb.png')
Out[19]:
In [20]:
Image(filename='imagens/mds-cv.png')
Out[20]:
In [21]:
Image(filename='imagens/bsrcover2.jpg')
Out[21]:
In [22]:
Image(filename='imagens/coursera.png')
Out[22]:
Cargo no Governo Obama (EUA): Chief Data Scientist and Deputy Chief Technology Officer for Data Policy
In [23]:
Image(filename='imagens/dj-patil.jpg')
Out[23]:
Alguns fatores comprovam que isso não é uma moda, e sim, a cultura orientada a dados será cada vez mais comum, seja qual for o tipo ou tamanho de empresa
In [24]:
Image(filename='imagens/toolbelt.jpg')
Out[24]:
In [25]:
Image(filename='imagens/ferramentas.png')
Out[25]:
In [26]:
Image(filename='imagens/distros.png')
Out[26]:
In [27]:
Image(filename='imagens/stark-science.jpg')
Out[27]:
Como o volume de vendas é afetado por mudanças climáticas?
Como a quantidade de medicação absorvida varia com a dosagem e com o peso do paciente? Será que depende da pressão sanguínea?
In [28]:
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
# Load the diabetes dataset
diabetes = datasets.load_diabetes()
# Use only one feature
diabetes_X = diabetes.data[:, np.newaxis]
diabetes_X_temp = diabetes_X[:, :, 2]
# Split the data into training/testing sets
diabetes_X_train = diabetes_X_temp[:-20]
diabetes_X_test = diabetes_X_temp[-20:]
# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
In [29]:
# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)
# The coefficients
print('Coeficientes: \n', regr.coef_)
# The mean square error
print("MSE: %.2f"
% np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2))
# Explained variance score: 1 is perfect prediction
print('Variância: %.2f' % regr.score(diabetes_X_test, diabetes_y_test))
In [30]:
# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, regr.predict(diabetes_X_test), color='blue',
linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
In [31]:
from sklearn import datasets
from sklearn.feature_selection import SelectKBest, f_regression
from sklearn.linear_model import LinearRegression
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
boston_dataset = datasets.load_boston()
In [32]:
X_full = boston_dataset.data
Y = boston_dataset.target
#selects most discriminative feature
selector = SelectKBest(f_regression, k=1)
selector.fit(X_full, Y)
X = X_full[:, selector.get_support()]
plt.scatter(X, Y, color='black')
plt.show()
In [33]:
regressor = LinearRegression(normalize=True)
regressor.fit(X, Y)
plt.scatter(X, Y, color='black')
plt.plot(X, regressor.predict(X), color='red', linewidth=3)
plt.show()
In [34]:
regressor = SVR()
regressor.fit(X, Y)
plt.scatter(X, Y, color='black')
plt.scatter(X, regressor.predict(X), color='red', linewidth=3)
plt.show()
In [35]:
regressor = RandomForestRegressor()
regressor.fit(X, Y)
plt.scatter(X, Y, color='black')
plt.scatter(X, regressor.predict(X), color='red', linewidth=3)
plt.show()
In [36]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
u_cols = ['user_id', 'age', 'gender', 'occupation', 'zip_code']
users = pd.read_table('datasets/u.user', header=None, names=u_cols, sep='|', index_col='user_id')
users.head(5)
Out[36]:
In [37]:
users.describe()
Out[37]:
In [38]:
users.info()
In [39]:
users.gender.describe()
Out[39]:
In [40]:
users[['age', 'gender', 'occupation']][0:3]
Out[40]:
In [41]:
users.sort_index()
users.sort_index(by='age').head()
Out[41]:
In [42]:
print 'Registros duplicados %s' % users.duplicated().sum()
users[users.duplicated()].head()
Out[42]:
In [43]:
users[users.age < 20].head()
Out[43]:
In [44]:
users[(users.age < 20) & (users.gender=='M')].head()
Out[44]:
In [45]:
users[users.occupation.isin(['doctor', 'lawyer'])].head()
Out[45]:
In [46]:
print 'Idade média dos usuários %0.2fs' % users.age.mean()
In [47]:
users.groupby('occupation').age.mean()
Out[47]:
In [48]:
users.groupby('occupation').age.apply(lambda x: x.max() - x.min())
Out[48]:
In [49]:
r_cols = ['user_id', 'movie_id', 'rating', 'unix_timestamp']
ratings = pd.read_table('datasets/u.data', header=None, names=r_cols, sep='\t')
m_cols = ['movie_id', 'title']
movies = pd.read_table('datasets/u.item', header=None, names=m_cols, sep='|', usecols=[0,1])
In [50]:
ratings.head()
Out[50]:
In [51]:
movies.head()
Out[51]:
In [52]:
movie_ratings = pd.merge(movies, ratings)
movie_ratings.head()
Out[52]:
In [53]:
movie_ratings.title.value_counts().head()
Out[53]:
In [54]:
movie_ratings.groupby('title').rating.mean().order(ascending=False).head()
Out[54]:
In [55]:
movie_stats = movie_ratings.groupby('title').agg({'rating': [np.size, np.mean]})
movie_stats.head()
Out[55]:
In [56]:
movie_ratings.groupby('title').rating.mean().hist()
Out[56]:
In [57]:
Image(filename='imagens/data-science-meme.jpg')
Out[57]: