Pular para conteúdo

Volumetria


Warning

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

Processa dados de inventário florestal. Ajusta equações volumétricas e funções de afilamento para uso posterior.


Parâmetros da Classe

Volumetry(df, tree_identifier, tree_height, tree_dbh, tree_bark,
          segment_height, segment_diameter, tree_bark)
Parâmetros Descrição
df O dataframe contendo os dados de cubagem.
tree_identifier Nome da coluna que contém os identificadores únicos das árvores.
tree_height Nome da coluna que contém as alturas totais das árvores (metros).
tree_dbh Nome da coluna contendo os valores do diâmetro à altura do peito (DAP) das árvores (centímetros).
tree_bark (Opcional) Nome da coluna contendo os valores da espessura da casca das árvores (centímetros). Se tree_bark == None, retorna apenas volumes com casca no método get_volumes().
segment_height (Opcional) Nome da coluna contendo as alturas dos segmentos cubados das árvores (metros). Obrigatório para o método fit_taper_functions().
segment_diameter (Opcional) Nome da coluna contendo os diâmetros dos segmentos cubados das árvores (centímetros). Obrigatório para o método fit_taper_functions().
tree_bark (Opcional) Nome da coluna contendo a casca das árvores (centímetros).

Funções da Classe

funções e parâmetros
  Volumetry.get_volumes()  
  Volumetry.fit_taper_functions(models, iterator, save_dir = None)#(1)!

  Volumetry.fit_volumetric_functions(models, iterator, vol_column,
                                       save_dir = None)#(2)!

  Volumetry.get_individual_diameter(hi, tree_height, tree_dbh)#(3)!

  Volumetry.get_individual_taper_volume(tree_height, tree_dbh, stump=0.1)#(4)!

  Volumetry.get_individual_volume(tree_height, tree_dbh)#(5)!

  1. models = (Opcional) Lista de modelos a serem ajustados! Se models == None, utiliza todos os modelos disponíveis.
    iterator = (Opcional) Nome de uma coluna a ser usada como iterador. Pode ser o nome da fazenda, nome da parcela, código ou qualquer identificador único.
    save_dir = (Opcional) Diretório para salvar os parâmetros da função ajustada e o modelo ANN.

  2. models = (Opcional) Lista de modelos a serem ajustados! Se models == None, utiliza todos os modelos disponíveis.
    iterator = (Opcional) Nome de uma coluna a ser usada como iterador. Pode ser o nome da fazenda, nome da parcela, código ou qualquer identificador único.
    vol_column = (Opcional) Nome da coluna com os valores de volume. Se vol_column == None, utiliza os volumes obtidos pelo método get_volumes() para ajustar as funções volumétricas.
    save_dir = (Opcional) Diretório para salvar os parâmetros da função ajustada e o modelo ANN.

  3. hi = Fração da altura da árvore para a qual se deseja obter o diâmetro (metros).
    tree_height = Altura total da árvore (metros).
    tree_dbh = Diâmetro à altura do peito (DAP) da árvore (centímetros).

  4. tree_height = Altura total da árvore (metros).
    tree_dbh = Diâmetro à altura do peito (DAP) da árvore (centímetros).
    stump = Altura do toco (metros). Por padrão, usa stump = 0.1.

  5. tree_height = Altura total da árvore (metros).
    tree_dbh = Diâmetro à altura do peito (DAP) da árvore (centímetros).

Parâmetros Descrição
.get_volumes() Retorna o volume de cada segmento cubado e o volume total de cada árvore, separado por tree_identifier. Se tree_bark == None, retorna apenas o volume com casca; caso contrário, retorna o volume com e sem casca.
.fit_taper_functions() Ajusta os modelos disponíveis de funções de afilamento. Salva um arquivo .json com os coeficientes para cada modelo ajustado e um arquivo .pkl para os modelos de ANN ajustados.
.get_individual_diameter() Retorna um dataframe pandas com o diâmetro em uma altura hi da árvore para cada modelo de afilamento ajustado.
.get_individual_taper_volume() Retorna um DataFrame pandas com o volume estimado para a altura e diâmetro à altura do peito fornecidos para cada função de afilamento ajustada. Utiliza a integração das funções de afilamento para obter o resultado.
.get_individual_volume() Retorna um DataFrame pandas com o volume estimado para a altura e diâmetro à altura do peito fornecidos para cada função volumétrica ajustada.

Exemplo de Uso

taper_functions_example.py
1
2
3
from fptools.volumetry import Volumetry#(1)!

import pandas as pd#(2)!

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

taper_functions_example.py
df = pd.read_csv(r'C:\Your\path\csv_tree_cubage_file.csv')#(1)!

vol = Volumetry(df=df, tree_identifier='arvore_id', tree_height='HT', tree_dbh='DAP', segment_height='HT segmento', segment_diameter='Dsegmento',tree_bark='Casca')#(2)!

calculated_volumes_df = vol.get_volumes()#(3)!

metrics = vol.fit_taper_functions()#(4)!

vol.get_individual_diameter(1.3, 25, 30)#(5)!

vol.get_individual_taper_volume(30, 22.8)#(6)!

