KS

Kitchen Sink

All the things


Code (kitchen_sink.py) to create this report
### kitchen_sink.py

import logging

import pandas as pd
import plotly.express as px

import report_creator as rc

logging.basicConfig(level=logging.INFO)


if __name__ == "__main__":
    # set up of example text, plots and dataframes
    df1 = pd.DataFrame(columns=["Name", "Age"])
    df1.Name = ["Lizzie", "Julie", "Andrea"]
    df1.Age = [24, 18, 22]
    df2 = px.data.stocks()

    with open(__file__) as f:
        example_python = f.read()

    with open("examples/example.txt") as f:
        example_text = f.read()

    with open("examples/example.java") as f:
        example_java = f.read()

    with open("README.md") as f:
        example_md = f.read()

    # begin the use of the report_creator package

    with rc.ReportCreator(
        title="Kitchen Sink",
        description="**All** the *things*",
        footer=f"Made with `report_creator` (v{rc.__version__}), `pip install report-creator` :red_heart:",
    ) as report:
        view = rc.Block(
            rc.Collapse(
                rc.Python(example_python, label="kitchen_sink.py"),
                label="Code (kitchen_sink.py) to create this report",
            ),
            rc.Group(
                rc.Metric(
                    heading="Hitchhiker's Guide to the Galaxy",
                    value="Don't Panic",
                ),
                rc.Metric(
                    heading="Gross profit margin",
                    value=65,
                    unit="%",
                    label="A commonly tracked metric by finance departments that can be found on an income statement.",
                ),
                rc.Metric(
                    heading="Accuracy",
                    value=0.95,
                    label="Number of correct predictions by Total number of predictions",
                ),
                rc.Metric(
                    heading="Recurring revenue",
                    value="$10.7B",
                    label="Recurring revenue is the portion of a company's revenue that is predictable and stable.",
                ),
                rc.Metric(
                    heading="Capacity utilization",
                    value=42,
                    unit="%",
                    label="A popular productivity metric that measures the ratio of actual output to potential output.",
                ),
                rc.Metric(
                    heading="Asset turnover ratio",
                    value=3.3,
                    label="Asset turnover ratio is a financial metric that shows how efficiently a company generates revenue from its assets.",
                ),
                label="Grouped Metrics",
            ),
            rc.Separator(),
            rc.Group(
                rc.MetricGroup(
                    df1,
                    heading="Name",
                    value="Age",
                    label="Metrics Group from DataFrame",
                ),
                rc.Table(df1, label="Table of DataFrame"),
            ),
            rc.Group(
                rc.EventMetric(
                    pd.read_csv("examples/logs.csv"),
                    condition="status == 200",
                    color="black",
                    date="time",
                    frequency="B",
                    heading="Successful Requests",
                ),
                rc.EventMetric(
                    pd.read_csv("examples/logs.csv"),
                    condition="status == 404",
                    color="black",
                    date="time",
                    frequency="B",
                    heading="Not Found Requests",
                ),
                label="Log File Metrics",
            ),
            rc.Accordion(
                blocks=[
                    rc.Markdown(
                        """
                            > Love all, trust a few, do wrong to none.

                            > Moderate lamentation is the right of the dead, excessive grief the enemy to the living.
                        """,
                        label="All's Well That Ends Well",
                    ),
                    rc.Markdown(
                        """
                            >Something is rotten in the state of Denmark.

                            > There are more things in heaven and earth, Horatio,  
                            > Than are dreamt of in our philosophy.

                            > To be, or not to be, that is the question.

                            > How all occasions do inform against me, and spur my dull revenge.
                        """,
                        label="Hamlet",
                    ),
                    rc.Markdown(
                        """
                        > But, soft, what light through yonder window breaks?  
                        > It is the east, and Juliet is the sun.

                        > O happy dagger,  
                        > This is thy sheath: there rust, and let me die.

                        > For never was a story of more woe  
                        > Than this of Juliet and her Romeo.
                        """,
                        label="Romeo and Juliet",
                    ),
                ],
                label="Accordion",
            ),
            rc.Text(
                example_text,
                label="Alice’s Adventures in Wonderland (Text)",
            ),
            rc.Java(
                example_java,
                label="Example Java",
            ),
            rc.Separator(),
            rc.Markdown(example_md, label="README.md"),
            rc.Widget(df1.plot.bar(x="Name", y="Age"), label="Matplotlib Figure - People"),
            rc.Widget(
                px.line(df2, x="date", y=["GOOG", "AAPL", "NFLX", "MSFT"]),
                label="rc.Widget() of a Plotly Figure",
            ),
            rc.Separator(),
            rc.Group(
                rc.Pie(
                    px.data.gapminder().query("year == 2002").query("continent == 'Europe'"),
                    values="pop",
                    names="country",
                    label="rc.Pie Chart - 2002 Population of European continent",
                ),
                rc.Pie(
                    px.data.gapminder().query("year == 2002").query("continent == 'Americas'"),
                    values="pop",
                    names="country",
                    label="rc.Pie Chart - 2002 Population of American continent",
                ),
            ),
            rc.Group(
                rc.Histogram(
                    px.data.tips(),
                    x="total_bill",
                    dimension="sex",
                    label="rc.Histogram() Chart of Total Bill",
                ),
                rc.Box(
                    px.data.tips(),
                    y="total_bill",
                    dimension="day",
                    label="rc.Box() Chart of Total Bill by Day Dimension",
                ),
            ),
            rc.Select(
                blocks=[
                    rc.Bar(
                        px.data.medals_long(),
                        x="nation",
                        y="count",
                        dimension="medal",
                        label="Bar Chart - Olympic Medals",
                    ),
                    rc.Scatter(
                        df=px.data.iris(),
                        x="sepal_width",
                        y="sepal_length",
                        dimension="species",
                        marginal="histogram",
                        label="Scatter Plot - Iris",
                    ),
                ],
                label="Tabbed Plots",
            ),
            rc.Line(
                px.data.stocks(),
                x="date",
                y=["GOOG", "AAPL", "NFLX", "MSFT"],
                label="Stock Plot",
            ),
            rc.Separator(),
            rc.Html(
                "<span>"
                + "".join(
                    [
                        f"""
                <svg height="100" width="100">
                    <circle cx="50" cy="50" r="40" stroke="lightgrey" stroke-width="0.5" fill="{color}" />
                </svg>
                """
                        for color in rc.report_creator_colors
                    ]
                )
                + "</span>",
                label="HTML SVG Circles of Report Creator Colors",
            ),
            rc.Separator(),
            rc.Select(
                blocks=[
                    rc.DataTable(
                        px.data.gapminder().query("year == 2002").query("continent == 'Europe'"),
                        label="2002 European Population",
                        index=False,
                    ),
                    rc.DataTable(px.data.iris(), label="Iris Petals", index=False),
                    rc.DataTable(
                        px.data.election(),
                        label="2013 Montreal Election",
                        index=False,
                    ),
                    rc.DataTable(
                        px.data.medals_long(),
                        label="Olympic Speed Skating",
                        index=False,
                    ),
                    rc.DataTable(
                        px.data.wind(),
                        label="Wind Intensity",
                        index=False,
                    ),
                ],
                label="Tab Group of Data Tables",
            ),
            rc.Separator(),
            rc.Select(
                blocks=[
                    rc.Diagram(
                        src="""
mindmap
  root((Artificial Intelligence))
    subtopic1(Machine Learning)
      subtopic1a(Supervised Learning)
        subtopic1a1(Linear Regression)
        subtopic1a2(Decision Trees)
        subtopic1a3(SVM)
      subtopic1b(Unsupervised Learning)
        subtopic1b1(Clustering)
        subtopic1b2(Dimensionality Reduction)
      subtopic1c(Reinforcement Learning)
        subtopic1c1(Q-Learning)
        subtopic1c2(Deep Q-Networks)
        subtopic1c3(Policy Gradient)
    subtopic2(Neural Networks)
      subtopic2a(Feedforward Networks)
        subtopic2a1(Activation Functions)
        subtopic2a2(Backpropagation)
      subtopic2b(Recurrent Networks)
        subtopic2b1(LSTM)
        subtopic2b2(GRU)
      subtopic2c(Convolutional Networks)
        subtopic2c1(Image Classification)
        subtopic2c2(Object Detection)
    subtopic3(Natural Language Processing)
      subtopic3a(Tokenization)
      subtopic3b(Word Embeddings)
        subtopic3b1(Word2Vec)
        subtopic3b2(GloVe)
      subtopic3c(Transformers)
        subtopic3c1(BERT)
        subtopic3c2(GPT)
    subtopic4(Computer Vision)
      subtopic4a(Image Recognition)
      subtopic4b(Semantic Segmentation)
      subtopic4c(Object Detection)
    subtopic5(Generative Models)
      subtopic5a(GANs)
        subtopic5a1(Discriminator)
        subtopic5a2(Generator)
      subtopic5b(VAEs)
        subtopic5b1(Latent Space)
        subtopic5b2(Reconstruction)
    subtopic6(Ethics in AI)
      subtopic6a(Bias)
      subtopic6b(Privacy)
      subtopic6c(Transparency)
      subtopic6d(Accountability)
      subtopic6e(Fairness)
                """,
                        label="Example AI Mind Map Diagram",
                    ),
                    rc.Diagram(
                        src="""
                    graph LR
                        A[Square Rect] -- Link text --> B((Circle))
                        A --> C(Round Rect)
                        B --> D{Rhombus}
                        C --> D
                """,
                        label="Example Git Graph",
                    ),
                ],
                label="Tab Group of Diagrams",
            ),
            rc.Unformatted(
                r"""
 ___________________________________
< This is an unformatted component >
 -----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
""",
                label="Unformatted",
            ),
            rc.Group(
                rc.Image(
                    "https://assets.midlibrary.io/6629522db4ea3030cf8c4f18/6629522eb4ea3030cf8c5df2_Portrait%20of%20a%20Man%20with%20a%20Medal%20of%20Cosimo%20il%20Vecchio%20de%27%20Medici%20(1475).jpg",
                    label="Portrait of a Man with a Medal (1475)",
                    link_to="https://midlibrary.io/focus/sandro-botticelli",
                    convert_to_base64=True,
                ),
                rc.Image(
                    "https://assets.midlibrary.io/6629522db4ea3030cf8c4f18/6629522eb4ea3030cf8c5df1_Detail%20of%20The%20Spring%20(Flora)%20(late%201470s%20or%20early%201480s).jpg",
                    label="The Spring, Flora (late 1470s or early 1480s)",
                    convert_to_base64=True,
                ),
                rc.Image(
                    "https://assets.midlibrary.io/6629522db4ea3030cf8c4f18/6629522eb4ea3030cf8c5df0_Idealised%20Portrait%20of%20a%20Lady%20(Portrait%20of%20Simonetta%20Vespucci%20as%20Nymph)%20(1480%E2%80%931485).jpg",
                    label="Portrait of Simonetta Vespucci",
                    convert_to_base64=True,
                ),
            ),
        )

        report.save(view, "index.html", prettify_html=False)
