使用java处理日志文件,完成需求。

简介

http.log日志文件中,是电信运营商记录用户上网访问某些网站行为的日志记录数据,一条数据中有多个字段用空格或制表符分隔。
例如:"18611132889 http://v.baidu.com/tv 20 5000"是一条上网行为,第一个字段代表手机号码,第二个字段代表请求网站的URL,
第三个字段代表请求发送的数据即上行流量(20字节),第四个字段代表服务器响应给用户的流量即下行流量(5000字节)。
phone.txt是手机号段规则,是手机号码对应地区城市和运营商的数据


需求

  1. 根据给的用户上网日志记录数据,计算出总流量最高的网站Top3(网站例如:v.baidu.com,weibo.com)
  2. 根据给的手机号段归属地规则,计算出总流量最高的省份Top3

数据源

  • http.log
  • phone.txt

项目结构


代码实现

SortUtils.java

package com.traffic;import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map.Entry;public class SortUtils {/*** 根据sun进行排序* @param list*/public static void sortBySum(List<Entry<String, Long>> list) {Collections.sort(list, new Comparator<Entry<String, Long>>() {@Overridepublic int compare(Entry<String, Long> o1, Entry<String, Long> o2) {return o2.getValue() - o1.getValue() > 0 ? 1 : -1;}});}}

TestMain1.java

需求1代码实现

