image

Access unlimited bootcamps and 650+ courses forever

60
%OFF
Article image
Janderson Abreu
Janderson Abreu19/08/2023 08:01
Share

Gerador de dataset sintetico. gere seus arquivos CSVs! 😃

    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 

    Share
    Comments (2)

    A

    Aline - 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...