In-memory Graph Database and Knowledge Graph with Natural Language Interface, compatible with Pandas

Overview

CogniPy

CogniPy for Pandas - In-memory Graph Database and Knowledge Graph with Natural Language Interface

Whats in the box

Reasoning, exploration of RDF/OWL, FluentEditor CNL files, with OWL/RL Reasoner (Jena) as well as SPARQL Graph queries (Jena) and visualization.

What you can do with this:

  1. Write your graph/ontology in Controlled Natural Language or import it from RDF/OWL
  2. Add reasoning rules/T-Box in Controlled Natural Language
  3. Import data using Pandas or scrap them from the Internet
  4. Draw the resulting, materialized graph
  5. Use SPARQL to execute graph query
  6. Use output Dataframe for further processing with Pandas

Getting started

Installation

Prerequisites:

  • If you are on Mac or Linux You MUST have mono installed on your system.
  • Graph drawing based on pydot that is dependent on GraphViz - you should try to download and install it manually. Or just conda install pydot graphviz
  • Tested with Anaconda
  • Tested on MacOS, Winows and Linux (Ubuntu)

Install cognipy on your system using :

pip install cognipy

Hello world program

In Jupyter you write:

from cognipy.ontology import Ontology #the ontology processing class
%%writefile hello.encnl
World says Hello.
Hello is a word.
onto = Ontology("cnl/file","hello.encnl")
print(onto.select_instances_of("a thing that says a word")[["says","Instance"]])

Output (Pandas DataFrame):

says Instance
0 Hello World

Examples

Example Jupyter notebooks that use CogniPy in several scenarios can be found in the Examples section

Cognipy documentation

Compiled documentation is stored on github pages here: Cognipy Documentation

Related research papers

  1. Semantic rules representation in controlled natural language in FluentEditor
  2. Collaborative Editing of Ontologies Using Fluent Editor and Ontorion
  3. Semantic OLAP with FluentEditor and Ontorion Semantic Excel Toolchain
  4. Ontology-aided software engineering
  5. Ontology of the Design Pattern Language for Smart Cities Systems

How to cite CogniPy

We would be grateful if scientific publications resulting from projects that make use of CogniPy would include the following sentence in the acknowledgments section: "This work was conducted using the CogniPy package, which is an open-source project maintained by Cognitum Services S.A. https://www.cognitum.eu"

Cognitum

Contributors

Open Source Libraries this project is build on

  1. IKVM
  2. CommandLineParser
  3. Newtonsoft.JSon
  4. ELK - ELK is an ontology reasoner that aims to support the OWL 2 EL profile. See http://elk.semanticweb.org/ for further information.
  5. HermiT - HermiT is a conformant OWL 2 DL reasoner that uses the direct semantics. It supports all OWL2 DL constructs and the datatypes required by the OWL 2 specification.
  6. Apache Jena - Jena is a Java framework for building semantic web applications. It provides tools and Java libraries to help you to develop semantic web and linked-data apps, tools and servers.
  7. OWLAPI

Building new version

