Ejemplo n.º 1
0
class ResultWindow(QWidget):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setup_ui()

    def setup_ui(self):
        self.setWindowTitle("查詢結果")
        self.setFont(PyQt5.QtGui.QFont("Times New Roman", 11))

        self.buttonCopy = QPushButton("複製查詢結果 (Ctrl+C)")
        self.buttonCopy.clicked.connect(self.copy)
        self.labelInfo = QLabel("")
        self.shortcut = QShortcut(PyQt5.QtGui.QKeySequence("Ctrl+C"), self)
        self.shortcut.activated.connect(self.copy)

        self.formLayout = QFormLayout()
        self.formLayout.addRow(self.buttonCopy, self.labelInfo)

        self.widget = DataTableWidget()
        self.widget.setButtonsVisible(False)
        self.widget.setMinimumSize(600, 600)

        self.vbox = QVBoxLayout()
        self.vbox.addLayout(self.formLayout)
        self.vbox.addWidget(self.widget)
        self.setLayout(self.vbox)

    def update(self, data):
        self.df = data
        self.labelInfo.setText("")
        self.model = DataFrameModel()

        self.widget.resize(self.widget.sizeHint())
        self.widget.show()
        self.widget.setViewModel(self.model)
        self.model.setDataFrame(data)

    def copy(self):
        count = 0
        indexes = self.widget.tableView.selectionModel().selectedRows()
        if len(indexes) > 0:
            rows = [index.row() for index in indexes]
            count = len(indexes)
        else:
            rows = [i for i in range(self.widget.tableView.model().rowCount())]
            count = self.widget.tableView.model().rowCount()
        s = ''
        for i in rows:
            r = self.df.iloc[[i]]
            for v in r.values[0].astype(str):
                s += (v + '\t')
            s = s[:-1] + '\n'
        pyperclip.copy(s[:-1])
        self.labelInfo.setText(str(count) + " 筆資料已複製至剪貼簿")
Ejemplo n.º 2
0
# Use QtGui from the compat module to take care if correct sip version, etc.
from qtpandas.compat import QtGui
from qtpandas.models.DataFrameModel import DataFrameModel
from qtpandas.views.DataTableView import DataTableWidget
# from qtpandas.views._ui import icons_rc

sys.excepthook = excepthook  # 設定PyQt的異常鉤子,基本上在本例沒什麼作用

# 建立一個空的模型,該模型用來儲存與處理資料
model = DataFrameModel()

# 建立一個應用程式顯示表格
app = QtGui.QApplication([])
widget = DataTableWidget()  # 建立一個空的表格,用來呈現資料
widget.resize(500, 300)  # 調整Widget的大小
widget.show()
# 讓表格繫結模型,也就是呈現模型的內容
widget.setViewModel(model)

# 建立測試資料
data = {
    'A': [10, 11, 12],
    'B': [20, 21, 22],
    'C': ['Peter Pan', 'Cpt. Hook', 'Tinkerbell']
}
df = pandas.DataFrame(data)

# 下面兩列用來測試委託是否成立
df['A'] = df['A'].astype(numpy.int8)  # A欄資料格式變成整數
df['B'] = df['B'].astype(numpy.float16)  # B欄資料格式變成浮點數
Ejemplo n.º 3
0
class Main:
    def __init__(self):
        """ 初始化主界面 """
        self.ui = loadUi("UI/main.ui")
        self.ui.setWindowTitle("聚类系统")
        self.DataHelper = None
        self.ui.btn_choose_data.clicked.connect(self.choose_path)
        self.ui.btn_set_parameter.clicked.connect(self.set_parameter)

        self.ui.btn_spin.addItems(
            ["KMeans", "GMM", "DBSCAN", "OPTICS","BIRCH", "MeanShift", "CLIQUE"])
        self.ui.btn_run.clicked.connect(self.run)
        self.cluster = ClusterHelper()
        self.ui.btn_show_image.clicked.connect(self.show_image)

    def show_image(self):
        """ 展示聚类结果 """
        try:
            self.cluster.imshow()
        except:
            QMessageBox.about(self.ui, "展示失败", "请先训练你的聚类器")

    def choose_path(self):
        """ 选择数据集 """
        file_name = QtWidgets.QFileDialog.getOpenFileName(
            self.ui, "请选择你要打开数据的名字", "./data/", "Csv files(*.csv)")
        file_name = file_name[0]
        self.DataHelper = DataHelper(file_name)

        name = file_name.split("/")[-1]
        self.ui.ldata_name.setText(name)
        self.show_information()
        self.show_data()

    def show_information(self):
        """ 显示数据集的基本信息 """
        self.ui.ldata_shape.setText(str(self.DataHelper.shape))
        self.ui.ldata_class.setText(str(self.DataHelper.class_))

    def set_parameter(self):
        """ 设置分类器 """
        currentText = self.ui.btn_spin.currentText()
        self.newWindow = SecondWindow(algorithm=currentText)
        self.newWindow.btn_yes.clicked.connect(self.get_parameter)
        self.newWindow.show()

    def get_parameter(self):
        """ 获得参数信息 """
        self.newWindow.window_exit()

        self.ui.tmessage_show.setText(self.newWindow.message)
        currentText = self.ui.btn_spin.currentText()
        param_dict = [eval(line.split(":")[1])
                      for line in self.newWindow.message.split("\n")[1:-1]]
        self.cluster.set_Cluster(currentText, param_dict)

    def show_data(self):
        """
        展示读取进来的数据
        """
        self.widget = DataTableWidget(self.ui)
        model = DataFrameModel()
        model.setDataFrame(self.DataHelper.data)
        self.widget.setViewModel(model)
        self.widget.move(30, 200)
        self.widget.resize(350, 350)
        self.widget.show()

    def run(self):
        """ 运行聚类算法 """
        if(self.DataHelper == None):
            QMessageBox.about(self.ui, "运行失败", "请选择你的数据集")
        elif(self.cluster.cluster == None):
            QMessageBox.about(self.ui, "运行失败", "请初始化你的聚类器")
        else:
            self.cluster.fit(self.DataHelper.data)
            score = self.cluster.get_score()
            text = ""
            for item in score.items():
                text += item[0] + str(item[1]) + "\n"
            self.ui.t_ans.setText(text)
