四种方式对数据进行统计

表的结构

id,name,time
1,a,1992-11
2,a,1992-12
3,b,1992-11
4,b,1992-12
5,d,1992-13
6,b,1992-13
7,c,1992-11
逆序输出登录次数最多的用户,以及登录的次数
 
 
1在linux下,进行分析
sed '1d' data.txt | awk -F, '{print $2}' | sort | uniq -c | sort -r
sed是行处理器,首先删除掉第一行|进行分割,分隔符为“,”,输出|排序,因为uniq去重需要接壤的|去重,并统计重复的个数|sort排序,-r是逆序
2使用java进行处理
 
package Txt;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

/**
 * Created by MiMi on 2017/4/22.
 */
public class DateSplit {
    public static void main(String args[]){
        try {
            BufferedReader br=new BufferedReader(new FileReader(new File("data")));
            br.readLine();
            String str=br.readLine();
            Map<String,Integer> hashMap=new HashMap<String,Integer>();
            while(str!=null){
                String[] strs=str.split(",");
                if(hashMap.get(strs[1])!=null){
                    hashMap.put(strs[1],hashMap.get(strs[1])+1);
                }else{
                    hashMap.put(strs[1],1);
                }
                str=br.readLine();
            }
            List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(hashMap.entrySet());
            Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
                @Override
                public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                    return o2.getValue().compareTo(o1.getValue());
                }
            });
            System.out.println(list);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 
3mysql的sql查询
select name,count(time) as num from tb group by name order by num desc
4python实现
import csv
from collections import defaultdict
f=csv.reader(open("data.csv"))
mydict=defaultdict(int)
tag=0
for line in f:
    tag += 1
    if tag==1:
        continue
    mydict[line[1]]+=1
print(sorted(mydict.items(),key=lambda item:item[1],reverse=True))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值