⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 preprocesspanel.java

📁 代码是一个分类器的实现,其中使用了部分weka的源代码。可以将项目导入eclipse运行
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
 /* *    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. *//* *    PreprocessPanel.java *    Copyright (C) 2003 Richard Kirkby, Len Trigg * */package weka.gui.explorer;import weka.core.Capabilities;import weka.core.Instances;import weka.core.OptionHandler;import weka.core.Utils;import weka.core.Capabilities.Capability;import weka.core.converters.AbstractFileLoader;import weka.core.converters.AbstractFileSaver;import weka.core.converters.ConverterUtils;import weka.core.converters.Loader;import weka.core.converters.SerializedInstancesLoader;import weka.core.converters.URLSourcedLoader;import weka.datagenerators.DataGenerator;import weka.experiment.InstanceQuery;import weka.filters.Filter;import weka.filters.SupervisedFilter;import weka.filters.unsupervised.attribute.Remove;import weka.gui.AttributeSelectionPanel;import weka.gui.AttributeSummaryPanel;import weka.gui.AttributeVisualizationPanel;import weka.gui.ConverterFileChooser;import weka.gui.GenericObjectEditor;import weka.gui.InstancesSummaryPanel;import weka.gui.Logger;import weka.gui.PropertyDialog;import weka.gui.PropertyPanel;import weka.gui.SysErrLog;import weka.gui.TaskLogger;import weka.gui.ViewerDialog;import weka.gui.explorer.Explorer.CapabilitiesFilterChangeEvent;import weka.gui.explorer.Explorer.CapabilitiesFilterChangeListener;import weka.gui.sql.SqlViewerDialog;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Font;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeSupport;import java.io.BufferedOutputStream;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.ObjectOutputStream;import java.net.URL;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JCheckBox;import javax.swing.JComboBox;import javax.swing.JDialog;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.ListSelectionModel;import javax.swing.SwingUtilities;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import javax.swing.filechooser.FileFilter;/**  * This panel controls simple preprocessing of instances. Summary * information on instances and attributes is shown. Filters may be * configured to alter the set of instances. Altered instances may * also be saved. * * @author Richard Kirkby (rkirkby@cs.waikato.ac.nz) * @author Len Trigg (trigg@cs.waikato.ac.nz) * @version $Revision: 1.66 $ */public class PreprocessPanel  extends JPanel   implements CapabilitiesFilterChangeListener {    /** Displays simple stats on the working instances */  protected InstancesSummaryPanel m_InstSummaryPanel =    new InstancesSummaryPanel();  /** Click to load base instances from a file */  protected JButton m_OpenFileBut = new JButton("Open file...");  /** Click to load base instances from a URL */  protected JButton m_OpenURLBut = new JButton("Open URL...");  /** Click to load base instances from a Database */  protected JButton m_OpenDBBut = new JButton("Open DB...");  /** Click to generate artificial data */  protected JButton m_GenerateBut = new JButton("Generate...");  /** Click to revert back to the last saved point */  protected JButton m_UndoBut = new JButton("Undo");  /** Click to open the current instances in a viewer */  protected JButton m_EditBut = new JButton("Edit...");  /** Click to apply filters and save the results */  protected JButton m_SaveBut = new JButton("Save...");    /** Panel to let the user toggle attributes */  protected AttributeSelectionPanel m_AttPanel = new AttributeSelectionPanel();  /** Button for removing attributes */  JButton m_RemoveButton = new JButton("Remove");  /** Displays summary stats on the selected attribute */  protected AttributeSummaryPanel m_AttSummaryPanel =    new AttributeSummaryPanel();  /** Lets the user configure the filter */  protected GenericObjectEditor m_FilterEditor =    new GenericObjectEditor();  /** Filter configuration */  protected PropertyPanel m_FilterPanel = new PropertyPanel(m_FilterEditor);  /** Click to apply filters and save the results */  protected JButton m_ApplyFilterBut = new JButton("Apply");  /** The file chooser for selecting arff files */  protected ConverterFileChooser m_FileChooser     = new ConverterFileChooser(new File(System.getProperty("user.dir")));  /** Stores the last URL that instances were loaded from */  protected String m_LastURL = "http://";    /** Stores the last sql query executed */  protected String m_SQLQ = new String("SELECT * FROM ?");   /** The working instances */  protected Instances m_Instances;  /** The last generator that was selected */  protected DataGenerator m_DataGenerator = null;  /** The visualization of the attribute values */  protected AttributeVisualizationPanel m_AttVisualizePanel =     new AttributeVisualizationPanel();  /** Keeps track of undo points */  protected File[] m_tempUndoFiles = new File[20]; // set number of undo ops here  /** The next available slot for an undo point */  protected int m_tempUndoIndex = 0;    /**   * Manages sending notifications to people when we change the set of   * working instances.   */  protected PropertyChangeSupport m_Support = new PropertyChangeSupport(this);  /** A thread for loading/saving instances from a file or URL */  protected Thread m_IOThread;  /** The message logger */  protected Logger m_Log = new SysErrLog();  /** the parent frame */  protected Explorer m_Explorer = null;    static {     GenericObjectEditor.registerEditors();  }    /**   * Creates the instances panel with no initial instances.   */  public PreprocessPanel() {    // Create/Configure/Connect components    m_FilterEditor.setClassType(weka.filters.Filter.class);    if (ExplorerDefaults.getFilter() != null)      m_FilterEditor.setValue(ExplorerDefaults.getFilter());    m_OpenFileBut.setToolTipText("Open a set of instances from a file");    m_OpenURLBut.setToolTipText("Open a set of instances from a URL");    m_OpenDBBut.setToolTipText("Open a set of instances from a database");    m_GenerateBut.setToolTipText("Generates artificial data");    m_UndoBut.setToolTipText("Undo the last change to the dataset");    m_EditBut.setToolTipText("Open the current dataset in a Viewer for editing");    m_SaveBut.setToolTipText("Save the working relation to a file");    m_ApplyFilterBut.setToolTipText("Apply the current filter to the data");    m_FileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);    m_OpenURLBut.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {	setInstancesFromURLQ();      }    });    m_OpenDBBut.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        SqlViewerDialog dialog = new SqlViewerDialog(null);        dialog.setVisible(true);        if (dialog.getReturnValue() == JOptionPane.OK_OPTION)          setInstancesFromDBQ(dialog.getURL(), dialog.getUser(),                              dialog.getPassword(), dialog.getQuery());      }    });    m_OpenFileBut.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {	setInstancesFromFileQ();      }    });    m_GenerateBut.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {	generateInstances();      }    });    m_UndoBut.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {	undo();      }    });    m_EditBut.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        edit();      }    });    m_SaveBut.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {	saveWorkingInstancesToFileQ();      }    });    m_ApplyFilterBut.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  applyFilter((Filter) m_FilterEditor.getValue());	}      });    m_AttPanel.getSelectionModel()      .addListSelectionListener(new ListSelectionListener() {	public void valueChanged(ListSelectionEvent e) {	  if (!e.getValueIsAdjusting()) {	  	    ListSelectionModel lm = (ListSelectionModel) e.getSource();	    for (int i = e.getFirstIndex(); i <= e.getLastIndex(); i++) {	      if (lm.isSelectedIndex(i)) {		m_AttSummaryPanel.setAttribute(i);		m_AttVisualizePanel.setAttribute(i);		break;	      }	    }	  }	}    });    m_InstSummaryPanel.setBorder(BorderFactory				 .createTitledBorder("Current relation"));    JPanel attStuffHolderPanel = new JPanel();    attStuffHolderPanel.setBorder(BorderFactory				  .createTitledBorder("Attributes"));    attStuffHolderPanel.setLayout(new BorderLayout());    attStuffHolderPanel.add(m_AttPanel, BorderLayout.CENTER);    m_RemoveButton.setEnabled(false);    m_RemoveButton.setToolTipText("Remove selected attributes.");    m_RemoveButton.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent e) {	  try {	    Remove r = new Remove();	    int [] selected = m_AttPanel.getSelectedAttributes();	    if (selected.length == 0) {	      return;	    }	    if (selected.length == m_Instances.numAttributes()) {	      // Pop up an error optionpane	      JOptionPane.showMessageDialog(PreprocessPanel.this,					    "Can't remove all attributes from data!\n",					    "Remove Attributes",					    JOptionPane.ERROR_MESSAGE);	      m_Log.logMessage("Can't remove all attributes from data!");	      m_Log.statusMessage("Problem removing attributes");	      return;	    }	    r.setAttributeIndicesArray(selected);	    applyFilter(r);	  } catch (Exception ex) {	    if (m_Log instanceof TaskLogger) {	      ((TaskLogger)m_Log).taskFinished();	    }	    // Pop up an error optionpane	    JOptionPane.showMessageDialog(PreprocessPanel.this,					  "Problem filtering instances:\n"					  + ex.getMessage(),					  "Remove Attributes",					  JOptionPane.ERROR_MESSAGE);	    m_Log.logMessage("Problem removing attributes: " + ex.getMessage());	    m_Log.statusMessage("Problem removing attributes");	  }	}      });    JPanel p1 = new JPanel();    p1.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));    p1.setLayout(new BorderLayout());    p1.add(m_RemoveButton, BorderLayout.CENTER);    attStuffHolderPanel.add(p1, BorderLayout.SOUTH);    m_AttSummaryPanel.setBorder(BorderFactory		    .createTitledBorder("Selected attribute"));    m_UndoBut.setEnabled(false);    m_EditBut.setEnabled(false);    m_SaveBut.setEnabled(false);    m_ApplyFilterBut.setEnabled(false);        // Set up the GUI layout    JPanel buttons = new JPanel();    buttons.setBorder(BorderFactory.createEmptyBorder(10, 5, 10, 5));    buttons.setLayout(new GridLayout(1, 6, 5, 5));    buttons.add(m_OpenFileBut);    buttons.add(m_OpenURLBut);    buttons.add(m_OpenDBBut);    buttons.add(m_GenerateBut);    buttons.add(m_UndoBut);    buttons.add(m_EditBut);    buttons.add(m_SaveBut);    JPanel attInfo = new JPanel();    attInfo.setLayout(new BorderLayout());    attInfo.add(attStuffHolderPanel, BorderLayout.CENTER);    JPanel filter = new JPanel();    filter.setBorder(BorderFactory		    .createTitledBorder("Filter"));    filter.setLayout(new BorderLayout());    filter.add(m_FilterPanel, BorderLayout.CENTER);    filter.add(m_ApplyFilterBut, BorderLayout.EAST);     JPanel attVis = new JPanel();    attVis.setLayout( new GridLayout(2,1) );    attVis.add(m_AttSummaryPanel);    JComboBox colorBox = m_AttVisualizePanel.getColorBox();    colorBox.setToolTipText("The chosen attribute will also be used as the " +			    "class attribute when a filter is applied.");    final JButton visAllBut = new JButton("Visualize All");    visAllBut.addActionListener(new ActionListener() {	public void actionPerformed(ActionEvent ae) {	  if (m_Instances != null) {	    try {	      final weka.gui.beans.AttributeSummarizer as = 		new weka.gui.beans.AttributeSummarizer();	      as.setColoringIndex(m_AttVisualizePanel.getColoringIndex());	      as.setInstances(m_Instances);	      	      final javax.swing.JFrame jf = new javax.swing.JFrame();	      jf.getContentPane().setLayout(new java.awt.BorderLayout());	      	      jf.getContentPane().add(as, java.awt.BorderLayout.CENTER);	      jf.addWindowListener(new java.awt.event.WindowAdapter() {		  public void windowClosing(java.awt.event.WindowEvent e) {		    visAllBut.setEnabled(true);		    jf.dispose();		  }		});	      jf.setSize(830,600);	      jf.setVisible(true);	    } catch (Exception ex) {	      ex.printStackTrace();	    }	  }	}      });    JPanel histoHolder = new JPanel();    histoHolder.setLayout(new BorderLayout());    histoHolder.add(m_AttVisualizePanel, BorderLayout.CENTER);    JPanel histoControls = new JPanel();    histoControls.setLayout(new BorderLayout());    histoControls.add(colorBox, BorderLayout.CENTER);    histoControls.add(visAllBut, BorderLayout.EAST);    histoHolder.add(histoControls, BorderLayout.NORTH);    attVis.add(histoHolder);    JPanel lhs = new JPanel();    lhs.setLayout(new BorderLayout());    lhs.add(m_InstSummaryPanel, BorderLayout.NORTH);    lhs.add(attInfo, BorderLayout.CENTER);    JPanel rhs = new JPanel();    rhs.setLayout(new BorderLayout());    rhs.add(attVis, BorderLayout.CENTER);    JPanel relation = new JPanel();    relation.setLayout(new GridLayout(1, 2));    relation.add(lhs);    relation.add(rhs);    JPanel middle = new JPanel();    middle.setLayout(new BorderLayout());    middle.add(filter, BorderLayout.NORTH);    middle.add(relation, BorderLayout.CENTER);    setLayout(new BorderLayout());    add(buttons, BorderLayout.NORTH);    add(middle, BorderLayout.CENTER);  }  /**   * Sets the Logger to receive informational messages   *   * @param newLog the Logger that will now get info messages   */  public void setLog(Logger newLog) {    m_Log = newLog;  }    /**   * Tells the panel to use a new base set of instances.   *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -