Normalize data with notebooks
Learn how to create a notebook that normalizes data. Data normalization is the process of modifying or cleaning data to make it easier to work with. Examples include adjusting numeric values to a uniform scale and modifying strings.
Walk through the following example to create a notebook that queries NOAA NDBC sample data, normalizes degree-based wind directions to cardinal directions, and then writes the normalized data to a bucket.
Note: Using sample data counts towards your total InfluxDB Cloud usage.
-
In the Build a Query cell:
- In the FROM column under Sample, select NOAA National Buoy Data.
- In the next FILTER column, select _measurement from the drop-down list and select the ndbc measurement in the list of measurements.
- In the next FILTER column, select _field from the drop-down list, and select the wind_dir_degt field from the list of fields.
-
Click after your Build a Query cell to add a new cell and select Flux Script.
-
In the Flux script cell:
-
Define a custom function (
cardinalDir()
) that converts a numeric degree value to a cardinal direction (N, NNE, NE, etc.). -
Use
__PREVIOUS_RESULT__
to load the output of the previous notebook cell into the Flux script. -
Use
map()
to iterate over each input row, update the field key towind_dir_cardinal
, and normalize the_value
column to a cardinal direction using the customcardinalDir()
function. -
Use
to()
to write the normalized data back to InfluxDB. Specify an existing bucket to write to or create a new bucket.
import "array" cardinalDir = (d) => { _cardinal = if d >= 348.7 or d < 11.25 then "N" else if d >= 11.25 and d < 33.75 then "NNE" else if d >= 33.75 and d < 56.25 then "NE" else if d >= 56.25 and d < 78.75 then "ENE" else if d >= 78.75 and d < 101.25 then "E" else if d >= 101.25 and d < 123.75 then "ESE" else if d >= 123.75 and d < 146.25 then "SE" else if d >= 146.25 and d < 168.75 then "SSE" else if d >= 168.75 and d < 191.25 then "S" else if d >= 191.25 and d < 213.75 then "SSW" else if d >= 213.75 and d < 236.25 then "SW" else if d >= 236.25 and d < 258.75 then "WSW" else if d >= 258.75 and d < 281.25 then "W" else if d >= 281.25 and d < 303.75 then "WNW" else if d >= 303.75 and d < 326.25 then "NW" else if d >= 326.25 and d < 348.75 then "NNW" else "" return _cardinal } __PREVIOUS_RESULT__ |> map(fn: (r) => ({r with _field: "wind_dir_cardinal", _value: cardinalDir(d: r._value), })) |> to(bucket: "example-bucket")
-
-
(Optional) Click and select Note to add a cell containing notes about what this notebook does. For example, the cell might say, “This notebook converts decimal degree wind direction values to cardinal directions.”
-
Click Run to run the notebook and write the normalized data to your bucket.
Continuously run a notebook
To continuously run your notebook, export the notebook as a task:
-
Click to add a new cell and then select Task.
-
Provide the following:
- Every: Interval that the task should run at.
- Offset: (Optional) Time to wait after the defined interval to execute the task. This allows the task to capture late-arriving data.
-
Click Export as Task.
Support and feedback
Thank you for being part of our community! We welcome and encourage your feedback and bug reports for InfluxDB and this documentation. To find support, the following resources are available:
InfluxDB Cloud and InfluxDB Enterprise customers can contact InfluxData Support.