2017-03-16 14:22:18 guanhui1997 阅读数 4475
  • 解析移动应用的身份认证, 数据分析及信息推送

    越来越多开发者在开发移动App时面临许多挑战, 其中如何安全有效的作身份认证、如何分析移动App终端客户数据、如何简单的推送信息给用户是比较常见的问题,本次培训将以亚马逊AWS新移动应用服务为例,解析移动App开发者如何利用有效的工具上述提到的三个问题,并利用实际案例加以说明:

    6019 人正在学习 去看看 庄富任

        今天,整理了一些工业大数据的相关案例,看看各家企业是如何成功实施工业大数据的。

        1、能够实现全生产过程的信息透明化的案例

        通过采用集成自动化与驱动解决方案,能够显著提高生产效率和灵活性。原东德玻璃制造商f | glass就是一个很好的实例。它的工厂可以算得上是全世界最先进、最节能的工厂之一了。该工厂采用了一套集成自动化解决方案、一个先进的能源管理系统以及一个创新的热回收系统。从原材料供应和混合,到熔化过程,再到玻璃表面的精加工和调试,生产与物流均完全实现了自动化。通过全集成自动化(TIA),所有集成仪表、驱动、自动化及配电解决方案相互协同,所有生产流程高效而灵活。过程控制系统Simatic PCS 7可视化控制着700米长设备上的3000个测量点,实现了一年365天连续可靠的运行。

        2、能够实现生产设备的故障诊断和故障预测的案例

        某世界500强的生活消费公司每年在纸尿裤市场占据超过100亿美元的市场份额,在纸尿裤的生产过程中曾经遇到过令人十分头痛的问题:在完成纸尿裤生产线从原材料到成品的全自动一体化升级后,生产线的生产速度得到了大幅提升,每秒钟能够生产近百米的纸尿裤成品。然而新的生产线建成后一直没有办法发挥最大的产能,因为在高速生产过程中某一个工序一旦出现错误,生产线会进行报警并造成整条生产线的停机,随后由现场的工人将生产错误的部分切除后再重新让生产线运转,这样做的原因是一旦某一片纸尿裤的生产发生问题会使随后的所有产品都受到影响,因此不得不将残次部分剔除后重新开机。

        为了提升生产线的生产效率,这家公司与IMS合作对纸尿裤生产线的监控和控制系统进行了升级。我们首先从控制器中采集了每一个工序的控制信号和状态监控参数,从这些信号中寻找出现生产偏差时的数据特征,并利用数据挖掘的分析方法找到正常生产状态和偏差生产状态下的序列特征。随后用机器学习的方法记录下这些特征,建立判断生产状态正常和异常的健康评估模型。在利用历史数据进行模型评价的过程中。该健康模型能够识别出所有生产异常的样本并用0—1之间的数字作为当前状态即时动态监控拇标。于是在生产过程中的每一个纸尿裤都会被赋予1个0—1的健康值,当系统识别出某一个纸尿裤的生产出现异常时,生产系统将在维持原有生产速度的状态下自动将这一产品从生产线上分离出来,且不会影响到其他产品的生产和整条生产线的运转。

        这项技术后来被纸尿裤生产公司集成到了控制器当中,升级后的生产线实现了近乎于零的停机时间,也使生产线实现了无人化操作,每年由于生产效率提升所带来的直接经济价值就高达4. 5亿美元。

        3、能够实现生产设备的优化运行的案例

        (1)高圣是一家生产带锯机床的中国台湾公司,所生产的带锯机床产品主要用于对金属物料的粗加工切削,为接下来的精加工做准备。机床的核心部件是用来进行切削的带锯,在加工过程中带锯会随着切削体积的增加而逐渐磨损,将会造成加工效率和质量的下降,在磨损到一定程度之后就要进行更换。使用带锯机床的客户工厂往往要管理上百台的机床,需要大量的工人时刻检查机床的加工状态和带锯的磨损情况,根据经验判断更换带锯的时间。带锯寿命的管理具有很大的不确定性,加工参数、工件材料、工件形状、润滑情况等一系列原因都会对带锯的磨耗速度产生影响,因此很难利用经验去预测带锯的使用寿命。切削质量也受到许多因素的影响,除了材料与加工参数的合理匹配之外,带锯的磨耗也是影响切削质量的重要因素。由于不同的加工任务对质量的要求不同,且对质量的影响要素无法实现透明化,因此在使用过程中会保守地提前终止使用依然健康的带锯。

        因此高圣意识到,客户所需要的并不是机床,而是机床所带来的切削能力,其核心是使用最少的费用实现最优的切削质量。于是高圣开始从机床的PLC控制器和外部传感器收集加工过程中的数据,并开发了带锯寿命衰退分析与预测算法模块,实现了带锯机床的智能化升级,为客户提供机床生产力管理服务。

        在加工过程中,智能带锯机床能够对产生的数据进行实时分析:首先识别当前的工件信息和工况参数,随后对振动信号和监控参数进行健康特征提取,依据工况状态对健康特征进行归一化处理后,将当前的健康特征映射到代表当前健康阶段的特征地图上的相应区域,就能够将带锯的磨损状态进行量化和透明化。分析后的信息随后被存储到数据库内建立带锯使用的全生命信息档案,这些信息被分为三类:工况类信息,记录工件信息和加工参数;特征类信息,记录从振动信号和控制器监控参数里提取的表征健康状态的特征值;状态类信息,记录分析的健康状态结果、故障模式和质量参数。大量带锯的全生命信息档案形成了一个庞大的数据库,可以使用大数据分析的方法对其进行数据挖掘,例如通过数据挖掘找到健康特征、工艺参数和加工质量之间的关系,建立不同健康状态下的动态最佳工艺参数模型,在保障加工质量的前提下延长带锯使用的寿命。

        在实现锯机床“自省性”智能化升级的同时,高圣开发了智慧云服务平台为用户提供“定”制化的机床健康与生产力管理服务,机床采集的状态信息被传到云端进行分析后,机床各个关键部件的健康状态、带锯衰退情况、加工参数匹配性和质量风险等信息都可以通过手机或PC端的用户界面获得,每一个机床的运行状态都变得透明化。用户还可以用这个平台管理自己的生产计划,根据生产任务的不同要求匹配适合的机床和能够达到要求的带锯,当带锯磨损到无法满足加工质量要求时,系统会自动提醒用户去更换据带,并从物料管理系统中自动补充一个带锯的订单。于是用户的人力的使用效率得到了巨大提升,并且避免了凭借人的经验进行管理带来的不确定性。带锯的使用寿命也得以提升,同时质量也被定量化和透明化地管理了起来。

        高圣的智慧带锯机床和智能云服务在2014年的芝加哥国际机床技术展(IMTS)上推出后赢得强烈反响,被认为是智能化设备的杰出示范,赢得了广大客户的欢迎和青睐。

        (2)位于德国安贝格的西门子工厂即是一个很好的实例,该工厂负责生产Simatic系列PLC(可编程逻辑控制器Programmable LogicController)。大部分生产都实现了数字化,并独立于实际生产进行了仿真和优化。通过采用Simatic IT 制造执行系统,显著提高了生产效率和灵活性。该Simatic系统允许在一分钟之内更改产品和工序,这对于自动化系统来说卫是一个很大的挑战:另外,每天大约有一百多万个测量事件,不断地涌入中央系统。通过数据矩阵码扫描器和RFID芯片,采集产品信息,并加载到上位中央系统,以确保数据的一致性。这样,控制系统就可以掌握每一件产品的信息,例如产品当前状态、是否通过检验等。若该产品未能通过检验,控制系统将对其按照原有程序进行干涉,如:自动发送一封邮件到品控部门,为技术人员提供维护信息等。品控部门的员工将会收到一份内容包含装配计划和故障诊断的信息清单。正是因为应用了这一技术,使得西门子公司的这家工厂几乎成为了误差最小的工厂。其误差比率之低,十分惊人:百万缺陷率仅15,相当于工厂产品合格率为99. 9985 %。

        (3)大众汽车改造一条已经使用了17年之久的冲压生产线时,将产品生命周期管理软件(PLM)与其自动化软件相结合,使得改造时间有了明显的减少:在早起改造生产线的规划阶段,为提高生产效率,可以使用冲压线仿真软件,模拟出现有机器和处理设备,再对其进行优化。为了将冲压件的模拟程序做到最精确,在使用仿真软件的时候,还需要配合使用运动控制软件(Motion Control Software)。运动控制软件除可用于虚拟环境外,还可用于现实操作中。使用这种技术,在完成最后冲压线改造工程之后,经计算实现节能35 %,每分钟冲程数可由14次提高至16次,生产力明显提高。虽然表面上看,这2个冲程数并不起眼,但放在每个班次上所提升的效率是相当可观的。
