推广 热搜: 云南  国家  提取  创作  解读  来看  榜单  盘点  收藏  热门 

java版数据分析--上网日志流量统计

   日期:2024-11-16     作者:gzsunmi    caijiyuan  
核心提示:在给的http.log日志文件中,是电信运营商记录用户上网访问某些网站行为的日志记录数据,一条数据中有多个字段用空格

在给的http.log日志文件中,是电信运营商记录用户上网访问某些网站行为的日志记录数据,一条数据中有多个字段用空格分隔。

java版数据分析--上网日志流量统计

例如"18611132889 http://v.baidu.com/tv 20 5000"是一条上网行为,第一个字段代表手机号码,第二个字段代表请求网站的URL,第三个字段代表请求发送的数据即上行流量20字节,第四个字段代表服务器响应给用户的流量即下行流量5000字节)。

数据

 

手机段规则

 

需求

1.计算出用户上网流量总流量(上行+下行)最高的的网站Top3

2.根据给的的手机号段归属地规则,计算出总流量最高的省份Top3

3.根据给的的手机号段运营商规则,计算出总流量最高的运营商Top3

步骤分析

1将手机号规则信息放在Map集合中,以手机号为key,手机数据实体为value

2加载http日志数据,获取url和手机号数据url需要简单清洗

3 处理url数据,统计流量

4 根据http日志文件中的手机号匹配获取对应的区域运营商数据,进行统计

知识点

集合 listmap存储数据特点

IO 切割

HttpBean  pojo

private String phone ;//手机号

private String url ;//请求的url

private int upData ;//上行流量

private int lowData ;//下行流量

TelBean

private String prefix ;

private String phone ;

private String province ;

private String city ;

private String isp ;

private String postCode ;

private String cityCode ;

private String areaCode ;

public static Map<String, TelBean> getTelMap() {

Map<String, TelBean> map = new HashMap<>();

 

 

 

try (BufferedReader bfr = new BufferedReader(new FileReader("d:/data/手机号段规则.txt"));) {

String line = null;

bfr.readLine();

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

// System.out.println(line);

String[] split = line.split("\s");

String prefix = split[0];

String phone = split[1];//七位

String province = split[2];

String city = split[3];

String isp = split[4];

String postCode = split[5];

String cityCode = split[6];

String areaCode = split[7];

TelBean telBean = new TelBean(prefix, phone, province, city, isp, postCode, cityCode, areaCode);

map.put(phone, telBean); // key七位的手机号

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return map;

}

 

public static List<TelBean> getTelList() {

List<TelBean> list = new ArrayList<>();

try (BufferedReader bfr = new BufferedReader(new FileReader("d:/data/手机号段规则.txt"));) {

String line = null;

bfr.readLine();

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

// System.out.println(line);

String[] split = line.split("\s");

String prefix = split[0];

String phone = split[1];

String province = split[2];

String city = split[3];

String isp = split[4];

String postCode = split[5];

String cityCode = split[6];

String areaCode = split[7];

TelBean telBean = new TelBean(prefix, phone, province, city, isp, postCode, cityCode, areaCode);

list.add(telBean);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return list;

}

 

由于List集合和Map集合存储数据的特点不同,此案例我们选择使用map集合

  List需要根据手机号获取其对应的区域需要遍历并匹配手机字段

 

Map存储手机号规则数据,可将手机号作为keyTelBeanvalue数据,直接根据key来获取其对应的区域信息

 

public static Map<String,Integer> getUrlResult() {

//统计各个url的访问量数据

Map<String,Integer> urlMap = new HashMap<>();

try (BufferedReader bfr = new BufferedReader(new FileReader("d:/data/http.log"));){

String line = null ;

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

//System.out.println(line);

String[] split = line.split("\s");

String phone = split[0];

String urlStr = split[1];

String upDateStr = split[2];

String lowDataStr = split[3];

//处理url数据  清洗掉数据格式不正确的数据

String[] split2 = urlStr.split("\.");

if(split2.length>=3){//如果url包含两个 点

String url = split2[1];

Integer sum = urlMap.getOrDefault(url, 0);

sum += Integer.parseInt(upDateStr)+Integer.parseInt(lowDataStr);

urlMap.put(url, sum);//结果数据

}

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return urlMap;

}

static Map<String, TelBean> telMap ;

static{

telMap = TelAdmin.getTelMap();

}

 

public static void main(String[] args) {

//存储省份结果

Map<String,Integer> pMap = new HashMap<>();

//存储运营商结果

Map<String,Integer> ispMap = new HashMap<>();

//存储统计url结果

Map<String,Integer> urlMap = new HashMap<>();

try (BufferedReader bfr = new BufferedReader(new FileReader("d:/data/http.log"));){

String line = null ;

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

//System.out.println(line);

String[] split = line.split("\s");

String phone = split[0];

String urlStr = split[1];

String upDateStr = split[2];

String lowDataStr = split[3];

String tel = phone.substring(0, 7);

TelBean telBean = telMap.get(tel);

String province = telBean.getProvince();//省份

Integer tatol1 = pMap.getOrDefault(province, 0);

tatol1 +=Integer.parseInt(upDateStr)+Integer.parseInt(lowDataStr);

pMap.put(province, tatol1);

String isp = telBean.getIsp();//运营商

Integer tatol2 = ispMap.getOrDefault(isp, 0);

tatol2 +=Integer.parseInt(upDateStr)+Integer.parseInt(lowDataStr);

ispMap.put(isp, tatol2);

String[] split2 = urlStr.split("\.");

if(split2.length>=3){

String url = split2[1];

//System.out.println(url);

Integer tatol = urlMap.getOrDefault(url, 0);

tatol += Integer.parseInt(upDateStr)+Integer.parseInt(lowDataStr);

urlMap.put(url, tatol);

}

}

//对结果集map排序  获取想要的结果

ispMap.entrySet();

 pMap.entrySet();

urlMap.entrySet();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

public static ArrayList<Entry<String, Integer>> sort(Map<String,Integer> map){

Set<Entry<String, Integer>> entrySet = map.entrySet();

ArrayList<Entry<String, Integer>> list = new ArrayList<>(entrySet);

Collections.sort(list,new Comparator<Entry<String, Integer>>() {

@Override

public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {

return o2.getValue().compareTo(o1.getValue());

}

});

return list;

本文地址:http://sjzytwl.xhstdz.com/xwnews/338.html    物流园资讯网 http://sjzytwl.xhstdz.com/ , 查看更多
 
标签: 数据分析 统计
 
更多>同类快讯

新闻列表
企业新闻
推荐企业新闻
推荐图文
推荐快讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号