java数据分析--网站访问日志session数据分析

[if !supportLists]1. [endif]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.0v1.2

2017-08-15涛哥共享女友小米应用v1.2v2.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信息数据

BufferedReader br = new BufferedReader(new FileReader("d:/data/app.txt"));

String line = null ;

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

//System.out.println(line);

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

String dateStr = split[0];

String user = split[1];

String appName = split[2];

String from = split[3];

String version = split[5];

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

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

Map> map = new HashMap<>();

BufferedReader br = new BufferedReader(new FileReader("d:/data/app.txt"));

String line = null ;

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

//System.out.println(line);

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

String dateStr = split[0];

String user = split[1];

String appName = split[2];

String from = split[3];

String version = split[5];

//System.out.println(version);

  String key  = dateStr +","+user+","+appName+","+from ;

  List list = map.getOrDefault(key, new ArrayList<>());

  list.add(version);

  //对list排序

 SortUtil.sortListByVersion(list);

  map.put(key, list);

}

4 List按版本信息排序

/**

*版本信息升序排列

 * @param list

 */

public static void sortListByVersion(List list){

Collections.sort(list,new Comparator() {

@Override

public int compare(String o1, String o2) {

// TODO Auto-generated method stub

return o1.compareTo(o2);

}

});

}

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

       //存储结果集的list

List appBeanList = new ArrayList<>();

Set>> entrySet = map.entrySet();

for (Entry> entry : entrySet) {

System.out.println(entry);

String key = entry.getKey();

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

String time = split[0];

String user = split[1];

String appName = split[2];

String from = split[3];

//版本信息

List versionList = entry.getValue();

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

String minVersion = versionList.get(0);

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

AppBean appBean = new AppBean();

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;

/**

*结果集按照时间排序

 * @param list

 */

public static void sortListByTime(List list){

Collections.sort(list,new Comparator() {

@Override

public int compare(AppBean o1, AppBean o2) {

try {

String date1 = o1.getDate();

String date2 = o2.getDate();

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

Date d1 = format.parse(date1);

Date d2 = format.parse(date2);

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

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

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

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

return 0;

}

});

}

你可能感兴趣的:(java数据分析--网站访问日志session数据分析)