Skip to content

Tree Volume Planning


Warning

This library is under development, none of the presented solutions are available for download.

Use forest inventory data to plan the trees to be sampled for volume measurement, ensuring sufficient sampling of the plantation.


Class Parameters

TreeVolumePlanning(df, tree_dbh, tree_height)
Parameters Description
df The DataFrame containing the tree data.
tree_dbh The name of the column containing the diameter at breast height (DBH) values of the trees (centimeters).
tree_height The name of the column that contains the total heights of the trees (meters).

Class Functions

functions and parameters
  TreeVolumePlanning.resume(n_classes=10, dbh_classes=None, height_classes=None,
                        only_height_classes=False, only_dbh_classes=False)#(1)!

  TreeVolumePlanning.p_resume(n_classes=10, dbh_classes=None, height_classes=None,
                          only_height_classes=False, only_dbh_classes=False)#(2)!

  TreeVolumePlanning.get_values(n_measured_trees=10, n_classes=10, dbh_classes=None, height_classes=None,
                            only_height_classes=False, only_dbh_classes=False)#(3)!
  1. n_classes = Number of classes to which the values of height and diameter at breast height will be subjected.
    dbh_classes = (Optional) Number of DBH classes to which the values of diameter at breast height will be subjected. If None, uses n_classes value.
    height_classes = (Optional) Number of height classes to which the values of height will be subjected. If None, uses n_classes value.
    only_height_classes = (Optional) If True, only height classes will be used for the summary.
    only_dbh_classes = (Optional) only DBH classes will be used for the summary.

  2. n_classes = Number of classes to which the values of height and diameter at breast height will be subjected.
    dbh_classes = (Optional) Number of DBH classes to which the values of diameter at breast height will be subjected. If None, uses n_classes value.
    height_classes = (Optional) Number of height classes to which the values of height will be subjected. If None, uses n_classes value.
    only_height_classes = (Optional) If True, only height classes will be used for the summary.
    only_dbh_classes = (Optional) only DBH classes will be used for the summary.

  3. n_measured_trees = Number of trees that will be selected for volume measurement. The default is 10.
    n_classes = Number of classes to which the values of height and diameter at breast height will be subjected.
    dbh_classes = (Optional) Number of DBH classes to which the values of diameter at breast height will be subjected. If None, uses n_classes value.
    height_classes = (Optional) Number of height classes to which the values of height will be subjected. If None, uses n_classes value.
    only_height_classes = (Optional) If True, only height classes will be used for the summary.
    only_dbh_classes = (Optional) only DBH classes will be used for the summary.

Methods Description
.resume() Returns a summary of how many trees from the provided dataframe are in each class.
.p_resume() Returns a summary of the percentage of trees from the provided dataframe in each class.
.get_values() Returns a dataframe indicating how many trees should be sampled for volume measurement in each class, based on the percentage representation of each class in the total inventory.

Example Usage

Considering the data resulting from the hypsometric relationship established in the previous module, we will carry out the tree volume planning.

Download example file.

First 5 rows of the file:

Parcela Dap (cm) H (m) Idade (anos) best_predicted_height selected_model
p-1 22,28 0 15 21,91910582 y = y ~ x = 1/x^2
p-1 23,87 22,2 15 22,2 Real Height
p-1 25,46 0 15 23,30513332 y = y ~ x = 1/x^2
p-1 25,78 24,5 15 24,5 Real Height
p-1 26,74 22,2 15 22,2 Real Height

taper_functions_example.py
from fptools.tree_volume_planning import TreeVolumePlanning#(1)!
import pandas as pd#(2)!

  1. Import TreeVolumePlanning class.
  2. Import pandas for data manipulation.

Create a variable for the Volumetrics Class

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

cub = TreeVolumePlanning(df ,'Dap (cm)','best_predicted_height')#(2)!

resume = cub.resumen(n_classes=6)#(3)!

percentual_resume = cub.p_resume(n_classes=6)#(4)!

