数据分析案例5 电信流量统计案例

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


phone.txt是手机号段规则,是手机号码对应地区城市和运营商的数据


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

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



数据文件太大只提供一部分

http.log

15639120688 http://v.baidu.com/movie 3936 12058
13905256439 http://movie.youku.com 10132 538
15192566948 https://image.baidu.com 19789 5238
14542296218 http://v.baidu.com/tv 7504 13253
17314017739 http://www.weibo.com/?category=7 7003 79
14554637796 http://v.baidu.com/tv 15494 7950
13793181795 http://weibo.com/?category=1760 996 15246
18350161914 https://image.baidu.com 1600 5101
15255537988 http://blog.csdn.net/article/details/47444699 17666 7643
18515646476 https://zhidao.baidu.com/question/1430480451137504979.html 10826 10043
15932420636 http://movie.youku.com 977 3136
18567886220 http://www.weibo.com/?category=7 4652 4336
13694165557 http://movie.youku.com 9610 17284
14728294152 http://www.weibo.com/?category=7 15955 6533
13773776226 http://blog.csdn.net/article/details/47444699 10536 8208
15399710194 http://v.baidu.com/tv 5224 6962
17508400165 http://v.baidu.com/movie 18758 15853
13307519578 http://blog.csdn.net/article/details/47444699 14261 15569
15975769645 http://v.baidu.com/tv 9118 7682
17640300232 http://blog.csdn.net/article/details/47444699 2790 56
18539313261 https://zhidao.baidu.com/question/1430480451137504979.html 1131 18106
15531448828 https://zhidao.baidu.com/question/1430480451137504979.html 2181 2498
17779548801 https://zhidao.baidu.com/question/1430480451137504979.html 1287 5243
15145400262 http://www.edu360.cn 10044 13477

17774549870 https://image.baidu.com 17932 15791



phone.txt