2017-07-11 10:32:36 Ag_nevergiveup 阅读数 1429
  • 解析移动应用的身份认证, 数据分析及信息推送

    越来越多开发者在开发移动App时面临许多挑战, 其中如何安全有效的作身份认证、如何分析移动App终端客户数据、如何简单的推送信息给用户是比较常见的问题,本次培训将以亚马逊AWS新移动应用服务为例,解析移动App开发者如何利用有效的工具上述提到的三个问题,并利用实际案例加以说明:

    6019 人正在学习 去看看 庄富任

JSP案例_利用JBDC连接mysql数据库,并查询数据


关于JSP页面利用JDBC连接Mysql数据库,并查询数据的案例


1.案例要求

制作一个jsp页面,在页面上连接数据库,把数据库中一张表的数据查询出来显示在页面上


2.实现准备

(1)安装Tomcat服务器

(2)安装Mysql数据库,创建要查询的数据库和表,并插入数据,详细步骤可以参考前面的关于数据库的文章

(3)在Tomcat的根目录下的lib目录下,把jdbc驱动复制到这里,详细可以参考前面关于JDBC的文章

(4)在Tomcat的目录下webapps目录下创建自己的项目,在项目里面创建JSP文件

(5)启动Tomcat服务器,Mysql数据库

(6)编写JSP文件