to_measure = cub.get_values(n_measured_trees=50, n_classes=6)#(5)!

  1. Load your .xlsx file.
  2. Create the variable cub containing the TreeVolumePlanning class, using the column Dap (cm) for DBH values and the column best_predicted_height for height values.
  3. Return a summary of how many trees from the provided dataframe are in each class (6 classes) and store it in the variable resume.
  4. Return a summary of the percentage of trees from the provided dataframe in each class (6 classes) and store it in the variable percentual_resume.
  5. Return a dataframe indicating how many trees should be sampled for volume measurement in each class, distributing the 50 trees (n_measured_trees) based on the percentage representation of each class in the total inventory, and store it in the variable to_measure.

Outputs

Tables

resume(1)

  1. DataFrame showing how many trees are in each of the 6 generated height and DBH classes.
DBH classes H(21.904, 24.516] H(24.516, 27.113] H(27.113, 29.71] H(29.71, 32.306] H(32.306, 34.903] H(34.903, 37.5]
(22.251, 27.108] 9 2 0 3 2 0
(27.108, 31.937] 3 13 4 4 1 0
(31.937, 36.765] 0 14 8 13 2 0
(36.765, 41.593] 0 5 9 21 1 0
(41.593, 46.422] 0 2 2 6 3 1
(46.422, 51.25] 0 0 3 0 2 2

percentual_resume(1)

  1. DataFrame showing the percentage of trees in each of the 6 generated height and DBH classes relative to the total number of trees.
DBH classes H(21.904, 24.516] H(24.516, 27.113] H(27.113, 29.71] H(29.71, 32.306] H(32.306, 34.903] H(34.903, 37.5]
(22.251, 27.108] 6,67 1,48 0,00 2,22 1,48 0,00
(27.108, 31.937] 2,22 9,63 2,96 2,96 0,74 0,00
(31.937, 36.765] 0,00 10,37 5,93 9,63 1,48 0,00
(36.765, 41.593] 0,00 3,70 6,67 15,56 0,74 0,00
(41.593, 46.422] 0,00 1,48 1,48 4,44 2,22 0,74
(46.422, 51.25] 0,00 0,00 2,22 0,00 1,48 1,48

to_measure(1)

  1. DataFrame showing how many trees (out of the 50 specified in n_measured_trees) should be measured in each of the 6 height and DBH classes.
DBH classes H(21.904, 24.516] H(24.516, 27.113] H(27.113, 29.71] H(29.71, 32.306] H(32.306, 34.903] H(34.903, 37.5]
(22.251, 27.108] 3 1 0 1 1 0
(27.108, 31.937] 1 5 2 1 0 0
(31.937, 36.765] 0 5 3 5 1 0
(36.765, 41.593] 0 2 3 8 0 0
(41.593, 46.422] 0 1 1 2 1 0
(46.422, 51.25] 0 0 1 0 1 1

Thus, the user obtains how many trees should be sampled for volume measurement in each DBH and height class.

About class intervals

The intervals use the following notation:
- ( means the value is not included
- ] means the value is included

For example, the interval (22.251, 27.108] includes values greater than 22.251 and less than or equal to 27.108.


It is not mandatory to create both height and DBH classes simultaneously — it is possible to create only height classes or only DBH classes, as shown in the example below:

taper_functions_example.py
to_measure = cub.get_values(n_measured_trees=50, dbh_classes=6,
                            only_dbh_classes=True)#(1)!

  1. Defines that 50 trees will be measured, divided into 6 DBH-only classes.
DBH classes n_trees
(22.25, 27.108] 6
(31.937, 36.765] 14
(46.422, 51.25] 3
(36.765, 41.593] 13
(27.108, 31.937] 9
(41.593, 46.422] 5

It is also possible to create a different number of classes for height and DBH, as shown in the example below:

taper_functions_example.py
to_measure = cub.get_values(n_measured_trees=50, dbh_classes=6,
                            height_classes=2)#(1)!

  1. Defines that 50 trees will be measured, divided into 6 DBH classes and 2 height classes.
DBH classes H(21.904, 29.71] H(29.71, 37.5]
(22.251, 27.108] 4 2
(27.108, 31.937] 7 2
(31.937, 36.765] 8 6
(36.765, 41.593] 5 8
(41.593, 46.422] 2 4
(46.422, 51.25] 1 1