Skip to main content

My Network Query Language

Project description

Concept

A good foundation is a simple concept:

  • Nodes have the format table.id

  • Connections have a distance

You may already have tables like: customers, merchants, products, places, areas, promotions, interests. Most of the times in a relational database there is an id/key, so with table.id all entries can be addressed.

Teach the MyNQL network relations between two table1.id1 <-> table2.id2 you know, and then ask the network about all the (indirect) relations you like to know.

This is very simple, but also very powerful! You define a starting point, and search for the closest matches of a desired table. When you add more connections your questions will stay the same, only the results will improve. If you like to see a real live example look this example, here is an example with a Computer Store.

Install

git clone https://github.com/livinter/MyNQL.git
python setup.py install

Teach the Network

You can do relations between those nodes using:

  • connect - connect two nodes

  • delete - delete a connection

The nodes will be created when they have connections, and remove if they have no more connections.

Optional you can specify a distance between nodes.

Ask the network

  • select - gives you the best related nodes from a specified category

To calculate how good two nodes are connected, all the different ways are taken into consideration up to a radius you specify.

Design

Imagen you have

Table customer

Id

Name

101

jose

102

maria

103

juan

And you want to discover new relations.

First you teach your network.

from MyNQL import MyNQL
mynql = MyNQL('store')

mynql.connect('customer.juan', 'product.jeans')
mynql.connect('customer.juan',  'product.socks')
mynql.connect('customer.maria', 'product.socks')

If the colum Name is unique you can use it as a key, otherwise you would need colum Id, and your code would look like this:

mynql.connect("customer.103', 'product.12')

Now you can ask questions from other points of view. You always specify a starting point, and the category where you want to know the best matches:

>>> mynql.select('customer.maria', 'product')
['socks', 'jeans']

Maria is more connected to socks, as she has a direct connection, but also a bit to jeans as there exist an indirect connection through Juan.

>>> mynql.select('product.jeans', 'product')
['socks']

Any combination is valid. For example you can ask about how one product is related to other.

Back-end

Storage is done in memory, but if you want to use MySQL, SQLite or Postgresql as a backend take a look at test/pee_example.py. This will keep a copy of all updates in your database.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

MyNQL-0.2.tar.gz (6.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page