prefix phone province city isp post_code city_code area_code
130 1300000 山东 济南 联通 250000 0531 370100
130 1300001 江苏 常州 联通 213000 0519 320400
130 1300002 安徽 巢湖 联通 238000 0551 340181
130 1300003 四川 宜宾 联通 644000 0831 511500
130 1300004 四川 自贡 联通 643000 0813 510300
130 1300005 陕西 西安 联通 710000 029 610100
130 1300006 江苏 南京 联通 210000 025 320100
130 1300007 陕西 西安 联通 710000 029 610100
130 1300008 湖北 武汉 联通 430000 027 420100
130 1300009 陕西 西安 联通 710000 029 610100
130 1300010 北京 北京 联通 100000 010 110100
130 1300011 北京 北京 联通 100000 010 110100
130 1300012 天津 天津 联通 300000 022 120100
130 1300013 天津 天津 联通 300000 022 120100
130 1300014 天津 天津 联通 300000 022 120100
130 1300015 山东 淄博 联通 255000 0533 370300
130 1300016 山东 烟台 联通 264000 0535 370600
130 1300017 山东 济南 联通 250000 0531 370100
130 1300018 天津 天津 联通 300000 022 120100
130 1300019 天津 天津 联通 300000 022 120100
130 1300020 上海 上海 联通 200000 021 310100
130 1300021 上海 上海 联通 200000 021 310100
130 1300022 上海 上海 联通 200000 021 310100
130 1300023 上海 上海 联通 200000 021 310100
130 1300024 上海 上海 联通 200000 021 310100
130 1300025 江苏 南京 联通 210000 025 320100
130 1300026 江苏 南京 联通 210000 025 320100
130 1300027 山东 烟台 联通 264000 0535 370600
130 1300028 江苏 南京 联通 210000 025 320100
130 1300029 江苏 南京 联通 210000 025 320100
130 1300030 江苏 南京 联通 210000 025 320100
130 1300031 江苏 南京 联通 210000 025 320100
130 1300032 江苏 南京 联通 210000 025 320100
130 1300033 江苏 无锡 联通 214000 0510 320200
130 1300034 江苏 无锡 联通 214000 0510 320200
130 1300035 江苏 无锡 联通 214000 0510 320200
130 1300036 江苏 无锡 联通 214000 0510 320200
130 1300037 江苏 无锡 联通 214000 0510 320200
130 1300038 江苏 无锡 联通 214000 0510 320200
130 1300039 江苏 无锡 联通 214000 0510 320200
130 1300040 广东 广州 联通 510000 020 440100
130 1300041 广东 广州 联通 510000 020 440100
130 1300042 广东 广州 联通 510000 020 440100
130 1300043 广东 广州 联通 510000 020 440100
130 1300044 广东 广州 联通 510000 020 440100
130 1300045 北京 北京 联通 100000 010 110100
130 1300046 北京 北京 联通 100000 010 110100
130 1300047 北京 北京 联通 100000 010 110100
130 1300048 北京 北京 联通 100000 010 110100
130 1300049 北京 北京 联通 100000 010 110100
130 1300050 广东 广州 联通 510000 020 440100
130 1300051 广东 广州 联通 510000 020 440100
130 1300052 广东 广州 联通 510000 020 440100
130 1300053 广东 广州 联通 510000 020 440100
130 1300054 广东 广州 联通 510000 020 440100
130 1300055 广东 广州 联通 510000 020 440100
130 1300056 广东 广州 联通 510000 020 440100
130 1300057 广东 广州 联通 510000 020 440100
130 1300058 广东 广州 联通 510000 020 440100
130 1300059 广西 南宁 联通 530000 0771 450100
130 1300060 广东 广州 联通 510000 020 440100
130 1300061 湖北 荆门 联通 448000 0724 420800
130 1300062 广东 广州 联通 510000 020 440100
130 1300063 广东 广州 联通 510000 020 440100
130 1300064 广东 广州 联通 510000 020 440100
130 1300065 山东 潍坊 联通 261000 0536 370700
130 1300066 广东 广州 联通 510000 020 440100
130 1300067 浙江 温州 联通 325000 0577 330300
130 1300068 广东 广州 联通 510000 020 440100
130 1300069 广西 南宁 联通 530000 0771 450100
130 1300070 广东 广州 联通 510000 020 440100
130 1300071 湖北 武汉 联通 430000 027 420100
130 1300072 广东 广州 联通 510000 020 440100
130 1300073 广东 广州 联通 510000 020 440100
130 1300074 广东 广州 联通 510000 020 440100
130 1300075 广东 广州 联通 510000 020 440100
130 1300076 河南 郑州 联通 450000 0371 410100
130 1300077 广东 广州 联通 510000 020 440100
130 1300078 广东 广州 联通 510000 020 440100
130 1300079 广东 广州 联通 510000 020 440100
130 1300080 广东 广州 联通 510000 020 440100
130 1300081 广东 广州 联通 510000 020 440100
130 1300082 广东 广州 联通 510000 020 440100
130 1300083 广东 广州 联通 510000 020 440100
130 1300084 广东 广州 联通 510000 020 440100
130 1300085 广东 广州 联通 510000 020 440100
130 1300086 广东 广州 联通 510000 020 440100
130 1300087 甘肃 兰州 联通 730000 0931 620100
130 1300088 广东 广州 联通 510000 020 440100
130 1300089 广东 广州 联通 510000 020 440100
130 1300090 浙江 宁波 联通 315000 0574 330200
130 1300091 吉林 长春 联通 130000 0431 220100
130 1300092 辽宁 本溪 联通 117000 024 210500
130 1300093 辽宁 营口 联通 115000 0417 210800
130 1300094 辽宁 大连 联通 116000 0411 210200
130 1300095 内蒙古 包头 联通 014000 0472 150200
130 1300096 新疆 乌鲁木齐 联通 830000 0991 650100
130 1300097 黑龙江 佳木斯 联通 154000 0454 230800


根据需求提取javabean

City.java

public class City implements Comparable<City> {
	private String name;// 市的名字
	private int count;// 总流量

	public City() {
		super();
	}

	public City(String name, int count) {
		super();
		this.name = name;
		this.count = count;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return "City [name=" + name + ", count=" + count + "]";
	}

