java游戏数据分析_java(版)数据分析--app升级案例

数据:

日期,用户名,app名,下载渠道,所在城市,app版本

2016-08-15,刘帅老师,斗地主,app store,上海,v2.0

2016-08-15,刘帅老师,斗地主,app store,上海,v2.2

2016-08-15,刘帅老师,斗地主,app store,上海,v2.3

2017-08-15,涛哥,共享女友,360应用,北京,v2.0

2017-08-15,赵老师,共享女友,安智市场,北京,v1.2

2017-08-15,赵老师,共享女友,安智市场,北京,v1.5

2017-08-15,涛哥,共享女友,360应用,北京,v1.0

2017-08-15,涛哥,共享女友,360应用,北京,v2.0

2017-08-15,涛哥,共享女友,360应用,北京,v2.1

2017-08-14,涛哥,共享女友,360应用,北京,v1.0

2017-08-14,赵老师,共享女友,安智市场,北京,v1.2

2017-08-14,涛哥,共享女友,360应用,天津,v1.2

2017-08-14,涛哥,共享女友,小米应用,天津,v2.0

2017-08-14,刘帅老师,斗地主,app store,上海,v1.8

2016-08-15,刘帅老师,斗地主,app store,上海,v2.4

需求:

统计出每个用户的app版本升级情况

日期

用户名

app名

新版本下载渠道

升级前版本

升级后版本

统计结果示例如下:app的下载渠道分开来看

2017-08-14

涛哥

共享女友

360应用

v1.0

v1.2

2017-08-15

涛哥

共享女友

小米应用

v1.2

v2.0

将结果存入到数据库中

步骤分析;

1 读取app文件加载数据

2 将数据的前四个字段作为map的key存储,对应的版本信息放在list中并按版本排序 Map

3 遍历map信息 ,取出对应的字段,存储在结果集pojo中(AppBean)

4 将结果集放在list集合中,并按时间排序

知识点:

Map List  SimpleDateFormat   Date的before() 和after()  排序

代码实现

1 AppBean

private String date,user,appName ,from,minVersion,maxVersion ;

2 加载文件获取app信息数据

BufferedReaderbr=newBufferedReader(newFileReader("d:/data/app.txt"));

Stringline=null;

while((line=br.readLine())!=null){

//System.out.println(line);

String[]split=line.split(",");

StringdateStr=split[0];

Stringuser=split[1];

StringappName=split[2];

Stringfrom=split[3];

Stringversion=split[5];

3 将数据信息以指定的key存储在map中 value是对应的版本list集合(按版本信息排序)

//存储app数据  key是用户的app信息  value  是对应的版本号的集合

Map>map=newHashMap<>();

BufferedReaderbr=newBufferedReader(newFileReader("d:/data/app.txt"));

Stringline=null;

while((line=br.readLine())!=null){

//System.out.println(line);

String[]split=line.split(",");

StringdateStr=split[0];

Stringuser=split[1];

StringappName=split[2];

Stringfrom=split[3];

Stringversion=split[5];

//System.out.println(version);

Stringkey=dateStr+","+user+","+appName+","+from;

Listlist=map.getOrDefault(key,newArrayList<>());

list.add(version);

//对list排序

SortUtil.sortListByVersion(list);

map.put(key,list);

}

4 List按版本信息排序

/**

* 版本信息升序排列

*/

publicstaticvoidsortListByVersion(Listlist){

Collections.sort(list,newComparator() {

publicintcompare(Stringo1, Stringo2) {

//TODOAuto-generated method stub

returno1.compareTo(o2);

}

});

}

4 取出map中的数据 ,封装结果集信息,将AppBean放在list中

//存储结果集的list

List appBeanList = new ArrayList<>();

Set>>entrySet=map.entrySet();

for(Entry>entry:entrySet) {

System.out.println(entry);

Stringkey=entry.getKey();

String[]split=key.split(",");

Stringtime=split[0];

Stringuser=split[1];

StringappName=split[2];

Stringfrom=split[3];

//版本信息

ListversionList=entry.getValue();

if(versionList.size()>1){//有升级

String minVersion = versionList.get(0);

String maxVersion = versionList.get(versionList.size()-1);

AppBeanappBean=newAppBean();

appBean.setDate(time);

appBean.setUser(user);

appBean.setAppName(appName);

appBean.setFrom(from);

appBean.setMinVersion(minVersion);

appBean.setMaxVersion(maxVersion);

appBeanList.add(appBean);

}

}

5 对结果集按照时间排序

//对appBeanList排序按照时间排序

SortUtil.sortListByTime(appBeanList);

6 :List按时间排序

Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;

/**

* 结果集按照时间排序

*/

publicstaticvoidsortListByTime(Listlist){

Collections.sort(list,newComparator() {

publicintcompare(AppBeano1, AppBeano2) {

try{

Stringdate1=o1.getDate();

Stringdate2=o2.getDate();

SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-dd");

Dated1=format.parse(date1);

Dated2=format.parse(date2);

// 时间的方法 before() after()

return d1.before(d2)?-1:1 ;

}catch(ParseExceptione) {

//TODOAuto-generated catch block

e.printStackTrace();

}

//return o1.getDate().compareTo(o2.getDate());

return0;

}

});

}

更多内容请咨询qq:598196583    附带视频资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值