image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Janderson Abreu
Janderson Abreu19/08/2023 08:01
Compartilhe

Gerador de dataset sintetico. gere seus arquivos CSVs! 😃

  • #Python

Este código eu usei em um trabalho, sabemos o como e dificil ter uma grande base de dados para praticar e treinar nossos modelos preditivos.Ele vai gerar um conjunto fictício de registros de vendas usando a biblioteca Faker para criar dados aleatórios. Ele solicita informações do usuário, como a quantidade de registrosmêsanonúmero de clientes e número de operadoras. Em seguida, gera os registros do dataset, incluindo detalhes como CPF ( cpf fictício) , hora da venda, data, produto, preço, quantidade, ponto de venda, operadora e tipo de operação. Os registros são escritos em um arquivo CSV com um nome baseado no mês e ano fornecidos. testem e de o feedback 😃 Como não adicionei o seed, ele gera dados aleatorios e uteis para voces praticarem extração e analise de dados.

Nota: Em um trabalho real voce deve anonimizar os cpfs de acordo as diretrizes da LGPD antes de armazena-los .

imagens: Foto de Tiger Lily: https://www.pexels.com/pt-br/foto/caixas-baus-arcas-embalagens-4483610/

import random
import csv
from faker import Faker
from datetime import datetime


# Instalação do Faker: 
# Para utilizar este código, é necessário instalar a biblioteca Faker.
# Você pode instalar o Faker utilizando o pip. Execute o seguinte comando no terminal:
# pip install Faker


fake = Faker("pt_BR")


# Gerador de dados fictícios para um dataset de vendas.


# Solicitar informações do usuário
num_records = int(input("Digite a quantidade de registros a serem gerados: "))  # Número de registros a serem gerados
mes = int(input("Digite o número do mês desejado: "))  # Mês dos registros
ano = int(input("Digite o ano desejado: "))  # Ano dos registros
num_cpf = int(input("Digite a quantidade de clientes: "))  # Quantidade de clientes
num_op = int(input("Digite a quantidade de operadoras: "))  # Quantidade de operadoras
mes_ano = f"{mes:02d}-{ano:04d}"  # Data no formato MM-AAAA


# Dados para o dataset
start_hour = 8  # Hora inicial das vendas
end_hour = 22  # Hora final das vendas
product_dict = {
  # Dicionário contendo produtos e seus preços
  "Arroz": 21.70,
  "Feijão": 15.50,
  "Açúcar": 25.50,
  # ... (Adicione outros produtos aqui)
}
operators = [fake.first_name_female() for _ in range(num_op)]  # Nomes de operadoras fictícias
operations = ["pix", "cartão_credito", "cartão_debito", "dinheiro"]  # Tipos de operações


# Variáveis de controle
min_cpf_percentage = 0.05  # Porcentagem mínima de CPFs únicos
max_cpf_percentage = 0.3  # Porcentagem máxima de CPFs únicos


# Calcula a quantidade de CPFs com base nas porcentagens definidas
min_cpf = int(num_cpf * min_cpf_percentage)
max_cpf = int(num_cpf * max_cpf_percentage)
num_cpfs = random.randint(min_cpf, max_cpf)


# Gera CPFs aleatórios
all_cpfs = [fake.cpf() for _ in range(num_cpfs)]


# Gera os registros do dataset
dataset = []
for _ in range(num_records):
  cpf = random.choice(all_cpfs)
  hora = f"{random.randint(start_hour, end_hour):02d}:{random.randint(0, 59):02d}"  # Formatação da hora
  dia = random.randint(1, 30)  # Dia da venda
  data = datetime(year=ano, month=mes, day=dia).strftime("%d/%m/%Y")  # Data da venda formatada
  produto = random.choice(list(product_dict.keys()))  # Escolhe um produto aleatoriamente
  preço = product_dict[produto]  # Preço do produto escolhido
  quantidade = random.randint(1, 10)  # Quantidade do produto vendida
  pdv = random.randint(1, 21)  # Ponto de venda
  operadora = random.choice(operators)  # Operadora escolhida aleatoriamente
  operação = random.choice(operations)  # Tipo de operação escolhido aleatoriamente
  total = round(preço * quantidade, 2)  # Cálculo do total da venda
  dataset.append([cpf, hora, data, produto, preço, quantidade, pdv, operadora, operação, total])


# Escreve os registros no arquivo CSV
filename = f"venda_{mes_ano}.csv"
with open(filename, "w", newline="") as csvfile:
  csvwriter = csv.writer(csvfile)
  csvwriter.writerow(["cpf", "hora", "data", "produto", "preço", "quantidade", "pdv", "operadora", "operação", "total"])
  csvwriter.writerows(dataset)


print(f"Dataset gerado e salvo como {filename}")  # Indica o nome do arquivo gerado

vamos nos conectar:

Linkedin | Github | Site | DIO 

Compartilhe
Comentários (2)
Aline Souza
Aline Souza - 29/05/2024 06:50

Deu certo, lembrando que o arquivo virá com a codificação em ISO-8859-1, para usar no jupyter notebook eu precisei informar na hora de ler o arquivo, essa codificação.


Descobrir a codificação:


with open ('venda_10-2023.csv', 'rb') as f:

  result = chardet.detect(f.read())

encoding = result['encoding']

print(f'Detectando enconding: {encoding}')


Ler:

df = pd.read_csv('venda_10-2023.csv', encoding= 'ISO-8859-1')

JS

Juvandir Santos - 19/08/2023 08:48

Olá meu amigo bom dia, sensacional esse código testei aqui e funciona perfeitamente...