[b]经分系统项目总结[/b]
[size=medium][/size]
一 项目概述
利用对浏览器服务器的输出日志文件 进行数据采集和数据挖掘 从而根据基本的数据量得到决策所需的统计量,再进一步制定相应的数据报表 从而为市场和技术提供决策支持。
二 开发工具和环境
MySQL , MySQL workbench, Eclipse, jFreeChart
环境搭建:1 去mysql官网下载mysql和workbench(GUI工具),jdbc驱动
下载eclipse 和 jFreeChart包,
2 安装eclipse和mysql ,JDBC驱动以通过eclipse连接上数据库
3 工程中动态添加mysql 和 jfreeChart Jar包 ,如下:
4 配置环境变量:
Classpath下: 配mysql jdbc的jar包目录 和
jfreeChart的jar包目录
5统计量定义:
活跃用户:每月使用5次
流失用户数:上月有浏览记录但本月没有浏览记录的用户
新用户数:第一次启用的用户数量
使用用户数:在一个时间段(比如一天)内使用了浏览器的用户数量
新浏览:两次访问间隔超过21分钟视为第二次浏览
用户浏览停留时间:用户每次新浏览的时间总和。用户每次新浏览的时间 = (每次新浏览最后一次访问时间 - 每次新浏览第一次访问时间);如果一次新浏览的访问次数只有一次,则默认记浏览停留时间为1分钟。
三 开发过程详述
一)数据库操作
1 连接mysql
1)Dos命令行:输入:mysql –h localhost –u root –p
输入在安装时已设好的密码,就近入了mysql的命令编辑界面了。
2)直接用workbench 连接
Mysql连接的代码部分如下:
// 加载jdbc驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 定义一个数据库连接
myCon = DriverManager.getConnection(url, user, password);
// 根据连接创建一个状态集
myState = myCon.createStatement();
2 建表
1) 用户表
名称 字段 类型
用户名 USER_ID char(20)
用户首次使用日期 first_use_date Varchar(20)
用户首次使用时间 First_use_time Varchar(20)
2) 访问表
名称 字段 类型
网站URI URI Char(20)
用户名 USER_ID char(20)
Page server接受请求的时间 ACCEPTREQUEST_TIME Varchar(20)
page server获得页面内容时间 GETPAGEDATA_TIME Varchar(20)
page server转发请求的时间 TRANSEFORMREQUEST_TIME Varchar(20)
pageserver 返回客户端的时间 RETURNCLIENT_TIME Varchar(20)
客户端UA UA Varchar(20)
页面大小 PAGE_SIZE Int
是否正常访问 IS_NORMAL Varchar(20)
Page server接受请求的日期 ACCEPT_REQUEST_date Varchar(20)
page server获得页面内容日期 GETPAGEDATA_date Varchar(20)
page server转发请求的日期 TRANSEFORMREQUEST_date Varchar(20)
pageserver 返回客户端的日期 RETURNCLIENT_date Varchar(20)
相应的sql语句:
1用户表:
CREATE TABLE `users` (
`user_id` varchar(50) NOT NULL,
`first_use_date` varchar(11) DEFAULT NULL,
`first_use_time` varchar(23) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312$$
2访问表:
CREATE TABLE `visits` (
`user_id` varchar(50) NOT NULL,
`accept_request_date` varchar(11) NOT NULL,
`accept_request_time` varchar(12) NOT NULL,
`get_page_data_date` varchar(11) NOT NULL,
`get_page_data_time` varchar(12) NOT NULL,
`transform_request_date` varchar(11) NOT NULL,
`transform_request_time` varchar(12) NOT NULL,
`return_client_date` varchar(11) NOT NULL,
`return_client_time` varchar(12) NOT NULL,
`uri` varchar(200) NOT NULL,
`user_agent` varchar(100) NOT NULL,
`page_size` int(11) DEFAULT '0',
`is_normal` varchar(20) NOT NULL,
`count` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`count`)
) ENGINE=InnoDB AUTO_INCREMENT=24088 DEFAULT CHARSET=gb2312$$
注:建表语句保存下来 后期可以考虑用来批处理
二 ) 数据的读入
BufferedReader myReader = null; try { // 新建一个阅读器 myReader = new BufferedReader(new FileReader("D:/log.txt")); String myLine = null; String result[] = null; // 读文件并存入result数组中 // 以双空格来区分字段,读一行存一行到数组result中 while ((myLine = myReader.readLine()) != null) { // if(myLine != null) // { // System.out.println("Read File Line Success!!!"); // } result = myLine.split(" "); // 对得到的result数组进行处理以得到想要的相应字段 // 插入时间 String first_use_date = result[1].substring(0, 10); String first_use_time = result[1].substring(11, 23); String accept_request_date = result[1].substring(0, 10); String accept_request_time = result[1].substring(11, 23); String get_page_data_date = result[2].substring(0, 10); String get_page_data_time = result[2].substring(11, 23); String transform_request_date = result[3].substring(0, 10); String transform_request_time = result[3].substring(11, 23); String return_client_date = result[4].substring(0, 10); String return_client_time = result[4].substring(11, 23); // 插入uri int lastIndex = (result[5].substring(7)).indexOf('/') + 7; String rootUri = result[5].substring(0, lastIndex); String pageSize = result[7]; if (pageSize == null || "null".equals(pageSize) || "".equals(pageSize)) { pageSize = "0"; } /* * 插入数据库表格 */ try { // 插入用户表中 String sqlStr_user = "insert ignore into " + users_table + " values('" + result[0] + "'," + "'" + first_use_date + "'," + "'" + first_use_time + "')"; myState.executeUpdate(sqlStr_user); myResult = myState.executeQuery("select * from " + visits_table); } catch (SQLException e) { e.printStackTrace(); System.out.println("myResult:" + myResult); } // 插入访问表中 String sqlStr_visit = "insert ignore into " + visits_table + " ( user_id, accept_request_date, accept_request_time,get_page_data_date,get_page_data_time, transform_request_date,transform_request_time, return_client_date,return_client_time, uri, user_agent, page_size, is_normal) " + " values(" + "'" + result[0] + "'," + "'" + accept_request_date + "'," + "'" + accept_request_time + "'," + "'" + get_page_data_date + "'," + "'" + get_page_data_time + "'," + "'" + transform_request_date + "'," + "'" + transform_request_time + "'," + "'" + return_client_date + "'," + "'" + return_client_time + "'," + "'" + rootUri + "'," + "'" + result[6] + "'," + "'" + pageSize + "'," + "'" + result[8] + "')"; try { myState.executeUpdate(sqlStr_visit); myResult = myState.executeQuery("select * from " + visits_table); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("myResult:" + myResult); } } } catch (java.io.IOException ioe) { // 出错处理 ioe.printStackTrace(); } finally { // 关闭文件 try { //关闭阅读器 if (myReader != null) myReader.close(); System.out.println("Close the Reader!\n" ); try { //关闭连接 myCon.close(); System.out.println("Close the Connection!\n" ); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (java.io.IOException ignore) { ignore.printStackTrace(); } } System.out.println("Insert the database Successful!!!\n"); }
三)操作数据库并进行相应的sql语句查询得到相应的统计量 每种报表一个类获取相应的统计量 如:
public static int[] dayDataFlow() { String[] sqlDataFlow = new String[8]; int[] dayDataFlow = new int[8]; for (int i = 0; i < fromDayTime.length; i++) { sqlDataFlow[i] = "select sum(page_size) as DataFlow from " + visits_table + " where accept_request_date = " + "'" + yestodayDateStr + "'" + " and accept_request_time <= " + toDayTime[i] + " and accept_request_time >= " + fromDayTime[i]; try { myResult = myState.executeQuery(sqlDataFlow[i]); while (myResult.next()) { dayDataFlow[i] = myResult.getInt("DataFlow"); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } System.out.println("dayDataFlow" + "[" + i + "]=" + dayDataFlow[i]); } System.out.println("\n"); return dayDataFlow; }
四) 根据得到的统计量绘制相应的图表
每种类型的表用一个reportFormsMaker类,制柱状图,曲线图以及混合图的方法都在charttools类中实现,maker方法直接调用即可
最后,见证奇迹的时刻来临了哈哈 当时看到表格从我指定的目录出来还是有点小兴奋的哈哈
可以得到的统计报表:
日表:
1、 网站访问量表top10(柱状图):根据每个页面访问数量排名
2、 用户数量统计表(柱状图):新用户数、使用用户数、总用户数
3、 用户增长数(柱状图): 每个时间段的新用户数
4、 用户使用数(柱状图):每个时间段的使用用户数
5、 正常访问率(曲线图):每个时间段的(正常访问次数/总访问次数)
6、 人均停留时间(柱状图) :每个时间段的(浏览停留时间/用户使用数)
7、 人均访问页面数(柱状图):每个时间段的(总访问页面数/用户使用数 )
8、 数据量(柱状图):每个时间段的所访问页面大小累计
周表:
1、 网站访问量表top10(柱状图):根据每个页面访问数量排名
2、 用户数量统计表(柱状图):新用户数、使用用户数、总用户数
3、 用户增长数(柱状图 + 曲线图): 每天的新用户数 + 每天的新用户比率
4、 用户使用数(柱状图):每天的使用用户数
5、 正常访问率(曲线图):每天的(正常访问次数/总访问次数)
6、 人均停留时间(柱状图) :每天的(浏览停留时间/用户使用数)
7、 人均访问页面数(柱状图):每天的(总访问页面数/用户使用数 )
8、 每日数据量(柱状图):每天的所访问页面大小累计
月表:
1、 网站访问量表top10(柱状图):根据每个页面访问数量排名
2、 用户数量统计表(柱状图):新用户数、活跃用户数、流失用户数、总用户数
3、 用户增长数(柱状图 + 曲线图): 每周的新用户数 + 每周的新用户比率
4、 人均停留时间(柱状图) :每周的(浏览停留时间/用户使用数)
5、 人均访问页面数(柱状图):每周的(总访问页面数/用户使用数 )
6、 每周数据量(柱状图):每周的所访问页面大小累计
年表(半年表)
1、 网站访问量表top10(柱状图):根据每个页面访问数量排名
2、 用户数量统计表(柱状图):新用户数、总用户数;
3、 用户数量按月统计表(柱状图:新用户数、活跃用户数、流失用户数;曲线图:新用户比率、用户流失率
4、 人均停留时间(柱状图) :每月的(浏览停留时间/用户使用数)
5、 人均访问页面数(柱状图):每月的(总访问页面数/用户使用数 )
6、 每月数据量(柱状图):每月的所访问页面大小累计
上几张图吧直观点:也是第一次用数据库mysql开发 设计了一周 开发了三周 欢迎各位IT民工拍砖 交流
相关推荐
基于SSM框架+mysql实现客户管理系统源码.zip基于SSM框架+mysql实现客户管理系统源码.zip基于SSM框架+mysql实现客户管理系统源码.zip基于SSM框架+mysql实现客户管理系统源码.zip基于SSM框架+mysql实现客户管理系统...
"大数据环境下基于MySQL的数据库架构设计与实现" 大数据环境下的数据库架构设计与实现是当前急需解决的问题之一。随着大数据技术的不断发展,适应大数据的数据库技术变得愈发重要。MySQL作为关联数据库管理系统,...
详细设计主要包括基于微信小程序的垃圾分类系统数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对基于微信小程序的垃圾分类系统进行了功能测试,并对测试结果进行了分析总结,得出基于微信小...
基于Mysql+C#实现的设备租赁信息管理系统源码+设计报告+数据库(管理信息系统课程设计).zip 基于Mysql+C#实现的设备租赁信息管理系统源码+设计报告+数据库(管理信息系统课程设计).zip 基于Mysql+C#实现的设备租赁信息...
Java基于ssm+mysql的陆丰市医院分诊管理系统的实现.zipJava基于ssm+mysql的陆丰市医院分诊管理系统的实现.zipJava基于ssm+mysql的陆丰市医院分诊管理系统的实现.zipJava基于ssm+mysql的陆丰市医院分诊管理系统的实现...
本项目就是针对这一需求,实现了基于MySQL数据库的Elasticsearch IK词典热更新功能。 ### Elasticsearch基础 Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,能够提供快速、高可扩展的全文检索、...
基于SpringBoot + Mybatis + Mysql+Vue.js实现的病理图像分类系统源码(前端+后端).zip基于SpringBoot + Mybatis + Mysql+Vue.js实现的病理图像分类系统源码(前端+后端).zip基于SpringBoot + Mybatis + Mysql+Vue.js...
基于Django+MySQL实现的校园智能点餐系统源码+数据库(高分项目),个人经导师指导并认可通过的98分大作业设计项目,主要针对计算机相关专业的正在做课程设计、期末大作业的学生和需要项目实战练习的学习者。...
本项目是一个基于Struts2和MySQL实现的BBS系统,它利用现代Web开发技术,为用户提供了一个功能强大的在线讨论环境。 **Struts2框架解析** Struts2是Java Web开发中的MVC(Model-View-Controller)框架,它简化了...
基于此,设计并实现一个基于MySQL数据库的学生成绩管理系统显得尤为重要。 该系统的主要目标是优化成绩管理流程,使之更加科学、合理。它应能够提供可靠的信息,方便教师进行管理,同时为评选优秀学生、奖学金等...
基于SSM+Mysql实现的CRM信息管理系统.zip基于SSM+Mysql实现的CRM信息管理系统.zip基于SSM+Mysql实现的CRM信息管理系统.zip基于SSM+Mysql实现的CRM信息管理系统.zip基于SSM+Mysql实现的CRM信息管理系统.zip基于SSM+...
垃圾分类管理系统是基于Java开发语言,采用servlet框架来实现,采用MySQL数据库进行数据存储。垃圾分类管理系统具有前台用户、普通管理员、超级管理员三种用户组成,前台用户可以进行注册登录,查看垃圾分类知识,...
资源名字:基于Springboot+mysql的班级综合测评管理系统设计与实现(源码+文档).zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 本设计主要是实现一个班级综合...
基于SSM框架+MySQL实现的企业级OA管理系统源码.zip基于SSM框架+MySQL实现的企业级OA管理系统源码.zip基于SSM框架+MySQL实现的企业级OA管理系统源码.zip基于SSM框架+MySQL实现的企业级OA管理系统源码.zip基于SSM框架+...
基于python+django的语音识别的智能垃圾分类系统的实现.zip基于python+django的语音识别的智能垃圾分类系统的实现.zip基于python+django的语音识别的智能垃圾分类系统的实现.zip 采用python开发,django网页框架,...
基于ssm+mysql实现的图书在线管理系统源码.zip基于ssm+mysql实现的图书在线管理系统源码.zip基于ssm+mysql实现的图书在线管理系统源码.zip基于ssm+mysql实现的图书在线管理系统源码.zip基于ssm+mysql实现的图书在线...
JavaEE 基于SSM框架+mysql实现的农场信息管理系统.zip毕设-期末课设-JavaEE 基于SSM框架+mysql实现的农场信息管理系统.zip毕设-期末课设-JavaEE 基于SSM框架+mysql实现的农场信息管理系统.zip毕设-期末课设-JavaEE ...
基于Eclipse+Java+Swing+Mysql实现旅游管理信息系统(高分课设)已获导师指导并通过的95分的高分期末大作业项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 该系统功能完善、界面美观、...
基于Mysql+MFC实现的宠物管理系统C++源码+详细注释(课设新项目).zip个人大三学期的课程设计、经导师指导并认可通过的高分大作业设计项目,评审分97分。主要针对计算机相关专业的正在做大作业的学生和需要项目实战...
基于MySQL+Django 实现校园食堂点餐系统全部资料+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的...