Pular para conteúdo

Sortimentos


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.

Métodos 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%.