Showing posts with label Data analytics. Show all posts
Showing posts with label Data analytics. Show all posts

Wednesday, December 24, 2014

Using Neo4j using core java API

Follow these steps to create a simple graph

Install neo4j  from here

Add the neo4j jar file neo4j-desktop-2.1.6 to the project from the folder Program Files (x86)\Neo4j Community\bin

Sample code

package blog.neo4j;
import java.io.File;
import java.util.Iterator;
import java.util.concurrent.TimeUnit;
import org.neo4j.cypher.javacompat.ExecutionEngine;
import org.neo4j.cypher.javacompat.ExecutionResult;

import org.neo4j.graphdb.DynamicLabel;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.ResourceIterator;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.helpers.collection.IteratorUtil;
import org.neo4j.graphdb.schema.IndexDefinition;
import org.neo4j.graphdb.schema.Schema;
/**
 *
 * @author sony
 */
public class EmbeddedNeo4j {
    private static final String DB_PATH = "target/neo4j-hello-db";

  

    // START SNIPPET: vars
    GraphDatabaseService graphDb;

    // END SNIPPET: vars

    // START SNIPPET: createReltype
    private static enum RelTypes implements RelationshipType
    {
        FOLLOWEDBY,
        FOLLOWEROF,
        TWEETED,
        TWEETED_BY
    }
    // END SNIPPET: createReltype
    private static enum LabelTypes implements Label
    {
        USER,
        TWEET
    }


    void deletePreviousDatabase()
    {
        deleteFileOrDirectory( new File( DB_PATH ) );
    }

    void startDb()
    {
        graphDb = new GraphDatabaseFactory().newEmbeddedDatabase( DB_PATH );
        registerShutdownHook( graphDb );
    }
    void createIndex()
    {
        IndexDefinition indexDefinition,indexDefinition1;
        try ( Transaction tx = graphDb.beginTx() )
        {
            Schema schema = graphDb.schema();
            indexDefinition = schema.indexFor( DynamicLabel.label( "USER" ) )
                    .on( "userid" )
                    .create();
            indexDefinition1 = schema.indexFor( DynamicLabel.label( "TWEET" ) )
                    .on( "tweetid" )
                    .create();
            tx.success();
        }
        try ( Transaction tx = graphDb.beginTx() )
            {
                Schema schema = graphDb.schema();
                schema.awaitIndexOnline( indexDefinition1, 10, TimeUnit.SECONDS );
            }
    }
    
    
    void create_nodes_relationships() 
    {
        try ( Transaction tx = graphDb.beginTx() )
        {
                   //Create nodes
            Node user1=graphDb.createNode(LabelTypes.USER);
            user1.setProperty("Userid", 1);
            user1.setProperty("Name","Siva");
            Node user2=graphDb.createNode(LabelTypes.USER);
            user2.setProperty("Userid", 2);
            user2.setProperty("Name", "Kumar");
            Node user3=graphDb.createNode(LabelTypes.USER);
            user3.setProperty("Userid", 3);
            user3.setProperty("Name", "Priya");

            Node tweet1=graphDb.createNode(LabelTypes.TWEET);
            tweet1.setProperty("Tweetid", 1);
            tweet1.setProperty("Text","Hello");
            Node tweet2=graphDb.createNode(LabelTypes.TWEET);
            tweet2.setProperty("Tweetid", 2);
            tweet2.setProperty("Text", "Hai");
            Node tweet3=graphDb.createNode(LabelTypes.TWEET);
            tweet3.setProperty("Tweetid", 3);
            tweet3.setProperty("Text", "Our lives are not our own. From womb to tomb, we are bound to others. Past and present. And by each crime and every kindness, we birth our future.");
            System.out.println("Nodes created");

            user1.createRelationshipTo(user2, RelTypes.FOLLOWEDBY);
            user1.createRelationshipTo(user2, RelTypes.FOLLOWEROF);
            user1.createRelationshipTo(user3, RelTypes.FOLLOWEDBY);
            user1.createRelationshipTo(user3, RelTypes.FOLLOWEROF);

            user2.createRelationshipTo(user1, RelTypes.FOLLOWEDBY);
            user2.createRelationshipTo(user1, RelTypes.FOLLOWEROF);
            user2.createRelationshipTo(user3, RelTypes.FOLLOWEDBY);
            user2.createRelationshipTo(user3, RelTypes.FOLLOWEROF);

            user3.createRelationshipTo(user2, RelTypes.FOLLOWEDBY);
            user3.createRelationshipTo(user2, RelTypes.FOLLOWEROF);
            user3.createRelationshipTo(user1, RelTypes.FOLLOWEDBY);
            user3.createRelationshipTo(user1, RelTypes.FOLLOWEROF);

            System.out.println("relationship created");

            //select nodes using index
            for(int i=1;i<=3;i++)
            {
                Node user,tweet;
                ResourceIterator nodelist1 = graphDb.findNodesByLabelAndProperty( DynamicLabel.label( "USER" ), "Userid", i).iterator();
                ResourceIterator nodelist2 = graphDb.findNodesByLabelAndProperty( DynamicLabel.label( "TWEET" ), "Tweetid", i).iterator();
                user=nodelist1.next();
                tweet=nodelist2.next();
                user.createRelationshipTo(tweet, RelTypes.TWEETED);
                tweet.createRelationshipTo(user, RelTypes.TWEETED_BY);
            }   
            tx.success();
        }
               
        try ( Transaction tx = graphDb.beginTx() )
        {
               
               ExecutionEngine engine = new ExecutionEngine(graphDb);
               for(int i=1;i<=3;i++)
               {
                ExecutionResult  result=engine.execute( "match (n {Userid: '"+i+"'}) return n" );
                Iterator n_column = result.columnAs( "n" );
                for ( Node node : IteratorUtil.asIterable( n_column ) )
                        {
                            node.setProperty("type", "user");
                        }
               }
               for(int i=1;i<=3;i++)
               {
                ExecutionResult  result=engine.execute( "match (n {Tweetid: '"+i+"'}) return n" );
                Iterator n_column = result.columnAs( "n" );
                for ( Node node : IteratorUtil.asIterable( n_column ) )
                        {
                            node.setProperty("type", "tweet");
                        }
                           
            
                }
               tx.success();
        }             
    }
        