	@Override
	public int compareTo(City o) {
		return o.getCount() - this.getCount();
	}
}

Company.java

public class Company implements Comparable<Company> {
	private String name;// 运营商的名字
	private int count;

	public Company() {
		super();
	}

	public Company(String name, int count) {
		super();
		this.name = name;
		this.count = count;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return "Company [name=" + name + ", count=" + count + "]";
	}

	@Override
	public int compareTo(Company o) {
		return o.getCount() - this.getCount();
	}
}

Phone.java

public class Phone implements Comparable<Phone> {
	private String name;// 代表手机号
	private int count;// 总流量

	public Phone() {
		super();
	}

	public Phone(String name, int count) {
		super();
		this.name = name;
		this.count = count;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return "[name=" + name + ", count=" + count + "]";
	}

	@Override
	public int compareTo(Phone o) {
		return o.getCount() - this.getCount();
	}

}

Provice.java

public class Province implements Comparable<Province> {
	private String name;// 省份的名字
	private int count;// 总流量

	public Province() {
		super();
	}

	public Province(String name, int count) {
		super();
		this.name = name;
		this.count = count;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return "Province [name=" + name + ", count=" + count + "]";
	}

	@Override
	public int compareTo(Province o) {
		return o.getCount() - this.getCount();
	}
}

Url.java

