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

📄 attributevisualizationpanel.java

📁 Java 编写的多种数据挖掘算法 包括聚类、分类、预处理等
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/* *    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. *//** *    AttributeVisualizationPanel.java *    Copyright (C) 2003 Ashraf M. Kibriya * */package weka.gui;import java.io.FileReader;import java.util.Random;import java.awt.Color;import java.awt.BorderLayout;import java.awt.Graphics;import java.awt.Font;import java.awt.FontMetrics;import java.awt.FlowLayout;import java.awt.Rectangle;import java.awt.event.ComponentAdapter;import java.awt.event.ComponentEvent;import java.awt.event.MouseEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseMotionAdapter;import java.awt.event.ItemListener;import java.awt.event.ItemEvent;//import java.awt.Image;//import java.awt.image.BufferedImage;import javax.swing.JPanel;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JComboBox;import weka.core.Attribute;import weka.core.Instances;import weka.core.AttributeStats;import weka.core.Utils;import weka.core.FastVector;import weka.gui.visualize.PrintablePanel;import weka.gui.visualize.PrintableComponent;/** * Creates a panel that shows a visualization of an * attribute in a dataset. For nominal attribute it * shows a bar plot, with each bar corresponding to * each nominal value of the attribute with its height * equal to the frequecy that value appears in the * dataset. For numeric attributes, it displays a * histogram. The width of an interval in the * histogram is calculated using Scott's(1979) * method: <br> *    intervalWidth = Max(1, 3.49*Std.Dev*numInstances^(1/3)) * Then the number of intervals is calculated by: <br> *   intervals = max(1, Math.round(Range/intervalWidth); * * @author Ashraf M. Kibriya (amk14@cs.waikato.ac.nz) * @version $Revision: 1.24 $ */public class AttributeVisualizationPanel extends PrintablePanel {    /** This holds the current set of instances */  protected Instances m_data;    /**   * This holds the attribute stats of the current attribute on display. It is   * calculated in setAttribute(int idx) when it is called to set a new   * attribute index.   */  protected AttributeStats m_as;    /** This holds the index of the current attribute on display and should be   *  set through setAttribute(int idx).   */  protected int m_attribIndex;    /**   * This holds the max value of the current attribute. In case of nominal   * attribute it is the highest count that a nominal value has in the   * attribute (given by m_as.nominalCounts[i]), otherwise in case of numeric   * attribute it is simply the maximum value present in the attribute (given by   * m_as.numericStats.max). It is used to calculate the ratio of the height of   * the bars with respect to the height of the display area.   */  protected int m_maxValue;    /**   * This array holds the count (or height) for the each of the bars in a   * barplot or a histogram. In case of barplots (and current attribute being   * nominal) its length (and the number of bars) is equal to the number of   * nominal values in the current attribute, with each field of the array being   * equal to the count of each nominal that it represents (the count of ith   * nominal value of an attribute is given by m_as.nominalCounts[i]). Whereas,   * in case of histograms (and current attribute being numeric) the width of   * its intervals is calculated by Scott's(1979) method: <br>   *    intervalWidth = Max(1, 3.49*Std.Dev*numInstances^(1/3))   * And the number of intervals by: <br>   *   intervals = max(1, Math.round(Range/intervalWidth);   * Then each field of this array contains the number of values of the current   * attribute that fall in the histogram interval that it represents. <br>   * NOTE: The values of this array are only calculated if the class attribute   * is not set or if it is numeric.   */  protected int m_histBarCounts[];    /**   * This array holds the per class count (or per class height) of the each of   * the bars in a barplot or a histogram.   * For nominal attributes the format is: <br>   *    m_histBarClassCounts[nominalValue][classValue+1].   * For numeric attributes the format is: <br>   *    m_histBarClassCounts[interval][classValues+1], <br>   *      where the number of intervals is calculated by the Scott's method as   *            mentioned above.   * The array is initialized to have 1+numClasses to accomodate for instances   * with missing class value. The ones with missing class value are displayed   * as a black sub par in a histogram or a barplot.   *   * NOTE: The values of this array are only calculated if the class attribute   * is set and it is nominal.   */  int m_histBarClassCounts[][];    /**   * Contains the range of each bar in a histogram. It is used to work out the   * range of bar the mouse pointer is on in getToolTipText().   */  protected double m_barRange;    /** Contains the current class index. */  protected int m_classIndex;    /** This stores the BarCalc or HistCalc thread while a new barplot or   * histogram is being calculated. */  private Thread m_hc;    /** True if the thread m_hc above is running. */  private boolean m_threadRun=false;    /** This stores and lets the user select a class attribute. It also has   * an entry "No Class" if the user does not want to set a class attribute   * for colouring.   */  protected JComboBox m_colorAttrib;    /**   * Fontmetrics used to get the font size which is required for calculating   * displayable area size, bar height ratio and width of strings that are   * displayed on top of bars indicating their count.   */  private FontMetrics m_fm;    /**   * Lock variable to synchronize the different threads running currently in   * this class. There are two to three threads in this class, AWT paint thread   * which is handled differently in paintComponent() which checks on   * m_threadRun to determine if it can perform full paint or not, the second   * thread is the main execution thread and the third is the one represented by   * m_hc which we start when we want to calculate the internal fields for a bar   * plot or a histogram.   */  private Integer m_locker = new Integer(1);    //Image img;    /** Contains discrete colours for colouring of subbars of histograms and   * bar plots when the class attribute is set and is nominal   */  private FastVector m_colorList = new FastVector();    /** default colour list */  private static final Color [] m_defaultColors = {Color.blue,  Color.red,  Color.cyan,  new Color(75, 123, 130),  Color.pink,  Color.green,  Color.orange,  new Color(255, 0, 255),  new Color(255, 0, 0),  new Color(0, 255, 0),  };    /**   * Constructor - If used then the class will not show the class selection   * combo box.   */  public AttributeVisualizationPanel() {    this(false);  }    /**   * Constructor.   * @param showColouringOption - should be true if the class selection combo   * box is to be displayed with the histogram/barplot, or false otherwise.   * P.S: the combo box is always created it just won't be shown if   * showColouringOption is false.   */  public AttributeVisualizationPanel(boolean showColouringOption) {    this.setFont( new Font("Default", Font.PLAIN, 9) );    m_fm = this.getFontMetrics( this.getFont() );    this.setToolTipText("");    FlowLayout fl= new FlowLayout(FlowLayout.LEFT);    this.setLayout(fl);    this.addComponentListener( new ComponentAdapter() {      public void componentResized(ComponentEvent ce) {        if(m_data!=null)          calcGraph();      }    });        m_colorAttrib = new JComboBox();    m_colorAttrib.addItemListener( new ItemListener() {      public void itemStateChanged(ItemEvent ie) {        if(ie.getStateChange()==ItemEvent.SELECTED) {          m_classIndex = m_colorAttrib.getSelectedIndex() - 1;          if (m_as != null) {            setAttribute(m_attribIndex);          }        }      }    });        if(showColouringOption) {      //m_colorAttrib.setVisible(false);      this.add(m_colorAttrib);      validate();    }  }    /**   * Sets the instances for use   *   * @param newins a set of Instances   */  public void setInstances(Instances newins) {    m_attribIndex = 0;    m_as = null;    m_data = newins;    if(m_colorAttrib!=null) {      m_colorAttrib.removeAllItems();      m_colorAttrib.addItem("No class");      for(int i=0; i<m_data.numAttributes(); i++) {	String type = "";	switch (m_data.attribute(i).type()) {	  case Attribute.NOMINAL:	    type = "(Nom) ";	    break;	  case Attribute.NUMERIC:	    type = "(Num) ";	    break;	  case Attribute.STRING:	    type = "(Str) ";	    break;	  case Attribute.DATE:	    type = "(Dat) ";	    break;	  case Attribute.RELATIONAL:	    type = "(Rel) ";	    break;	  default:	    type = "(???) ";	}        m_colorAttrib.addItem(new String("Class: "+m_data.attribute(i).name()+        " " + type));      }      if (m_data.classIndex() >= 0) {        m_colorAttrib.setSelectedIndex(m_data.classIndex() + 1);      } else {        m_colorAttrib.setSelectedIndex(m_data.numAttributes());      }      //if (m_data.classIndex() >= 0) {      //    m_colorAttrib.setSelectedIndex(m_data.classIndex());      //}    }    if (m_data.classIndex() >= 0) {      m_classIndex = m_data.classIndex();    } else {      m_classIndex = m_data.numAttributes()-1;    }      }    /**   * Returns the class selection combo box if the parent component wants to   * place it in itself or in some component other than this component.   */  public JComboBox getColorBox() {    return m_colorAttrib;  }    /**   * Get the coloring (class) index for the plot   *   * @return an <code>int</code> value   */  public int getColoringIndex() {    return m_classIndex; //m_colorAttrib.getSelectedIndex();  }    /**   * Set the coloring (class) index for the plot   *   * @param ci an <code>int</code> value   */  public void setColoringIndex(int ci) {    m_classIndex = ci;    if(m_colorAttrib!=null)      m_colorAttrib.setSelectedIndex(ci + 1);    else      setAttribute(m_attribIndex);  }    /**   * Tells the panel which attribute to visualize.   *

⌨️ 快捷键说明

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