3.代码分析

(1)在JSP页面写JAVA代码,利用JDBC连接数据库,并查询数据,显示在页面上

(2)使用这条语句导入所有java.sql的包,不然使用Connection,Statement等等一些接口会报错:<%@page import="java.sql.*" %>

(3)其他关于查询显示没有难度,均可以参考前面关于JDBC的文章,都是JAVA代码


4.代码

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.sql.*" %>
<%
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/bms";
			String username = "root";
			String password = "root";
			Connection conn = DriverManager.getConnection(url, username, password);
			
			if(conn != null){
				out.print("数据库连接成功!");
				out.print("<br />");		
				Statement stmt = null;
				ResultSet rs = null;
				String sql = "SELECT id,name,number,password FROM student;";
				stmt = conn.createStatement();
				rs = stmt.executeQuery(sql);
				out.print("查询结果:");
				out.print("<br />");
				out.println("ID"+"  "+"NAME"+"  "+"number");
				out.print("<br />");
				while (rs.next()) {
				out.println(rs.getInt("ID")+" "+rs.getString("NAME")+"  "+rs.getInt("number"));
				out.print("<br />");
			}
			}else{
				out.print("连接失败!");
			}
		}catch (Exception e) {		
			//e.printStackTrace();
			out.print("数据库连接异常!");
		}
%>

5.页面截图


6.问题分析

(1)JDBC驱动包如果位置不对,数据库无法正确连接

(2)java,sql包如果导入不对,使用一些接口会报错

(3)编码格式最好一直,否则容易在浏览器上容易乱码显示