Ejemplo n.º 4
0
# Use QtGui from the compat module to take care if correct sip version, etc.
from qtpandas.compat import QtGui
from qtpandas.models.DataFrameModel import DataFrameModel
from qtpandas.views.DataTableView import DataTableWidget
# from qtpandas.views._ui import icons_rc

sys.excepthook = excepthook

# Setup a new empty model
model = DataFrameModel()

# Setup an application and create a table view widget
app = QtGui.QApplication([])
widget = DataTableWidget()
widget.resize(800, 600)
widget.show()
# Asign the created model"""
widget.setViewModel(model)

# Create some test data
data = {
    'A': [10, 11, 12],
    'B': [20, 21, 22],
    'C': ['Peter Pan', 'Cpt. Hook', 'Tinkerbell']
}
df = pandas.DataFrame(data)
# Convert the column to the numpy.int8 datatype to test the delegates in the
# table int8 is limited to -128-127

df['A'] = df['A'].astype(numpy.int8)
Ejemplo n.º 5
0
# Use QtGui from the compat module to take care if correct sip version, etc.
from qtpandas.compat import QtGui
from qtpandas.models.DataFrameModel import DataFrameModel
from qtpandas.views.DataTableView import DataTableWidget
# from qtpandas.views._ui import icons_rc

sys.excepthook = excepthook # 设置PyQt的异常钩子,在本例中基本没什么用

# 创建一个空的模型,该模型用于存储与处理数据
model = DataFrameModel()

# 创建一个应用用于显示表格
app = QtGui.QApplication([])
widget = DataTableWidget() # 创建一个空的表格,主要用来呈现数据
widget.resize(500, 300) # 调整Widget的大小
widget.show()
# 让表格绑定模型,也就是让表格呈现模型的内容
widget.setViewModel(model)

# 创建测试数据
data = {
    'A': [10, 11, 12],
    'B': [20, 21, 22],
    'C': ['Peter Pan', 'Cpt. Hook', 'Tinkerbell']
}
df = pandas.DataFrame(data)

# 下面两列用来测试委托是否成立
df['A'] = df['A'].astype(numpy.int8) # A列数据格式变成整型
df['B'] = df['B'].astype(numpy.float16) # B列数据格式变成浮点型
Ejemplo n.º 6
0
from qtpandas.excepthook import excepthook

# Use QtGui from the compat module to take care if correct sip version, etc.
from qtpandas.compat import QtGui
from qtpandas.models.DataFrameModel import DataFrameModel
from qtpandas.views.DataTableView import DataTableWidget

# from qtpandas.views._ui import icons_rc

if __name__ == '__main__':
    standard_library.install_aliases()
    sys.excepthook = excepthook
    model = DataFrameModel()
    app = QtGui.QApplication([])
    widget = DataTableWidget()
    widget.setWindowTitle("qtPandas Demo")
    widget.setWindowIcon(QIcon("./images/Python2.ico"))
    widget.resize(500, 300)
    widget.show()
    widget.setViewModel(model)
    data = {
        'A': [10, 11, 12],
        'B': [20, 21, 22],
        'C': ['Peter Pan', 'Cpt. Hook', 'Tinkerbell']
    }
    df = pandas.DataFrame(data)
    df['A'] = df['A'].astype(numpy.int8)
    df['B'] = df['B'].astype(numpy.float16)
    model.setDataFrame(df)
    app.exec_()