NumPy


In [1]:
import numpy as np

In [2]:
pesos = np.array([50.,55.5,53.4,60.10,70.1,81.,65.3])
print('Média:',pesos.mean())
print('Máximo:',pesos.max())
print('Mínimo:',pesos.min())


Média: 62.2
Máximo: 81.0
Mínimo: 50.0

In [3]:
pesos = np.linspace(50,60,num=20)
print(pesos)


[ 50.          50.52631579  51.05263158  51.57894737  52.10526316
  52.63157895  53.15789474  53.68421053  54.21052632  54.73684211
  55.26315789  55.78947368  56.31578947  56.84210526  57.36842105
  57.89473684  58.42105263  58.94736842  59.47368421  60.        ]

In [4]:
valores = np.linspace(1,30,num=20)
print(valores)


[  1.           2.52631579   4.05263158   5.57894737   7.10526316
   8.63157895  10.15789474  11.68421053  13.21052632  14.73684211
  16.26315789  17.78947368  19.31578947  20.84210526  22.36842105
  23.89473684  25.42105263  26.94736842  28.47368421  30.        ]

In [5]:
print(pesos - valores)


[ 49.  48.  47.  46.  45.  44.  43.  42.  41.  40.  39.  38.  37.  36.  35.
  34.  33.  32.  31.  30.]

In [6]:
print(pesos * valores)


[   50.           127.64542936   206.89750693   287.75623269   370.22160665
   454.29362881   539.97229917   627.25761773   716.14958449   806.64819945
   898.7534626    992.46537396  1087.78393352  1184.70914127  1283.24099723
  1383.37950139  1485.12465374  1588.47645429  1693.43490305  1800.        ]

In [7]:
pesos -= valores
print(pesos)


[ 49.  48.  47.  46.  45.  44.  43.  42.  41.  40.  39.  38.  37.  36.  35.
  34.  33.  32.  31.  30.]

In [8]:
np.sum(pesos)


Out[8]:
790.0

In [9]:
np.std(pesos)


Out[9]:
5.7662812973353983

In [12]:
print('variância populacional',np.var(pesos))
print('variância amostral',np.var(pesos,ddof=1))
print('desvio padrão populacional',np.std(pesos))
print('desvio padrão amostral',np.std(pesos,ddof=1))


variância populacional 33.25
variância amostral 35.0
desvio padrão populacional 5.76628129734
desvio padrão amostral 5.9160797831

In [20]:
np.random.rand()


Out[20]:
0.1249144024931208

In [37]:
vetor = np.random.rand(2,2)
print('Tipo:',type(vetor))
print(vetor)


Tipo: <class 'numpy.ndarray'>
[[ 0.17152166  0.68527698]
 [ 0.83389686  0.30696622]]

In [58]:
print('Primeiro elemento, segunda linha:',vetor[1,0])
# Navegando pela primeira linha
print('Primeira linha:',[vetor[0,x] for x in range(vetor.shape[0])])
# Navegando pela segund coluna
print('Segunda coluna:',[vetor[x,1] for x in range(vetor.shape[1])])


Primeiro elemento, segunda linha: 0.833896862636
Primeira linha: [0.17152165622510307, 0.68527698169731255]
Segunda coluna: [0.68527698169731255, 0.30696621967223781]

In [61]:
print(vetor.shape)
print(vetor.shape[0])
print(vetor.shape[1])


(2, 2)
2
2

In [34]:
np.random.rand()


Out[34]:
0.17152165622510307

In [36]:
np.random.seed(101)
print('Primeiro:',np.random.rand())
print('Segundo:',np.random.rand())
print('Terceiro:',np.random.rand())


Primeiro: 0.5163986277024462
Segundo: 0.5706675868681398
Terceiro: 0.028474226478096942

In [3]:
seq = np.random.randn(20)
print(seq)


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-e6518aa3d0ec> in <module>()
----> 1 seq = np.random.randn(20)
      2 print(seq)

NameError: name 'np' is not defined

In [4]:
import scipy.stats as stats
import numpy as np
seq = np.random.randn(20)
stats.describe(seq)


