Pular para conteúdo

Sortimentos


Warning

Esta biblioteca está em desenvolvimento, nenhuma das soluções apresentadas está disponível para download.

Obtenha os produtos gerados pelo inventário florestal com base em uma tabela de produtos. Use funções de afilamente e redes neurais artificiais para estimar o volume comercial e não comercial gerado pela floresta. Estime volumes usando equações volumétricas ajustadas.


Parâmetros de classe

Assortments(df, assortments_priority=None)
Parâmetros Descrição
df O dataframe contendo os dados dos sortimentos.
assortments_priority (Opcional) O nome da coluna que define a prioridade dos sortimentos. Se None, usa a ordem padrão do dataframe.

Funções da Classe

Assortments.get_assortments(model, model_path, trees_df, tree_dbh, tree_height,
                            stump=0.1, initial_height=None)#(1)!

Assortments.get_taper_volumes(model, model_path, trees_df, tree_dbh,
                              tree_height, bark_factor=None, stump=0.1)#(2)!

Assortments.get_volumes(model, model_path, trees_df, tree_dbh,
                        tree_height, bark_factor=None)#(3)!

  1. model = O nome da função de afilamento ou 'ann' a ser usada para calcular os sortimentos.
    model_path = Caminho para o arquivo .json contendo os coeficientes dos modelos ajustados ou o arquivo .pkl contendo a rede neural artificial ajustada.
    trees_df = DataFrame do Pandas contendo o inventário para o qual os sortimentos devem ser calculados.
    tree_dbh = Nome da coluna contendo os valores do diâmetro à altura do peito (DAP) em centímetros.
    tree_height = Nome da coluna contendo os valores da altura total das árvores em metros.
    stump = (Opcional) Altura do toco (metros) a ser considerada no cálculo do sortimento. Se stump==None, o padrão é 0.1.
    initial_height = (Opcional) Altura (metros) a partir da qual os produtos começam a ser gerados. Útil para casos em que a base da árvore foi danificada por incêndio ou utilizada para extração de resina.

  2. model = O nome da função de afilamento ou 'ann' a ser usada para calcular o volume.
    model_path = Caminho para o arquivo .json contendo os coeficientes dos modelos ajustados ou o arquivo .pkl contendo a rede neural artificial ajustada.
    trees_df = DataFrame do Pandas contendo o inventário para o qual os volumes devem ser calculados.
    tree_dbh = Nome da coluna contendo os valores do diâmetro à altura do peito (DAP) em centímetros.
    tree_height = Nome da coluna contendo os valores da altura total das árvores em metros.
    bark_factor = (Opcional) Valor do fator de casca a ser utilizado para calcular volumes sem casca.
    stump = (Opcional) Altura do toco (metros) a ser considerada no cálculo dos volumes. Se stump==None, o padrão é 0.1.

  3. model = O nome da função volumétrica ou 'ann' volumétrica a ser usada para calcular o volume.
    model_path = Caminho para o arquivo .json contendo os coeficientes dos modelos ajustados ou o arquivo .pkl contendo a rede neural artificial ajustada.
    trees_df = DataFrame do Pandas contendo o inventário para o qual os volumes devem ser calculados.
    tree_dbh = Nome da coluna contendo os valores do diâmetro à altura do peito (DAP) em centímetros.
    tree_height = Nome da coluna contendo os valores da altura total das árvores em metros.
    bark_factor = (Opcional) Valor do fator de casca a ser utilizado para calcular volumes sem casca.

Métodos Descrição
.get_assortments() Retorna o DataFrame trees_df com colunas adicionais indicando a quantidade de produtos gerados para cada sortimento, bem como o volume gerado para cada sortimento em cada árvore. Calcula também o volume comercial, o volume total da árvore e o volume desperdiçado.
.get_taper_volumes() Retorna o trees_df com os volumes calculados com base na integração das funções de afilamento. Calcula o volume total com casca e sem casca.
.get_volumes() Retorna o trees_df com os volumes calculados com base nas funções volumétricas ajustadas. Calcula o volume total com casca e sem casca.

Exemplo de Uso

Considere uma base de dados de inventário composta por 50 árvores do gênero Eucalyptus, nas quais os diâmetros a altura do peito (DAP) e altura total foram mensurados.