2019-08-05 15:33:14 kwame211 阅读数 260
  • 解析移动应用的身份认证, 数据分析及信息推送

    越来越多开发者在开发移动App时面临许多挑战, 其中如何安全有效的作身份认证、如何分析移动App终端客户数据、如何简单的推送信息给用户是比较常见的问题,本次培训将以亚马逊AWS新移动应用服务为例,解析移动App开发者如何利用有效的工具上述提到的三个问题,并利用实际案例加以说明:

    6019 人正在学习 去看看 庄富任

大数据真的太神奇了,真的可以让改变一个企业的运营吗?答案是肯定的。大数据目前是当下最火热的词了,你要是不知道大数据这个概念,都不好意思在众人面前开口了。然而实际上很多人都对大数据的应用模糊不清。现在就让我们从下面几个大数据应用案例来了解下最真实的大数据故事把,并鲜明得了解大数据在生活当中实际应用的情况。

金融大数据 理财利器:大数据在金融行业应用范围较广,典型的案例有花旗银行利用IBM沃森电脑为财富管理客户推荐产品;美国银行利用客户点击数据集为客户提供特色服务,如有竞争的信用额度;招商银行利用客户刷卡、存取款、电子银行转帐、微信评论等行为数据进行分析,每周给客户发送针对性广告信息,里面有顾客可能感兴趣的产品和优惠信息。可见,大数据在金融行业的应用可以总结为以下五个方面: 精准营销、风险管控、决策支持、效率提升、产品设计。

交通大数据 畅通出行:目前,交通的大数据应用主要在两个方面,一方面可以利用大数据传感器数据来了解车辆通行密度,合理进行道路规划包括单行线路规划。另一方面可以利用大活数据来实现即时信号灯调度,提高已有线路运行能力。科学的安排信号灯是一个复杂的系统工程,必须利用大数据计算平台才能计算出一个较为合理的方案。科学的信号灯安排将会提高30%左右已有道路的通行能力。在美国,政府依据某一路段的交通事故信息来增设信号灯,降低了50%以上的交通事故率。机场的航班起降依靠大数据将会提高航班管理的效率,航空公司利用大数据可以提高上座率,降低运行成本。铁路利用大数据可以有效安排客运和货运列车,提高效率、降低成本。高德地图已连续三年发布了中国主要城市交通分析报告,不仅有年度、季度分析报告,还有各城市的月报、周报、日报和节假日出行预测报告,涵盖全国100个城市。此外,高德地图的实时交通信息服务,已经支持全国所有城市(364个以上),是国内首家实时交通信息服务覆盖全国的地图软件。

教育大数据 因材施教:在课堂上,数据不仅可以帮助改善教育教学,在重大教育决策制定和教育改革方面,大数据更有用武之地。近年来,随着大数据成为互联网信息技术行业的流行词汇,教育逐渐被认为是大数据可以大有作为的一个重要应用领域,有人大胆地预测大数据将给教育带来革命性的变化。那么今天,我们从两个层面上来具体了解“教育大数据”。首先我们从应用层面来看,教育行业数据分析实践的过程中会有哪些痛点。主要痛点有以下四个方面:.数据涉及面窄、数据接口不完善、缺乏统一的数据管理平台、项目成本及投入,项目限制。美国利用数据来诊断处在辍学危险期的学生、探索教育开支与学生学习成绩提升的关系、探索学生缺课与成绩的关系。比如美国某州公立中小学的数据分析显示,在语文成绩上,教师高考分数和学生成绩呈现显著的正相关。也就是说,教师的高考成绩与他们现在所教语文课上的学生学习成绩有很明显的关系,教师的高考成绩越好,学生的语文成绩也越好。这个关系让我们进一步探讨其背后真正的原因。如果有了充分的数据,便可以发掘更多的教师特征和学生成绩之间的关系,从而为挑选教师提供更好的参考。

今后,将是一个看数据说话的时代

 

