# -*- coding: utf-8 -*-
#作者:廖雄雄
#保存路径:C:\Users\Administrator\PycharmProjects
from PyQt5.QtWidgets import *
import sys
from PyQt5 import QtCore
import pandas as pd # 数据处理
import matplotlib.pyplot as plt
import scipy.stats as stats
plt.rcParams['font.sans-serif']=['SimHei']
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle('数据处理v1.0')
self.resize(1000,800)
self.move(500,100)
#创建菜单
self.bar = QMenuBar(self)
self.layout = QVBoxLayout(self)
#导入数据
self.file = self.bar.addMenu("数据")
self.data = QAction("导入文件")
self.save = QAction("保存", self)
self.file.addAction(self.data)
self.file.addAction(self.save)
self.data.triggered.connect(self.taskdata)
self.save.triggered.connect(self.tasksave)
#集中趋势分析
self.dataanalyse = self.bar.addMenu("集中趋势分析")
self.mean = QAction("均值",self)
self.median = QAction("中位数", self)
self.mode = QAction("众数", self)
self.dataanalyse.addAction(self.mean)
self.dataanalyse.addAction(self.median)
self.dataanalyse.addAction(self.mode)
self.mean.triggered.connect(self.taskmean)
self.median.triggered.connect(self.taskmedian)
self.mode.triggered.connect(self.taskmode)
#创建离散趋势
self.dataanalyse_discrete = self.bar.addMenu("离散趋势分析")
self.range= QAction("极差",self)
self.quantile = QAction("四分位差", self)
self.var = QAction("方差", self)
self.std = QAction("标准差", self)
self.dataanalyse_discrete.addAction(self.range)
self.dataanalyse_discrete.addAction(self.quantile)
self.dataanalyse_discrete.addAction(self.var)
self.dataanalyse_discrete.addAction(self.std)
self.range.triggered.connect(self.taskrange)
self.quantile.triggered.connect(self.taskquantile)
self.var.triggered.connect(self.taskvar)
self.std.triggered.connect(self.taskstd)
self.plot = self.bar.addMenu("画图")
self.plot_zhexiantu=QAction('折线图')
self.plot_zhuxingtu = QAction('柱形图')
self.plot_bingtu = QAction('饼图')
self.plot_sandiantu=QAction("散点图")
self.ttest=self.bar.addMenu("假设检验")
self.ttest_single=QAction("单样本T检验")
self.anova=self.bar.addMenu("方差分析")
self.anova_single=QAction("单因素方差分析")
self.anova.addAction(self.anova_single)
self.plot.addAction(self.plot_zhexiantu)
self.plot.addAction(self.plot_zhuxingtu)
self.plot.addAction(self.plot_bingtu)
self.plot.addAction(self.plot_sandiantu)
self.ttest.addAction(self.ttest_single)
self.plot_zhexiantu.triggered.connect(self.taskplot_zhexiantu)
self.plot_zhuxingtu.triggered.connect(self.taskplot_zhuxingtu)
self.plot_bingtu.triggered.connect(self.taskplot_bingtu)
self.plot_sandiantu.triggered.connect(self.taskplot_sandiantu)
self.anova_single.triggered.connect(self.taskAnova_single)
self.ttest_single.triggered.connect(self.taskSingle)
self.setMenuBar(self.bar)
#创建文本框
self.text = QTextEdit(self)
self.text.resize(600,800)
self.text.setGeometry(QtCore.QRect(10,150, 978, 600))
self.layout.addWidget(self.text)
self.setLayout(self.layout)
#读取数据
def taskdata(self):
global raw_data
# 设置全局变量,用于其他功能实现
input_file, ftype = QFileDialog.getOpenFileName(self, "打开文件", '.', "(*.*)")#打开文件
raw_data = pd.read_csv(input_file, encoding='gbk') # 读取文件
raw_data = raw_data.dropna() # 缺失值处理,丢弃所有缺失值所在的
pd.set_option('display.max_columns', None) # 显示全部行
pd.set_option('display.max_row', None) # 显示全部列
text=str(raw_data)
self.text.setPlainText(text)#将数据插入文本框
#print(raw_data.columns[1])
#a = len(raw_data.columns)获取数据的列长
#均值
def taskmean(self):
mean=datadialogmean()
mean.exec_()
#中位数
def taskmedian(self):
median=datadialogmedian()
median.exec_()
#众数
def taskmode(self):
mode = datadialogmode()
mode.exec_()
#保存
def tasksave(self):
pass
#极差
def taskrange(self):
range = datadialogrange()
range.exec_()
#四分位差
def taskquantile(self):
quantile = datadialogquantile()
quantile.exec_()
#方差
def taskvar(self):
var = datadialogvar()
var.exec_()
#标准差
def taskstd(self):
std = datadialogstd()
std.exec_()
def taskplot_zhexiantu(self):
zhexiantu=datadialogzhexiantu()
zhexiantu.exec_()
def taskplot_zhuxingtu(self):
zhuxingtu=datadialogzhuxingtu()
zhuxingtu.exec_()
def taskplot_bingtu(self):
zhuxingtu=datadialogbingtu()
zhuxingtu.exec_()
def taskplot_sandiantu(self):
sandiantu = datadialogsandiantu()
sandiantu.exec_()
def taskSingle(self):
single=DataDialogSingleTTest()
single.exec_()
def taskAnova_single(self):
anovaSingle=DataDialogAnovaSingle()
anovaSingle.exec_()
class datadialogmean(QDialog):
#子窗口
def __init__(self):
super().__init__()
self.layout=QHBoxLayout(self)
self.list1=QListWidget()
self.setWindowTitle('均值')
for i in range(len(raw_data.columns)):
itemname=raw_data.columns[i]
self.list1.addItem(itemname)
self.pb1=QPushButton('统计')
self.list2=QListWidget()
self.pb1.clicked.connect(self.clicked0)
self.list1.itemClicked.connect(self.clicked1)
self.list2.itemClicked.connect(self.clicked2)
#print(raw_data.columns[1])
#print(len(raw_data.columns))
self.text = QTextEdit(self)
self.text.resize(600, 800)
self.text.setGeometry(QtCore.QRect(10, 150, 978, 600))
self.layout.addWidget(self.list1)
self.layout.addWidget(self.list2)
self.layout.addWidget(self.pb1)
self.layout.addWidget(self.text)
self.setLayout(self.layout)###
#item1
def clicked1(self,Index):
self.list2.addItem(self.list1.item(self.list1.row(Index)).text())
self.list1.takeItem(self.list1.row(Index))
#item2
def clicked2(self,Index):
self.list1.addItem(self.list2.item(self.list2.row(Index)).text())
self.list2.takeItem(self.list2.row(Index))
#处理均值
def clicked0(self):
count=self.list2.count()
list=[]
for i in range(count):
text=raw_data[self.list2.item(i).text()].mean().round(2)
list.append(text)
text=str(list)
self.text.setText(text)
class datadialogmedian(QDialog):
def __init__(self):
super().__init__()
self.layout=QHBoxLayout(self)
self.list1=QListWidget()
self.setWindowTitle('中位数')
for i in range(len(raw_data.columns)):
itemname=raw_data.columns[i]
self.list1.addItem(itemname)
self.pb1=QPushButton('统计')
self.list2=QListWidget()
self.pb1.setCheckable(True)
self.pb1.toggle()
self.pb1.clicked.connect(self.clicked0)
self.list1.itemClicked.connect(self.clicked1)
self.list2.itemClicked.connect(self.clicked2)
self.text = QTextEdit(self)
self.text.resize(600, 800)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
project.rar (1个子文件)
project.py 30KB
共 1 条
- 1
普通网友
- 粉丝: 0
- 资源: 3
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页