Fazer download do arquivo.

Primeiras 5 linhas do arquivo:

Fazenda Árvore DAP (cm) HT (m)
Fazenda 1 1 24,8 28,0
Fazenda 1 2 21,2 27,1
Fazenda 1 3 26,8 37,8
Fazenda 1 4 37,6 43,0
Fazenda 1 5 35,7 42,8

Para o funcionamento desse módulo, é necessário especificar um DataFrame contendo a descrição dos produtos que se deseja extrair de cada árvore. Essa tabela deve incluir, para cada produto, as seguintes informações: nome do produto, comprimento mínimo e máximo, diâmetro mínimo, perda associada ao corte (gerada pela serra do equipamento) e, opcionalmente, uma coluna definindo a prioridade de extração de cada produto.

Exemplo de tabela de sortimentos

Fazer download do arquivo.

Product Length min (m) Length max (m) D min (cm) Loss (cm) Priority
Prod. 1 4,5 5 15 0,5 1
Prod. 2 2 2 8 0,5 2
Prod. 3 1 1 3 0,5 3

A ordem das colunas deve ser seguida.

taper_functions_example.py
1
2
3
from fptools.assortments import Assortments#(1)!

import pandas as pd#(2)!

  1. Importa a classe Assortments.
  2. Importa o pandas para manipulação de dados.

Para esse exemplo, vamos utilizar as equações ajustadas para o iterator "Fazenda 1". Desse modo, vamos filtrar os dados para calcular produtos somente para as árvores da "Fazenda 1". Utilizaremos os arquivos gerados pelo módulo Volumetrics

Baixar o arquivo taper_functions_coefficients_Fazenda 1.json.

Baixar o arquivo volumetrics_functions_coefficients_Fazenda 1.json.

taper_functions_example.py
assortments_df = pd.read_excel(r'C:\Seu\diretorio\sortimentos.xlsx')#(1)!

inventory_df = pd.read_excel(r'C:\Seu\diretorio\dados_inventario.xlsx')#(2)!

inventory_df = inventory_df[inventory_df['Fazenda'] == "Fazenda 1"]#(3)!

Prod = Assortments(assortments_df)#(4)!

assortments = Prod.get_assortments('kozak',
                                   r"D:\Your\path\for\taper_functions_coefficients_Fazenda 1.json",
                                   inventory_df, "DAP", "HT")#(5)!

taper_volumes = Prod.get_taper_volumes('bi',
                                       r"D:\diretorio\para\taper_functions_coefficients_Fazenda 1.json",
                                       inventario, "DAP", "HT", .9)#(6)!  

volumes = Prod.get_volumes('meyer', 
                           r"D:\diretorio\para\volumetrics_functions_coefficients_Fazenda 1.json",
                           inventario, "DAP", "HT", .85)#(7)!

  1. Carrega o DataFrame assortments_df a partir de um arquivo xlsx.
  2. Carrega o DataFrame inventory_df a partir de um arquivo xlsx.
  3. Filtra os dados para obter apenas dados onda a coluna Fazenda é igual a Fazenda 1.
  4. Cria a variável Prod contendo a classe Assortments e utilizando o DataFrame assortments_df como produtos.
  5. Calcula os sortimentos para cada árvore no inventory_df usando o modelo kozak, a coluna DAP para valores de DAP e a coluna HT para valores de altura das árvores, salvando na variável assortments.
  6. Calcula volumes com integração da função bi para cada árvore no inventory_df usando o modelo bi, a coluna DAP para valores de DAP e a coluna HT para valores de altura das árvores. Também utiliza um fator de casca de 90%.
  7. Calcula volumes com função volumétrica para cada árvore no inventory_df usando o modelo meyer, a coluna DAP para valores de DAP e a coluna HT para valores de altura das árvores. Também utiliza um fator de casca de 85%.

Saídas

Tabelas

assortments(1)

  1. DataFrame inicial com as seguintes colunas adicionadas:
    Para cada produto definido na tabela assortments_df, serão criadas duas colunas: uma informando a quantidade de produtos extraídos por árvore e outra indicando o volume total gerado (em metros cúbicos) para aquele produto.
    Além disso, o DataFrame contará com as colunas commercial_volume, tree_volume e wasted_volume, que representam, respectivamente, o volume comercial aproveitado, o volume total da árvore e o volume de madeira desperdiçado.