2017-01-19 14:13:49 HHTNAN 阅读数 3422
  • 解析移动应用的身份认证, 数据分析及信息推送

    越来越多开发者在开发移动App时面临许多挑战, 其中如何安全有效的作身份认证、如何分析移动App终端客户数据、如何简单的推送信息给用户是比较常见的问题,本次培训将以亚马逊AWS新移动应用服务为例,解析移动App开发者如何利用有效的工具上述提到的三个问题,并利用实际案例加以说明:

    6019 人正在学习 去看看 庄富任

       利用QQ群进行数据挖掘案例,数据源来源于2016年12-2017年大致一个月的QQ群基本数据,通过对聊天内容的分析,了解QQ聊天群资料了解时间,人群以及关键词,并构建相应图表、云图等,下图为本人所在提取的QQ群:

  

以下是R代码部分:

file.data<-scan("C:/Users/admin/Desktop/数据挖掘机器学习R-hive.txt",what="",sep="\n",encoding="UTF-8")

#数据清洗

clean<-function(file.data){
data<-data.frame(user.name=c(),time=c(),text=c())
user.name=c();time=c();text=c();
for(i in 6:length(file.data))
{
 reg.time<-regexpr("[0-9]{4}-[0-9]{2}-[0-9]{2}[0-9]+:[0-9]+:[0-9]+",file.data[i])
 if(reg.time==1){#该行取到了时间信息
 data<-rbind(data,data.frame(user.name=user.name,time=time,text=text))
 text=c("1")
 begin<-reg.time
 end<-reg.time+attr(reg.time,"match.length")-1
 time=substr(file.data[i],begin,end)
 begin=reg.time+attr(reg.time,"match.length")+1
 end<-nchar(file.data[i])
 user.name<-substr(file.data[i],begin,end)#读取用户名信息
  }
 else{text=paste(text,file.data[i])}
  }
return(data)}
data<-clean(file.data)#数据结构化

#活跃度计算

d1=table(data[,1])
> d = data.frame(word = names(d1),freq = d1,stringsAsFactors = F)   ; 
> d=d[order(d[,3],decreasing=T),]

#由于测试群记录数据量,后期效果不是很明显。这也是大数据火的原因吧?

> dim(d1)
[1] 29
> length(data[,1])
[1] 164
#转换数据类型
data$name<-as.character(data$user.name)
data$text<-as.character(data$text)
data$datatime<-as.POSIXlt(data$time)
#整理账期的年、月、日、时、分、秒部分
> data <- transform(data,
+                  year = datatime$year+1900,
+                  month = datatime$mon+1,
+                  day = datatime$mday,
+                  hour = datatime$hour,
+                  min = datatime$min,
+                  sec = datatime$sec)
>
> d1=table(data[,1])
> d = data.frame(word = names(d1),freq =d1,stringsAsFactors = F)   ;
> d=d[order(d[,3],decreasing=T),]
> head(d)

活跃度统计

#去掉停用词

mixseg = worker()
textt=paste(as.character(data[,3]),sep="",collapse ="")
textt<-mixseg<=textt
t=unlist(textt)
cnword<-read.csv("C:/Users/admin/Desktop/几个停用词.txt",header=F,stringsAsFactors=F)
cnword<-as.vector(cnword[1:dim(cnword)[1],])#需要为向量格式
t=t[!t%in%cnword]#去停用词
t1=table( t  )
plot(t1)  初步查看分词不是很理想,继续调整

> d =data.frame(word = names(d1),freq = d1,stringsAsFactors = F)   ;
>d=d[order(d[,3],decreasing=T),]
>d=d[nchar(as.character(d$word))>1,]
>write.table(d,"C:/Users/admin/Desktop/几个停用词.txt聊天内容词频排名.csv",sep=",",row.names = F)
 

 

>t1=t1[!names(t1)%in%c("男神","女神","你懂的")]#去没有意义的词
> library(Rwordseg)
t1=t1[nchar(as.character(names(t1)))==2]
plot(t1,xlab="词组",ylab="词频")   #效果实例而已,好的数据会有好的效果。