Out[4]:
DescribeResult(nobs=20, minmax=(-1.5834958765988716, 2.0444316667254823), mean=0.29310292070505761, variance=1.4156066363930992, skewness=0.06000306075912822, kurtosis=-1.2076003130261384)

In [6]:
print('Moda',stats.mode(seq))
print('Normal',stats.normaltest(seq))


Moda ModeResult(mode=array([-1.58349588]), count=array([1]))
Normal NormaltestResult(statistic=2.9452527460313984, pvalue=0.22932240739708529)

In [7]:
nseq = np.random.randn(1000)
print('Normal',stats.normaltest(nseq))


Normal NormaltestResult(statistic=0.74257904842562716, pvalue=0.68984418604822628)

In [13]:
import pandas as pd
serie = pd.Series([np.random.randn(50)])
print('Série',serie,'Tipo',type(serie))


Série 0    [0.913240541638, -1.41900443488, 0.2265414002,...
dtype: object Tipo <class 'pandas.core.series.Series'>

In [14]:
df = pd.DataFrame({'Idade': np.random.randint(20,high=60,size=100), 
                  'Altura': 1 + np.random.rand(100)})

In [15]:
df.head()


Out[15]:
Altura Idade
0 1.302138 56
1 1.985069 41
2 1.730987 59
3 1.974305 29
4 1.787922 40

In [16]:
df.describe()


Out[16]:
Altura Idade
count 100.000000 100.000000
mean 1.499043 36.890000
std 0.296308 11.285008
min 1.012050 20.000000
25% 1.249999 27.750000
50% 1.502704 37.000000
75% 1.783199 44.250000
max 1.987163 59.000000

In [20]:
# Atenção para variância e desvio padrão
print('variância',df.var()) # O ddof default é 1, então é o contrário do numpy!
print('variância pupulacional',df.var(ddof=0))
print('variância',df.std()) # O ddof default é 1, então é o contrário do numpy!
print('variância pupulacional',df.std(ddof=0))


variância Altura      0.087798
Idade     127.351414
dtype: float64
variância pupulacional Altura      0.08692
Idade     126.07790
dtype: float64
variância Altura     0.296308
Idade     11.285008
dtype: float64
variância pupulacional Altura     0.294823
Idade     11.228442
dtype: float64

In [16]:
df.columns


Out[16]:
Index(['Altura', 'Idade'], dtype='object')

In [24]:
df.values


Out[24]:
array([[  1.66469006,  52.        ],
       [  1.82069515,  28.        ],
       [  1.56514344,  22.        ],
       [  1.42641025,  44.        ],
       [  1.76939141,  25.        ],
       [  1.80020096,  41.        ],
       [  1.34514445,  26.        ],
       [  1.40455427,  41.        ],
       [  1.57319765,  27.        ],
       [  1.63451884,  23.        ],
       [  1.38503672,  36.        ],
       [  1.40124374,  35.        ],
       [  1.67421318,  21.        ],
       [  1.01414196,  33.        ],
       [  1.80059516,  57.        ],
       [  1.17076612,  28.        ],
       [  1.44494408,  36.        ],
       [  1.71494446,  32.        ],
       [  1.28375571,  25.        ],
       [  1.2408956 ,  30.        ],
       [  1.64073432,  21.        ],
       [  1.38372212,  50.        ],
       [  1.95523073,  35.        ],
       [  1.39721467,  24.        ],
       [  1.82573654,  23.        ],
       [  1.46073192,  20.        ],
       [  1.35828536,  50.        ],
       [  1.65887138,  45.        ],
       [  1.06106572,  42.        ],
       [  1.88541315,  37.        ],
       [  1.03530932,  41.        ],
       [  1.82320034,  26.        ],
       [  1.0163931 ,  47.        ],
       [  1.23801019,  59.        ],
       [  1.72525915,  34.        ],
       [  1.10514683,  50.        ],
       [  1.32537902,  39.        ],
       [  1.12222519,  35.        ],
       [  1.74276172,  48.        ],
       [  1.4762914 ,  56.        ],
       [  1.04922228,  21.        ],
       [  1.06452744,  28.        ],
       [  1.41632154,  40.        ],
       [  1.29772504,  30.        ],
       [  1.55855652,  52.        ],
       [  1.78070122,  54.        ],
       [  1.29280794,  40.        ],
       [  1.82841083,  46.        ],
       [  1.9604978 ,  39.        ],
       [  1.54533013,  33.        ],
       [  1.42573674,  50.        ],
       [  1.16081259,  40.        ],
       [  1.96688569,  37.        ],
       [  1.94594007,  38.        ],
       [  1.45697316,  53.        ],
       [  1.42196462,  32.        ],
       [  1.26293154,  49.        ],
       [  1.32881616,  21.        ],
       [  1.30213398,  27.        ],
       [  1.92346452,  43.        ],
       [  1.82261618,  58.        ],
       [  1.48510805,  21.        ],
       [  1.1651222 ,  50.        ],
       [  1.05323609,  47.        ],
       [  1.1051794 ,  29.        ],
       [  1.95612193,  23.        ],
       [  1.36519874,  40.        ],
       [  1.34192271,  26.        ],
       [  1.6019927 ,  36.        ],
       [  1.66428352,  29.        ],
       [  1.53771558,  35.        ],
       [  1.74703725,  49.        ],
       [  1.31057053,  56.        ],
       [  1.24811807,  23.        ],
       [  1.74476633,  30.        ],
       [  1.46615648,  26.        ],
       [  1.86355068,  33.        ],
       [  1.53078283,  49.        ],
       [  1.62310224,  46.        ],
       [  1.21364299,  59.        ],
       [  1.40871995,  47.        ],
       [  1.36199829,  28.        ],
       [  1.87181   ,  45.        ],
       [  1.23326473,  56.        ],
       [  1.63984962,  53.        ],
       [  1.9490735 ,  36.        ],
       [  1.50270369,  31.        ],
       [  1.17637259,  59.        ],
       [  1.76222189,  43.        ],
       [  1.36951542,  56.        ],
       [  1.87312161,  31.        ],
       [  1.97866753,  30.        ],
       [  1.02985656,  54.        ],
       [  1.48012048,  43.        ],
       [  1.75394346,  49.        ],
       [  1.73907724,  57.        ],
       [  1.0283049 ,  33.        ],
       [  1.18003725,  59.        ],
       [  1.20220883,  57.        ],
       [  1.21315284,  31.        ]])

In [23]:
df.index


Out[23]:
RangeIndex(start=0, stop=100, step=1)

In [22]:
print(df)


      Altura  Idade
0   1.664690     52
1   1.820695     28
2   1.565143     22
3   1.426410     44
4   1.769391     25
5   1.800201     41
6   1.345144     26
7   1.404554     41
8   1.573198     27
9   1.634519     23
10  1.385037     36
11  1.401244     35
12  1.674213     21
13  1.014142     33
14  1.800595     57
15  1.170766     28
16  1.444944     36
17  1.714944     32
18  1.283756     25
19  1.240896     30
20  1.640734     21
21  1.383722     50
22  1.955231     35
23  1.397215     24
24  1.825737     23
25  1.460732     20
26  1.358285     50
27  1.658871     45
28  1.061066     42
29  1.885413     37
..       ...    ...
70  1.537716     35
71  1.747037     49
72  1.310571     56
73  1.248118     23
74  1.744766     30
75  1.466156     26
76  1.863551     33
77  1.530783     49
78  1.623102     46
79  1.213643     59
80  1.408720     47
81  1.361998     28
82  1.871810     45
83  1.233265     56
84  1.639850     53
85  1.949073     36
86  1.502704     31
87  1.176373     59
88  1.762222     43
89  1.369515     56
90  1.873122     31
91  1.978668     30
92  1.029857     54
93  1.480120     43
94  1.753943     49
95  1.739077     57
96  1.028305     33
97  1.180037     59
98  1.202209     57
99  1.213153     31

[100 rows x 2 columns]

In [27]:
serie = df['Altura']
print(type(serie))
serie.head()


<class 'pandas.core.series.Series'>
Out[27]:
0    1.664690
1    1.820695
2    1.565143
3    1.426410
4    1.769391
Name: Altura, dtype: float64

In [28]:
df.T


Out[28]:
0 1 2 3 4 5 6 7 8 9 ... 90 91 92 93 94 95 96 97 98 99
Altura 1.66469 1.820695 1.565143 1.42641 1.769391 1.800201 1.345144 1.404554 1.573198 1.634519 ... 1.873122 1.978668 1.029857 1.48012 1.753943 1.739077 1.028305 1.180037 1.202209 1.213153
Idade 52.00000 28.000000 22.000000 44.00000 25.000000 41.000000 26.000000 41.000000 27.000000 23.000000 ... 31.000000 30.000000 54.000000 43.00000 49.000000 57.000000 33.000000 59.000000 57.000000 31.000000

2 rows × 100 columns


In [31]:
print(type(df))


<class 'pandas.core.frame.DataFrame'>

In [37]:
df[(df.Idade > 35) & (df.Idade <= 40)]


Out[37]:
Altura Idade
10 1.385037 36
16 1.444944 36
29 1.885413 37
36 1.325379 39
42 1.416322 40
46 1.292808 40
48 1.960498 39
51 1.160813 40
52 1.966886 37
53 1.945940 38
66 1.365199 40
68 1.601993 36
85 1.949073 36

In [38]:
modelo_df = pd.read_csv('mod-preditivo.csv')
modelo_df.head()


Out[38]:
Pesos Alturas
0 74 1.73
1 61 1.61
2 61 1.61
3 68 1.67
4 70 1.69

In [41]:
mod2_df = pd.read_csv('mod-preditivo-original.csv',decimal=',')

In [42]:
mod2_df.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 29 entries, 0 to 28
Data columns (total 2 columns):
Pesos      29 non-null int64
Alturas    29 non-null float64
dtypes: float64(1), int64(1)
memory usage: 544.0 bytes

In [43]:
mod2_df.head()


Out[43]:
Pesos Alturas
0 74 1.73
1 61 1.61
2 61 1.61
3 68 1.67
4 70 1.69

Exemplo de regressão linear com Scikit-learn


In [54]:
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
%matplotlib inline

Obter os dados


In [49]:
dados_df = pd.read_csv('pesos-alturas.csv',decimal=',')

In [50]:
dados_df.head()


Out[50]:
Pesos Alturas
0 74 1.73
1 61 1.62
2 61 1.63
3 68 1.68
4 70 1.68

Analisar os dados


In [51]:
dados_df.describe()


Out[51]:
Pesos Alturas
count 299.000000 299.000000
mean 64.933110 1.650301
std 9.078084 0.092237
min 50.000000 1.490000
25% 57.000000 1.570000
50% 65.000000 1.650000
75% 73.000000 1.725000
max 80.000000 1.830000

In [52]:
dados_df.hist()


Out[52]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f17d277c8d0>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x7f17d22b5898>]], dtype=object)

Separar os dados em Treino e Teste

Nesta análise, vamos tentar prever o peso de uma pessoa, dada a sua altura


In [87]:
X_train, X_test, y_train, y_test = train_test_split(dados_df[['Alturas']],dados_df[['Pesos']], 
                                                    test_size=0.33)

Criando e treinando o modelo de regressão


In [67]:
modelo = linear_model.LinearRegression()
modelo.fit(X_train, y_train)


Out[67]:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

Avaliando o modelo


In [88]:
print(modelo.score(X_train,y_train))


0.978788495086

Executando o teste de previsões


In [74]:
predicoes = modelo.predict(X_test)

In [76]:
print(r2_score(y_test,predicoes))


0.978676447099

In [84]:
plt.scatter(X_train, y_train,  color='blue',s=10)
plt.plot(X_test, predicoes, color='red', linewidth=3)


Out[84]:
[<matplotlib.lines.Line2D at 0x7f17c990a898>]

In [ ]: