用hadoop分析某高校的个人信息数据

要求:
1.请在数据集中统计出有多少人同年同月同日生?
2.所有数据中哪天生的人最多?
3.计算出各民族的人数,并用数据可视化方法展示数据(要求使用js图表控件)。
4.统计出各省市的人数,并用数据可视化方法展示数据(要求使用js图表控件)。
一、数据分析

原始数据如下(截取部分显示,共3万多条数据):

835276男522422199705105736233X汉族
686250男522702199607025609392X苗族
985566男522423199509154314424X苗族
18090男522624199812096840697X苗族
655092男522623199809248058462X汉族
756282男522222199909071596025X汉族
226496男533222199808052319603X汉族
9024男522425199904135643814X穿青人族
616700男522428199704172100396X汉族
982928男522130199608115898122X汉族
471805男522227199707142185106X土家族
653778男522322199812302333706X布依族
835825女52240119970426128076X彝族
337162女520103199511304514430X汉族
87163女522327199406019372518X布依族
936839女510124199511232159236X汉族
1206女142430199908265791108X汉族
922028女411527199606123098810X汉族
757757女142223199912249499828X汉族
357366女430225199905225125487X汉族
980132女431102199908165248604X汉族
955052女430225199901301076796X汉族
903667女430223199909305266801X汉族
415817女522228199807102060998X土家族
58643女522224199802102167577X蒙古族
63839女52020219981222250635X彝族
200944女522228199810025408240X土家族
690380女522225199711129329265X苗族
661901女522222199810016693422X土家族
612370女520203199801181310587X汉族
906568女522228199802221937543X土家族
775355女520121199908216770069X汉族
782746女52222619971119500808X苗族

发现以性别为分隔,后面就是身份证号,而我们可以根据身份证号统计出人们的生日,所属省份,X字符后面接着民族,但是这些可能都存在特例,我们进行异常处理即可。

二、核心代码
1.统计出有多少人同年同月同日生
//拿到一行文本内容,转换成String 类型  
String line = value.toString(); 
//将这行文本切分成单词  
String[] sex = line.split("男");
if(sex.length == 1){
    sex = line.split("女");
}
//ip地址为每行第一个空格第一个单词
String IDcard = sex[1];
String birthday = IDcard.substring(6,14);
if(!(birthday.contains(" "))){
    context.write(new Text(birthday), new IntWritable(1));
}
2.所有数据中哪天生的人最多
int maxValue = Integer.MIN_VALUE;  
for (IntWritable value : values) {  
    maxValue = Math.max(maxValue, value.get());  
}  
context.write(key, new IntWritable(maxValue));
3.计算出各民族的人数,并用数据可视化方法展示数据(要求使用js图表控件)

其中正则表达式是表示中文的通配符,如果不是中文,我们舍弃这些数据。

String[] nation = line.split("X");
Pattern pat = Pattern.compile("^[\\u4e00-\\u9fa5]*$");
Matcher mat = pat.matcher(nation[1]);
if(mat.matches()) {
    context.write(new Text(mat.group(0)), new IntWritable(1));
}

计算的结果:

名族 人数
东乡族 1
京族 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值