快讯
java版数据分析--上网日志流量统计
2024-11-16 14:33  浏览:76

在给的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;

    以上就是本篇文章【java版数据分析--上网日志流量统计】的全部内容了,欢迎阅览 ! 文章地址:http://sjzytwl.xhstdz.com/xwnews/338.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 物流园资讯移动站 http://mip.xhstdz.com/ , 查看更多   
最新新闻
100句激励自己发奋的人生格言
  生活平平淡淡,早起与家人互道早安;父母健康长寿,尽量天天见面;孩子聪明可爱,每天亲亲小脸;夫妻恩爱有加,一生把手相牵;生
java版数据分析--上网日志流量统计
在给的http.log日志文件中,是电信运营商记录用户上网访问某些网站行为的日志记录数据,一条数据中有多个字段用空格
108个秘密
六月底,巴黎的朋友,突然发来一条微信,说自己正在居酒屋,看到一个东方面孔的大叔进来,好像是枝裕和。然后,我鼓励她去Say Hi
微软Win11全新搜索界面:搜索准确性有待改进
说到Windows系统的搜索功能,大家应该都有很多想要吐槽的地方,比如说搜索速度以及搜索设置等等。而微软也针对win11系统的搜索功
0粉丝带货,也能月入过万
本文作者就视频分发赚钱项目分享了自己的看法,从三个大方面和几个小方面来看视频分发究竟赚不赚钱?怎么样的能赚钱?最后怎么得
中国人均预期寿命达到78.6,说明不了什么吗
► 文/观察者网专栏作者 北方朔风根据最新发布的《2023年我国卫生健康事业发展统计公报》,我国的人均预期寿命已经达到了78.6岁
11岁,我成了拥有70万粉丝的抖音网红
出品 | 搜狐科技作者 | 潘琭玙编辑|杨锦运营编辑 | 王一晴当”郭有才”们不断被推向台前,不仅成年人,越来越多的青少年,也开
央视再查百度竞价排名灰幕:内部员工帮助造假
央视《新闻30分》节目截图   导语:央视新闻30分节目16日播出了《记者调查:搜索引擎竞价排名能否让人公平获取信息》的新闻,
pdf搜索功能快捷键是什么?搜索功能快捷键如何使用?
PDF搜索功能快捷键,让你的文档查找如虎添翼!这是一个数字时代的福音,一种能够极大提升我们工作效率的神奇技巧。无论是在阅读
七种常见的数据分析方法拆解,打工人必备|6000字解析
编辑导语:数据分析是用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功
本企业新闻