Grouped Metrics

Hitchhiker's Guide to the Galaxy:

Don't Panic

Gross profit margin:

65%

A commonly tracked metric by finance departments that can be found on an income statement.

Accuracy:

0.95

Number of correct predictions by Total number of predictions

Recurring revenue:

$10.7B

Recurring revenue is the portion of a company's revenue that is predictable and stable.

Capacity utilization:

42%

A popular productivity metric that measures the ratio of actual output to potential output.

Asset turnover ratio:

3.3

Asset turnover ratio is a financial metric that shows how efficiently a company generates revenue from its assets.



Metrics Group from DataFrame

Lizzie:

24

Julie:

18

Andrea:

22

Table of DataFrame
Name Age
Lizzie 24
Julie 18
Andrea 22
Log File Metrics

Successful Requests:

2717

Not Found Requests:

208

Accordion
All's Well That Ends Well
All's Well That Ends Well

Love all, trust a few, do wrong to none.

Moderate lamentation is the right of the dead, excessive grief the enemy to the living.

Hamlet
Hamlet

Something is rotten in the state of Denmark.

There are more things in heaven and earth, Horatio,
Than are dreamt of in our philosophy.

To be, or not to be, that is the question.

How all occasions do inform against me, and spur my dull revenge.

Romeo and Juliet
Romeo and Juliet

