/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * Explorer.java * Copyright (C) 1999 Len Trigg * */ package weka.gui.explorer; import weka.core.Utils; import weka.gui.LogPanel; import weka.gui.WekaTaskMonitor; import weka.gui.visualize.MatrixPanel; import weka.gui.visualize.PlotData2D; import java.io.File; import java.io.FileInputStream; import java.awt.GridLayout; import java.awt.BorderLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Date; import java.text.SimpleDateFormat; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTabbedPane; import javax.swing.JPanel; import javax.swing.JFileChooser; import javax.swing.filechooser.FileFilter; import javax.swing.JOptionPane; import javax.swing.JLabel; import javax.swing.SwingConstants; import java.awt.*; import java.awt.image.*; /** * The main class for the Weka explorer. Lets the user create, * open, save, configure, datasets, and perform ML analysis. * * @author Len Trigg (trigg@cs.waikato.ac.nz) * @version $Revision: 1.1.1.1 $ */ public class Explorer extends JPanel { /** The panel for preprocessing instances */ protected PreprocessPanel m_PreprocessPanel = new PreprocessPanel(); /** The panel for running classifiers */ protected ClassifierPanel m_ClassifierPanel = new ClassifierPanel(); /** Label for a panel that still need to be implemented */ protected ClustererPanel m_ClustererPanel = new ClustererPanel(); /** Label for a panel that still need to be implemented */ protected AssociationsPanel m_AssociationPanel = new AssociationsPanel(); /** Label for a panel that still need to be implemented */ protected AttributeSelectionPanel m_AttributeSelectionPanel = new AttributeSelectionPanel(); /** Label for a panel that still need to be implemented */ protected MatrixPanel m_VisualizePanel = new MatrixPanel(); /** The tabbed pane that controls which sub-pane we are working with */ protected JTabbedPane m_TabbedPane = new JTabbedPane(); /** The panel for log and status messages */ protected LogPanel m_LogPanel = new LogPanel(new WekaTaskMonitor()); /** * Creates the experiment environment gui with no initial experiment */ public Explorer() { String date = (new SimpleDateFormat("EEEE, d MMMM yyyy")) .format(new Date()); m_LogPanel.logMessage("Weka Knowledge Explorer was written by Len Trigg, Mark Hall and Eibe Frank"); m_LogPanel.logMessage("(c) 2003 The University of Waikato, Hamilton," + " New Zealand"); m_LogPanel.logMessage("web: http://www.cs.waikato.ac.nz/~ml/"); m_LogPanel.logMessage("Started on " + date); m_LogPanel.statusMessage("Welcome to the Weka Knowledge Explorer"); m_PreprocessPanel.setLog(m_LogPanel); m_ClassifierPanel.setLog(m_LogPanel); m_AssociationPanel.setLog(m_LogPanel); m_ClustererPanel.setLog(m_LogPanel); m_AttributeSelectionPanel.setLog(m_LogPanel); m_TabbedPane.addTab("Preprocess", null, m_PreprocessPanel, "Open/Edit/Save instances"); m_TabbedPane.addTab("Classify", null, m_ClassifierPanel, "Classify instances"); m_TabbedPane.addTab("Cluster", null, m_ClustererPanel, "Identify instance clusters"); m_TabbedPane.addTab("Associate", null, m_AssociationPanel, "Discover association rules"); m_TabbedPane.addTab("Select attributes", null, m_AttributeSelectionPanel, "Determine relevance of attributes"); m_TabbedPane.addTab("Visualize", null, m_VisualizePanel, "Explore the data"); m_TabbedPane.setSelectedIndex(0); m_TabbedPane.setEnabledAt(1, false); m_TabbedPane.setEnabledAt(2, false); m_TabbedPane.setEnabledAt(3, false); m_TabbedPane.setEnabledAt(4, false); m_TabbedPane.setEnabledAt(5, false); m_PreprocessPanel.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { m_ClassifierPanel.setInstances(m_PreprocessPanel .getInstances()); m_AssociationPanel.setInstances(m_PreprocessPanel .getInstances()); m_ClustererPanel.setInstances(m_PreprocessPanel .getInstances()); m_AttributeSelectionPanel.setInstances(m_PreprocessPanel .getInstances()); m_VisualizePanel.setInstances(m_PreprocessPanel .getInstances()); m_TabbedPane.setEnabledAt(1, true); m_TabbedPane.setEnabledAt(2, true); m_TabbedPane.setEnabledAt(3, true); m_TabbedPane.setEnabledAt(4, true); m_TabbedPane.setEnabledAt(5, true); } }); setLayout(new BorderLayout()); add(m_TabbedPane, BorderLayout.CENTER); add(m_LogPanel, BorderLayout.SOUTH); } /** * Tests out the explorer environment. * * @param args ignored. */ public static void main(String [] args) { try { Explorer explorer = new Explorer(); final JFrame jf = new JFrame("Weka Knowledge Explorer"); jf.getContentPane().setLayout(new BorderLayout()); jf.getContentPane().add(explorer, BorderLayout.CENTER); jf.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { jf.dispose(); System.exit(0); } }); jf.pack(); jf.setSize(800, 600); jf.setVisible(true); Image icon = Toolkit.getDefaultToolkit(). getImage(ClassLoader.getSystemResource("weka/gui/weka_icon.gif")); jf.setIconImage(icon); if (args.length == 1) { System.err.println("Loading instances from " + args[0]); explorer.m_PreprocessPanel.setInstancesFromFile(new File(args[0])); } } catch (Exception ex) { ex.printStackTrace(); System.err.println(ex.getMessage()); } } }