nuget restore cognipy\CogniPy.sln
msbuild cognipy\CogniPy.sln /t:Rebuild /p:Configuration=Release /p:Platform="any cpu"
python setup.py bdist_wheel
python -m twine upload dist/* --verbose

FAQ

Why it is done this way?

The software emerged as an offspring of FluentEditor and therefore it has some common parts. One of them is the .net. We are planning to move these parts to java so whole stack will be more technology consistent. The convert_to_java branch already contains the project files converted automatically from .net to java. Anyway, manual crafting is now required to make it all work.

Comments
  • Problem with the disjointness assertion

    Problem with the disjointness assertion

    It seems there's an error with the disjointness operator in CogniPy.

    The following assertions result with an inconsistency detected in the ontology:

    Anything either 
      is a second-name,
      is a first-name or
      is a last-name
      or-something-else.
    
    First-Name-1 is a first-name.
    First-Name-1 is a last-name.
    

    While the following assertions does not:

    Anything either 
      is a first-name or
      is a last-name
      or-something-else.
    
    First-Name-1 is a first-name.
    First-Name-1 is a last-name.
    
    bug 
    opened by apohllo 5
  • Reasoner loading error under Ubuntu - BOM and CR/LF problem

    Reasoner loading error under Ubuntu - BOM and CR/LF problem

    I tried the examples in a cognipy installation under Ubuntu. At first it seemed that everything works as expected, but suddenly I started to receive the following error:

    Traceback (most recent call last):
      File "check_consistency.py", line 28, in <module>
        printReasoningInfo(onto)
      File "check_consistency.py", line 15, in printReasoningInfo
        info=onto.reasoningInfo()
      File "/usr/local/lib/python3.7/dist-packages/cognipy/ontology.py", line 299, in reasoningInfo
        self.super_concepts_of("a thing")
      File "/usr/local/lib/python3.7/dist-packages/cognipy/ontology.py", line 179, in super_concepts_of
        return cognipy_call(self._uid, "GetSuperConceptsOf", cnl, direct)
      File "/usr/local/lib/python3.7/dist-packages/cognipy/interop.py", line 71, in cognipy_call
        raise translate_exception(json.loads(js))
    Exception: [
    
      "InvalidOperationException",
      {
        "ClassName": "System.InvalidOperationException",
        "Message": "The reasoner is not initialized. You need to call Load... before calling this method.",
        "Data": null,
        "InnerException": null,
    
        "HelpURL": null,
    
        "StackTraceString": "  at CogniPy.CogniPySvr.get_reasoner () [0x00008] in <f8783c48f78341ba843524fd57b41eb3>:0 \n  at CogniPy.CogniPySvr.Materialize () [0x0001b] in <f8783c48f78341ba843524fd57b41eb3>:0 \n  at CogniPy.CogniPySvr.GetSuperConceptsOf (System.String cnlName, System.Boolean direct) [0x00000] in <f8783c48f78341ba843524fd57b41eb3>:0 \n  at (wrapper managed-to-native) System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&)\n  at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0006a] in <533173d24dae460899d2b10975534bb0>:0 ",
        "RemoteStackTraceString": null,
        "RemoteStackIndex": 0,
        "ExceptionMethod": null,
        "HResult": -2146233079,
        "Source": "CogniPyLib"
      }
    ]
    

    My python version is 3.7.12 and mono version is 6.12.0.122. I will submit a Dockerfile which will allow to reproduce the error.

    Update: example.tar.gz

    bug 
    opened by apohllo 2
  • Bump Newtonsoft.Json from 12.0.3 to 13.0.1 in /cognipy/CogniPyCLI

    Bump Newtonsoft.Json from 12.0.3 to 13.0.1 in /cognipy/CogniPyCLI

    Bumps Newtonsoft.Json from 12.0.3 to 13.0.1.

    Release notes

    Sourced from Newtonsoft.Json's releases.

    13.0.1

    • New feature - Add JsonSelectSettings with configuration for a regex timeout
    • Change - Remove portable assemblies from NuGet package
    • Change - JsonReader and JsonSerializer MaxDepth defaults to 64
    • Fix - Fixed throwing missing member error on ignored fields
    • Fix - Fixed various nullable annotations
    • Fix - Fixed annotations not being copied when tokens are cloned
    • Fix - Fixed naming strategy not being used when deserializing dictionary enum keys
    • Fix - Fixed serializing nullable struct dictionaries
    • Fix - Fixed JsonWriter.WriteToken to allow null with string token
    • Fix - Fixed missing error when deserializing JToken with a contract type mismatch
    • Fix - Fixed JTokenWriter when writing comment to an object
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Disjoint union inconsistency not being detected by reasoner

    Disjoint union inconsistency not being detected by reasoner

    Please refer to below ontology:

    Something is a human if-and-only-if-it-either is a child, is an old-man, is a middle-aged-man or is a young-man.
    Jan is a child.
    Jan is an old-man.
    

    After loading it, reasoner doesn't catch the inconsistency - the reasoningInfo() function returns no problems.

    bug 
    opened by kcieslinski 1
  • Misleading error message

    Misleading error message

    Providing path to non-existing encnl file the error is:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "venv/lib/python3.6/site-packages/cognipy/ontology.py", line 104, in __init__
        modalCheck, passParamsAsCnl, stop_on_error)
      File "venv/lib/python3.6/site-packages/cognipy/interop.py", line 71, in cognipy_call
        raise translate_exception(json.loads(js))
    Exception: [
    
      "IllegalArgumentException",
    
      {
    
        "ClassName": "java.lang.IllegalArgumentException",
    
        "Message": "URI is not absolute",
    
        "Data": null,
    
        "InnerException": null,
    
        "HelpURL": null,
    
        "StackTraceString": "  at CogniPy.CogniPySvr.Load (CogniPy.ReferenceManager+WhatToLoad whatToLoad, System.String contentToLoad, CogniPy.CNL.DL.Paragraph impliAst, System.Boolean throwOnException, System.Boolean loadAnns, System.Boolean materialize, System.Boolean modalChecker) [0x00057] in <f8783c48f78341ba843524fd57b41eb3>:0 \n  at CogniPy.CogniPySvr.LoadCnl (System.String filename, CogniPy.CNL.DL.Paragraph impliAst, System.Boolean throwOnException, System.Boolean loadAnns, System.Boolean materialize, System.Boolean modalChecker) [0x00000] in <f8783c48f78341ba843524fd57b41eb3>:0 \n  at CogniPy.CogniPySvr.LoadCnl (System.String filename, System.Boolean loadAnnotations, System.Boolean materialize, System.Boolean modalChecker, System.Boolean throwOnError) [0x00000] in <f8783c48f78341ba843524fd57b41eb3>:0 \n  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)\n  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in <8f2c484307284b51944a1a13a14c0266>:0 ",
    
        "RemoteStackTraceString": null,
    
        "RemoteStackIndex": 0,
    
        "ExceptionMethod": null,
    
        "HResult": -2146233088,
    
        "Source": "CogniPyLib",
    
        "$0": {
    
          "$0": {
    
            "type": "java.lang.IllegalArgumentException, IKVM.OpenJDK.Core, Version=8.1.5717.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58",
    
            "sig": null
    
          },
    
          "$1": {
    
            "$0": {
    
              "type": "java.lang.RuntimeException, IKVM.OpenJDK.Core, Version=8.1.5717.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58",
    
              "sig": null
    
            },
    
            "$1": {
    
              "$0": {
    
                "type": "java.lang.Exception, IKVM.OpenJDK.Core, Version=8.1.5717.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58",
    
                "sig": null
    
              },
    
              "$1": {
    
                "$0": {
    
                  "type": "java.lang.Throwable, IKVM.OpenJDK.Core, Version=8.1.5717.0, Culture=neutral, PublicKeyToken=13235d27fcbfff58",
    
                  "sig": null
    
                },
    
                "$1": "Ljava/lang/Throwable;",
    
                "$2": "Ljava/lang/String;",
    
                "$3": "[Ljava/lang/StackTraceElement;",
    
                "$4": "Ljava/util/List;",
    
                "$5": null,
    
                "$data": "FAFyASgAE2phdmEubGFuZy5UaHJvd2FibGXVxjUnOXe4ywMABEwABWNhdXNlARBMAA1kZXRhaWxNZXNzYWdlAQ1bAApzdGFja1RyYWNlARdMABRzdXBwcmVzc2VkRXhjZXB0aW9ucwIA"
    
              },
    
              "$data": "FAFyASAAE2phdmEubGFuZy5FeGNlcHRpb27Q/R8+GjscxAIAAAEA"
    
            },
    
            "$data": "FAFyAScAGmphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9unl8GRwo0g+UCAAABAA=="
    
          },
    
          "$data": "FAFyAS8AImphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb261iXPTfWaPvAIAAAEA"
    
        },
    
        "$2": "URI is not absolute",
    
        "$3": [],
    
        "$4": [],
    
        "$data": "CgUA"
    
      }
    
    ]
    

    To reproduce (on Ubuntu):

    onto = Ontology("cnl/file","nonexisting.encnl")
    
    bug 
    opened by djstrong 1
  • ValueError: To many values to unpack

    ValueError: To many values to unpack

    Both owls produces same issue: https://sites.google.com/site/ontoworks/ontologies/DSA_04092015.owl?attredirects=0&d=1 https://www.isibang.ac.in/~bisu/ontology/instOntology.owl

    image

    bug 
    opened by kuba3538 1
  • insert_cnl, delete_cnl methods output

    insert_cnl, delete_cnl methods output

    image

    Names of methods suggests that you can insert/delete any CNL yet if you insert/delete incorrect cnl like subsumption in attached pic error occures. Maybe output can be prettier?

    question 
    opened by jswiatkowski 1
  • Bump Newtonsoft.Json from 12.0.3 to 13.0.2 in /cognipy/CogniPyCLI

    Bump Newtonsoft.Json from 12.0.3 to 13.0.2 in /cognipy/CogniPyCLI

    Bumps Newtonsoft.Json from 12.0.3 to 13.0.2.

    Release notes

    Sourced from Newtonsoft.Json's releases.

    13.0.2

    • New feature - Add support for DateOnly and TimeOnly
    • New feature - Add UnixDateTimeConverter.AllowPreEpoch property
    • New feature - Add copy constructor to JsonSerializerSettings
    • New feature - Add JsonCloneSettings with property to disable copying annotations
    • Change - Add nullable annotation to JToken.ToObject(Type, JsonSerializer)
    • Change - Reduced allocations by reusing boxed values
    • Fix - Fixed MaxDepth when used with ToObject inside of a JsonConverter
    • Fix - Fixed deserializing mismatched JToken types in properties
    • Fix - Fixed merging enumerable content and validate content
    • Fix - Fixed using $type with arrays of more than two dimensions
    • Fix - Fixed rare race condition in name table when deserializing on device with ARM processors
    • Fix - Fixed deserializing via constructor with ignored base type properties
    • Fix - Fixed MaxDepth not being used with ISerializable deserialization

    13.0.1

    • New feature - Add JsonSelectSettings with configuration for a regex timeout
    • Change - Remove portable assemblies from NuGet package
    • Change - JsonReader and JsonSerializer MaxDepth defaults to 64
    • Change - Change InvalidCastException to JsonSerializationException on mismatched JToken
    • Fix - Fixed throwing missing member error on ignored fields
    • Fix - Fixed various nullable annotations
    • Fix - Fixed annotations not being copied when tokens are cloned
    • Fix - Fixed naming strategy not being used when deserializing dictionary enum keys
    • Fix - Fixed serializing nullable struct dictionaries
    • Fix - Fixed JsonWriter.WriteToken to allow null with string token
    • Fix - Fixed missing error when deserializing JToken with a contract type mismatch
    • Fix - Fixed JTokenWriter when writing comment to an object
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • ParseException for `K9s is something.`

    ParseException for `K9s is something.`

    Using

    onto = Ontology("cnl/file","hello.encnl",stop_on_error=True)
    

    Works with

    %%writefile hello.encnl
    Kas is something.
    

    Errors with

    %%writefile hello.encnl
    K9s is something.
    
    ---------------------------------------------------------------------------
    ParseException                            Traceback (most recent call last)
    Input In [3], in <cell line: 1>()
    ----> 1 onto = Ontology("cnl/file","hello.encnl",stop_on_error=True)
    
    File /opt/conda/lib/python3.10/site-packages/cognipy/ontology.py:103, in Ontology.__init__(self, source, arg, verbose, evaluator, graph_attribute_formatter, stop_on_error)
        101 self._uid = cognipy_create()
        102 if source == "cnl/file":
    --> 103     cognipy_call(self._uid, "LoadCnl", arg, loadAnnotations,
        104                  modalCheck, passParamsAsCnl, stop_on_error)
        105 elif source == "cnl/string":
        106     cognipy_call(self._uid, "LoadCnlFromString", arg,
        107                  loadAnnotations, modalCheck, passParamsAsCnl, stop_on_error)
    
    File /opt/conda/lib/python3.10/site-packages/cognipy/interop.py:76, in cognipy_call(uid, cmd, *args)
         74 js="\r\n".join(ja)
         75 if fl.strip()=='@exception':
    ---> 76     raise translate_exception(json.loads(js))
         77 return json.loads(js)
    
    ParseException: {'Errors': [{'Line': 0, 'Column': 0, 'Pos': 0, 'Context': 'K9s is something.\n', 'Hint': 'K^9s is something.'}]}
    

    (running in a jupyther/minimal image with mono added)

    opened by hans-d 0
  • Union in range of the role

    Union in range of the role

    BTW there's a similar issue with assertions on relations.

    Both these work:

    No first-name is pesel-num. Every first-name connects-with nothing-but thing that is a pesel-num. First-Name-6 is a first-name. First-Name-7 is a first-name. First-Name-6 connects-with First-Name-7. Causes error.

    No first-name is last-name. Every first-name connects-with nothing-but thing that is a last-name. First-Name-6 is a first-name. First-Name-7 is a first-name. First-Name-6 connects-with First-Name-7. Causes error too.

    But:

    No first-name is last-name. No first-name is pesel-num. Every first-name connects-with nothing-but thing that is a last-name and-or pesel-num. First-Name-6 is a first-name. First-Name-7 is a first-name. First-Name-6 connects-with First-Name-7. Does not cause an error.

    @apohllo

    Author apohllo commented 4 days ago The RDF/OWL conversions are as follows, for the first type of assertion:

    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.cognitum.eu/onto#connectsWith" />
        <owl:allValuesFrom rdf:resource="http://www.cognitum.eu/onto#lastName" />
      </owl:Restriction>
    </rdfs:subClassOf>
    

    and for the second type:

    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:onProperty rdf:resource="http://www.cognitum.eu/onto#connectsWith" />
        <owl:allValuesFrom>
          <owl:Class>
            <owl:unionOf rdf:parseType="Collection">
              <rdf:Description rdf:about="http://www.cognitum.eu/onto#lastName" />
              <rdf:Description rdf:about="http://www.cognitum.eu/onto#peselNum" />
            </owl:unionOf>
          </owl:Class>
        </owl:allValuesFrom>
      </owl:Restriction>
    </rdfs:subClassOf>
    
    bug 
    opened by kaplan196883 0
  • FluentEditor is using encoding='utf-8-sig'

    FluentEditor is using encoding='utf-8-sig'

    Fluent Editor is using 'utf-8-sig' encoding and it needs to be used when opening these files e.g.: '''onto=Ontology("cnl/string",'\n'.join(open(fn,"rt",encoding='utf-8-sig').read() for fn in ["data/sample-data.encnl"]))''' Please update documentation and examples

    documentation 
    opened by kaplan196883 0
NumPy and Pandas interface to Big Data

Blaze translates a subset of modified NumPy and Pandas-like syntax to databases and other computing systems. Blaze allows Python users a familiar inte

Blaze 3.1k Jan 1, 2023
Import, visualize, and analyze SpiderFoot OSINT data in Neo4j, a graph database

SpiderFoot Neo4j Tools Import, visualize, and analyze SpiderFoot OSINT data in Neo4j, a graph database Step 1: Installation NOTE: This installs the sf

Black Lantern Security 42 Dec 26, 2022
nptsne is a numpy compatible python binary package that offers a number of APIs for fast tSNE calculation.

nptsne nptsne is a numpy compatible python binary package that offers a number of APIs for fast tSNE calculation and HSNE modelling. For more detail s

Biomedical Visual Analytics Unit LUMC - TU Delft 29 Jul 5, 2022
nptsne is a numpy compatible python binary package that offers a number of APIs for fast tSNE calculation.

nptsne nptsne is a numpy compatible python binary package that offers a number of APIs for fast tSNE calculation and HSNE modelling. For more detail s

Biomedical Visual Analytics Unit LUMC - TU Delft 24 Feb 3, 2021
649 Pokémon palettes as CSVs, with a Python lib to turn names/IDs into palettes, or MatPlotLib compatible ListedColormaps.

PokePalette 649 Pokémon, broken down into CSVs of their RGB colour palettes. Complete with a Python library to convert names or Pokédex IDs into eithe

null 11 Dec 5, 2022
A high-level plotting API for pandas, dask, xarray, and networkx built on HoloViews

hvPlot A high-level plotting API for the PyData ecosystem built on HoloViews. Build Status Coverage Latest dev release Latest release Docs What is it?

HoloViz 697 Jan 6, 2023
Bokeh Plotting Backend for Pandas and GeoPandas

Pandas-Bokeh provides a Bokeh plotting backend for Pandas, GeoPandas and Pyspark DataFrames, similar to the already existing Visualization feature of

Patrik Hlobil 822 Jan 7, 2023
A high-level plotting API for pandas, dask, xarray, and networkx built on HoloViews

hvPlot A high-level plotting API for the PyData ecosystem built on HoloViews. Build Status Coverage Latest dev release Latest release Docs What is it?

HoloViz 349 Feb 15, 2021
Bokeh Plotting Backend for Pandas and GeoPandas

Pandas-Bokeh provides a Bokeh plotting backend for Pandas, GeoPandas and Pyspark DataFrames, similar to the already existing Visualization feature of

Patrik Hlobil 614 Feb 17, 2021
📊📈 Serves up Pandas dataframes via the Django REST Framework for use in client-side (i.e. d3.js) visualizations and offline analysis (e.g. Excel)

???? Serves up Pandas dataframes via the Django REST Framework for use in client-side (i.e. d3.js) visualizations and offline analysis (e.g. Excel)

wq framework 1.2k Jan 1, 2023
Sparkling Pandas

SparklingPandas SparklingPandas aims to make it easy to use the distributed computing power of PySpark to scale your data analysis with Pandas. Sparkl

null 366 Oct 27, 2022
Create HTML profiling reports from pandas DataFrame objects

Pandas Profiling Documentation | Slack | Stack Overflow Generates profile reports from a pandas DataFrame. The pandas df.describe() function is great

null 10k Jan 1, 2023
Productivity Tools for Plotly + Pandas

Cufflinks This library binds the power of plotly with the flexibility of pandas for easy plotting. This library is available on https://github.com/san

Jorge Santos 2.7k Dec 30, 2022
A GUI for Pandas DataFrames

PandasGUI A GUI for analyzing Pandas DataFrames. Demo Installation Install latest release from PyPi: pip install pandasgui Install directly from Githu

Adam 2.8k Jan 3, 2023
Joyplots in Python with matplotlib & pandas :chart_with_upwards_trend:

JoyPy JoyPy is a one-function Python package based on matplotlib + pandas with a single purpose: drawing joyplots (a.k.a. ridgeline plots). The code f

Leonardo Taccari 462 Jan 2, 2023
Interactive plotting for Pandas using Vega-Lite

pdvega: Vega-Lite plotting for Pandas Dataframes pdvega is a library that allows you to quickly create interactive Vega-Lite plots from Pandas datafra

Altair 342 Oct 26, 2022
Create HTML profiling reports from pandas DataFrame objects

Pandas Profiling Documentation | Slack | Stack Overflow Generates profile reports from a pandas DataFrame. The pandas df.describe() function is great

null 6.8k Feb 18, 2021
Productivity Tools for Plotly + Pandas

Cufflinks This library binds the power of plotly with the flexibility of pandas for easy plotting. This library is available on https://github.com/san

Jorge Santos 2.1k Feb 18, 2021
A GUI for Pandas DataFrames

PandasGUI A GUI for analyzing Pandas DataFrames. Demo Installation Install latest release from PyPi: pip install pandasgui Install directly from Githu

Adam 2k Feb 17, 2021