vol.get_individual_volume(30, 22.8)#(7)!

  1. Carregue seu arquivo csv.
  2. Crie a variável vol contendo a classe Volumetry.
  3. Calcule os volumes para cada árvore e segmento e salve os resultados na variável calculated_volumes_df.
  4. Ajuste as funções de afilamento e salve as métricas de desempenho na variável metrics. Isso criará um arquivo .json com os coeficientes dos modelos e arquivos .pkl para os modelos ajustados de RNA.
  5. Obtenha o diâmetro a 1,3 metros de uma árvore com altura total de 25 metros e diâmetro à altura do peito (DAP) de 30 centímetros.
  6. Obtenha os volumes calculados pela integração das funções de afilamento para uma árvore com altura de 30 metros, diâmetro à altura do peito de 22,8 centímetros, considerando uma altura de toco de 0,15 metros.
  7. Obtenha os volumes calculados pelas funções volumétricas ajustadas para uma árvore com altura de 30 metros e diâmetro à altura do peito de 22,8 centímetros.

Available taper models

  • schoepfer
  • \[ \operatorname{d_i} =dbh\left( b_0 + b_1 \left( \frac{h_i}{H} \right) + b_2 \left( \frac{h_i}{H} \right)^2 + b_3 \left( \frac{h_i}{H} \right)^3 + b_4 \left( \frac{h_i}{H} \right)^4 + b_5 \left( \frac{h_i}{H} \right)^5 \right) \]

  • bi
  • \[ \operatorname{d_i}=dbh\left[ \left( \frac{log\;sin \left( \frac{\pi}{2} \frac{h_i}{H} \right)} {log\;sin \left( \frac{\pi}{2} \frac{1.3}{H} \right)} \right) ^{\beta_0+\beta_1sin\left(\frac{\pi}{2}\frac{h_i}{H}\right)+\beta_2sin\left(\frac{3\pi}{2}\frac{h_i}{H}\right)+\beta_3sin\left(\frac{\pi}{2}\frac{h_i}{H}\right)/\frac{h_i}{H}+\beta_4dbh+\beta_5\frac{h_i}{H}\sqrt{dbh}+\beta_6\frac{h_i}{H}\sqrt{H}} \right] \]

  • kozak
  • \[ \operatorname{d_i} =b_0 \cdot (dbh^{b_1}) \cdot (h^{b_2}) \cdot \left(\frac{1 - \left(\frac{h_i}{h}\right)^{1/4}}{1 - \left(p^{1/3}\right)}\right)^{b_3 \cdot \left(\frac{h_i}{h}\right)^4 + b_4 \cdot \left(\frac{1}{e^{dbh/h}}\right) + b_5 \cdot \left(\frac{1 - \left(\frac{h_i}{h}\right)^{1/4}}{1 - \left(p^{1/3}\right)}\right)^{0.1} + b_6 \cdot \left(\frac{1}{dbh}\right) + b_7 \cdot \left(h^{1 - \left(\frac{h_i}{h}\right)^{1/3}}\right) + b_8 \cdot \left(\frac{1 - \left(\frac{h_i}{h}\right)^{1/4}}{1 - \left(p^{1/3}\right)}\right)} \]

  • johnson
  • \[ \operatorname{d_i} = dbh \cdot \left( b_0 \cdot \log\left( \frac{b_1 + \frac{(H - h_i)}{(H - 1.3)}}{b_2} \right) \right) \]

  • matte
  • \[ \operatorname{d_i} = dbh \cdot \left( b_0 \cdot \left( \frac{H - h_i}{H - 1.30} \right)^2 + b_1 \cdot \left( \frac{H - h_i}{H - 1.30} \right)^3 + b_2 \cdot \left( \frac{H - h_i}{H - 1.30} \right)^4 \right) \]

  • ann
  • Notação

    • \( β_n \): Parâmetros ajustados
    • \( d_i \): Diâmetro (cm)
    • \( \text{dap} \): Diâmetro à altura do peito (cm)
    • \( H \): Altura total (m)
    • \( h_i \): Altura do segmento (m)

    Rede Neural Artificial

    Ao selecionar o modelo 'RNA', 6 diferentes estruturas de redes neurais artificiais serão testadas. Apenas o resultado de 1 modelo será retornado. O modelo retornado será selecionado pela função de classificação.
    Para o modelo 'RNA', utiliza-se o módulo sklearn.neural_network.MLPRegressor.

    --- title: Parâmetros RNA --- classDiagram direction LR class MLPRegressor { Épocas: 3000 Função de ativação: logistic Solver: lbfgs Tamanho do lote: dinâmico Taxa de aprendizado inicial: 0.1 Modo da taxa de aprendizado: adaptive } class Modelo-0 { Camadas ocultas: (15, 25, 20, 30, 10) } class Modelo-1 { Camadas ocultas: (35, 10, 25, 35, 15) } class Modelo-2 { Camadas ocultas: (25, 15, 30, 20) } class Modelo-3 { Camadas ocultas: (15, 35, 45) } class Modelo-4 { Camadas ocultas: (35, 10, 25, 35, 15) } class Modelo-5 { Camadas ocultas: (35, 10, 25, 35, 15, 20, 15, 30) } MLPRegressor <|-- Modelo-0 MLPRegressor <|-- Modelo-1 MLPRegressor <|-- Modelo-2 MLPRegressor <|-- Modelo-3 MLPRegressor <|-- Modelo-4 MLPRegressor <|-- Modelo-5

    Modelos volumétricos disponíveis

  • spurr
  • \[ \operatorname{V} = b_0 + b_1 \cdot (\text{dap}^2) \cdot H \]

  • schumacher_hall
  • \[ \operatorname{V} = b_0 \cdot (\text{dap}^{b_1}) \cdot (H^{b_2}) \]

  • honner
  • \[ \operatorname{V} = \frac{\text{dap}^2}{b_1 \cdot \left(\frac{1}{H}\right)} \]

  • ogaya
  • \[ \operatorname{V} = \frac{\text{dap}^2}{b_1 \cdot H} \]

  • stoate
  • \[ \operatorname{V} = b_0 + b_1 \cdot \text{dap}^2 + b_2 \cdot \text{dap}^2 \cdot H + b_3 \cdot H \]

  • naslund
  • \[ \operatorname{V} = b_1 \cdot \text{dap}^2 + b_2 \cdot \text{dap}^2 \cdot H + b_3 \cdot \text{dap} \cdot H^2 + b_4 \cdot H^2 \]

  • takata
  • \[ \operatorname{V} = \frac{\text{dap}^2 \cdot H}{b_0 + b_1 \cdot \text{dap}} \]

  • spurr_log
  • \[ \operatorname{V} = \exp(b_0 + b_1 \cdot \log(\text{dap}^2 \cdot H)) \]

  • meyer
  • \[ \operatorname{V} = b_0 + b_1 \cdot \text{dap}^2 + b_2 \cdot \text{dap} + b_3 \cdot \text{dap} \cdot H + b_4 \cdot \text{dap}^2 \cdot H \]

  • RNA
  • Utilize os mesmos modelos de RNA usados para a função de afilamento.

    Notação

    • \( V \): Volume estimado (m³)
    • \( \text{dap} \): Diâmetro à altura do peito (cm)
    • \( H \): Altura total (m)

    Função de Classificação

    Para selecionar os modelos com melhor desempenho e classificá-los adequadamente, são obtidas as seguintes métricas:

    Nome da métrica Estrutura
    Erro Médio Absoluto (MAE) \( MAE = \frac{1}{n} \sum_{i=1}^{n} \|y_i - \hat{y}_i\| \)
    Erro Médio Percentual Absoluto (MAPE) \( MAPE = \frac{100}{n} \sum_{i=1}^{n} \left\|\frac{y_i - \hat{y}_i}{y_i}\right\| \)
    Erro Médio Quadrático (MSE) \( MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \)
    Raiz do Erro Médio Quadrático (RMSE) \( RMSE = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} \)
    R Quadrado (Coeficiente de Determinação) \( R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} \)
    Variância Explicada (EV) \( EV = 1 - \frac{Var(y - \hat{y})}{Var(y)} \)
    Erro Médio \( Erro\ Médio = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i) \)

    Após obter as métricas para cada modelo testado, o melhor modelo recebe a pontuação 10, enquanto os demais recebem pontuações decrescentes (9, 8 e assim por diante).

    Referências

    BI, H. (2000). Trigonometric variable-form taper equations for Australian eucalypts. Forest Science, 46(3), 397–409.

    JOHNSON, T. (1911). Taxatariska undersökringar om skogsträdens form. Skgsvardsföreningens tiedskrifle. Häfte, Berlim, 9(10), 285–329.

    KOZAK, A. (2004). My last words on taper equations. The Forestry Chronicle, 80(4), 507–515.

    MATTE, L. (1949). The taper of coniferous species with special reference to Loblolly Pine. Forestry Chronicle, Mattawa, 25(1), 21–31.

    MEYER, H. A. (1940). A mathematical expression for height curves. Journal of Forestry, 38, 415–420. https://doi.org/10.1093/jof/38.5.415

    NÄSLUND, M. (1936). Skogsförsöksanstaltens gallringsförsök i tallskog. Meddelanden från Statens Skogsförsöksanstalt, Swedish Institute of Experimental Forestry, 29: 169.

    SCHÖEPFER, W. (1966). Automatisierung des Massen-, Sorten- und Wertberechnung stehender Waldbestände. Schriftenreihe Bad. Wurtt-Forstl.

    SCHUMACHER, F. X.; HALL, F. S. (1933). Logarithmic expression of timber tree volume. Journal of Agricultural Research, Washington, 47(9), 719–734.

    SCOLFORO, J. R. S. (2005). Biometria Florestal: Parte I: Modelos de regressão linear e não-linear; Parte II: Modelos para relação hipsométrica, volume, afilamento e preso de matéria seca. Lavras: UFLA/FAEPE, pp. 224–226.

    SPURR, S. R. (1952). Forest inventory. New York: Ronald Press, 476 p.

    STOATE, I. N. (1945). The use of a volume equation in pine stands. Australian Forestry, Canberra, 9, 48–52.