LPDM Lab Manul
LPDM Lab Manul
LAB MANUAL
IV-BTECH
VID
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Page 2 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Contents
Page
S.No Topic
no
Week1
1. Write a shell script that accepts a file name, starting and ending line numbers
3. as arguments and displays all the lines between the given line numbers.
2. Write a shell script that deletes all lines containing a specified word in one or
more files supplied as arguments to it.
3. Write a shell script that displays a list of all the files in the current directory 7
to which the user has read, write and execute permissions.
4. Write a shell script that receives any number of file names as arguments
checks if every argument supplied is a file or a directory and reports
accordingly. Whenever the argument is a file, the number of lines on it is also
reported.
Week 2
5. Write a shell script that accepts a list of file names as its arguments, counts
4. and reports the occurrence of each word that is present in the first argument file
on other argument files
10
6. Write a shell script to list all of the directory files in a directory.
Week 3
8. Write an awk script to count the number of lines in a file that do not contain
5. vowels.
9. Write an awk script to find the number of characters, words and lines in a file. 13
10. Write a c program that makes a copy of a file using standard I/O and system
calls
Page 3 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Week 4
11. Implement in C the following UNIX commands using System calls
6. A. cat B. ls C. mv
12. Write a program that takes one or more file/directory names as command line
15
input and reports the following information on the file.
A. File type. B. Number of links.
C. Time of last access.
D. Read, Write and Execute permissions.
Week 5
13. Write a C program to emulate the UNIX ls –l command.
7.
14. Write a C program to list for every file in a directory, its inode number and
19
file name.
15. Write a C program that demonstrates redirection of standard output to a file.
Ex: ls > f1.
Week 6
16. Write a C program to create a child process and allow the parent to display
8. “parent” and the child to display “child” on the screen.
29
17. Write a C program to create a Zombie process.
Week 7
19. Write a C program that illustrates how to execute two commands
9. concurrently with a command pipe.
Ex: - ls –l | sort
20. Write C programs that illustrate communication between two unrelated
processes using named pipe
21. Write a C program to create a message queue with read and write 31
permissions to write 3 messages to it with different priority numbers.
22. Write a C program that receives the messages (from the above message queue
as specified in (21)) and displays them.
Week 8
23. Write a C program to allow cooperating processes to lock a resource for 40
10. exclusive use, using a) Semaphores b) flock or lockf system calls.
Page 4 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
24. Write a C program that illustrates suspending and resuming processes using
signals
Week 9
11. 25. Write a C program that implements a producer-consumer system with two
processes.
41
(Using Semaphores).
26. Write client and server programs (using c) for interaction between server and
client processes using Unix Domain sockets.
12.
Week 10
27. Write client and server programs (using c) for interaction between server and
client processes using Internet Domain sockets.
47
28. Write a C program that illustrates two processes communicating using
shared memory
21. Find out differences in results using decision tree and cross-validation on a data 76
set.
Page 5 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Page 6 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Week1
1. Write a shell script that accepts a file name, starting and ending line numbers as arguments
and displays all the lines between the given line numbers.
Aim: ToWrite a shell script that accepts a file name, starting and ending line numbers as
arguments and displays all the lines between the given line numbers.
Script:
$ awk ‘NR<2 || NR> 4 {print $0}’ 5 lines.dat
I/P: line1
line2
line3
line4
line5
O/P: line1
line5
2. Write a shell script that deletes all lines containing a specified word in one or more files
supplied as arguments to it.
Aim: To write a shell script that deletes all lines containing a specified word in one or more
files supplied as arguments to it.
Script:
clear
i=1
while [ $i -le $# ]
do
grep -v Unix $i > $i
done
Output:
$ sh 1b.sh test1
the contents before deleting
test1
hello
hello
Page 7 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
bangalore
mysore city
enter the word to be deleted
city
after deleting
hello
hello
Bangalore
$ sh 1b.sh
no argument passed
3. Write a shell script that displays a list of all the files in the current directory to which the
user has read, write and execute permissions.
Aim: To write a shell script that displays a list of all the files in the current directory to
which the user has read, write and execute permissions.
Script:
echo "enter the directory name"
read dir
if [ -d $dir ]
then
cd $dir
ls > f
exec < f
while read line
do
if [ -f $line ]
then
if [ -r $line -a -w $line -a -x $line ]
then
echo "$line has all permissions"
else
echo "files not having all permissions"
fi
fi
Page 8 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
done
fi
4. Write a shell script that receives any number of file names as arguments checks if every
argument supplied is a file or a directory and reports accordingly. Whenever the argument
is a file, the number of lines on it is also reported
Aim: To write a shell script that receives any number of file names as arguments checks if
every argument supplied is a file or a directory
Script:
for x in $*
do
if [ -f $x ]
then
echo " $x is a file "
echo " no of lines in the file are "
wc -l $x
elif [ -d $x ]
then
echo " $x is a directory "
else
echo " enter valid filename or directory name "
fi
done
Page 9 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Week 2
5. Write a shell script that accepts a list of file names as its arguments, counts and reports the
occurrence of each word that is present in the first argument file on other argument files.
Aim : To write a shell script that accepts a list of file names as its arguments, counts and
reports the occurrence of each word that is present in the first argument file on other
argument files.
Script:
if [ $# -ne 2 ]
then
echo "Error : Invalid number of arguments."
exit
fi
str=`cat $1 | tr '\n' ' '`
for a in $str
do
echo "Word = $a, Count = `grep -c "$a" $2`"
done
Output :
$ cat test
hello ATRI
$ cat test1
hello ATRI
hello ATRI
hello
$ sh 1.sh test test1
Word = hello, Count = 3
Word = ATRI, Count = 2
Page 10 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Script:
# !/bin/bash
echo"enter directory name"
read dir
if[ -d $dir]
then
echo"list of files in the directory"
ls $dir
else
echo"enter proper directory name"
fi
Output:
Enter directory name
Atri
List of all files in the directoty
CSE.txt
ECE.txt
Script:
# !/bin/bash
echo "enter a number"
read num
fact=1
while [ $num -ge 1 ]
do
fact=`expr $fact \* $num`
let num--
done
echo "factorial of $n is $fact"
Output:
Enter a number
5
Page 11 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Factorial of 5 is 120
Page 12 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Week 3
8. Write an awk script to count the number of lines in a file that do not contain vowels.
9. Write an awk script to find the number of characters, words and lines in a file.
Aim : To write an awk script to find the number of characters, words and lines in a file.
Script:
BEGIN{print "record.\t characters \t words"}
#BODY section
{
len=length($0)
total_len+=len
print(NR,":\t",len,":\t",NF,$0)
words+=NF
}
END{
print("\n total")
print("characters :\t" total len)
print("lines :\t" NR)
}
10. Write a c program that makes a copy of a file using standard I/O and system calls
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]){
int fd1, fd2;
char buffer[100];
long int n1;
if(((fd1 = open(argv[1], O_RDONLY)) == -1) ||
((fd2 = open(argv[2], O_CREAT|O_WRONLY|O_TRUNC,
0700)) == -1)){
perror("file problem ");
exit(1);
}
while((n1=read(fd1, buffer, 100)) > 0)
if(write(fd2, buffer, n1) != n1){
perror("writing problem ");
exit(3);
Page 13 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
}
// Case of an error exit from the loop
if(n1 == -1){
perror("Reading problem ");
exit(2);
}
close(fd2);
exit(0);
}
Page 14 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Week 4
#include<fcntl.h>
#include<sys/stat.h>
#define BUFSIZE 1
int main(int argc, char **argv)
{
int fd1;
int n;
char buf;
fd1=open(argv[1],O_RDONLY);
printf("Welcome to ATRI\n");
while((n=read(fd1,&buf,1))>0)
{
printf("%c",buf);
/* or
write(1,&buf,1); */
}
return (0);
}
Page 15 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
#include <stdio.h>
#define FALSE 0
#define TRUE 1
char pathname[MAXPATHLEN];
main() {
int count,i;
struct dirent **files;
int file_select();
if (getwd(pathname) == NULL )
{ printf("Error getting pathn");
exit(0);
}
printf("Current Working Directory = %sn",pathname);
count = scandir(pathname, &files, file_select, alphasort);
if (count <= 0)
{
printf("No files in this directoryn");
exit(0);
}
printf("Number of files = %dn",count);
for (i=1;i<count+1;++i)
printf("%s \n",files[i-1]->d_name);
}
Page 16 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Algorithm:
1. Start
2. open an existed file and one new open file using open()
system call
3. read the contents from existed file using read( ) system
call
4. write these contents into new file using write system
call using write( ) system call
5. repeat above 2 steps until eof
6. close 2 file using fclose( ) system call
7. delete existed file using using unlink( ) system
8. End.
Program:
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>
int main(int argc, char **argv)
{
int fd1,fd2;
int n,count=0;
fd1=open(argv[1],O_RDONLY);
fd2=creat(argv[2],S_IWUSR);
rename(fd1,fd2);
unlink(argv[1]);
printf(“ file is copied “);
return (0);
}
12. Write a program that takes one or more file/directory names as command line input and
reports the following information on the file.
A. File type. B. Number of links.
C. Time of last access. D. Read, Write and Execute permissions.
#include<stdio.h>
main()
{
FILE *stream;
int buffer_character;
stream=fopen(“test”,”r”);
Page 17 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
if(stream==(FILE*)0)
{
fprintf(stderr,”Error opening file(printed to standard error)\n”);
fclose(stream);
exit(1);
}
}
if(fclose(stream))==EOF)
{
fprintf(stderr,”Error closing stream.(printed to standard error)\n);
exit(1);
}
return();
}
Page 18 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Week 5
ALGORITHM :
/* 1. Simulation of ls command */
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#include<sys/stat.h>main()
{
char dirname[10];
DIR *p;
struct dirent *d;
printf("Enter directory name ");
scanf("%s",dirname);
p=opendir(dirname);
if(p==NULL)
{
perror("Cannot find dir.");
exit(-1);
}
while(d=readdir(p))
printf("%s\n",d->d_name);
}
SAMPLE OUTPUT:
Page 19 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
...
f2
14. Write a C program to list for every file in a directory, its inode number and file name.
The Dirent structure contains the inode number and the name. The maximum length of a
filename component is NAME_MAX, which is a system-dependent value. opendir returns a
pointer to a structure called DIR, analogous to FILE, which is used by readdir and closedir. This
information is collected into a file called dirent.h.
/* system-dependent */
} Dirent;
} DIR;
The system call stat takes a filename and returns all of the information in the inode for that file,
or -1 if there is an error. That is,
char *name;
Page 20 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
stat(name, &stbuf);
fills the structure stbuf with the inode information for the file name. The structure describing the
value returned by stat is in <sys/stat.h>, and typically looks like this:
};
Most of these values are explained by the comment fields. The types like dev_t and ino_t are
defined in<sys/types.h>, which must be included too.
The st_mode entry contains a set of flags describing the file. The flag definitions are also
included in<sys/types.h>; we need only the part that deals with file type:
Page 21 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
/* ... */
Now we are ready to write the program fsize. If the mode obtained from stat indicates that a file
is not a directory, then the size is at hand and can be printed directly. If the name is a directory,
however, then we have to process that directory one file at a time; it may in turn contain sub-
directories, so the process is recursive.
The main routine deals with command-line arguments; it hands each argument to the
function fsize.
#include <stdio.h>
#include <string.h>
#include "syscalls.h"
#include "dirent.h"
void fsize(char *)
fsize(".");
else
Page 22 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
fsize(*++argv);
return 0;
The function fsize prints the size of the file. If the file is a directory, however, fsize first
calls dirwalk to handle all the files in it. Note how the flag names S_IFMT and S_IFDIR are used
to decide if the file is a directory. Parenthesization matters, because the precedence of & is lower
than that of ==.
return;
dirwalk(name, fsize);
The function dirwalk is a general routine that applies a function to each file in a directory. It
opens the directory, loops through the files in it, calling the function on each, then closes the
Page 23 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
directory and returns. Since fsize calls dirwalk on each directory, the two functions call each
other recursively.
char name[MAX_PATH];
Dirent *dp;
DIR *dfd;
return;
if (strcmp(dp->name, ".") == 0
|| strcmp(dp->name, ".."))
dir, dp->name);
else {
(*fcn)(name);
Page 24 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
closedir(dfd);
Each call to readdir returns a pointer to information for the next file, or NULL when there are no
files left. Each directory always contains entries for itself, called ".", and its parent, ".."; these
must be skipped, or the program will loop forever.
Down to this last level, the code is independent of how directories are formatted. The next step is
to present minimal versions of opendir, readdir, and closedir for a specific system. The following
routines are for Version 7 and System V UNIX systems; they use the directory information in the
header<sys/dir.h>, which looks like this:
#ifndef DIRSIZ
#define DIRSIZ 14
#endif
};
Some versions of the system permit much longer names and have a more complicated directory
structure.
The type ino_t is a typedef that describes the index into the inode list. It happens to be unsigned
short on the systems we use regularly, but this is not the sort of information to embed in a
program; it might be different on a different system, so the typedef is better. A complete set of
``system'' types is found in <sys/types.h>.
opendir opens the directory, verifies that the file is a directory (this time by the system call fstat,
which is like stat except that it applies to a file descriptor), allocates a directory structure, and
records the information:
Page 25 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
int fd;
DIR *dp;
|| fstat(fd, &stbuf) == -1
return NULL;
dp->fd = fd;
return dp;
if (dp) {
close(dp->fd);
free(dp);
Page 26 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Finally, readdir uses read to read each directory entry. If a directory slot is not currently in use
(because a file has been removed), the inode number is zero, and this position is skipped.
Otherwise, the inode number and name are placed in a static structure and a pointer to that is
returned to the user. Each call overwrites the information from the previous one.
== sizeof(dirbuf)) {
continue;
d.ino = dirbuf.d_ino;
return &d;
return NULL;
Page 27 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
An Inode number points to an Inode. An Inode is a data structure that stores the following
information about a file :
Size of file
Device ID
Page 28 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Week 6
16. Write a C program to create a child process and allow the parent to display “parent” and the
child to display “child” on the screen.
#include<stdio.h>
#include<string.h>
main()
{
int childpid;
if (( childpid=fork())<0)
{
printf("cannot fork");
}
else if(childpid >0)
{
}
else
printf(“Child process”);
}
#include<stdio.h>
#include<string.h>
main()
{
int childpid;
if (( childpid=fork())<0)
{
printf("cannot fork");
}
else if(childpid >0)
{
Printf(“child process”);
exit(0);
Page 29 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
}
else
{
wait(100);
printf(“parent process”);
}
}
#include<stdio.h>
main()
{
int id;
printf("Before fork()\n");
id=fork();
if(id==0)
{
printf("Child has started: %d\n ",getpid());
printf("Parent of this child : %d\n",getppid());
printf("child prints 1 item :\n ");
sleep(25);
printf("child prints 2 item :\n");
}
else
{
printf("Parent has started: %d\n",getpid());
printf("Parent of the parent proc : %d\n",getppid());
}
printf("After fork()");
}
Page 30 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Week 7
19. Write a C program that illustrates how to execute two commands concurrently with a
command pipe.
Ex: - ls –l | sort
DESCRIPTION:
ALGORITHM:
The following is the simple algorithm for creating, writing to and reading from a
pipe.
1) Create a pipe through a pipe() function call.
2) Use write() function to write the data into the pipe. The syntax is as follows
write(int [],ip_string,size);
int [] – filedescriptor variable, in this case if int filedesc[2] is the variable, then
use the filedesc[1] as the first parameter.
PROGRAM:
#include<stdio.h>
#include<string.h>
main()
{
int pipe1[2],pipe2[2],childpid;
Page 31 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Page 32 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
20. Write C programs that illustrate communication between two unrelated processes using
named pipe.
DESCRIPTION:
Another kind of IPC is FIFO(First in First Out) is sometimes also called as named
pipe.It is like a pipe, except that it has a name.Here the name is that of a file that multiple
processes can open(), read and write to. A FIFO is created using the mknod() system call.
The syntax is as follows
The pathname is a normal Unix pathname, and this is the name of the FIFO.
The mode argument specifies the file mode access mode.The dev value is ignored for a
FIFO.
Page 33 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Once a FIFO is created, it must be opened for reading (or) writing using either the open
system call, or one of the standard I/O open functions-fopen, or freopen.
ALGORITHM:
The following is the simple algorithm for creating, writing to and reading from a
FIFO.
int [] – filedescriptor variable, in this case if int filedesc[2] is the variable, then
use the filedesc[1] as the first parameter.
3) Use read() function to read the data that has been written to the fifo.
The syntax is as follows
PROGRAM:
Page 34 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
printf("cannot fork");
}
else
if(childpid >0)
{
wfd=open(FIFO1,1);
rfd=open(FIFO2,0);
client(rfd,wfd);
while (wait((int *) 0 ) !=childpid);
close(rfd);
close(wfd);
unlink(FIFO1);
unlink(FIFO2);
}
else
{
rfd=open(FIFO1,0);
wfd=open(FIFO2,1);
server(rfd,wfd);
close(rfd);
close(wfd);
}
}
client(int readfd,int writefd)
{
int n;
char buff[1024];
printf ("enter s file name");
if(fgets(buff,1024,stdin)==NULL)
printf("file name read error");
n=strlen(buff);
if(buff[n-1]=='\n')
n--;
if(write(writefd,buff,n)!=n)
printf("file name write error");
while((n=read(readfd,buff,1024))>0)
if(write(1,buff,n)!=n)
printf("data write error");
if(n<0)
printf("data error");
Page 35 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
}
server(int readfd,int writefd)
{
char buff[1024],errmsg[50];
int n,fd;
n=read(readfd,buff,1024);
buff[n]='\0';
if((fd=open(buff,0))<0)
{
sprintf(buff,"file does nit exist");
write(writefd,buff,1024);
}
else
{
while((n=read(fd,buff,1024))>0)
write(writefd,buff,n);
}
}
21. Write a C program to create a message queue with read and write permissions to write 3
messages to it with different priority numbers.
#include <stdio.h>
#include <sys/ipc.h>
#include <fcntl.h>
#define MAX 255
struct mesg
{
long type;
char mtext[MAX];
} *mesg;
char buff[MAX];
main()
{
int mid,fd,n,count=0;;
if((mid=msgget(1006,IPC_CREAT | 0666))<0)
{
printf(“\n Can’t create Message Q”);
exit(1);
}
Page 36 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
if((mid=msgget(1006,0))<0)
{
printf(“\n Can’t create Message Q”);
exit(1);
}
while((n=msgrcv(mid,&mesg,MAX,6,IPC_NOWAIT))>0)
write(1,mesg.mtext,n);
count++;
if((n= = -1)&(count= =0))
printf(“\n No Message Queue on Queue:%d”,mid);
22. Write a C program that receives the messages (from the above message queue as specified
in (21)) and displays them.
DESCRIPTION:
Message passing between processes are part of operating system, which are done through a
message queue. Where messages are stored in kernel and are associated with message queue
identifier (“msqid”). Processes read and write messages to an arbitrary queue in a way such that
a process writes a message to a queue, exits and other process reads it at later time.
ALGORITHM:
Before defining a structure ipc_perm structure should be defined which is done by including
following file.
Page 37 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
#include <sys/types.h>
#include <sys/ipc.h>
A structure of information is maintained by kernel, it should contain following.
struct msqid_ds{
struct ipc_perm msg_perm; /*operation permission*/
struct msg *msg_first; /*ptr to first msg on queue*/
struct msg *msg_last; /*ptr to last msg on queue*/
ushort msg_cbytes; /*current bytes on queue*/
ushort msg_qnum; /*current no of msgs on queue*/
ushort msg_qbytes; /*max no of bytes on queue*/
ushort msg_lspid; /*pid o flast msg send*/
ushort msg_lrpid; /*pid of last msgrecvd*/
time_t msg_stime; /*time of last msg snd*/
time_t msg_rtime; /*time of last msg rcv*/
time_t msg_ctime; /*time of last msg ctl*/
};
To create new message queue or access existing message queue “msgget()” function is used
Syntax:
int msgget(key_t key ,int msgflag);
Msg flag values
Num val Symb value desc
0400 MSG_R Read by owner
0200 MSG_w Write by owner
0040 MSG_R >>3 Read by group
0020 MSG_W>>3 Write by group
Syntax:
int msgsnd(int msqid , struct msgbuf *ptr,int length, int flag);
Page 38 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
flag is
- IPC_NOWAIT which allows sys call to return immediately when no room on queue,
when this is specified msgsnd will return -1 if no room on queue.
Else flag can be specified as 0
2. To receive Message “msgrcv()” function is used
Syntax:
Int msgrcv(int msqid , struct msgbuf *ptr, int length, long msgtype, int flag);
#include <sys/type.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/errno.h>
extern int errno;
Page 39 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
server(readid,writeid);
exit(0);
}
Client process:
#include “msgq.h”
main()
{
int readid, writeid;
/* open queues which server has already created it */
If ( (wirteid =msgget(MKEY1,0))<0)
err_sys(“client : cant access msgget message queue 1”);
if((readid=msgget(MKEY2,0))<0)
err_sys(“client : cant msgget messages queue 2”):
client(readid,writeid);
exit(0);
}
Week 8
23. Write a C program to allow cooperating processes to lock a resource for exclusive use,
using a) Semaphores b) flock or lockf system calls.
PROGRAM:
#include<stdio.h>
#include<stdlib.h>
#include<error.h>
#include<sys/types.h>
Page 40 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
#include<sys/ipc.h>
#include<sys/sem.h>
int main(void)
{
key_t key;
int semid;
union semun arg;
if((key==ftok("sem demo.c","j"))== -1)
{
perror("ftok");
exit(1);
}
if(semid=semget(key,1,0666|IPC_CREAT))== -1)
{
perror("semget"):
exit(1);
}
arg.val=1;
if(semctl(semid,0,SETVAL,arg)== -1)
{
perror("smctl");
exit(1);
}
return 0;
}
OUTPUT:
semget
smctl
24. Write a C program that illustrates suspending and resuming processes using signals.
#include<sys/types.h>
#include<signal.h>
//suspend the process(same as hitting crtl+z)
kill(pid,SIGSTOP);
Week 9
Page 41 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
25. Write a C program that implements a producer-consumer system with two processes. (using
Semaphores).
Algorithm:
1. Start
2. create semaphore using semget( ) system call
3. if successful it returns positive value
4. create two new processes
5. first process will produce
6. until first process produces second process cannot consume
7. End.
Source code:
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<unistd.h>
#define num_loops 2
int main(int argc,char* argv[])
{
int sem_set_id;
int child_pid,i,sem_val;
struct sembuf sem_op;
int rc;
struct timespec delay;
clrscr();
sem_set_id=semget(ipc_private,2,0600);
if(sem_set_id==-1)
{
perror(“main:semget”);
exit(1);
}
printf(“semaphore set created,semaphore setid‘%d’\n ”,
sem_set_id);
child_pid=fork();
Page 42 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
switch(child_pid)
{
case -1:
perror(“fork”);
exit(1);
case 0:
for(i=0;i<num_loops;i++)
{
sem_op.sem_num=0;
sem_op.sem_op=-1;
sem_op.sem_flg=0;
semop(sem_set_id,&sem_op,1);
printf(“producer:’%d’\n”,i);
fflush(stdout);
}
break;
default:
for(i=0;i<num_loops;i++)
{
printf(“consumer:’%d’\n”,i);
fflush(stdout);
sem_op.sem_num=0;
sem_op.sem_op=1;
sem_op.sem_flg=0;
semop(sem_set_id,&sem_op,1);
if(rand()>3*(rano_max14));
{
delay.tv_sec=0;
delay.tv_nsec=10;
nanosleep(&delay,null);
}
}
break;
}
return 0;
}
Output:
semaphore set created
Page 43 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
26. Write client and server programs (using c) for interaction between server and client
processes using Unix Domain sockets.
Server.c
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
close(connection_fd);
return 0;
}
int main(void)
{
struct sockaddr_un address;
int socket_fd, connection_fd;
socklen_t address_length;
pid_t child;
Page 44 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
unlink("./demo_socket");
address.sun_family = AF_UNIX;
snprintf(address.sun_path, UNIX_PATH_MAX, "./demo_socket");
if(bind(socket_fd,
(struct sockaddr *) &address,
sizeof(struct sockaddr_un)) != 0)
{
printf("bind() failed\n");
return 1;
}
if(listen(socket_fd, 5) != 0)
{
printf("listen() failed\n");
return 1;
}
while((connection_fd = accept(socket_fd,
(struct sockaddr *) &address,
&address_length)) > -1)
{
child = fork();
if(child == 0)
{
/* now inside newly created connection handling process */
return connection_handler(connection_fd);
}
Page 45 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
close(socket_fd);
unlink("./demo_socket");
return 0;
}
Client.c
#include <stdio.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
struct sockaddr_un address;
int socket_fd, nbytes;
char buffer[256];
address.sun_family = AF_UNIX;
snprintf(address.sun_path, UNIX_PATH_MAX, "./demo_socket");
if(connect(socket_fd,
(struct sockaddr *) &address,
sizeof(struct sockaddr_un)) != 0)
{
Page 46 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
printf("connect() failed\n");
return 1;
}
close(socket_fd);
return 0;
}
Week 10
27. Write client and server programs (using c) for interaction between server and client
processes using Internet Domain sockets.
Server.c
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>
char sendBuff[1025];
time_t ticks;
Page 47 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(5000);
listen(listenfd, 10);
while(1)
{
connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
ticks = time(NULL);
snprintf(sendBuff, sizeof(sendBuff), "%.24s\r\n", ctime(&ticks));
write(connfd, sendBuff, strlen(sendBuff));
close(connfd);
sleep(1);
}
}
Client.c
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <arpa/inet.h>
Page 48 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
{
int sockfd = 0, n = 0;
char recvBuff[1024];
struct sockaddr_in serv_addr;
if(argc != 2)
{
printf("\n Usage: %s <ip of server> \n",argv[0]);
return 1;
}
memset(recvBuff, '0',sizeof(recvBuff));
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("\n Error : Could not create socket \n");
return 1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(5000);
Page 49 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
if(n < 0)
{
printf("\n Read error \n");
}
return 0;
}
28. Write a C program that illustrates two processes communicating using shared memory.
DESCRIPTION:
Shared Memory is an efficeint means of passing data between programs. One program
will create a memory portion which other processes (if permitted) can access.
The problem with the pipes, FIFO’s and message queues is that for two processes to
exchange information, the information has to go through the kernel. Shared memory provides a
way around this by letting two or more processes share a memory segment.
In shared memory concept if one process is reading into some shared memory, for
example, other processes must wait for the read to finish before processing the data.
A process creates a shared memory segment using shmget()|. The original owner of a
shared memory segment can assign ownership to another user with shmctl(). It can also revoke
this assignment. Other processes with proper permission can perform various control functions
on the shared memory segment using shmctl(). Once created, a shared segment can be attached
to a process address space using shmat(). It can be detached using shmdt() (see shmop()). The
attaching process must have the appropriate permissions for shmat(). Once attached, the process
can read or write to the segment, as allowed by the permission requested in the attach operation.
A shared segment can be attached multiple times by the same process. A shared memory
segment is described by a control structure with a unique ID that points to an area of physical
memory. The identifier of the segment is called the shmid. The structure definition for the shared
memory segment control structures and prototypews can be found in <sys/shm.h>.
Page 50 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
The key argument is a access value associated with the semaphore ID. The size argument is the
size in bytes of the requested shared memory. The shmflg argument specifies the initial access
permissions and creation control flags.
When the call succeeds, it returns the shared memory segment ID. This call is also used to get
the ID of an existing shared segment (from a process requesting sharing of some existing
memory portion).
...
key = ...
size = ...
shmflg) = ...
Page 51 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
-- Unlock the shared memory segment. The process must have the
effective ID of superuser to perform this command.
IPC_STAT
-- Return the status information contained in the control structure and
place it in the buffer pointed to by buf. The process must have read
permission on the segment to perform this command.
IPC_SET
-- Set the effective user and group identification and access
permissions. The process must have an effective ID of owner, creator
or superuser to perform this command.
IPC_RMID
-- Remove the shared memory segment.
The buf is a sructure of type struct shmid_ds which is defined in <sys/shm.h>
The following code illustrates shmctl():
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
...
int cmd; /* command code for shmctl() */
int shmid; /* segment ID */
struct shmid_ds shmid_ds; /* shared memory data structure to
hold results */
...
shmid = ...
cmd = ...
if ((rtrn = shmctl(shmid, cmd, shmid_ds)) == -1) {
perror("shmctl: shmctl failed");
exit(1);
}
..
Attaching and Detaching a Shared Memory Segment
shmat() and shmdt() are used to attach and detach shared memory segments. They are prototypes
as follows:
void *shmat(int shmid, const void *shmaddr, int shmflg);
int shmdt(const void *shmaddr);
shmat() returns a pointer, shmaddr, to the head of the shared segment associated with a valid
shmid. shmdt() detaches the shared memory segment located at the address indicated by shmaddr
. The following code illustrates calls to shmat() and shmdt():
#include <sys/types.h>
#include <sys/ipc.h>
Page 52 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
#include <sys/shm.h>
static struct state { /* Internal record of attached segments. */
int shmid; /* shmid of attached segment */
char *shmaddr; /* attach point */
int shmflg; /* flags used on attach */
} ap[MAXnap]; /* State of current attached segments. */
int nap; /* Number of currently attached segments. */
...
char *addr; /* address work variable */
register int i; /* work area */
register struct state *p; /* ptr to current state entry */
...
p = &ap[nap++];
p->shmid = ...
p->shmaddr = ...
p->shmflg = ...
p->shmaddr = shmat(p->shmid, p->shmaddr, p->shmflg);
if(p->shmaddr == (char *)-1) {
perror("shmop: shmat failed");
nap--;
} else
(void) fprintf(stderr, "shmop: shmat returned %#8.8x\n",
p->shmaddr);
...
i = shmdt(addr);
if(i == -1) {
perror("shmop: shmdt failed");
} else {
(void) fprintf(stderr, "shmop: shmdt returned %d\n", i);
for (p = ap, i = nap; i--; p++)
if (p->shmaddr == addr) *p = ap[--nap];
}
...
Algorithm:
1. Start
2. create shared memory using shmget( ) system call
3. if success full it returns positive value
4. attach the created shared memory using shmat( ) system
call
Page 53 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Page 54 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
}
return 0;
}
Input:
#./a.out koteswararao
Output:
writing to segment koteswararao
Description: The business of banks is making loans. Assessing the credit worthiness of an
applicant is of crucial importance. You have to develop a system to help a loan officer
decide whether the credit of a customer is good, or bad. A bank’s business rules
regarding loans must consider two opposing factors. On the one hand, a bank wants to
make as many loans as possible. Interest on these loans is the ban’s profit source. On the
other hand, a bank cannot afford to make too many bad loans. Too many bad loans could
lead to the collapse of the bank. The bank’s loan policy must involve a compromise not
too strict, and not too lenient.
To do the assignment, you first and foremost need some knowledge about the world of
credit . You can acquire such knowledge in a number of ways.
1. Knowledge Engineering. Find a loan officer who is willing to talk. Interview her and try
to represent her knowledge in the form of production rules.
2. Books. Find some training manuals for loan officers or perhaps a suitable textbook on
finance. Translate this knowledge from text form to production rule form.
Page 55 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
3. Common sense. Imagine yourself as a loan officer and make up reasonable rules which
can be used to judge the credit worthiness of a loan applicant.
4. Case histories. Find records of actual cases where competent loan officers correctly
judged when not to, approve a loan application.
Actual historical credit data is not always easy to come by because of confidentiality rules.
Here is one such dataset ( original) Excel spreadsheet version of the German credit data
(download from web).
In spite of the fact that the data is German, you should probably make use of it for this
assignment, (Unless you really can consult a real loan officer !)
DM stands for Deutsche Mark, the unit of currency, worth about 90 cents Canadian
(but looks and acts like a quarter).
Owns_telephone. German phone rates are much higher than in Canada so fewer
people own telephones.
There are 20 attributes used in judging a loan applicant. The goal is the classify the
applicant into one of two categories, good or bad.
EXPERIMENT-1
Aim: To list all the categorical(or nominal) attributes and the real valued attributes using Weka
mining tool.
Procedure:
Page 56 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
4) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
5) Clicking on any attribute in the left panel will show the basic statistics on that selected
attribute.
SampleOutput:
EXPERIMENT-2
Aim: To identify the rules with some of the important attributes by a) manually and b) Using
Weka .
Theory:
Association rule mining is defined as: Let be a set of n binary attributes called items. Let be a set
of transactions called the database. Each transaction in D has a unique transaction ID and
contains a subset of the items in I. A rule is defined as an implication of the form X=>Y where
Page 57 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
X,Y C I and X Π Y=Φ . The sets of items (for short itemsets) X and Y are called antecedent (left
hand side or LHS) and consequent (righthandside or RHS) of the rule respectively.
To illustrate the concepts, we use a small example from the supermarket domain.
The set of items is I = {milk,bread,butter,beer} and a small database containing the items (1
codes presence and 0 absence of an item in a transaction) is shown in the table to the right. An
example rule for the supermarket could be meaning that if milk and bread is bought, customers
also buy butter.
Note: this example is extremely small. In practical applications, a rule needs a support of several
hundred transactions before it can be considered statistically significant, and datasets often
contain thousands or millions of transactions.
To select interesting rules from the set of all possible rules, constraints on various measures of
significance and interest can be used. The bestknown constraints are minimum thresholds on
support and confidence. The support supp(X) of an itemset X is defined as the proportion of
transactions in the data set which contain the itemset. In the example database, the itemset
{milk,bread} has a support of 2 / 5 = 0.4 since it occurs in 40% of all transactions (2 out of 5
transactions).
The confidence of a rule is defined . For example, the rule has a confidence of 0.2 / 0.4 = 0.5 in
the database, which means that for 50% of the transactions containing milk and bread the rule is
correct. Confidence can be interpreted as an estimate of the probability P(Y | X), the probability
of finding the RHS of the rule in transactions under the condition that these transactions also
contain the LHS .
ALGORITHM:
Association rule mining is to find out association rules that satisfy the predefined minimum
support and confidence from a given database. The problem is usually decomposed into two
subproblems. One is to find those itemsets whose occurrences exceed a predefined threshold in
the database; those itemsets are called frequent or large itemsets. The second problem is to
generate association rules from those large itemsets with the constraints of minimal confidence.
Suppose one of the large itemsets is Lk, Lk = {I1, I2, … , Ik}, association rules with this itemsets
are generated in the following way: the first rule is {I1, I2, … , Ik1} and {Ik}, by checking the
confidence this rule can be determined as interesting or not. Then other rule are generated by
deleting the last items in the antecedent and inserting it to the consequent, further the confidences
of the new rules are checked to determine the interestingness of them. Those processes iterated
until the antecedent becomes empty. Since the second subproblem is quite straight forward, most
of the researches focus on the first subproblem. The Apriori algorithm finds the frequent sets L
In Database D.
Page 58 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
· Join Step.
· Prune Step.
Apriori Pseudocode
Apriori (T,£)
K<2
while L(k1)≠ Φ
C(k)<Generate( Lk − 1)
for transactions t € T
C(t)Subset(Ck,t)
count[c]<count[ c]+1
K<K+ 1
return Ụ L(k) k
Procedure:
Page 59 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
5) Go to Associate Tab.
Sample output:
Page 60 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
EXPERIMENT-3
Aim: To create a Decision tree by training data set using Weka mining tool.
Theory:
Classification is a data mining function that assigns items in a collection to target categories or
classes. The goal of classification is to accurately predict the target class for each case in the
data. For example, a classification model could be used to identify loan applicants as low,
medium, or high credit risks.
A classification task begins with a data set in which the class assignments are known. For
example, a classification model that predicts credit risk could be developed based on observed
data for many loan applicants over a period of time.
In addition to the historical credit rating, the data might track employment history, home
ownership or rental, years of residence, number and type of investments, and so on. Credit rating
would be the target, the other attributes would be the predictors, and the data for each customer
would constitute a case.
Classifications are discrete and do not imply order. Continuous, floatingpoint values would
indicate a numerical, rather than a categorical, target. A predictive model with a numerical target
uses a regression algorithm, not a classification algorithm.
The simplest type of classification problem is binary classification. In binary classification, the
target attribute has only two possible values: for example, high credit rating or low credit rating.
Multiclass targets have more than two values: for example, low, medium, high, or unknown
credit rating.
In the model build (training) process, a classification algorithm finds relationships between the
values of the predictors and the values of the target. Different classification algorithms use
Page 61 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
different techniques for finding relationships. These relationships are summarized in a model,
which can then be applied to a different data set in which the class assignments are unknown.
Classification models are tested by comparing the predicted values to known target values in a
set of test data. The historical data for a classification project is typically divided into two data
sets: one for building the model; the other for testing the model.
Scoring a classification model results in class assignments and probabilities for each case. For
example, a model that classifies customers as low, medium, or high value would also predict the
probability of each classification for each customer.
· Decision Tree
Decision trees automatically generate rules, which are conditional statements that reveal the
logic used to build the tree.
· Naive Bayes
Naive Bayes uses Bayes' Theorem, a formula that calculates a probability by counting the
frequency of values and combinations of values in the historical data.
Procedure:
4) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
5) Go to Classify tab.
6) Here the c4.5 algorithm has been chosen which is entitled as j48 in Java and can be selected
by clicking the button choose
Page 62 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
13) right click on the result list and select ” visualize tree “option .
Sample output:
Page 63 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Page 64 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
EXPERIMENT-4
Aim: To find the percentage of examples that are classified correctly by using the above created
decision tree model? ie.. Testing on the training set.
Theory:
Naive Bayes classifier assumes that the presence (or absence) of a particular feature of a class is
unrelated to the presence (or absence) of any other feature. For example, a fruit may be
considered to be an apple if it is red, round, and about 4" in diameter. Even though these features
depend on the existence of the other features, a naive Bayes classifier considers all of these
properties to independently contribute to the probability that this fruit is an apple.
An advantage of the naive Bayes classifier is that it requires a small amount of training data to
estimate the parameters (means and variances of the variables) necessary for classification.
Because independent variables are assumed, only the variances of the variables for each class
need to be determined and not the entirecovariance matrix The naive Bayes probabilistic model :
P(C|F1 .................Fn) over a dependent class variable C with a small number of outcomes or
classes, conditional on several feature variables F1 through Fn. The problem is that if the
number of features n is large or when a feature can take on a large number of values, then basing
such a model on probability tables is infeasible. We therefore reformulate the model to make it
more tractable.
Page 65 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
In practice we are only interested in the numerator of that fraction, since the denominator does
not depend on C and the values of the features Fi are given, so that the denominator is effectively
constant. The numerator is equivalent to the joint probability model p(C,F1........Fn) which can
be rewritten as follows, using repeated applications of the definition of conditional probability:
=p(C)p(F1|C) p(F2|C,F1)p(F3.........Fn|C,F1,F2)
= p(C)p(F1|C) p(F2|C,F1)p(F3.........Fn|C,F1,F2)......p(Fn|C,F1,F2,F3.........Fn1)
Now the "naive" conditional independence assumptions come into play: assume that each feature
Fi is conditionally independent of every other feature Fj for j≠i .
=p(C)π p(Fi|C)
This means that under the above independence assumptions, the conditional distribution over the
class variable C can be expressed like this:
where Z is a scaling factor dependent only on F1.........Fn, i.e., a constant if the values of the
feature variables are known.
Models of this form are much more manageable, since they factor into a so called class prior
p(C) and independent probability distributions p(Fi|C). If there are k classes and if a model for
eachp(Fi|C=c) can be expressed in terms of r parameters, then the corresponding naive Bayes
model has (k − 1) + n r k parameters. In practice, often k = 2 (binary classification) and r = 1
(Bernoulli variables as features) are common, and so the total number of parameters of the naive
Bayes model is 2n + 1, where n is the number of binary features used for prediction
Page 66 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
• D : Set of tuples
– X : (x1,x2,x3,…. xn)
k=1
Procedure:
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
6) Go to Classify tab.
Page 67 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Sample output:
Page 68 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
a b <-- classified as
245 29 | a = YES
17 309 | b = NO
EXPERIMENT-5
Procedure:
2) click Set
3) Choose the file which contains records that were not in the training set we used to create
the model.
Page 69 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
4) click Start(WEKA will run this test data set through the model we already created. )
Sample output:
This can be experienced by the different problem solutions while doing practice.
The important numbers to focus on here are the numbers next to the "Correctly Classified
Instances" (92.3 percent) and the "Incorrectly Classified Instances" (7.6 percent). Other
important numbers are in the "ROC Area" column, in the first row (the 0.936); Finally, in the
"Confusion Matrix," it shows the number of false positives and false negatives. The false
positives are 29, and the false negatives are 17 in this matrix.
Based on our accuracy rate of 92.3 percent, we say that upon initial analysis, this is a good
model.
One final step to validating our classification tree, which is to run our test set through the model
and ensure that accuracy of the model
Comparing the "Correctly Classified Instances" from this test set with the "Correctly Classified
Instances" from the training set, we see the accuracy of the model , which indicates that the
model will not break down with unknown data, or when future data is applied to it.
EXPERIMENT-6
Aim: To create a Decision tree by cross validation training data set using Weka mining tool.
Theory:
Page 70 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Decision tree learning, used in data mining and machine learning, uses a decision tree as a
predictive model which maps observations about an item to conclusions about the item's target
value In these tree structures, leaves represent classifications and branches represent
conjunctions of features that lead to those classifications. In decision analysis, a decision tree can
be used to visually and explicitly represent decisions and decision making. In data mining, a
decision tree describes data but not decisions; rather the resulting classification tree can be an
input for decision making. This page deals with decision trees in data mining.
Decision tree learning is a common method used in data mining. The goal is to create a model
that predicts the value of a target variable based on several input variables. Each interior node
corresponds to one of the input variables; there are edges to children for each of the possible
values of that input variable. Each leaf represents a value of the target variable given the values
of the input variables represented by the path from the root to the leaf.
A tree can be "learned" by splitting the source set into subsets based on an attribute value test.
This process is repeated on each derived subset in a recursive manner called recursive
partitioning. The recursion is completed when the subset at a node all has the same value of the
target variable, or when splitting no longer adds value to the predictions.
In data mining, trees can be described also as the combination of mathematical and
computational techniques to aid the description, categorisation and generalization of a given set
of data.
The dependent variable, Y, is the target variable that we are trying to understand, classify or
generalise. The vector x is comprised of the input variables, x1, x2, x3 etc., that are used for that
task.
Procedure:
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
Page 71 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
6) Go to Classify tab.
8) Select J48
Sample output:
Page 72 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
a b <-- classified as
236 38 | a = YES
23 303 | b = NO
Page 73 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
EXPERIMENT-7
Aim: Delete one attribute from GUI Explorer and see the effect using Weka mining tool.
Procedure:
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
6) In the "Filter" panel, click on the "Choose" button. This will show a popup window with list
available filters.
7) Select “weka.filters.unsupervised.attribute.Remove”
8) Next, click on text box immediately to the right of the "Choose" button
9) In the resulting dialog box enter the index of the attribute to be filtered out (Make sure that the
"invertSelection" option is set to false )
10) Then click "OK" . Now, in the filter box you will see "Remove -R 1"
11) Click the "Apply" button to apply this filter to the data. This will remove the "id" attribute
and create a new working relation
12) To save the new working relation as an ARFF file, click on save button in the top panel.
Page 74 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
13) Go to OPEN file and browse the file that is newly saved (attribute deleted file)
21) right click on the result list and select ” visualize tree “option .
22) Compare the output results with that of the 4th experiment
Sample output:
Page 75 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Page 76 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Page 77 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
EXPERIMENT-8
Aim: Select some attributes from GUI Explorer and perform classification and see the effect
using Weka mining tool.
Procedure:
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
6) select some of the attributes from attributes list which are to be removed. With this step only
the attributes necessary for classification are left in the attributes panel.
9) Select j48
14) right click on the result list and select ” visualize tree “option .
Page 78 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Sample output:
Page 79 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
EXPERIMENT-9
Aim: To create a Decision tree by cross validation training data set by changing the cost matrix
in Weka mining tool.
Procedure:
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
6) Go to Classify tab.
8) Select j48
12)Set the matrix values and click on resize. Then close the window.
13)Click Ok
14)Click start.
Page 80 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Sample output:
Page 81 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
EXPERIMENT-10
Aim: Is small rule better or long rule check the bias,by training data set using Weka mining tool.
Procedure:
This will be based on the attribute set, and the requirement of relationship among attribute we
want to study. This can be viewed based on the database and user requirement.
EXPERIMENT-11
Aim: To create a Decision tree by using Prune mode and Reduced error Pruning and show
accuracy for cross validation trained data set using Weka mining tool.
Theory :
Page 82 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Reduced-error pruning
• Assigning the pruned node the most common classification of the training instances attached to
that node
• Always select a node whose removal most increases the DT accuracy over the validation set
• Stop when further pruning decreases the DT accuracy over the validation set
IF (Children=yes) Λ (income=>30000)
THEN (car=Yes)
Procedure:
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
7) Go to Classify tab.
Page 83 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
11) right click on the text box besides choose button ,select show properties
17) right click on the result list and select ” visualize tree “option .
Sample output:
Page 84 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
Page 85 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
EXPERIMENT-12
Aim: To compare OneR classifier which uses single attribute and rule with J48 and PART
classifier’s, by training data set using Weka mining tool.
Procedure:
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
7) Go to Classify tab.
9) Select “J48” .
14) right click on the result list and select ” visualize tree “option .
(or)
Page 86 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
7) Go to Classify tab.
9) Select “OneR” .
5) Go to OPEN file and browse the file that is already stored in the system “bank.csv”.
7) Go to Classify tab.
Page 87 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
9) Select “PART” .
Sample output:
J48
Page 88 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
One R
Page 89 ROKESH
LINUX PROGRAMMING AND DATA MINING LAB MANUAL
PART
Page 90 ROKESH