# Randalyze - Random Number Generator And Analyzer

## What Does Randalyze Do?

Randalyze is a Python module that you can import or use directly from the command line to generate a set of random numbers. These numbers will fit a specified distribution, rather than just being evenly distributed.

It also allows you to analyze a set of numbers, to see which distribution they match.

At the moment, the only distribution that Randalyze handles is Benford's Law. It's a counter-intuitive distribution that numbers from the real world tend to follow. So, if you want to see whether invoice totals, numbers of incidents, traffic counts, etc. are realistic, analyze them using Randalyze. Checking against Benford's Law is good enough for auditors, so there's definitely something to it!

## Installation

Randalyze supports Python 3.8 and later, so you can install it on Windows 7 if you want. It doesn't support Python 2.7.

To install Randalyze, create a virtual environment and use `pip`:

```bash
pip install randalyze
```

## Usage

### Command Line Usage

#### Generating Random Numbers

The `generate` command creates a number of random numbers. The type of generator must be specified - currently the only option is `benford`, and the number (or count) of numbers generated is specified with the `-c` option.

For example, to generate 100 random numbers with a Benford distribution, the following command line can be used:

```bash
randalyze generate -c 100 benford
```

or, if you're not using an active virtual environment:

```bash
python -m randalyze generate -c 100 benford
```

For detailled parameter descriptions, use:

```bash
randalyze --help
randalyze generate --help
```

#### Analyzing Numbers

If you have a set of numbers, `randalyze` can analyze them and tell you how close to a Benford distribution they are. These numbers may have been generated by `randalyze`, or maybe obtained from somewhere else - it really doesn't matter.

So, to analyze an output of 10,000 numbers from the `randalyze generate` command, and see whether it matches a Benford distribution to within 10%, use:

```bash
randalyze generate benford -c 10000 | randalyze analyze -t 10 benford
```

And to ensure the numbers in a text file `numbers.txt`, with one number per line, fit a Benford distribution:

```bash
cat numbers.txt | randalyze analyze -t 10 benford
```

or use the `FILE` parameter:

```bash
randalyze analyze -t 10 benford numbers.txt
```

And to produce the output in JSON format:

```bash
randalyze analyze -t 10 --format json benford numbers.txt
```

#### Self Testing

You can use `randalyze` to analyze the numbers it creates by piping the output of the `generate` command into the `analyze` command. For example, to check whether 10,000 generated numbers are wihin 10% of a Benford distribution, use:

```bash
randalyze generate benford -c 10000 | randalyze analyze -t 10 benford
```