But, soft, what light through yonder window breaks?
It is the east, and Juliet is the sun.

O happy dagger,
This is thy sheath: there rust, and let me die.

For never was a story of more woe
Than this of Juliet and her Romeo.

Alice’s Adventures in Wonderland (Text)

Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, “and what is the use of a book,” thought Alice “without pictures or conversations?”

So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.

There was nothing so very remarkable in that; nor did Alice think it so very much out of the way to hear the Rabbit say to itself, “Oh dear! Oh dear! I shall be late!” (when she thought it over afterwards, it occurred to her that she ought to have wondered at this, but at the time it all seemed quite natural); but when the Rabbit actually took a watch out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her feet, for it flashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across the field after it, and fortunately was just in time to see it pop down a large rabbit-hole under the hedge.

### Example Java

public static void main(String...args) {
  System.out.println(
    randomString(-229985452) + ' ' + randomString(-147909649)
  );
}

public static String randomString(int seed) {
    Random rand = new Random(seed);
    StringBuilder sb = new StringBuilder();
    for (int i = 0;; i++) {
      int n = rand.nextInt(27);
      if (n == 0) break;
      sb.append((char)('`' + n));
    }
    return sb.toString();


README.md

Report Creator

License PyPI Version Python Versions Python Stats

GitHub | PyPI | Documentation | Issues | Getting Started

Library to assemble reports in HTML from various components using python. Inspired by DataPane which is no longer maintained and targetted more interactive use cases.

⚡ Features

  • Good pandas/dataframe/table support
  • Look modern
  • Allows markdown as input for text blocks
  • Allows html as input
  • Components for things like metrics ("Accuracy: 87%") from a key & value
  • Support for plotting figures, interactive plotly and matplotlib
  • images (styled by the library) with an option to fetch at report build time (no fetch on render)
  • json/yaml/python/java/ptolog code blocks with color syntax highlighting
  • Support tab containers (not printer friendly)
  • Add support for any Jupyter widget, any object that renders in a notebook should render to a report
  • Add built-in easy plotting that looks stylistically consistent with the report
  • Add option to change the report icon based on a github account avatar, or an image
  • Add a metric type for timeseries data which should some aggregate function of the data, and plot over time.
  • Add diagram component with Mermaid JS
  • Write documentation!
  • Add a status metric that supports up to a handful of k/v pairs (k=task, v=status)
  • Add bookmark anchors to blocks
  • Add Footer to report
  • Add accordion component
  • Add option for color logo (uses accent color param passed to ReportCreator ctor)
  • Clean up docs build, move requirements-doc into docs/environment.yaml "- -r requirements.txt"
  • Add a Metric type for a softable list of key/values rendered like this Percent of time
  • Progress component
  • Add mistune plugin to allow gfk markdown icons - :icon-name:, for example :pizza:
  • Add Venn diagram support (possibly with matplotlib_venn, or SVG)
  • Add log file block apachelogs with analytics
  • Add Radar chart
  • Add choropleth map plot type (maybe?)
  • Youtube embeds rc.Video(url: str, label: str)
  • File attachments (downloadable dataset from page)
  • Switch logger to logru

⚡ Example

import report_creator as rc

with rc.ReportCreator(
    title="My Report",
    description="My Report Description",
    footer="My Report Footer",
) as report:
    view = rc.Block(
        rc.Text(
            """It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of light, it was the season of darkness, it was the spring of hope, it was the winter of despair.""",
            label="Charles Dickens, A Tale of Two Cities",
        ),
        rc.Group(
            rc.Metric(
                heading="Answer to Life, The Universe, and Everything",
                value="42",
            ),
            rc.Metric(
                heading="Author",
                value="Douglas Adams",
            ),
        ),
        rc.Bar(
            px.data.medals_long(),
            x="nation",
            y="count",
            dimension="medal",
            label="Bar Chart - Olympic Medals",
        ),
        rc.Scatter(
            px.data.iris(),
            x="sepal_width",
            y="sepal_length",
            dimension="species",
            marginal="histogram",
            label="Scatter Plot - Iris",
        ),
    )

    report.save(view, "report.html")

🤗 Development

conda create --name rc python=3.12
conda activate rc
make setup

# recommended for code hygiene
make format

# install as a local package:
python3 -m pip install -e .

# see dependency tree:
pipdeptree --exclude pip,pipdeptree,setuptools,wheel,twine

# build examples:
make examples

# build a specific example:
make examples EXAMPLES=examples/myreport.py

# run tests
make tests

# build docs
make docs

# release new version
make release

@ show list of make targets
make targets

rc.Widget() of a Plotly Figure


Tabbed Plots


HTML SVG Circles of Report Creator Colors


Tab Group of Data Tables

2002 European Population
country continent year lifeExp pop gdpPercap iso_alpha iso_num
Albania Europe 2002 75.65 3508512 4604.21 ALB 8
Austria Europe 2002 78.98 8148312 32417.61 AUT 40
Belgium Europe 2002 78.32 10311970 30485.88 BEL 56
Bosnia and Herzegovina Europe 2002 74.09 4165416 6018.98 BIH 70
Bulgaria Europe 2002 72.14 7661799 7696.78 BGR 100
Croatia Europe 2002 74.88 4481020 11628.39 HRV 191
Czech Republic Europe 2002 75.51 10256295 17596.21 CZE 203
Denmark Europe 2002 77.18 5374693 32166.50 DNK 208
Finland Europe 2002 78.37 5193039 28204.59 FIN 246
France Europe 2002 79.59 59925035 28926.03 FRA 250
Germany Europe 2002 78.67 82350671 30035.80 DEU 276
Greece Europe 2002 78.26 10603863 22514.25 GRC 300
Hungary Europe 2002 72.59 10083313 14843.94 HUN 348
Iceland Europe 2002 80.50 288030 31163.20 ISL 352
Ireland Europe 2002 77.78 3879155 34077.05 IRL 372
Italy Europe 2002 80.24 57926999 27968.10 ITA 380
Montenegro Europe 2002 73.98 720230 6557.19 MNE 499
Netherlands Europe 2002 78.53 16122830 33724.76 NLD 528
Norway Europe 2002 79.05 4535591 44683.98 NOR 578
Poland Europe 2002 74.67 38625976 12002.24 POL 616
Portugal Europe 2002 77.29 10433867 19970.91 PRT 620
Romania Europe 2002 71.32 22404337 7885.36 ROU 642
Serbia Europe 2002 73.21 10111559 7236.08 SRB 688
Slovak Republic Europe 2002 73.80 5410052 13638.78 SVK 703
Slovenia Europe 2002 76.66 2011497 20660.02 SVN 705
Spain Europe 2002 79.78 40152517 24835.47 ESP 724
Sweden Europe 2002 80.04 8954175 29341.63 SWE 752
Switzerland Europe 2002 80.62 7361757 34480.96 CHE 756
Turkey Europe 2002 70.84 67308928 6508.09 TUR 792
United Kingdom Europe 2002 78.47 59912431 29479.00 GBR 826

Iris Petals
sepal_length sepal_width petal_length petal_width species species_id
5.10 3.50 1.40 0.20 setosa 1
4.90 3.00 1.40 0.20 setosa 1
4.70 3.20 1.30 0.20 setosa 1
4.60 3.10 1.50 0.20 setosa 1
5.00 3.60 1.40 0.20 setosa 1
5.40 3.90 1.70 0.40 setosa 1
4.60 3.40 1.40 0.30 setosa 1
5.00 3.40 1.50 0.20 setosa 1
4.40 2.90 1.40 0.20 setosa 1
4.90 3.10 1.50 0.10 setosa 1
5.40 3.70 1.50 0.20 setosa 1
4.80 3.40 1.60 0.20 setosa 1
4.80 3.00 1.40 0.10 setosa 1
4.30 3.00 1.10 0.10 setosa 1
5.80 4.00 1.20 0.20 setosa 1
5.70 4.40 1.50 0.40 setosa 1
5.40 3.90 1.30 0.40 setosa 1
5.10 3.50 1.40 0.30 setosa 1
5.70 3.80 1.70 0.30 setosa 1
5.10 3.80 1.50 0.30 setosa 1
5.40 3.40 1.70 0.20 setosa 1
5.10 3.70 1.50 0.40 setosa 1
4.60 3.60 1.00 0.20 setosa 1
5.10 3.30 1.70 0.50 setosa 1
4.80 3.40 1.90 0.20 setosa 1
5.00 3.00 1.60 0.20 setosa 1
5.00 3.40 1.60 0.40 setosa 1
5.20 3.50 1.50 0.20 setosa 1
5.20 3.40 1.40 0.20 setosa 1
4.70 3.20 1.60 0.20 setosa 1
4.80 3.10 1.60 0.20 setosa 1
5.40 3.40 1.50 0.40 setosa 1
5.20 4.10 1.50 0.10 setosa 1
5.50 4.20 1.40 0.20 setosa 1
4.90 3.10 1.50 0.10 setosa 1
5.00 3.20 1.20 0.20 setosa 1
5.50 3.50 1.30 0.20 setosa 1
4.90 3.10 1.50 0.10 setosa 1
4.40 3.00 1.30 0.20 setosa 1
5.10 3.40 1.50 0.20 setosa 1
5.00 3.50 1.30 0.30 setosa 1
4.50 2.30 1.30 0.30 setosa 1
4.40 3.20 1.30 0.20 setosa 1
5.00 3.50 1.60 0.60 setosa 1
5.10 3.80 1.90 0.40 setosa 1
4.80 3.00 1.40 0.30 setosa 1
5.10 3.80 1.60 0.20 setosa 1
4.60 3.20 1.40 0.20 setosa 1
5.30 3.70 1.50 0.20 setosa 1
5.00 3.30 1.40 0.20 setosa 1
7.00 3.20 4.70 1.40 versicolor 2
6.40 3.20 4.50 1.50 versicolor 2
6.90 3.10 4.90 1.50 versicolor 2
5.50 2.30 4.00 1.30 versicolor 2
6.50 2.80 4.60 1.50 versicolor 2
5.70 2.80 4.50 1.30 versicolor 2
6.30 3.30 4.70 1.60 versicolor 2
4.90 2.40 3.30 1.00 versicolor 2
6.60 2.90 4.60 1.30 versicolor 2
5.20 2.70 3.90 1.40 versicolor 2
5.00 2.00 3.50 1.00 versicolor 2
5.90 3.00 4.20 1.50 versicolor 2
6.00 2.20 4.00 1.00 versicolor 2
6.10 2.90 4.70 1.40 versicolor 2
5.60 2.90 3.60 1.30 versicolor 2
6.70 3.10 4.40 1.40 versicolor 2
5.60 3.00 4.50 1.50 versicolor 2
5.80 2.70 4.10 1.00 versicolor 2
6.20 2.20 4.50 1.50 versicolor 2
5.60 2.50 3.90 1.10 versicolor 2
5.90 3.20 4.80 1.80 versicolor 2
6.10 2.80 4.00 1.30 versicolor 2
6.30 2.50 4.90 1.50 versicolor 2
6.10 2.80 4.70 1.20 versicolor 2
6.40 2.90 4.30 1.30 versicolor 2
6.60 3.00 4.40 1.40 versicolor 2
6.80 2.80 4.80 1.40 versicolor 2
6.70 3.00 5.00 1.70 versicolor 2
6.00 2.90 4.50 1.50 versicolor 2
5.70 2.60 3.50 1.00 versicolor 2
5.50 2.40 3.80 1.10 versicolor 2
5.50 2.40 3.70 1.00 versicolor 2
5.80 2.70 3.90 1.20 versicolor 2
6.00 2.70 5.10 1.60 versicolor 2
5.40 3.00 4.50 1.50 versicolor 2
6.00 3.40 4.50 1.60 versicolor 2
6.70 3.10 4.70 1.50 versicolor 2
6.30 2.30 4.40 1.30 versicolor 2
5.60 3.00 4.10 1.30 versicolor 2
5.50 2.50 4.00 1.30 versicolor 2
5.50 2.60 4.40 1.20 versicolor 2
6.10 3.00 4.60 1.40 versicolor 2
5.80 2.60 4.00 1.20 versicolor 2
5.00 2.30 3.30 1.00 versicolor 2
5.60 2.70 4.20 1.30 versicolor 2
5.70 3.00 4.20 1.20 versicolor 2
5.70 2.90 4.20 1.30 versicolor 2
6.20 2.90 4.30 1.30 versicolor 2
5.10 2.50 3.00 1.10 versicolor 2
5.70 2.80 4.10 1.30 versicolor 2
6.30 3.30 6.00 2.50 virginica 3
5.80 2.70 5.10 1.90 virginica 3
7.10 3.00 5.90 2.10 virginica 3
6.30 2.90 5.60 1.80 virginica 3
6.50 3.00 5.80 2.20 virginica 3
7.60 3.00 6.60 2.10 virginica 3
4.90 2.50 4.50 1.70 virginica 3
7.30 2.90 6.30 1.80 virginica 3
6.70 2.50 5.80 1.80 virginica 3
7.20 3.60 6.10 2.50 virginica 3
6.50 3.20 5.10 2.00 virginica 3
6.40 2.70 5.30 1.90 virginica 3
6.80 3.00 5.50 2.10 virginica 3
5.70 2.50 5.00 2.00 virginica 3
5.80 2.80 5.10 2.40 virginica 3
6.40 3.20 5.30 2.30 virginica 3
6.50 3.00 5.50 1.80 virginica 3
7.70 3.80 6.70 2.20 virginica 3
7.70 2.60 6.90 2.30 virginica 3
6.00 2.20 5.00 1.50 virginica 3
6.90 3.20 5.70 2.30 virginica 3
5.60 2.80 4.90 2.00 virginica 3
7.70 2.80 6.70 2.00 virginica 3
6.30 2.70 4.90 1.80 virginica 3
6.70 3.30 5.70 2.10 virginica 3
7.20 3.20 6.00 1.80 virginica 3
6.20 2.80 4.80 1.80 virginica 3
6.10 3.00 4.90 1.80 virginica 3
6.40 2.80 5.60 2.10 virginica 3
7.20 3.00 5.80 1.60 virginica 3
7.40 2.80 6.10 1.90 virginica 3
7.90 3.80 6.40 2.00 virginica 3
6.40 2.80 5.60 2.20 virginica 3
6.30 2.80 5.10 1.50 virginica 3
6.10 2.60 5.60 1.40 virginica 3
7.70 3.00 6.10 2.30 virginica 3
6.30 3.40 5.60 2.40 virginica 3
6.40 3.10 5.50 1.80 virginica 3
6.00 3.00 4.80 1.80 virginica 3
6.90 3.10 5.40 2.10 virginica 3
6.70 3.10 5.60 2.40 virginica 3
6.90 3.10 5.10 2.30 virginica 3
5.80 2.70 5.10 1.90 virginica 3
6.80 3.20 5.90 2.30 virginica 3
6.70 3.30 5.70 2.50 virginica 3
6.70 3.00 5.20 2.30 virginica 3
6.30 2.50 5.00 1.90 virginica 3
6.50 3.00 5.20 2.00 virginica 3
6.20 3.40 5.40 2.30 virginica 3
5.90 3.00 5.10 1.80 virginica 3

2013 Montreal Election
district Coderre Bergeron Joly total winner result district_id
101-Bois-de-Liesse 2481 1829 3024 7334 Joly plurality 101
102-Cap-Saint-Jacques 2525 1163 2675 6363 Joly plurality 102
11-Sault-au-Récollet 3348 2770 2532 8650 Coderre plurality 11
111-Mile-End 1734 4782 2514 9030 Bergeron majority 111
112-DeLorimier 1770 5933 3044 10747 Bergeron majority 112
113-Jeanne-Mance 1455 3599 2316 7370 Bergeron plurality 113
12-Saint-Sulpice 3252 2521 2543 8316 Coderre plurality 12
121-La Pointe-aux-Prairies 5456 1760 3330 10546 Coderre majority 121
122-Pointe-aux-Trembles 4734 1879 2852 9465 Coderre majority 122
123-Rivière-des-Prairies 5737 958 1656 8351 Coderre majority 123
13-Ahuntsic 2979 3430 2873 9282 Bergeron plurality 13
131-Saint-Édouard 1827 6408 2815 11050 Bergeron majority 131
132-Étienne-Desmarteau 2331 5748 2788 10867 Bergeron majority 132
133-Vieux-Rosemont 2670 4962 3234 10866 Bergeron plurality 133
134-Marie-Victorin 3673 3155 2431 9259 Coderre plurality 134
14-Bordeaux-Cartierville 3612 1554 2081 7247 Coderre plurality 14
141-Côte-de-Liesse 4308 1320 3959 9587 Coderre plurality 141
142-Norman-McLaren 4104 1459 2822 8385 Coderre plurality 142
151-Saint-Léonard-Est 3931 882 1641 6454 Coderre majority 151
152-Saint-Léonard-Ouest 5387 1184 1908 8479 Coderre majority 152
161-Saint-HenriPetite-BourgognePointe-Saint-Charles 2432 3368 3578 9378 Joly plurality 161
162-Saint-PaulÉmard 2566 2092 2438 7096 Coderre plurality 162
171-ChamplainL'Île-des-Soeurs 3347 2562 3291 9200 Coderre plurality 171
172-Desmarchais-Crawford 2476 2631 2849 7956 Joly plurality 172
181-Peter-McGill 1451 754 1894 4099 Joly plurality 181
182-Saint-Jacques 1906 2169 2282 6357 Joly plurality 182
183-Sainte-Marie 1347 2827 2271 6445 Bergeron plurality 183
191-Saint-Michel 3668 984 1220 5872 Coderre majority 191
192-François-Perrault 2878 2666 2039 7583 Coderre plurality 192
193-Villeray 2201 5819 2782 10802 Bergeron majority 193
194-Parc-Extension 2420 1793 1402 5615 Coderre plurality 194
21-Ouest 2184 691 1076 3951 Coderre majority 21
22-Est 1589 708 1172 3469 Coderre plurality 22
23-Centre 2526 851 1286 4663 Coderre majority 23
31-Darlington 1873 1182 1232 4287 Coderre plurality 31
32-Côte-des-Neiges 1644 1950 1578 5172 Bergeron plurality 32
33-Snowdon 1548 1503 1636 4687 Joly plurality 33
34-Notre-Dame-de-Grâce 1773 2653 3262 7688 Joly plurality 34
35-Loyola 2040 1437 2648 6125 Joly plurality 35
41-du Canal 1165 832 1266 3263 Joly plurality 41
42-J.-Émery-Provost 1193 653 1157 3003 Coderre plurality 42
43-Fort-Rolland 1325 1205 1908 4438 Joly plurality 43
51-Sault-Saint-Louis 4201 1642 3717 9560 Coderre plurality 51
52-Cecil-P.-Newman 3536 1330 2943 7809 Coderre plurality 52
61-Pierre-Foretier 631 258 998 1887 Joly majority 61
62-Denis-Benjamin-Viger 595 226 1068 1889 Joly majority 62
63-Jacques-Bizard 518 224 690 1432 Joly plurality 63
64-Sainte-Geneviève 332 131 326 789 Coderre plurality 64
71-Tétreaultville 3694 2589 3454 9737 Coderre plurality 71
72-MaisonneuveLongue-Pointe 2746 3250 3139 9135 Bergeron plurality 72
73-Hochelaga 1546 3679 2675 7900 Bergeron plurality 73
74-Louis-Riel 3509 2178 2338 8025 Coderre plurality 74
81-Marie-Clarac 6591 1085 1435 9111 Coderre majority 81
82-Ovide-Clermont 6229 780 1051 8060 Coderre majority 82
91-Claude-Ryan 996 643 423 2062 Coderre plurality 91
92-Joseph-Beaubien 540 833 592 1965 Bergeron plurality 92
93-Robert-Bourassa 446 465 419 1330 Bergeron plurality 93
94-Jeanne-Sauvé 491 698 489 1678 Bergeron plurality 94

Olympic Speed Skating
nation medal count
South Korea gold 24
China gold 10
Canada gold 9
South Korea silver 13
China silver 15
Canada silver 12
South Korea bronze 11
China bronze 8
Canada bronze 12

Wind Intensity
direction strength frequency
N 0-1 0.50
NNE 0-1 0.60
NE 0-1 0.50
ENE 0-1 0.40
E 0-1 0.40
ESE 0-1 0.30
SE 0-1 0.40
SSE 0-1 0.40
S 0-1 0.60
SSW 0-1 0.40
SW 0-1 0.50
WSW 0-1 0.60
W 0-1 0.60
WNW 0-1 0.50
NW 0-1 0.40
NNW 0-1 0.10
N 1-2 1.60
NNE 1-2 1.80
NE 1-2 1.50
ENE 1-2 1.60
E 1-2 1.60
ESE 1-2 1.20
SE 1-2 1.50
SSE 1-2 1.70
S 1-2 2.20
SSW 1-2 2.00
SW 1-2 2.30
WSW 1-2 2.40
W 1-2 2.30
WNW 1-2 2.60
NW 1-2 2.30
NNW 1-2 0.80
N 2-3 0.90
NNE 2-3 1.30
NE 2-3 1.60
ENE 2-3 0.90
E 2-3 1.00
ESE 2-3 0.60
SE 2-3 0.60
SSE 2-3 0.90
S 2-3 1.40
SSW 2-3 1.70
SW 2-3 1.90
WSW 2-3 2.20
W 2-3 1.80
WNW 2-3 1.70
NW 2-3 1.80
NNW 2-3 0.80
N 3-4 0.90
NNE 3-4 0.80
NE 3-4 1.20
ENE 3-4 1.00
E 3-4 0.80
ESE 3-4 0.40
SE 3-4 0.50
SSE 3-4 0.50
S 3-4 0.80
SSW 3-4 0.90
SW 3-4 1.30
WSW 3-4 1.10
W 3-4 1.20
WNW 3-4 1.20
NW 3-4 1.30
NNW 3-4 1.00
N 4-4 0.40
NNE 4-4 0.50
NE 4-4 1.20
ENE 4-4 0.50
E 4-4 0.40
ESE 4-4 0.20
SE 4-4 0.40
SSE 4-4 0.40
S 4-4 0.70
SSW 4-4 0.60
SW 4-4 0.70
WSW 4-4 0.80
W 4-4 0.90
WNW 4-4 1.00
NW 4-4 1.00
NNW 4-4 0.70
N 4-5 0.30
NNE 4-5 0.30
NE 4-5 0.60
ENE 4-5 0.20
E 4-5 0.10
ESE 4-5 0.10
SE 4-5 0.05
SSE 4-5 0.10
S 4-5 0.10
SSW 4-5 0.20
SW 4-5 0.30
WSW 4-5 0.40
W 4-5 0.90
WNW 4-5 0.90
NW 4-5 0.90
NNW 4-5 0.30
N 5-6 0.20
NNE 5-6 0.10
NE 5-6 0.10
ENE 5-6 0.10
E 5-6 0.10
ESE 5-6 0.10
SE 5-6 0.05
SSE 5-6 0.05
S 5-6 0.10
SSW 5-6 0.05
SW 5-6 0.20
WSW 5-6 0.20
W 5-6 0.40
WNW 5-6 0.70
NW 5-6 0.70
NNW 5-6 0.40
N 6+ 0.10
NNE 6+ 0.10
NE 6+ 0.10
ENE 6+ 0.10
E 6+ 0.10
ESE 6+ 0.05
SE 6+ 0.05
SSE 6+ 0.05
S 6+ 0.05
SSW 6+ 0.10
SW 6+ 0.10
WSW 6+ 0.10
W 6+ 0.90
WNW 6+ 2.20
NW 6+ 1.50
NNW 6+ 0.20


Tab Group of Diagrams
Example AI Mind Map Diagram
mindmap root((Artificial Intelligence)) subtopic1(Machine Learning) subtopic1a(Supervised Learning) subtopic1a1(Linear Regression) subtopic1a2(Decision Trees) subtopic1a3(SVM) subtopic1b(Unsupervised Learning) subtopic1b1(Clustering) subtopic1b2(Dimensionality Reduction) subtopic1c(Reinforcement Learning) subtopic1c1(Q-Learning) subtopic1c2(Deep Q-Networks) subtopic1c3(Policy Gradient) subtopic2(Neural Networks) subtopic2a(Feedforward Networks) subtopic2a1(Activation Functions) subtopic2a2(Backpropagation) subtopic2b(Recurrent Networks) subtopic2b1(LSTM) subtopic2b2(GRU) subtopic2c(Convolutional Networks) subtopic2c1(Image Classification) subtopic2c2(Object Detection) subtopic3(Natural Language Processing) subtopic3a(Tokenization) subtopic3b(Word Embeddings) subtopic3b1(Word2Vec) subtopic3b2(GloVe) subtopic3c(Transformers) subtopic3c1(BERT) subtopic3c2(GPT) subtopic4(Computer Vision) subtopic4a(Image Recognition) subtopic4b(Semantic Segmentation) subtopic4c(Object Detection) subtopic5(Generative Models) subtopic5a(GANs) subtopic5a1(Discriminator) subtopic5a2(Generator) subtopic5b(VAEs) subtopic5b1(Latent Space) subtopic5b2(Reconstruction) subtopic6(Ethics in AI) subtopic6a(Bias) subtopic6b(Privacy) subtopic6c(Transparency) subtopic6d(Accountability) subtopic6e(Fairness)
Example Git Graph
graph LR A[Square Rect] -- Link text --> B((Circle)) A --> C(Round Rect) B --> D{Rhombus} C --> D
Unformatted
___________________________________
< This is an unformatted component >
 -----------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||