Fazenda Árvore DAP HT Prod. 1_quantity Prod. 1_volume Prod. 2_quantity Prod. 2_volume Prod. 3_quantity Prod. 3_volume comercial_volume tree_volume wasted_volume
Fazenda 1 1 24,84076433 28 2 0,36529298 5 0,160465831 6 0,022446226 0,548205036 0,548793726 0,00058869
Fazenda 1 2 21,17834395 27,1 1 0,15662905 7 0,205798888 5 0,016228224 0,378656162 0,379971069 0,001314907
Fazenda 1 3 26,81528662 37,8 4 0,738422477 5 0,129884459 5 0,016047425 0,884354362 0,88558894 0,001234578
Fazenda 1 4 37,57961783 43 6 1,899253966 3 0,090801352 5 0,021413892 2,01146921 2,01247906 0,00100985
Fazenda 1 5 35,66878981 42,8 6 1,705021305 3 0,07966354 5 0,018106349 1,802791194 1,803503982 0,000712789

taper_volumes(1)

  1. DataFrame inicial com as seguintes colunas adicionadas:
    Tree_volume: Volume total da árvore calculado pela integração da função de afilamento informada. Tree_volume_without_bark: Tree_volume multiplicado pelo fator de cásca informado.
Fazenda Árvore DAP HT Tree_volume Tree_volume_without_bark
Fazenda 1 1 24,84076433 28 0,545157869 0,490642083
Fazenda 1 2 21,17834395 27,1 0,38299769 0,344697921
Fazenda 1 3 26,81528662 37,8 0,870697291 0,783627562
Fazenda 1 4 37,57961783 43 2,005436616 1,804892954
Fazenda 1 5 35,66878981 42,8 1,790646854 1,611582169

volumes(1)

  1. DataFrame inicial com as seguintes colunas adicionadas:
    Tree_volume: Volume total da árvore calculado pela equação volumétrica informada. Tree_volume_without_bark: Tree_volume multiplicado pelo fator de cásca informado.
Fazenda Árvore DAP HT Tree_volume Tree_volume_without_bark
Fazenda 1 1 24,84076433 28 0,550907023 0,468270969
Fazenda 1 2 21,17834395 27,1 0,380017894 0,32301521
Fazenda 1 3 26,81528662 37,8 0,902103615 0,766788073
Fazenda 1 4 37,57961783 43 2,036722755 1,731214342
Fazenda 1 5 35,66878981 42,8 1,825198637 1,551418842

Caso o usuário deseje utilizar um dos modelos de rede neural treinados para cada função, basta substituir o nome do modelo por ann e especificar o diretório do arquivo .pkl contendo os parâmetros da rede neural ajustada.

Baixar o arquivo taper_model_ann_Fazenda 1.pkl.

Baixar o arquivo volumetric_ann_Fazenda 1.pkl.

taper_functions_example.py
assortments = Prod.get_assortments('ann',
                                   r"D:\Your\path\for\taper_model_ann_Fazenda 1.pkl",
                                   inventory_df, "DAP", "HT")#(1)!

taper_volumes = Prod.get_taper_volumes('ann',
                                       r"D:\diretorio\para\taper_model_ann_Fazenda 1.pkl",
                                       inventario, "DAP", "HT", .9)#(2)!  

volumes = Prod.get_volumes('ann', 
                           r"D:\Your\path\for\volumetric_ann_Fazenda 1.pkl",
                           inventario, "DAP", "HT", .85)#(3)!

  1. Calcula os sortimentos para cada árvore no inventory_df usando o redes neurais artificiais, a coluna DAP para valores de DAP e a coluna HT para valores de altura das árvores, salvando na variável assortments.
  2. Calcula volumes com integração da rede neural artificial para cada árvore no inventory_df, a coluna DAP para valores de DAP e a coluna HT para valores de altura das árvores. Também utiliza um fator de casca de 90%.
  3. Calcula volumes com rede neural artificial volumétrica para cada árvore no inventory_df, a coluna DAP para valores de DAP e a coluna HT para valores de altura das árvores. Também utiliza um fator de casca de 85%.