package com.traffic;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TestMain1 {public static void main(String[] args) {// 获取URL以及对应的流量和Map<String, Long> map = getUrlSum();// 转化为list进行排序Set<Entry<String, Long>> entrySet = map.entrySet();List<Entry<String, Long>> list = new ArrayList<>(entrySet);// 排序SortUtils.sortBySum(list);/** for (Entry<String, Long> entry : list) { System.out.println(entry); }*/try (BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\data\\1"));) {for (int i = 0; i < 3; i++) {Entry<String, Long> entry = list.get(i);//使用toString方法转化为toStringbw.write(entry.toString());bw.newLine();System.out.println(list.get(i));}} catch (IOException e) {e.printStackTrace();}}/*** 获取URL以及对应的流量和* * @return*/private static Map<String, Long> getUrlSum() {// 用来存储URL以及对应的流量数据Map<String, Long> map = new HashMap<>();try (BufferedReader br = new BufferedReader(new FileReader("D:\\data\\http.log"));) {String line = null;while ((line = br.readLine()) != null) {// System.out.println(line);String string = line.split("\t")[1];String[] split = string.split(" ");String oldUrl = split[0];String up = split[1];String down = split[2];String url = getUrlByRgex(oldUrl);Long upDown = Long.parseLong(up) + Long.parseLong(down);// 如果通过URL直接找到了流量则直接返回,否则就是0Long sum = map.getOrDefault(url, 0L);sum = sum + upDown;map.put(url, sum);}} catch (Exception e) {e.printStackTrace();}return map;}/*** 正则截取URL* * @param oldUrl* @return*/private static String getUrlByRgex(String oldUrl) {Pattern compile = Pattern.compile("(\\w+\\.)?(\\w+\\.){1}\\w+");Matcher matcher = compile.matcher(oldUrl);while (matcher.find()) {return matcher.group();}return null;}
}

TestMain2.java

需求2代码实现

package com.traffic;import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;public class TestMain2 {public static void main(String[] args) {// 通过文件phone.txt获取到手机号前七位对应的省份的mapMap<String, String> map1 = getNumProvince();// System.out.println(map1.size());// 获取手机号对应的流量Map<String, Long> map2 = getPNumSum();// 用来存放省份对应的流量Map<String, Long> map3 = new HashMap<>();Set<Entry<String, Long>> entrySet = map2.entrySet();for (Entry<String, Long> entry : entrySet) {String key = entry.getKey();Long value = entry.getValue();String pNum7 = key.substring(0, 7);String province = map1.get(pNum7);Long sum = map3.getOrDefault(province, 0L);sum+=value;map3.put(province, sum);}/*for (Entry<String, Long> entry : map3.entrySet()) {System.out.println(entry);}*///排序 map -> listSet<Entry<String,Long>> entrySet2 = map3.entrySet();ArrayList<Entry<String,Long>> arrayList = new ArrayList<>(entrySet2);SortUtils.sortBySum(arrayList);/*for (Entry<String, Long> entry : arrayList) {System.out.println(entry);}*/for(int i = 0;i<3;i++) {System.out.println(arrayList.get(i));}}/*** 获取手机号对应的流量* * @return*/private static Map<String, Long> getPNumSum() {Map<String, Long> map = new HashMap<>();try (BufferedReader br = new BufferedReader(new FileReader("D:/data/http.log"));) {String line = null;while ((line = br.readLine()) != null) {// System.out.println(line);String[] split = line.split("\t");String pNum = split[0];// 截取???String[] split2 = split[1].split(" ");String up = split2[1];String down = split2[2];Long upDown = Long.parseLong(up) + Long.parseLong(down);// System.out.println(sum);// 相应的做累加Long sum = map.getOrDefault(pNum, 0L);sum = sum + upDown;map.put(pNum, sum);}} catch (Exception e) {e.printStackTrace();}return map;}/*** 通过文件phone.txt获取到手机号前七位对应的省份的map* * @return*/private static Map<String, String> getNumProvince() {Map<String, String> map = new HashMap<>();try (BufferedReader br = new BufferedReader(new FileReader("D:/data/phone.txt"));) {String line = null;br.readLine();// 跳过第一行while ((line = br.readLine()) != null) {// System.out.println(line);String[] split = line.split("\t");String pNum7 = split[1];String province = split[2];// System.out.println(province);map.put(pNum7, province);}} catch (Exception e) {e.printStackTrace();}return map;}}

项目源码

https://github.com/wangjiaxi/traffic

数据分析案例——流量统计相关推荐

  1. 移动互联网数据分析 移动客户端流量统计 移动客户端数据统计(一)

    移动互联网数据分析 移动客户端流量统计 移动客户端数据统计 原创文章,转载请注明原地址 http://blog.csdn.net/stevenprime 在这个公司两年多了,期间做了移动客户端数据分析 ...

  2. 数据分析案例:统计电影分类情况

    本文通过一个电影分类统计的案例来对python数据分析形成一个初步的理解.以下是我在写代码时记录下的一些东西. 数据来源:IMDB data from 2006 to 2016 | Kaggle 取消 ...

  3. 移动互联网数据分析 移动客户端流量统计 移动客户端数据统计(二)

    原创文章,转载请注明原地址 http://blog.csdn.net/stevenprime 二.数据的收集 移动客户端收集数据后,一般通过http协议或者其它方式上传到服务器. 服务器将客户端传过来 ...

  4. MapReduce编程规范及实践(流量统计)

    一.MapReduce编码规范 Map阶段2个步骤 设置 InputFormat 类, 将数据切分为 Key-Value(K1和V1) 对, 输入到第二步 自定义 Map 逻辑, 将第一步的结果转换成 ...

  5. 15.大数据---Mapreduce案例之---统计手机号耗费的总上行流量、下行流量、总流量

    Mapreduce案例之-统计手机号耗费的总上行流量.下行流量.总流量 1.需求: 统计每一个手机号耗费的总上行流量.下行流量.总流量 2.数据准备: 2.1 输入数据格式: 时间戳.电话号码.基站的 ...

  6. spark企业经典案例之手机app流量统计

    spark企业经典案例之手机app流量统计,本课程是基于企业真实项目案例中的一个模块为背景讲解,此业务涉及spark统计,然后通过phpweb进行读取数据,最终通过手机端展示,根据公司案例抽取出来的模 ...

  7. 淘宝APP用户行为数据分析案例(附python代码及注释)

    淘宝APP用户行为数据分析案例 一.分析背景与目的 1.1背景与数据限制 电商平台的最核心的功能就是为买卖双方提供高效和体验良好的交易服务.得益于算法技术的发展,淘宝APP给买方提供了搜索.推荐及广告 ...

  8. 电商数据分析案例 与 职责要求

    一.数据分析的流程.数据分析的流程主要分为六步骤, 遵循这种方法,一个完整的数据分析项目就出来了. (1)明确分析目的:我们接到一个分析任务,首先要弄清楚我们分析的对象是什么,要达成怎样的目的,不能陷 ...

  9. python数据分析:流量数据化运营(上)——知识点

    流量数据化运营 流量值从数字设备上访问企业的网站.app应用.智能设备的用户行为,它主要包括用户从哪里来,在企业相关载体上有哪些行为.产生了哪些转化等. 媒体信息时代,用户行为移动化.需求个性化的复杂 ...

最新文章

  1. 数据传送到后端(二)
  2. java环境变量设置
  3. 比特币这么火热,看看这篇比特币初学者指南
  4. 驳Linux不娱乐 堪比Win平台中十款播放器
  5. 华为p8升级android8系统资源,华为鸿蒙系统已陆续推送! 安卓系统可无缝升级: 升级包容量高达6GB...
  6. Matlab线性/非线性规划优化算法(4)
  7. 什么是python 包_什么是python
  8. SpringBoot2.0系列(2)---SpringBoot之使用Thymeleaf视图模板
  9. LeetCode 5380. 数组中的字符串匹配
  10. tensorflow学习5----GAN模型初探
  11. 【渝粤教育】电大中专消费者心理学作业 题库
  12. SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面
  13. Atitit 项目源码的架构,框架,配置与环境说明模板 规范 标准化
  14. 元宵节要到了,给大家猜几个谜语
  15. 一种高效查找树-radix的实现
  16. STM32L4超低功耗特性概述
  17. 台式主机与显示器相连用HDMI还是VGA
  18. composer 初级使用
  19. 洛谷P1039侦探推理题解--zhengjun
  20. AD19 编译报错:has only one pin 和 floating net label

热门文章

  1. 笑傲江湖中的《洗手》中的霸权主义
  2. 用latex写毕业论文--用 titletoc包重设目录格式
  3. JS中append方法与appendTo有什么区别了?
  4. 2022年中级会计中级经济法考试仿真模拟题答案
  5. 独立站shopify卖家如何玩转TikTok?
  6. 粗略整理IOS招聘要求
  7. 【Rust日报】 2019-08-01:brpc-rs - X-lab 实验室新推出的一个rpc库
  8. Javascript:window.close()不起作用?
  9. mybatis-plus读写分离
  10. Zabbix——通过API接口管理Zabbix所监控主机