Python - Do Básico Ao Machine Learning
Python - Do Básico Ao Machine Learning
Practical Scripts
Autor: K
13 de junho de 2025
Sumário
Introdução
Introdução
Bem-vindo ao Python from Basics to Machine Learning: 100 Practical Scripts! Este livro, escrito por K,
é para quem quer aprender Python do zero até criar modelos de machine learning. Cada script traz um
conceito explicado de forma simples, um exemplo prático e dicas para consolidar o aprendizado.
Vamos começar?
soma = a + b
divisao = a / b
inteiro = a // b
resto = a % b
print(f"Soma: {soma}")
print(f"Divisão: {divisao:.2f}")
print(f"Divisão inteira: {inteiro}")
print(f"Resto: {resto}")
Key Takeaways:
- Use // para divisão inteira e % para resto.
- Formate números com :.2f.
- Experimente: calcule a potência de a.
Script 7: Listas
Listas são coleções ordenadas e mutáveis de itens. Você pode adicionar, remover ou modificar
elementos.
# Cria uma lista
numeros = [1, 2, 3]
# Adiciona elemento
numeros.append(4)
# Remove elemento
numeros.remove(2)
# Acessa elemento
print(f"Primeiro: {numeros[0]}")
print(f"Lista: {numeros}")
Key Takeaways:
- Use append() para adicionar e remove() para remover.
- Acesse elementos com índices (ex.: [0]).
- Experimente: ordene a lista com sort().
Script 8: Dicionários
Dicionários armazenam pares chave-valor, permitindo acesso rápido a dados associados a chaves
únicas.
# Cria um dicionário
pessoa = {"nome": "João", "idade": 30}
# Acessa valor
print(f"Nome: {pessoa['nome']}")
# Adiciona chave-valor
pessoa["cidade"] = "São Paulo"
Script 9: Tuplas
Tuplas são coleções ordenadas e imutáveis, úteis para dados que não devem mudar.
# Cria uma tupla
coordenadas = (10, 20)
# Acessa elementos
print(f"X: {coordenadas[0]}")
# Operações
uniao = a | b
intersecao = a & b
print(f"União: {uniao}")
print(f"Interseção: {intersecao}")
Key Takeaways:
- Conjuntos eliminam duplicatas automaticamente.
- Use | para união e & para interseção.
- Experimente: adicione elementos com add().
# Chama a função
print(cumprimentar("Ana"))
print(cumprimentar("João", "Oi"))
Key Takeaways:
- Defina parâmetros padrão com nome=valor.
- Parâmetros padrão são usados se não forem especificados.
- Experimente: crie uma função com dois parâmetros padrão.
# Chama a função
print(somar(1, 2))
print(somar(1, 2, 3, 4))
Key Takeaways:
- Use *args para argumentos variáveis.
- args é uma tupla.
- Experimente: crie uma função que multiplica *args.
# Arquivo principal
import meu_modulo
print(meu_modulo.saudacao("Ana"))
Key Takeaways:
- Crie módulos salvando funções em arquivos .py.
- Importe com import nome_modulo.
- Experimente: crie um módulo com duas funções.
# Arquivo principal
from utilitarios import calcular_media
numeros = [10, 20, 30]
print(f"Média: {calcular_media(numeros)}")
Key Takeaways:
- Divida código em módulos por funcionalidade.
- Use from modulo import função.
- Experimente: crie um módulo para cálculos matemáticos.
# Acessa elemento
print(matriz[0][1])
# Modifica elemento
matriz[1][2] = 7
print(matriz)
# Adiciona item
estoque["frutas"].append("uva")
print(estoque)
# Itera
for categoria, itens in estoque.items():
print(f"{categoria}: {itens}")
Key Takeaways:
- Dicionários com listas agrupam dados.
- Acesse listas com dicionario[chave].
- Experimente: adicione uma nova categoria.
# Lê o arquivo
with open('exemplo.txt', 'r') as arquivo:
conteudo = arquivo.read()
print(conteudo)
Key Takeaways:
- Use with open(nome, modo).
- Modos: 'w' (escrever), 'r' (ler).
- Experimente: adicione mais linhas.
# Escreve CSV
with open('dados.csv', 'w', newline='') as arquivo:
escritor = csv.writer(arquivo)
escritor.writerow(['Nome', 'Idade'])
escritor.writerow(['Ana', 25])
escritor.writerow(['João', 30])
# Lê CSV
with open('dados.csv', 'r') as arquivo:
leitor = csv.reader(arquivo)
for linha in leitor:
print(linha)
Key Takeaways:
- Use csv.writer e csv.reader.
- newline='' evita linhas em branco.
- Experimente: adicione mais linhas.
# Conta palavras
with open('texto.txt', 'r') as arquivo:
texto = arquivo.read()
palavras = texto.split()
contagem = len(palavras)
print(f"Número de palavras: {contagem}")
Key Takeaways:
- split() divide por espaços.
- Use len() para contar.
- Experimente: conte palavras únicas com set().
# Analisa log
erros = []
with open('log.txt', 'r') as arquivo:
for linha in arquivo:
if "ERROR" in linha:
erros.append(linha.strip())
print(f"Erros encontrados: {erros}")
Key Takeaways:
- Use strip() para remover quebras de linha.
- Filtre com condições (ex.: 'ERROR' in linha).
- Experimente: conte linhas com 'INFO'.
# Data atual
agora = datetime.now()
print(f"Data atual: {agora.strftime('%d/%m/%Y %H:%M')}")
# Cria dicionário
dados = {"nome": "Ana", "idade": 25, "cidade": "São Paulo"}
# Escreve JSON
with open('dados.json', 'w') as arquivo:
json.dump(dados, arquivo)
# Lê JSON
with open('dados.json', 'r') as arquivo:
dados_lidos = json.load(arquivo)
print(dados_lidos)
Key Takeaways:
- json.dump() escreve; json.load() lê.
- JSON é compatível com dicionários.
- Experimente: adicione mais dados.
# Cria lista
dados = [1, 2, 3, "teste"]
# Carrega
with open('dados.pkl', 'rb') as arquivo:
dados_carregados = pickle.load(arquivo)
print(dados_carregados)
Key Takeaways:
- pickle.dump() salva; pickle.load() carrega.
- Use modos 'wb' e 'rb'.
- Experimente: salve um dicionário.
Script 30: Manipulação de Arquivos com with
O gerenciador with simplifica a manipulação de arquivos, fechando-os automaticamente.
# Escreve e lê com with
try:
with open('teste.txt', 'w') as arquivo:
arquivo.write("Teste com with")
with open('teste.txt', 'r') as arquivo:
conteudo = arquivo.read()
print(conteudo)
except FileNotFoundError:
print("Arquivo não encontrado!")
Key Takeaways:
- with fecha arquivos automaticamente.
- Combine com try/except.
- Experimente: use readlines().
def area(self):
return self.largura * self.altura
# Cria objeto
ret = Retangulo(5, 3)
print(f"Área: {ret.area()}")
Key Takeaways:
- Use class Nome: e _init_.
- Métodos usam self.
- Experimente: adicione método para perímetro.
def mover(self):
return f"{self.marca} está se movendo."
# Classe filha
class Carro(Veiculo):
def buzinar(self):
return "Bi-bi!"
# Classe filha
class Cachorro(Animal):
def som(self):
return "Au au!"
# Usa classe
cachorro = Cachorro()
print(cachorro.som())
Key Takeaways:
- Sobrescreva com mesmo nome e parâmetros.
- Altera comportamento do método pai.
- Experimente: sobrescreva outro método.
@classmethod
def info(cls):
return f"Empresa: {cls.nome}"
# Usa método
print(Empresa.info())
Key Takeaways:
- Use @classmethod e cls.
- Acessa atributos da classe.
- Experimente: modifique nome.
def get_saldo(self):
return self.__saldo
# Usa classe
conta = Conta(100)
print(conta.depositar(50))
print(conta.get_saldo())
Key Takeaways:
- Use __nome para privados.
- Acesse via métodos (getters/setters).
- Experimente: acesse __saldo diretamente.
@property
def area(self):
return 3.14 * self._raio ** 2
# Usa propriedade
circulo = Circulo(5)
print(circulo.area)
Key Takeaways:
- @property simula atributos.
- Use _nome para protegidos.
- Experimente: crie propriedade para diâmetro.
class Cachorro:
def som(self):
return "Au au!"
# Usa polimorfismo
animais = [Gato(), Cachorro()]
for animal in animais:
print(animal.som())
Key Takeaways:
- Polimorfismo usa métodos com mesmo nome.
- Flexível em loops.
- Experimente: adicione classe Pássaro.
# Usa classe
conta = ContaBancaria("Ana")
print(conta.depositar(100))
print(conta.sacar(50))
Key Takeaways:
- Combine encapsulamento e métodos.
- Valide operações como saque.
- Experimente: adicione transferência.
# Testa função
try:
print(definir_idade(-5))
except ValueError as erro:
print(f"Erro: {erro}")
Key Takeaways:
- Use raise para erros personalizados.
- Combine com try/except.
- Experimente: valide um e-mail.
# Classe de conta
class Conta:
def _init_(self, saldo):
self.saldo = saldo
# Testa
conta = Conta(100)
try:
print(conta.sacar(150))
except SaldoInsuficienteError as erro:
print(f"Erro: {erro}")
Key Takeaways:
- Crie com class NomeErro(Exception):.
- Use raise para lançar.
- Experimente: crie exceção para entrada inválida.
# Função a testar
def soma(a, b):
return a + b
# Classe de teste
class TestSoma(unittest.TestCase):
def test_soma_positivos(self):
self.assertEqual(soma(2, 3), 5)
def test_soma_negativos(self):
self.assertEqual(soma(-1, -1), -2)
# Executa testes
if _name_ == '_main_':
unittest.main(argv=[''], exit=False)
Key Takeaways:
- Use unittest.TestCase.
- Métodos começam com test_.
- Experimente: teste números decimais.
Script 46: Testar Funções com unittest
Teste funções com casos válidos, inválidos e extremos usando unittest.
import unittest
# Função a testar
def dividir(a, b):
if b == 0:
raise ValueError("Divisão por zero!")
return a / b
# Classe de teste
class TestDividir(unittest.TestCase):
def test_divisao_normal(self):
self.assertEqual(dividir(10, 2), 5.0)
def test_divisao_por_zero(self):
with self.assertRaises(ValueError):
dividir(10, 0)
# Executa testes
if _name_ == '_main_':
unittest.main(argv=[''], exit=False)
Key Takeaways:
- Use assertRaises() para exceções.
- Teste casos normais e de erro.
- Experimente: teste números negativos.
# Classe a testar
class Conta:
def _init_(self, saldo):
self.saldo = saldo
# Classe de teste
class TestConta(unittest.TestCase):
def setUp(self):
self.conta = Conta(100)
def test_depositar(self):
self.assertEqual(self.conta.depositar(50), 150)
def test_saldo_inicial(self):
self.assertEqual(self.conta.saldo, 100)
# Executa testes
if _name_ == '_main_':
unittest.main(argv=[''], exit=False)
Key Takeaways:
- Use setUp() para configurar.
- Teste métodos e atributos.
- Experimente: teste método de saque.
# test_calculadora.py
import unittest
from calculadora import soma
class TestCalculadora(unittest.TestCase):
def test_soma(self):
self.assertEqual(soma(2, 2), 4)
if _name_ == '_main_':
unittest.main(argv=[''], exit=False)
# Terminal:
# pip install coverage
# coverage run -m unittest test_calculadora.py
# coverage report
Key Takeaways:
- Instale com pip install coverage.
- Use coverage run e report.
- Experimente: teste subtrair.
# Testa
numeros = [10, 20, 30]
print(calcular_media(numeros))
Key Takeaways:
- Use pdb.set_trace() para pausar.
- Comandos: n, p, c, q.
- Experimente: depure uma função com erro.
# Configura logging
logging.basicConfig(level=logging.INFO, filename='app.log', format='%(asctime)s - %(leve
# Usa logging
logging.info("Programa iniciado.")
try:
resultado = 10 / 0
except ZeroDivisionError:
logging.error("Divisão por zero!")
logging.info("Programa finalizado.")
Key Takeaways:
- Use logging.info(), logging.error().
- Configure com filename e format.
- Experimente: adicione logging a uma função.
# Cria array
array = np.array([1, 2, 3, 4])
# Operações
print(f"Soma: {np.sum(array)}")
print(f"Média: {np.mean(array):.2f}")
print(f"Array ao quadrado: {array ** 2}")
Key Takeaways:
- Instale com pip install numpy
- Use np.array() para criar arrays
- Experimente: crie um array 2D
Script 52: Manipulação de Arrays com NumPy
NumPy permite redimensionar, fatiar e combinar arrays de forma eficiente.
import numpy as np
# Cria array 2D
matriz = np.array([[1, 2], [3, 4]])
# Fatiamento
print(f"Primeira linha: {matriz[0, :]}")
# Redimensiona
matriz_1d = matriz.reshape(4)
print(f"1D: {matriz_1d}")
# Concatena
array2 = np.array([[5, 6]])
matriz_concat = np.vstack((matriz, array2))
print(matriz_concat)
Key Takeaways:
- Use reshape() para mudar forma
- vstack() empilha verticalmente
- Experimente: use hstack()
# Cria DataFrame
dados = {'Nome': ['Ana', 'João'], 'Idade': [25, 30]}
df = pd.DataFrame(dados)
# Exibe
print(df)
# Filtra
print(df[df['Idade'] > 25])
Key Takeaways:
- Instale com pip install pandas.
- DataFrames são como tabelas.
- Experimente: adicione uma coluna.
# Agrupa
grupo = df.groupby('Cidade')['Idade'].mean()
print(grupo)
# Adiciona coluna
df['Maioridade'] = df['Idade'] >= 18
print(df)
Key Takeaways:
- groupby() agrega dados.
- Adicione colunas com df['nova'].
- Experimente: filtre por cidade.
# Dados
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
# Cria gráfico
plt.plot(x, y, marker='o')
plt.title("Gráfico Simples")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
Key Takeaways:
- Instale com pip install matplotlib.
- Use plt.plot() e plt.show().
- Experimente: crie um histograma.
# Dados
dados = pd.DataFrame({
'Categoria': ['A', 'A', 'B', 'B'],
'Valor': [10, 20, 15, 25]
})
# Gráfico
sns.barplot(x='Categoria', y='Valor', data=dados)
plt.title("Gráfico de Barras")
plt.show()
Key Takeaways:
- Instale com pip install seaborn.
- Integra com pandas.
- Experimente: crie um boxplot.
# Requisição GET
resposta = requests.get('https://api.github.com')
print(f"Status: {resposta.status_code}")
print(f"JSON: {resposta.json()['current_user_url']}")
Key Takeaways:
- Instale com pip install requests.
- Use json() para respostas.
- Experimente: faça uma requisição POST.
# Requisição
url = 'https://example.com'
resposta = requests.get(url)
soup = BeautifulSoup(resposta.text, 'html.parser')
# Extrai título
titulo = soup.find('h1').text
print(f"Título: {titulo}")
Key Takeaways:
- Instale com pip install beautifulsoup4.
- Use find() ou find_all().
- Experimente: extraia links.
# Abre imagem
imagem = Image.open('exemplo.jpg')
# Redimensiona
imagem_redim = imagem.resize((100, 100))
# Salva
imagem_redim.save('exemplo_redim.jpg')
print("Imagem redimensionada salva!")
Key Takeaways:
- Instale com pip install Pillow.
- Use resize() e save().
- Experimente: aplique filtro.
# Configura pausa
pyautogui.PAUSE = 1
# Digita
pyautogui.write("Olá, mundo!")
pyautogui.press('enter')
Key Takeaways:
- Instale com pip install pyautogui.
- Use PAUSE para controle.
- Experimente: abra um aplicativo.
# Dados
X = np.array([[1], [2], [3], [4]])
y = np.array([2, 4, 6, 8])
# Treina modelo
modelo = LinearRegression()
modelo.fit(X, y)
# Prevê
print(f"Previsão para x=5: {modelo.predict([[5]])[0]:.2f}")
Key Takeaways:
- Instale com pip install scikit-learn.
- Use fit() e predict().
- Experimente: adicione mais dados.
# Gera dados
X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42)
# Treina modelo
modelo = LinearRegression()
modelo.fit(X, y)
# Prevê
print(f"Coeficiente: {modelo.coef_[0]:.2f}")
print(f"Intercepto: {modelo.intercept_:.2f}")
Key Takeaways:
- coef_ e intercept_ definem a reta.
- Use datasets sintéticos para testes.
- Experimente: visualize com Matplotlib.
# Treina modelo
modelo = LogisticRegression()
modelo.fit(X, y)
# Avalia
print(f"Acurácia: {modelo.score(X, y):.2f}")
Key Takeaways:
- Use para classificação binária.
- score() retorna acurácia.
- Experimente: divida em treino/teste.
# Dados
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])
# Divide
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
# Treina
modelo = LinearRegression()
modelo.fit(X_treino, y_treino)
print(f"Acurácia (R²): {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- Use test_size para proporção.
- random_state garante reprodutibilidade.
- Experimente: mude test_size.
# Calcula métricas
print(f"Acurácia: {accuracy_score(y_teste, y_pred):.2f}")
print(f"Precisão: {precision_score(y_teste, y_pred):.2f}")
print(f"Recall: {recall_score(y_teste, y_pred):.2f}")
print(f"F1-score: {f1_score(y_teste, y_pred):.2f}")
Key Takeaways:
- Acurácia mede acertos gerais.
- Use sklearn.metrics.
- Experimente: teste outro modelo.
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = LogisticRegression()
modelo.fit(X_treino, y_treino)
y_pred = modelo.predict(X_teste)
# Cria matriz
cm = confusion_matrix(y_teste, y_pred)
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues")
plt.xlabel("Predito")
plt.ylabel("Real")
plt.title("Matriz de Confusão")
plt.show()
Key Takeaways:
- Matriz exibe TP, FP, TN, FN.
- Use seaborn.heatmap().
- Experimente: matriz com três classes.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = KNeighborsClassifier(n_neighbors=3)
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- n_neighbors define k.
- Sensível à escala; normalize.
- Experimente: varie n_neighbors.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = DecisionTreeClassifier(max_depth=3, random_state=42)
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- max_depth limita complexidade.
- Fácil de interpretar.
- Experimente: visualize com plot_tree().
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = RandomForestClassifier(n_estimators=100, random_state=42)
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- n_estimators define árvores.
- Reduz sobreajuste.
- Experimente: ajuste max_depth.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Realiza validação
modelo = LogisticRegression(max_iter=200)
scores = cross_val_score(modelo, X, y, cv=5)
print(f"Acurácia média: {scores.mean():.2f} (±{scores.std():.2f})")
Key Takeaways:
- Use cross_val_score().
- Avalia estabilidade.
- Experimente: teste com KNN.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Define grade
parametros = {'n_neighbors': [3, 5, 7], 'weights': ['uniform', 'distance']}
modelo = KNeighborsClassifier()
grid = GridSearchCV(modelo, parametros, cv=5)
grid.fit(X, y)
print(f"Melhores parâmetros: {grid.best_params_}")
print(f"Acurácia: {grid.best_score_:.2f}")
Key Takeaways:
- Otimiza hiperparâmetros.
- Use dicionário para parâmetros.
- Experimente: teste Random Forest.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Normaliza
scaler = StandardScaler()
X_norm = scaler.fit_transform(X)
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X_norm, y, test_size=0.2, random
modelo = KNeighborsClassifier(n_neighbors=3)
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- Normaliza com StandardScaler.
- Use fit_transform() e transform().
- Experimente: compare sem normalização.
# Carrega dados
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target
# Cria pairplot
sns.pairplot(df, hue='target', diag_kind='hist')
plt.show()
Key Takeaways:
- pairplot mostra dispersão.
- Use hue para classes.
- Experimente: use outro dataset.
# Carrega e treina
iris = load_iris()
X, y = iris.data, iris.target
modelo = LogisticRegression(max_iter=200)
modelo.fit(X, y)
# Salva
joblib.dump(modelo, 'modelo_iris.pkl')
# Carrega
modelo_carregado = joblib.load('modelo_iris.pkl')
print(f"Acurácia: {modelo_carregado.score(X, y):.2f}")
Key Takeaways:
- Use joblib.dump() e load().
- Economiza tempo.
- Experimente: salve Random Forest.
# Carrega dataset
boston = load_boston()
X = boston.data[:, 5:6] # Usa número de quartos
y = boston.target
# Divide e treina
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = LinearRegression()
modelo.fit(X_treino, y_treino)
# Avalia
y_pred = modelo.predict(X_teste)
rmse = np.sqrt(mean_squared_error(y_teste, y_pred))
print(f"RMSE: {rmse:.2f}")
# Prevê
quartos = np.array([[6]])
preco = modelo.predict(quartos)
print(f"Preço previsto: ${preco[0]:.2f}k")
Key Takeaways:
- Datasets do scikit-learn ajudam.
- Regressão prevê números.
- Experimente: use mais features.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = RandomForestClassifier(random_state=42)
modelo.fit(X_treino, y_treino)
# Avalia
y_pred = modelo.predict(X_teste)
cm = confusion_matrix(y_teste, y_pred)
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues")
plt.show()
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- Random Forest é robusto.
- Matriz revela erros.
- Experimente: teste com KNN.
# Dados fictícios
emails = ["Oferta imperdível!", "Reunião amanhã", "Ganhe dinheiro rápido!", "Relatório s
labels = [1, 0, 1, 0] # 1: spam, 0: não spam
# Vetoriza texto
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, labels, test_size=0.2, random
modelo = MultinomialNB()
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- Naive Bayes é eficaz para texto.
- CountVectorizer vetoriza.
- Experimente: adicione e-mails.
# Dados fictícios
textos = ["Adorei o filme!", "Que filme horrível!", "Muito bom!", "Não gostei."]
sentimentos = [1, 0, 1, 0] # 1: positivo, 0: negativo
# Vetoriza
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(textos)
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, sentimentos, test_size=0.2, r
modelo = LogisticRegression()
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- TfidfVectorizer pesa palavras.
- Logistic Regression para binário.
- Experimente: teste novos textos.
# Treina modelo
modelo = LinearRegression()
modelo.fit(X, y)
# Prevê
mes_futuro = np.array([[6]])
venda = modelo.predict(mes_futuro)
print(f"Venda prevista para mês 6: {venda[0]:.2f}")
# Visualiza
plt.scatter(X, y, color="blue")
plt.plot(X, modelo.predict(X), color="red")
plt.show()
Key Takeaways:
- Modela tendências.
- Visualize com Matplotlib.
- Experimente: adicione meses.
# Dados fictícios
dados = pd.DataFrame({
'idade': [22, 38, 26, 35],
'sexo': ['homem', 'mulher', 'mulher', 'homem'],
'classe': [3, 1, 3, 1],
'sobreviveu': [0, 1, 1, 0]
})
# Prepara dados
le = LabelEncoder()
dados['sexo'] = le.fit_transform(dados['sexo'])
X = dados[['idade', 'sexo', 'classe']]
y = dados['sobreviveu']
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = RandomForestClassifier(random_state=42)
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- LabelEncoder para categóricas.
- Random Forest para dados mistos.
- Experimente: use dataset real.
# Carrega dados
digits = load_digits()
X, y = digits.data, digits.target
# Visualiza
plt.imshow(digits.images[0], cmap='gray')
plt.title(f"Dígito: {y[0]}")
plt.show()
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = KNeighborsClassifier(n_neighbors=3)
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- MNIST é clássico.
- KNN para imagens simples.
- Experimente: teste Logistic Regression.
# Dados fictícios
dados = pd.DataFrame({
'Filme A': [5, 4, 0, 1],
'Filme B': [0, 5, 4, 2],
'Filme C': [2, 0, 5, 3]
}, index=['User1', 'User2', 'User3', 'User4'])
# Calcula similaridade
similaridade = cosine_similarity(dados.fillna(0))
print("Matriz de similaridade:
", similaridade)
# Recomenda para User1
user1_sim = similaridade[0]
melhor_match = np.argmax(user1_sim[1:]) + 1
print(f"Usuário mais similar a User1: User{melhor_match + 1}")
Key Takeaways:
- Similaridade de cosseno mede afinidade.
- fillna(0) trata ausências.
- Experimente: adicione filmes.
# Dados fictícios
dados = pd.DataFrame({
'valor': [100, 5000, 50, 2000],
'hora': [12, 2, 15, 3],
'fraude': [0, 1, 0, 1]
})
# Treina modelo
X = dados[['valor', 'hora']]
y = dados['fraude']
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = DecisionTreeClassifier(random_state=42)
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- Árvores são interpretáveis.
- Dados reais precisam de balanceamento.
- Experimente: adicione transações.
# Dados fictícios
criticas = ["Ótimo filme!", "Péssimo roteiro.", "Adorei a história!", "Muito chato."]
rotulos = [1, 0, 1, 0] # 1: positivo, 0: negativo
# Vetoriza
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(criticas)
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, rotulos, test_size=0.2, rando
modelo = LogisticRegression()
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- TfidfVectorizer para texto.
- Logistic Regression para binário.
- Experimente: novas críticas.
# Inicializa
reconhecedor = sr.Recognizer()
# Captura áudio
with sr.Microphone() as fonte:
print("Fale algo...")
audio = reconhecedor.listen(fonte)
try:
texto = reconhecedor.recognize_google(audio, language='pt-BR')
print(f"Você disse: {texto}")
except sr.UnknownValueError:
print("Não entendi.")
except sr.RequestError:
print("Erro na conexão.")
Key Takeaways:
- Instale com pip install SpeechRecognition.
- Requer microfone e conexão.
- Experimente: salve áudio em WAV.
# Carrega dados
digits = load_digits()
X, y = digits.data, digits.target
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = SVC(kernel='linear')
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- SVM para imagens pequenas.
- Dados achatados em vetores.
- Experimente: use kernel RBF.
# Gera dados
X, _ = make_blobs(n_samples=300, centers=3, random_state=42)
# Aplica K-Means
modelo = KMeans(n_clusters=3, random_state=42)
modelo.fit(X)
labels = modelo.labels_
# Visualiza
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title("Clusters com K-Means")
plt.show()
Key Takeaways:
- n_clusters define grupos.
- Use dados sintéticos.
- Experimente: varie clusters.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Aplica PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# Visualiza
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.title("Iris com PCA")
plt.xlabel("Componente 1")
plt.ylabel("Componente 2")
plt.show()
Key Takeaways:
- PCA para visualização.
- n_components define dimensões.
- Experimente: outro dataset.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Divide dados
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
# Aplica TPOT
tpot = TPOTClassifier(generations=5, population_size=20, verbosity=2, random_state=42)
tpot.fit(X_treino, y_treino)
print(f"Acurácia: {tpot.score(X_teste, y_teste):.2f}")
Key Takeaways:
- Instale com pip install tpot.
- Testa pipelines.
- Experimente: ajuste generations.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
modelo = RandomForestClassifier(random_state=42)
modelo.fit(X, y)
# Explica
explainer = shap.TreeExplainer(modelo)
shap_values = explainer.shap_values(X)
shap.summary_plot(shap_values, X, feature_names=iris.feature_names)
Key Takeaways:
- Instale com pip install shap.
- Visualiza importância.
- Experimente: outro modelo.
Script 92: Visualização de Árvores de Decisão
Visualizar árvores ajuda a entender decisões.
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
modelo = DecisionTreeClassifier(max_depth=3, random_state=42)
modelo.fit(X, y)
# Visualiza
plt.figure(figsize=(12, 8))
plot_tree(modelo, feature_names=iris.feature_names, class_names=iris.target_names, fille
plt.show()
Key Takeaways:
- plot_tree exibe estrutura.
- max_depth simplifica.
- Experimente: aumente profundidade.
# Treina modelo
iris = load_iris()
X, y = iris.data, iris.target
modelo = LogisticRegression(max_iter=200)
modelo.fit(X, y)
# Salva
with open('modelo_iris.pkl', 'wb') as arquivo:
pickle.dump(modelo, arquivo)
# Carrega
with open('modelo_iris.pkl', 'rb') as arquivo:
modelo_carregado = pickle.load(arquivo)
print(f"Acurácia: {modelo_carregado.score(X, y):.2f}")
Key Takeaways:
- pickle.dump() e load().
- Mantém estado treinado.
- Experimente: salve Random Forest.
Script 94: API com Flask para Modelos
Flask cria APIs para servir modelos via HTTP.
from flask import Flask, request, jsonify
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
import numpy as np
app = Flask(_name_)
# Treina modelo
iris = load_iris()
modelo = LogisticRegression(max_iter=200)
modelo.fit(iris.data, iris.target)
@app.route('/prever', methods=['POST'])
def prever():
dados = request.json['features']
predicao = modelo.predict([dados])[0]
return jsonify({'predicao': int(predicao)})
if _name_ == '_main_':
app.run(debug=True)
Key Takeaways:
- Instale com pip install flask.
- Use @app.route.
- Experimente: teste com requests.
# Cria janela
janela = tk.Tk()
janela.title("Calculadora Simples")
janela.geometry("200x150")
# Função
def calcular():
try:
num = float(entrada.get())
resultado = num * 2
messagebox.showinfo("Resultado", f"O dobro é {resultado}")
except ValueError:
messagebox.showerror("Erro", "Digite um número!")
# Widgets
tk.Label(janela, text="Digite um número:").pack(pady=10)
entrada = tk.Entry(janela)
entrada.pack()
tk.Button(janela, text="Calcular", command=calcular).pack(pady=10)
janela.mainloop()
Key Takeaways:
- tkinter nativo do Python.
- Use Label, Entry, Button.
- Experimente: adicione operação.
app = Flask(_name_)
# Carrega modelo
modelo = joblib.load('modelo_iris.pkl')
@app.route('/prever', methods=['POST'])
def prever():
dados = request.json['features']
predicao = modelo.predict([dados])[0]
return jsonify({'predicao': int(predicao)})
if _name_ == '_main_':
app.run(host='0.0.0.0', port=5000)
Key Takeaways:
- Use joblib para carregar.
- Teste com app.run().
- Experimente: use Postman.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Cria pipeline
pipeline = Pipeline([
('scaler', StandardScaler()),
('modelo', LogisticRegression(max_iter=200))
])
# Treina
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
pipeline.fit(X_treino, y_treino)
print(f"Acurácia: {pipeline.score(X_teste, y_teste):.2f}")
Key Takeaways:
- Pipelines garantem consistência.
- Combine com Pipeline().
- Experimente: adicione PCA.
# Carrega dados
iris = load_iris()
X, y = iris.data, iris.target
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_stat
modelo = RandomForestClassifier(random_state=42)
modelo.fit(X_treino, y_treino)
y_pred = modelo.predict(X_teste)
# Relatório
print(classification_report(y_teste, y_pred, target_names=iris.target_names))
Key Takeaways:
- Detalha métricas por classe.
- Avalia desbalanceamento.
- Experimente: outro modelo.
# Dados fictícios
dados = pd.DataFrame({
'valor': [100, 200, 5000, 6000],
'fraude': [0, 0, 1, 1]
})
X = dados[['valor']]
y = dados['fraude']
# Aplica SMOTE
smote = SMOTE(random_state=42)
X_balanceado, y_balanceado = smote.fit_resample(X, y)
# Treina modelo
X_treino, X_teste, y_treino, y_teste = train_test_split(X_balanceado, y_balanceado, test
modelo = RandomForestClassifier(random_state=42)
modelo.fit(X_treino, y_treino)
print(f"Acurácia: {modelo.score(X_teste, y_teste):.2f}")
Key Takeaways:
- Instale com pip install imbalanced-learn.
- SMOTE balanceia classes.
- Experimente: compare sem SMOTE.