Skip to content

Instantly share code, notes, and snippets.

@Shravan40
Created July 14, 2013 16:29
Show Gist options
  • Save Shravan40/5994835 to your computer and use it in GitHub Desktop.
Save Shravan40/5994835 to your computer and use it in GitHub Desktop.
import java.io.*;
import java.util.*;
import java.lang.*;
public class main1
{
public static void main (String args[]) throws IOException
{
Centroid cent = new Centroid();
int ClustNumber;
System.out.println(" Enter the number of clusters");
Scanner input = new Scanner(System.in);
ClustNumber=input.nextInt();
String [][] numbers = new String [6][2];
double Cordx[] =new double[6];
double Cordy[] =new double[6];
File file = new File("sam.csv");
BufferedReader bufRdr = new BufferedReader(new FileReader(file));
String line = null;
int row = 0;
int col = 0;
//read each line of text file
while((line = bufRdr.readLine()) != null && row< 6 )
{
StringTokenizer st = new StringTokenizer(line,",");
while (st.hasMoreTokens())
{
//get next token and store it in the array
numbers[row][col] = st.nextToken();
col++;
}
col = 0;
row++;
}
for(row=0;row < 6;row++)
{
for(col=0; col<2;col++)
{
System.out.print(" " + numbers[row][col]);
}
System.out.println(" ");
}
for(row=0;row<6;row++)
{
Cordx[row]=Double.parseDouble(numbers[row][0]);
Cordy[row]=Double.parseDouble(numbers[row][1]);
//System.out.print(" " + Cordx[row]);
}
for(row=0;row<6;row++)
{
System.out.print(" " + Cordx[row]);
//System.out.print("\n " + Cordy[row]);
}
System.out.print(" \n");
for(row=0;row<6;row++)
{
System.out.print(" " + Cordy[row]);
}
cent.Grouping(Cordx,Cordy,ClustNumber);
}
}
//centroid
import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
public class Centroid
{
// finds the mean of the dataset for grouping
public void Grouping(double[] Cordx, double[] Cordy, int clustNumber)
{
int clusterNumber = clustNumber;
double[] ClustCordX = new double[clustNumber];
double[] ClustCordY = new double[clustNumber];
this.getMeansetCentroid(Cordx, Cordy, clustNumber);
DecimalFormat dec = new DecimalFormat("0.00");
for(int i = 0;i<Cordx.length;i++)
{
String result1 = dec.format(Cordx[i]);
String result2 = dec.format(Cordy[i]);
System.out.println("\n Cords are ( " + result1 + " , " + result2 + ")");
}
//setting random datasets as centroids
for(int i = 0; i<clustNumber;i++)
{
ClustCordX[i] = Cordx[i];
ClustCordY[i] = Cordy[i];
}
this.groupCordtoCluster(Cordx,Cordy,ClustCordX,ClustCordY);
}
public void groupCordtoCluster(double[] Cordx, double[] Cordy, double[] ClustCordX, double[] ClustCordY)
{
double temp ;
int size = Cordx.length;
int clustsize = ClustCordX.length;
int clusterComparison = clustsize;
int[] grouping = new int[size - clustsize];
double[] ClustgroupX = new double[size - clustsize];
double[] ClustgroupY = new double[size - clustsize];
int tempint = -1;
//grouping the dataset to respective clusters by comparing the distance
for(int i = clusterComparison; i < size;i++)
{
temp = 0;
for(int j = 0;j<clustsize;j++)
{
if (j == 0)
tempint++;
if(temp == 0)
{
temp = Math.sqrt(Math.pow((Cordx[i]-ClustCordX[j]),2) + Math.pow((Cordy[i]-ClustCordY[j]),2));
grouping[tempint] = j;
ClustgroupX[tempint] = Cordx[i];
ClustgroupY[tempint] = Cordy[i];
}
else if (temp > Math.sqrt(Math.pow((Cordx[i]-ClustCordX[j]),2) + Math.pow((Cordy[i]-ClustCordY[j]),2)))
{
temp = Math.sqrt(Math.pow((Cordx[i]-ClustCordX[j]),2) + Math.pow((Cordy[i]-ClustCordY[j]),2));
grouping[tempint] = j;
ClustgroupX[tempint] = Cordx[i];
ClustgroupY[tempint] = Cordy[i];
}
}
}
DecimalFormat dec = new DecimalFormat("0.00");
String result1, result2, result3, result4;
for(int i = 0; i<grouping.length;i++)
{
//for(int i = 1; i< clustNumber;i++) {
System.out.println("------------------------");
System.out.println("Clusters for group " + grouping[i]);
result1 = dec.format(Cordx[grouping[i]]);
result2 = dec.format(Cordy[grouping[i]]);
result3 = dec.format(ClustgroupX[i]);
result4 = dec.format(ClustgroupY[i]);
System.out.println("Cordinates are (" + result1 + " , " + result2 + ")");
System.out.println("------------------------");
System.out.println("Clusters for group " + grouping[i]);
System.out.println("Cordinates are (" + result3 + " , " + result4 + ")");
}
}
public void getMeansetCentroid(double[] Cordx, double[] Cordy, int ClustNumber)
{
double xCord, yCord;
double MAX=0,distance, tempd1, tempd2;
double[] Distances = new double[Cordx.length];
int reference, i, j, temp1, temp2, point, length;
reference = i = j = temp1 = temp2 = point =0;
int[] centroids;
for(j = 1; j < Cordx.length;j++)
{
Distances[j-1] = Math.sqrt(Math.pow((Cordx[j]-Cordx[0]),2) + Math.pow((Cordy[j]-Cordy[0]),2));
}
for(i=0;i<Cordx.length-1;i++)
{
for(j=0;j<Cordx.length-1-i;j++)
{
if(Distances[j+1] < Distances[j])
{
distance = Distances[j];
tempd1 = Cordx[j];
tempd2 = Cordy[j];
Distances[j] = Distances[j+1];
Cordx[j] = Cordx[j+1];
Cordy[j] = Cordy[j+1];
Distances[j+1] = distance;
Cordx[j+1] = tempd1;
Cordy[j+1] = tempd2;
}
}
}
//recalculation of centroids
point = Cordx.length;
do
{
if(Cordx.length % ClustNumber != 0)
point--;
}while(point % ClustNumber != 0);
length = point/ClustNumber;
for(i=0;i<Cordx.length;i=length+i)
{
if((i+length-1) > point)
break;
tempd1 = Cordx[i];
tempd2 = Cordy[i];
Cordx[i] = Cordx[i+length-1];
Cordy[i] = Cordy[i+length-1];
Cordx[i+length-1] = tempd1;
Cordy[i+length-1] = tempd2;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment