All the things
import logging
import textwrap
import pandas as pd
import plotly.express as px
import report_creator as rc
logging.basicConfig(level=logging.DEBUG)
if __name__ == "__main__":
# set up of example text, plots and dataframes
df1 = pd.DataFrame(
{
"Name": ["Alice", "Bob", "Eva"],
"Age": [25, 30, 35],
"City": ["New York", "Los Angeles", "Chicago"],
"Salary": [70000, 85000, 95000],
}
)
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("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](https://github.com/darenr/report_creator) (v{rc.__version__}), `pip install report-creator` :cat_face:",
flat_look=True,
) as report:
view = rc.Block(
rc.Collapse(
rc.Code(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.Group(
rc.Metric(
heading="System Processor Load",
value=72.5,
unit="%",
label="Current CPU utilization across all cores",
gauge={"min_value": 0, "max_value": 100, "color": "red"},
),
rc.Metric(
heading="Memory Usage",
value=4.2,
unit="GB",
label="Available physical memory",
gauge={"min_value": 0, "max_value": 16, "color": "green"},
),
),
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/example-public-logs.csv"),
condition="status == 200",
date="time",
color="green",
frequency="B",
),
rc.EventMetric(
pd.read_csv("examples/example-public-logs.csv"),
condition="status == 404",
date="time",
frequency="B",
heading="Not Found (404) Requests",
),
label="Log File Metrics",
),
rc.Group(
rc.Timeline(
pd.DataFrame(
{
"task": ["Design", "Development", "Testing", "Deploy"],
"start": pd.to_datetime(
["2024-01-01", "2024-01-15", "2024-02-01", "2024-02-15"]
),
"finish": pd.to_datetime(
["2024-01-14", "2024-01-31", "2024-02-14", "2024-02-28"]
),
"team": ["Engineering", "Engineering", "QA", "DevOps"],
}
),
task="task",
start="start",
finish="finish",
dimension="team",
label="Q1 Project Plan",
),
label="Timeline",
),
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.Separator(),
rc.Text(
example_text,
label="Pale Blue Dot (1994) by Carl Sagan",
sublabel="For all those that have been inspired by Carl Sagan",
),
rc.Separator(),
rc.Group(
rc.Java(
textwrap.dedent("""
public class HelloWorld {
public static void main(String[] args) {
// Print "Hello, World!" to the console
System.out.println("Hello, World!");
}
}
"""),
label="Java",
),
rc.Prolog(
textwrap.dedent("""
% Define a rule to display the message
hello_world :-
write('Hello, World!'), nl.
% To run, consult the file and call the rule:
% ?- hello_world.
"""),
label="Prolog",
),
),
rc.Group(
rc.Sql(
textwrap.dedent("""
-- Example SQL
SELECT
ename,
DECODE(deptno,
10, 'Accounting',
20, 'Research',
30, 'Sales',
40, 'Operations',
) AS department_name
FROM
scott.emp;
"""),
label="SQL",
),
rc.Json(
textwrap.dedent("""
{
"name": "Alice",
"age": 25,
"city": "Wonderland",
"hobbies": ["reading", "adventures", "tea parties", "cats"]
}
"""),
label="JSON",
),
),
rc.Separator(),
rc.Group(
rc.Info(
"This is an **info** callout! You can use standard *Markdown* here too.",
label="Info Callout",
),
rc.Warning(
"This is a **warning** callout! Beware of dragons and failing pipelines.",
label="Warning Callout",
),
rc.Error(
"This is an **error** callout! Something went terribly wrong.",
label="Error Callout",
),
),
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="2002 Population of European continent",
),
rc.Pie(
px.data.gapminder().query("year == 2002").query("continent == 'Americas'"),
values="pop",
names="country",
label="2002 Population of American continent",
),
),
rc.Group(
rc.Histogram(
px.data.tips(),
x="total_bill",
dimension="sex",
label="Total Bill by Sex",
),
rc.Box(
px.data.tips(),
y="total_bill",
dimension="day",
label="Total Bill by Day of Week",
),
),
rc.Select(
blocks=[
rc.Bar(
px.data.medals_long(),
x="nation",
y="count",
dimension="medal",
label="Olympic Medals",
),
rc.Scatter(
df=px.data.iris(),
x="sepal_width",
y="sepal_length",
dimension="species",
marginal="histogram",
label="Iris Scatter Plot with Marginal Histograms",
),
],
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
""",
pan_and_zoom=False,
label="Example Git Graph",
),
],
label="Tab Group of Diagrams",
),
rc.Separator(),
rc.Radar(
df=pd.DataFrame(
{
"Llama3.1": {
"MMLU (Accuracy)": 0.72,
"TruthfulQA (Accuracy)": 0.65,
"Winogrande (Accuracy)": 0.85,
"ARC-Challenge (Accuracy)": 0.48,
"ARC-Easy (Accuracy)": 0.78,
"CommonsenseQA (Accuracy)": 0.68,
"BoolQ (Accuracy)": 0.80,
"CB (Accuracy)": 0.88,
"COPA (Accuracy)": 0.95,
"WiC (Accuracy)": 0.75,
"ReCoRD (F1)": 0.72,
"RACE-h (Accuracy)": 0.60,
"RACE-m (Accuracy)": 0.65,
},
"Llama3.2": { # Example of a second model
"MMLU (Accuracy)": 0.75,
"TruthfulQA (Accuracy)": 0.68,
"Winogrande (Accuracy)": 0.88,
"ARC-Challenge (Accuracy)": 0.52,
"ARC-Easy (Accuracy)": 0.81,
"CommonsenseQA (Accuracy)": 0.71,
"BoolQ (Accuracy)": 0.83,
"CB (Accuracy)": 0.90,
"COPA (Accuracy)": 0.97,
"WiC (Accuracy)": 0.78,
"ReCoRD (F1)": 0.75,
"RACE-h (Accuracy)": 0.63,
"RACE-m (Accuracy)": 0.68,
},
}
).T,
lock_minimum_to_zero=True,
filled=False,
label="Radar Chart of Model Performance",
),
rc.Unformatted(
r"""
___________________________________
< This is an unformatted component >
-----------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
""",
label="Unformatted",
),
rc.Group(
rc.Image(
"https://placehold.co/600x400/000000/FF5733.png",
label="Placeholder Image 1",
link_to="https://placehold.co",
convert_to_base64=True,
),
rc.Image(
"https://placehold.co/600x400/000000/33FF57.png",
label="Placeholder Image 2",
convert_to_base64=True,
),
rc.Image(
"https://placehold.co/600x400/000000/3357FF.png",
label="Placeholder Image 3",
convert_to_base64=True,
),
),
rc.Separator(),
rc.Gallery(
[
f"https://placehold.co/600x400/{rc.report_creator_colors[i % len(rc.report_creator_colors)][1:]}/fff.png"
for i in range(1, 7)
],
labels=[f"Random Image {i}" for i in range(1, 7)],
label="Gallery Component",
convert_to_base64=True,
),
)
report.save(view, "examples/kitchen_sink.html", prettify_html=False)
Hitchhiker's Guide to the Galaxy:
Gross profit margin:
A commonly tracked metric by finance departments that can be found on an income statement.
Accuracy:
Number of correct predictions by Total number of predictions
Recurring revenue:
Recurring revenue is the portion of a company's revenue that is predictable and stable.
Capacity utilization:
A popular productivity metric that measures the ratio of actual output to potential output.
Asset turnover ratio:
Asset turnover ratio is a financial metric that shows how efficiently a company generates revenue from its assets.
System Processor Load:
Current CPU utilization across all cores
Memory Usage:
Available physical memory
Alice:
Bob:
Eva:
status == 200:
Not Found (404) Requests:
Love all, trust a few, do wrong to none.
Moderate lamentation is the right of the dead, excessive grief the enemy to the living.
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.
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.
For all those that have been inspired by Carl Sagan
... Look again at that dot. That's here. That's home. That's us. On it everyone you love, everyone you know, everyone you ever heard of, every human being who ever was, lived out their lives. The aggregate of our joy and suffering, thousands of confident religions, ideologies, and economic doctrines, every hunter and forager, every hero and coward, every creator and destroyer of civilization, every king and peasant, every young couple in love, every mother and father, hopeful child, inventor and explorer, every teacher of morals, every corrupt politician, every "superstar," every "supreme leader," every saint and sinner in the history of our species lived there - on a mote of dust suspended in a sunbeam.
The Earth is a very small stage in a vast cosmic arena. Think of the rivers of blood spilled by all those generals and emperors, so that, in glory and triumph, they could become the momentary masters of a fraction of a dot. Think of the endless cruelties visited by the inhabitants of one corner of this pixel on the scarcely distinguishable inhabitants of some other corner, how frequent their misunderstandings, how eager they are to kill one another, how fervent their hatreds. Our posturings, our imagined self-importance, the delusion that we have some privileged position in the Universe, are challenged by this point of pale light.
Our planet is a lonely speck in the great enveloping cosmic dark. In our obscurity, in all this vastness, there is no hint that help will come from elsewhere to save us from ourselves.
The Earth is the only world known so far to harbor life. There is nowhere else, at least in the near future, to which our species could migrate. Visit, yes. Settle, not yet. Like it or not, for the moment the Earth is where we make our stand.
It has been said that astronomy is a humbling and character building experience. There is perhaps no better demonstration of the folly of human conceits than this distant image of our tiny world. To me, it underscores our responsibility to deal more kindly with one another, and to preserve and cherish the pale blue dot, the only home we've ever known.
public class HelloWorld {
public static void main(String[] args) {
// Print "Hello, World!" to the console
System.out.println("Hello, World!");
}
}
% Define a rule to display the message
hello_world :-
write('Hello, World!'), nl.
% To run, consult the file and call the rule:
% ?- hello_world.
-- Example SQL
SELECT
ename,
DECODE(deptno,
10, 'Accounting',
20, 'Research',
30, 'Sales',
40, 'Operations',
) AS department_name
FROM
scott.emp;
{
"name": "Alice",
"age": 25,
"city": "Wonderland",
"hobbies": [
"reading",
"adventures",
"tea parties",
"cats"
]
}
Note
This is an info callout! You can use standard Markdown here too.
Warning
This is a warning callout! Beware of dragons and failing pipelines.
Error
This is an error callout! Something went terribly wrong.
Build polished, self-contained HTML reports from Python in minutes.
Report Creator helps you turn DataFrames, charts, markdown, metrics, and diagrams into a single professional HTML file. No web app or frontend stack required.
examples/Use Report Creator when you want to:
This project is not trying to replace custom web apps. It gives you a fast, structured path to clean reporting output with minimal code.
python -m pip install report_creator -U
import plotly.express as px
import report_creator as rc
with rc.ReportCreator(
title="My First Report",
description="A quick report generated from Python",
footer="Built with report_creator",
) as report:
view = rc.Block(
rc.Markdown("## Hello report"),
rc.Group(
rc.Metric(heading="Rows", value=len(px.data.iris())),
rc.Metric(heading="Source", value="Plotly datasets"),
),
rc.Scatter(
px.data.iris(),
x="sepal_width",
y="sepal_length",
dimension="species",
label="Iris overview",
),
)
report.save(view, "report.html")
python my_report.py
open report.html # macOS
# xdg-open report.html # Linux
PYTHONPATH=. python examples/kitchen_sink.py
See examples/README.md for a guided map of all example scripts.
view = rc.Block(
rc.Heading("Executive Summary", level=2),
rc.Group(
rc.Metric(heading="Revenue", value="$1.2M"),
rc.Metric(heading="Growth", value="+14%"),
rc.Metric(heading="Churn", value="2.1%"),
),
rc.Separator(),
rc.Line(df, x="date", y="revenue", label="Revenue Trend"),
)
view = rc.Select(
blocks=[
rc.Bar(df, x="team", y="score", label="Chart"),
rc.DataTable(df, label="Data", index=False),
],
label="Performance",
)
view = rc.Deck(
rc.Slide(rc.Block(rc.Heading("QBR"), rc.Markdown("### Highlights")), theme="modern:#3b82f6"),
rc.Slide(rc.Block(rc.Widget(fig), rc.Markdown("### Forecast")), theme="circles:#0ea5e9"),
)
rc.Block() (vertical) and rc.Group() (horizontal)rc.DataTable() and rc.Select() tabsexamples/*.htmlmake examples
PYTHONPATH=. python examples/workflow_example.py
For details, see examples/README.md.
conda create -n rc -c conda-forge python=3.13
conda activate rc
make setup
# recommended for code hygiene
make format
# run tests
make tests
# build docs
make doc
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
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)pan (mouse drag) and zoom (shift + mouse wheel) (reset)graph LR
A[Square Rect] -- Link text --> B((Circle))
A --> C(Round Rect)
B --> D{Rhombus}
C --> D___________________________________
< This is an unformatted component >
-----------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||