用wordcloud进行过程-------------------------------------

#分词后的词语频率汇总

> wdfreq <- as.data.frame(table(t1))    
> head(wdfreq)
  t1Freq
1 1   14
2 2    1
3 7    2

#频数排序 **

wdfreq<-rev(sort(wdfreq$Freq))

------------------------------------------------------

#使用wordcloud2构造云图
wordcloud2(t1,size=2,fontFamily='SegoeUI')

---------用wordcloud进行过程-------------------------------------

#分词后的词语频率汇总
> wdfreq <- as.data.frame(table(t1))    
> head(wdfreq)
  t1Freq
1 1   14
2 2    1
3 7    2
#频数排序 **
wdfreq<-rev(sort(wdfreq$Freq))

------------------------------------------------------

#使用wordcloud2构造云图

wordcloud2(t1,size=2,fontFamily='SegoeUI')

 

 

> datax=substr(data[,2],1,10)#得到日期,不要时分秒
> a=table(datax)
> plot(a,xlab="日期",ylab="频数",main="参与聊天人数/日期")

data1=data.frame(user.name=data[,1],data=substr(data[,2],1,10),time=substr(data[,2],12,regexpr(":",data[,2])-1),text=data[,3])
#write.table(data1," C:/Users/admin/Desktop/.细分数据.csv",sep=",",row.names = F)
a=table(data1[,3])
plot(a,xlab="日期",ylab="频数",col=4,main="参与聊天人数/二十小时分布")

WORDCLOUD2常用参数:
(1)data:词云生成数据,包含具体词语以及频率;
(2)size:字体大小,默认为1,一般来说该值越小,生成的形状轮廓越明显;
(3)fontFamily:字体,如‘微软雅黑’;
(4)fontWeight:字体粗细,包含‘normal’,‘bold’以及‘600’;;
(5)color:字体颜色,可以选择‘random-dark’以及‘random-light’,其实就是颜色色系;
(6)backgroundColor:背景颜色,支持R语言中的常用颜色,如‘gray’,‘blcak’,但是还支持不了更加具体的颜色选择,如‘gray20’;
(7)minRontatin与maxRontatin:字体旋转角度范围的最小值以及最大值,选定后,字体会在该范围内随机旋转;
(8)rotationRation:字体旋转比例,如设定为1,则全部词语都会发生旋转;
(9)shape:词云形状选择,默认是‘circle’,即圆形。还可以选择‘cardioid’(苹果形或心形),‘star’(星形),‘diamond’(钻石),‘triangle-forward’(三角形),‘triangle’(三角形),‘pentagon’(五边形);

文章完整版可通过我的公众号查看,欢迎扫描二维码查看

 

2019-09-30 18:03:10 stone0823 阅读数 171
  • 解析移动应用的身份认证, 数据分析及信息推送

    越来越多开发者在开发移动App时面临许多挑战, 其中如何安全有效的作身份认证、如何分析移动App终端客户数据、如何简单的推送信息给用户是比较常见的问题,本次培训将以亚马逊AWS新移动应用服务为例,解析移动App开发者如何利用有效的工具上述提到的三个问题,并利用实际案例加以说明:

    6019 人正在学习 去看看 庄富任

本篇实现一个 pandas 综合数据处理的案例。假设的场景就是计算某期间的物料进出存,涉及 pandas 多个 data frame 的关联、日期类型数据信息的提取、数据分组汇总等,掌握后应该能应付日常很多数据处理场景。这个案例之前我利用 MS Access 和 Power Query 都进行过加工操作,并发过了博文讲解数据处理过程,有兴趣的朋友可以在我之前的博客中查看。本次来看看 利用 pandas 如何进行数据处理。数据存放在 SQL Server Express 数据库中,主要表的结构和表之间的关系如下:


示例数据在 github 上有 Access 版本的数据可供下载,在文章的最后给出连接地址。