public class Url implements Comparable<Url>{
	private String url;//域名网址
	private int count;//总流量
	public Url() {
		super();
	}
	public Url(String url, int count) {
		super();
		this.url = url;
		this.count = count;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	@Override
	public int compareTo(Url o) {
		return o.getCount()-this.getCount();
	}
	@Override
	public String toString() {
		return "[url=" + url + ", count=" + count + "]";
	}
	

Test.java (主类)
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
	public static void main(String[] args) {
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		HashMap<String, Integer> map2 = new HashMap<String, Integer>();
		HashMap<String, String> map3 = new HashMap<String, String>();
		HashMap<String, String> map4 = new HashMap<String, String>();
		HashMap<String, String> map5 = new HashMap<String, String>();
		try (BufferedReader br = new BufferedReader(new FileReader("../案例1/src/cn/edu360/http.log"));
				BufferedReader br2 = new BufferedReader(new FileReader("../案例1/src/cn/edu360/phone.txt"));) {
			String line;
			String[] arr;
			String[] arr2;
			int count;
			String url;
			while ((line = br.readLine()) != null) {
				arr = line.split(" "); 
				count = Integer.parseInt(arr[1]) + Integer.parseInt(arr[2]); 
				arr2 = arr[0].split("\t"); 
				url = getUrl(arr2[1]); 
				if (map.containsKey(url)) {
					map.put(url, map.get(url) + count);
				} else {
					map.put(url, count);
				}
				String phoneNumber = arr2[0];
				if (map2.containsKey(phoneNumber)) {
					map2.put(phoneNumber, map2.get(phoneNumber) + count);
				} else {
					map2.put(phoneNumber, count);
				}
			}
			br2.readLine();
			while ((line = br2.readLine()) != null) {
				arr = line.split("\t");
				map3.put(arr[1], arr[2]);
				if (!map4.containsKey(arr[0])) {
					map4.put(arr[0], arr[4]);
				}
				map5.put(arr[1], arr[3]);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		ArrayList<Url> list = getResult(map);
		System.out.println("1.根据给的用户上网日志记录数据,计算出总流量最高的网站Top3:");
		System.out.println("Top1:" + list.get(0));
		System.out.println("Top2:" + list.get(1));
		System.out.println("Top3:" + list.get(2));
		System.out.println("------------------------------------------");
		ArrayList<Province> list2 = getResult2(map2, map3);
		System.out.println("2.根据给的手机号段归属地规则,计算出总流量最高的省份Top3:");
		System.out.println("Top1:" + list2.get(0));
		System.out.println("Top2:" + list2.get(1));
		System.out.println("Top3:" + list2.get(2));
		System.out.println("------------------------------------------");
		ArrayList<Company> list3 = getResult3(map2, map4);
		System.out.println("3.根据给的手机号段运营商规则,计算出总流量最高的运营商Top3:");
		System.out.println("Top1:" + list3.get(0));
		System.out.println("Top2:" + list3.get(1));
		System.out.println("Top3:" + list3.get(2));
		System.out.println("------------------------------------------");
		ArrayList<Phone> list4 = getResult4(map2);
		System.out.println("4.根据给的用户上网日志记录数据,计算出总流量最高的手机号Top3:");
		System.out.println("Top1:" + list4.get(0));
		System.out.println("Top2:" + list4.get(1));
		System.out.println("Top3:" + list4.get(2));
		System.out.println("------------------------------------------");
		ArrayList<City> list5 = getResult5(map2, map5);
		System.out.println("5.根据给的手机号段归属地规则,计算出总流量最高的市Top3:");
		System.out.println("Top1:" + list5.get(0));
		System.out.println("Top2:" + list5.get(1));
		System.out.println("Top3:" + list5.get(2));
	}
	private static ArrayList<City> getResult5(HashMap<String, Integer> map2, HashMap<String, String> map5) {
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		for (Entry<String, Integer> entry : map2.entrySet()) {
			Integer count = entry.getValue();// 总流量
			String phoneNumber = entry.getKey().substring(0, 7);
			String name = map5.get(phoneNumber);
			if (map.containsKey(name)) {
				map.put(name, map.get(name) + count);
			} else {
				map.put(name, count);
			}
		}
		ArrayList<City> list = new ArrayList<City>();
		for (Entry<String, Integer> entry : map.entrySet()) {
			list.add(new City(entry.getKey(), entry.getValue()));
		}
		Collections.sort(list);
		return list;
	}
	private static ArrayList<Phone> getResult4(HashMap<String, Integer> map2) {
		ArrayList<Phone> list = new ArrayList<Phone>();
		for (Entry<String, Integer> entry : map2.entrySet()) {
			list.add(new Phone(entry.getKey(), entry.getValue()));
		}
		Collections.sort(list);
		return list;
	}
	private static ArrayList<Company> getResult3(HashMap<String, Integer> map2, HashMap<String, String> map4) {
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		for (Entry<String, Integer> entry : map2.entrySet()) {
			Integer count = entry.getValue(); 
			String phoneNumber = entry.getKey().substring(0, 3);
			String name = map4.get(phoneNumber);
			if (map.containsKey(name)) {
				map.put(name, map.get(name) + count);
			} else {
				map.put(name, count);
			}
		}
		ArrayList<Company> list = new ArrayList<Company>();
		for (Entry<String, Integer> entry : map.entrySet()) {
			list.add(new Company(entry.getKey(), entry.getValue()));
		}
		Collections.sort(list);
		return list;
	}
	private static ArrayList<Province> getResult2(HashMap<String, Integer> map2, HashMap<String, String> map3) {
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		for (Entry<String, Integer> entry : map2.entrySet()) {
			Integer count = entry.getValue(); 
			String phoneNumber = entry.getKey().substring(0, 7);
			String name = map3.get(phoneNumber);
			if (map.containsKey(name)) {
				map.put(name, map.get(name) + count);
			} else {
				map.put(name, count);
			}
		}
		ArrayList<Province> list = new ArrayList<Province>();
		for (Entry<String, Integer> entry : map.entrySet()) {
			list.add(new Province(entry.getKey(), entry.getValue()));
		}
		Collections.sort(list);
		return list;
	}
	private static ArrayList<Url> getResult(HashMap<String, Integer> map) {
		ArrayList<Url> list = new ArrayList<Url>();
		for (Entry<String, Integer> entry : map.entrySet()) {
			list.add(new Url(entry.getKey(), entry.getValue()));
		}
		Collections.sort(list);
		return list;
	}
	private static String getUrl(String s) {
		String regex = "\\w*\\.?\\w+\\.{1}\\w+";
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(s);
		while (m.find()) {
			return m.group();
		}
		return null;
	}
}

		

猜你喜欢

转载自blog.csdn.net/a331685690/article/details/80230117
今日推荐