Métodos Matemáticos para Atuária – EP2: Integração entre Excel e Python

Os EPs finais envolvem a utilização do Excel em conjunto com Python. Aqui apresentamos um breve tutorial sobre a como rodar macros de Excel em Python. Vamos exemplificar fazendo uma regressão não-linear. Como EP2 você deverá fazer o tutorial e completar as partes que faltam. O resultado final deve ser um notebook ou um script que leia os dados da planilha fornecida (que deverá estar aberta) e envie para a planilha do Excel  o gráfico com os dados e o ajuste resultante da regressão.  O EP deve trazer comentários que expliquem cada passo em detalhes. A entrega do EP2 deve ser feita pelo email rvuspaulas@gmail.com até dia 09 de julho. Dúvidas devem ser enviadas para o email pessoal.

Siga os seguintes passos:

1. Instale o Anaconda

Toda a infraestrutura  para utilizar Python pode ser instalada no Windows instalando-se o Anaconda.

2. Teste a interface com Excel

O Anaconda contém o xlwings, que dará “asas” pythonicas para seu Excel. Abra o Jupyter notebook disponível em sua lista de programas após a instalação do Anaconda.  Em seguida, tente os seguintes comandos no notebook:


import xlwings as xw
wb = xw.Workbook()
xw.Range('A1').value = [['x1','x2','x3'], [10.0,20.0,30.0]]
xw.Sheet(1).name='Aba1'

Este código  importará o xlwings, abrirá uma planilha do Excel, escreverá uma tabela a partir da célula A1 e renomeará a aba como “Aba1”.

Altere os valores na tabela do Excel e leia os novos valores no Jupyter notebook com:

tabelas=xw.Range('Aba1','A1').table.value

Verifique o conteúdo da tabela com

 tabelas 

3. Dataframes

Uma maneira mais eficiente para lidarmos com conjuntos de dados maiores é utilizarmos a biblioteca pandas, que também já é instalada junto com o Anaconda. Como exemplo vamos usar os dados que estão nesta planilha: Dados_Regressao.xlsx .

Primeiro deixe apenas a planilha Dados_Regressao. Em seguida execute:

#Importe a biblioteca pandas
import pandas as pd
#Conecte-se com a planilha ativa usando:
wb = xw.Workbook.active()
#Leia a planilha em um dataframe
df=xw.Range('A1:C215').options(pd.DataFrame).value
#Veja o conteúdo do dataframe
df

O Dataframe permite várias manipulações interessantes nos dados. Por exemplo, é possível selecionar dados que satisfaçam alguma propriedade. Tente:

df[(df.X<3)&(df.Y>80.)]

Isso irá selecionar apenas as linhas que simultaneamente tenham X<3 e Y>80. Em seguida construa um gráfico com estes dados usando:


import matplotlib.pyplot as plt
% matplotlib inline

fig = plt.figure()

plt.plot(df['X'], df['Y'], 'bo');
plt.grid();
plt.xlabel('X');
plt.ylabel('Y');

4. Envie o gráfico para a planilha do Excel

Para enviar a o gráfico para a planilha execute:


plot = xw.Plot(fig);
plot.show('Grafico1',sheet='Aba1', left=200, top=20);

 

5. EP

Faça uma regressão usando como modelo  Y = exp(-B1 X)/(B2+B3X).  Algumas dicas importantes:

  1.  Use  numpy e scipy com
    
    from numpy import *
    from scipy.optimize import curve_fit
    
    
  2.  Defina o modelo como uma função e use curve_fit
  3.  Use
    x=arange(0.,6.,0.01)
    b1,b2,b3=popt
    y=func(x,b1,b2,b3)
    
  4.  Para construir o gráfico use algo como
    fig = plt.figure()
    plt.plot(df['X'], df['Y'], 'bo',label='dados');
    plt.plot(x,y,'r-',label='modelo')
    plt.grid();
    plt.xlabel('X');
    plt.ylabel('Y');
    plt.legend();
    
Etiquetado ,

Métodos Matemáticos para Atuária I: andamento final de curso

Em virtude da greve que atinge a universidade, a infraestrutura minima para realização de nosso curso no formato atual está comprometida.

Visando melhorar o aproveitamento neste período final de curso suspenderemos as aulas presenciais e às substituiremos por tutoriais sobre Regressão e Simulação que contem exercícios que deverão ser entregues segundo instruções. A avaliação final será através da média destes três trabalhos individuais.

Enviem suas dúvidas por email.

Gratos pela compreensão.

Etiquetado

Métodos Matemáticos para Atuária I: Regressões

Exemplo de Regressão Linear

from scipy import linspace,polyval,polyfit,sqrt,stats,randn
import matplotlib.pyplot as plt

n=50
t=linspace(-5,5,n)
a=0.8; b=-4
x=polyval([a,b],t)
xn=x+randn(n)

(a_s,b_s,r,tt,stderr)=stats.linregress(t,xn)
xr=polyval([a_s,b_s],t)

plt.title('Regressao Linear')
plt.plot(t,x,'g--')
plt.plot(t,xn,'k.')
plt.plot(t,xr,'r')

Exemplo de Regressão Não-Linear

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

xdata = np.array([-2,-1.64,-1.33,-0.7,0,0.45,1.2,1.64,2.32,2.9])
ydata=np.array([0.699369,0.700462,0.695354,1.03905,1.97389,2.41143,1.91091,0.919576,-0.730975,-1.42001])

def func(x, p1,p2):
 return p1*np.cos(p2*x) + p2*np.sin(p1*x)

popt, pcov = curve_fit(func, xdata, ydata,p0=(1.0,0.2))

p1 = popt[0]
p2 = popt[1]

curvex=np.linspace(-2,3,100)

curvey=func(curvex,p1,p2)
plt.plot(xdata,ydata,'*')
plt.plot(curvex,curvey,'r')
plt.xlabel('xdata')
plt.ylabel('ydata')

Métodos Matemáticos para Atuária I: Cancelamento de aula

Caros,

Hoje, 20/05/16, excepcionalmente, não teremos aula. Em nosso próximo encontro combinaremos uma forma de reposição.

 

Etiquetado

Métodos matemáticos para Atuária I: EP1

O EP1 deve ser entregue até 5/junho/16 seguindo instruções que estão no Jupyter Notebook que pode ser baixado aqui.

Em PDF: MetMatAtuaria_EP1

Etiquetado

Métodos Matemáticos para Atuária I: Cancelamento de aula

Caros,

Hoje, 1/04/16, excepcionalmente, não teremos aula. Retomamos semana que vem normalmente.

 

Etiquetado

Cálculo de Diferenças Provas 3 e SUB

A prova 3 será sexta-feira, dia 4 de dezembro, às 10:00. Traga uma calculadora. A prova irá avaliar conhecimento contido nas Listas de exercícios 4 e 5.

A prova SUB será segunda-feira, dia 7 de dezembro, às 14:00 e será fechada (somente para aqueles que perderam alguma prova). A prova cobrirá as 5 listas de exercícios do semestre.

 

Etiquetado

Cálculo de Diferenças 2015 PROVA 2

A prova 1 será segunda-feira dia 26 de outubro as 14:00. Não é necessário calculadora. A prova irá avaliar conhecimento contido na Lista de exercícios 3.