python 读取 Sql Server

对数据库的连接和读取,利用 sqlalchemy + pyodbc。在 Windows 上,使用 odbcad32 命令创建 odbc 连接的数据源:

首先选择驱动程序:


然后指定数据源名称和连接的服务器

选择验证方式:

选择默认连接的数据库:


其他使用默认选项,一路下一步直到完成。

进行了 odbc 配置之后,在 python 中使用 sqlalchemy + pyodbc 通过下面的方法建立与 sql server 数据库的连接 (建立 engine ):

from sqlalchemy import create_engine
engine = create_engine('mssql+pyodbc://username:pwd!@mssql')

这里的 mssql 就是上面 odbc 数据源配置的 DSN (data source name)。username 和 password 按数据库登录密码。

然后使用 sql 语句建立 3 个 data frame:

df_details = pd.read_sql(
    'select DocNo, MaterialNo, Qty from dbo.stock_movement_details',  engine)

df_headers = pd.read_sql(
    'select DocNo, DocDate, MovementType from dbo.stock_movement_headers',  engine)

df_mvt_type = pd.read_sql(
    'select MovementTypeID, InoutSign from dbo.movement_types', engine)

通过两次 merge 将三个 data frame 组合在一起:

df_merged_headers = df_details.merge(df_headers, on='DocNo')
df = df_merged_headers.merge(
    df_mvt_type, left_on='MovementType', right_on='MovementTypeID')

然后添加字段,使用的就是条件列方法。条件列在表达或者条件的时候,需要用 np.where() 的嵌套方式来实现:

df['TxYear'] = df.DocDate.dt.year
df['TxMonth'] = df.DocDate.dt.month

df['ActualQty'] = np.where(
    df.InoutSign == "+",
    df.Qty,
    -1 * df.Qty
)

df['BeginQty'] = np.where(
    df.TxYear < year,
    df.ActualQty,
    (np.where(
        (df.TxYear == year) & (df.TxMonth < month),
        df.ActualQty,
        0
    ))
)

df['StockIn'] = np.where(
    (df.TxYear == year) & (df.TxMonth == month) & (df.InoutSign == "+"),
    df.ActualQty,
    0
)

df['StockOut'] = np.where(
    (df.TxYear == year) & (df.TxMonth == month) & (df.InoutSign == "-"),
    df.ActualQty,
    0
)

df['EndQty'] = df.BeginQty + df.StockIn + df.StockOut

最后使用分组汇总得到结果:

df_grouped = df[['MaterialNo', 'BeginQty', 'StockIn',
                 'StockOut', 'EndQty']].groupby('MaterialNo').sum()

利用 xlwings 在 VBA 中调用 python

xlwings 的基本使用方法,请参考我下面的这篇文章

xlwings : 从此可以 VBA 调用 Python 代码啦

本次使用 Excel 作界面,将查询条件在 Excel 单元格中输入,然后将参数传递给 python,调用 python 代码获取计算结果 (结果的数据类型为 pandas dataframe), 然后用 xlwings 库将数据写入 Excel 工作表。

Excel 筛选条件的界面如下:

点击 Refresh 按钮,调用下面的 VBA 代码:

Public Sub GetStockBalances()
    Dim mymodule As String
    mymodule = "stockbalances"
        
    Dim txYear As String
    Dim txMonth As String
    txYear = Sheet3.Range("B1").Value
    txMonth = Sheet3.Range("B2").Value
    
    ' clear Sheet1 content
    Sheet1.Cells.ClearContents
    
    Dim parms As String
    parms = "('" & txYear & "','" & txMonth & "')"
    
    RunPython ("import " & mymodule & ";" & mymodule & ".get_stock_balances" & parms)
End Sub

参数 从 VBA 传递给 python,使用 String 类型,所以在每个参数的两边加上单引号 (’)

示例数据和代码

github : pandas-xlwings-stock-balances

没有更多推荐了,返回首页