    void removeData()
    {
        try ( Transaction tx = graphDb.beginTx() )
        {         
            for(int i=1;i<=3;i++)
                   {
                       Node user,tweet;
                       ResourceIterator nodelist1 = graphDb.findNodesByLabelAndProperty( DynamicLabel.label( "USER" ), "Userid", i).iterator();
                       ResourceIterator nodelist2 = graphDb.findNodesByLabelAndProperty( DynamicLabel.label( "TWEET" ), "Tweetid", i).iterator();
                       user=nodelist1.next();
                       tweet=nodelist2.next();
                       user.delete();
                       tweet.delete();
                   }

            tx.success();
        }
    }

    void shutDown()
    {
        System.out.println();
        System.out.println( "Shutting down database ..." );
        // START SNIPPET: shutdownServer
        graphDb.shutdown();
        // END SNIPPET: shutdownServer
    }

    // START SNIPPET: shutdownHook
    private static void registerShutdownHook( final GraphDatabaseService graphDb )
    {
        // Registers a shutdown hook for the Neo4j instance so that it
        // shuts down nicely when the VM exits (even if you "Ctrl-C" the
        // running application).
        Runtime.getRuntime().addShutdownHook( new Thread()
        {
            @Override
            public void run()
            {
                graphDb.shutdown();
            }
        } );
    }
    // END SNIPPET: shutdownHook

    private static void deleteFileOrDirectory( File file )
    {
        if ( file.exists() )
        {
            if ( file.isDirectory() )
            {
                for ( File child : file.listFiles() )
                {
                    deleteFileOrDirectory( child );
                }
            }
            file.delete();
        }
    }
    
    private  String[] parseDataRow (String row,int len)
    {
        String properties[] = new String[len];
        row = row.substring(1, row.length()-1);
        //System.out.println(row);
        for(int i=0;i
        {
            //System.out.println(i);
            if(row.charAt(0)=='u')
            {
                if(i!=len-1)
                {
                    boolean flag=false;
                    if(flag=(row.charAt(2)==','))
                    {
                        row = "u"+row.charAt(1)+row.substring(3);
                    }
                    properties[i]=row.substring(2, row.indexOf(row.charAt(1)+","));
                    if(flag)
                    {
                        properties[i] = ","+properties[i];
                    }
                    //System.out.println(properties[i]);
                    row=row.substring(row.indexOf(row.charAt(1)+",")+3);
                    //System.out.println(row);
                }
                else
                {
                    properties[i]=row.substring(2,row.length()-1);
                    //System.out.println(properties[i]);
                }
                
            }
            else
            {
                if(i!=len-1)
                {
                    properties[i]=row.substring(0, row.indexOf(","));
                   //System.out.println(properties[i]);
                    row=row.substring(row.indexOf(",")+2);
                    //System.out.println(row);
                }
                else               
                {
                    properties[i]=row;
                    //System.out.println(properties[i]);
                }
                
            }
        }
        return properties;
    }
    
    
}


Net-beans project implementing the source code can be found  here

The output of the project will be created in folder blog neo4j\target\neo4j-hello-db 
the data base can be viewed in  neo4j browser

sample output

    


Wednesday, September 10, 2014

Performing classification using back propagation network in Scilab

The following steps must be followed

Enable ANN Toolbox under Data Analysis and Statistics in ATOMS

Sample code

in1 = csvRead('D:\siva\02-sep-14\sonar-all-data.csv');
in2 =csvRead('D:\siva\02-sep-14\sonar-result.csv');
x=in1';
t=in2';
rand('seed',0);
N = [60,30,30,30,1];
//N is neural network with 60 node input layer 3 hidden layer with 30 node each and 1 node output //layer
//lp is learning parameter with 0.5 learning rate and 0 error threshold
lp = [0.5, 0];
W = ann_FF_init(N);
//T no of epochs
T = 300;
//disp(x);
//disp(t);
W = ann_FF_Std_online(x,t,N,W,lp,T);
p=ann_FF_run(x,N,W);
o=round(p);
plot(t,'.r');
plot(o,'.g')

The file sonar-all-data.csv contain the features and sonar-result.csv contain the expected result.
The data classify material into rock and metal based on the features.
The files can be downloaded from
sonar-all-data.csv
sonar-result.csv
sample output