# Analyze

When it recognizes that data in the console has a format it can show in a chart, the Data Viewer will display it along with any new values that arrive. It also creates multiple charts if it notices more than one value stream in the incoming data.

If you want to keep the data and work with it later, you can download it and save it to your computer or mobile device.

## Charting value streams

As an example, let’s generate some data for two values. The first value `x` makes a line on the chart. The second value is the square of the first value `x**2`shifted by `5`. This second value will show a chart of a parabola.

``````for (let x = 0; x <= 10; x++) {
serial.writeValue("x", x)
serial.writeValue("y", (x - 5)**2)
basic.pause(1000)
}``````

Since we used `||serial:serial write value||` for each value, there are two charts, one for the `x` stream and the other for the `y` stream. Also, the values shown in the console window are formatted as name value pairs:

``````x:0
y:25
x:1
y:16
...``````

## Charting by data lines

Instead of writing multiple values separately, we can combine them in an array and write them together at once. Using the last example, let’s combine each line and parabola value into an array.

``````for (let x = 0; x <= 10; x++) {
serial.writeNumbers([x, (x - 5) ** 2])
basic.pause(1000)
}``````

This time both values are shown on the same chart. We used `||serial:serial write numbers||` to send both values at the same time. Instead of being written as name value pairs, the values are combined into one line of comma separated values (CSV). The Data Viewer recognizes the values as one stream and puts multiple data lines on the same chart. The console shows the data in CSV format:

``````0,25
1,16
2,9
3,4
...``````

## Raw data

The data in the console window appears exacly like it’s written by your program. The data your program writes is called “raw” data. The Data Viewer reads the data and “cooks” it by deciding how to display it in a way that’s useful to you.

You can select and copy the raw data from the console and paste it into another program if you want to work with it outside of the MakeCode editor. Also, there is a copy button next to the console window that let’s you easily copy the raw data with one click.

The data is formatted again and saved in file with a name like:

`microbit-data-13-20-2018-14-18-15-0700.csv`

The filename contains the date and time when the data was downloaded. If you open the file in an editor you can see how the Data Viewer reformatted it from how it was in the console.

``````sep=
time (source1)    x    time (source1)    y
0    0    0    25
1.018    1    1.026    16
2.049    2    2.045    9
3.062    3    3.059    4
4.064    4    4.074    1
5.078    5    5.078    0
6.115    6    6.112    1
7.097    7    7.112    4
8.131    8    8.128    9
9.145    9    9.145    16
10.148    10    10.16    25``````

The first line says what character is used as the value separator. Characters other than a comma can be used as separators. The Data Viewer choose to use a `TAB` character. The next line contains the headings for the values. These are the names of each value when name value pairs are written to the console. Also, a time value (timestamp) is included for each value. The timestamp is the amount of time since the start of the program when the value was written.

The remaining lines contain the data values and their timestamps. Each line has one occurance of each value. So, for the example data above, each new `x` and `y` value is put together on the same line.

Each line of data is placed into a row in the spreadsheet. The separators tell the spreadsheet which column the values go into.

Spreadsheets are powerful tools for analyzing and looking at relationships in your data. Most spreadsheet programs can do advanced charting too. Here’s a chart of our example data. You’ll notice that it looks similar to the chart displayed by the MakeCode editor.