腾讯项目数据分析脚本

截至到2月26日,网络遥控器的一些统计

1,统计终端用户个数

cat terminal02 terminal0226.txt | cut -f 3 | grep -v 'null' | wc -l
21个用户,去除null之后实际为19个

2,去除行为数据中的空字段,提取出用户id,operateBehavior,operateType,operateTime,remark 字段

cat operate0226.txt | grep -v 'null' | cut -f 5,6,7,8,9 > preDealed.data
统计可用记录数:

wc -l preDealed.data

3,统计贡献记录数目最多的用户

 cat preDealed.data | cut -f 1 | sort | uniq -c | sort -r -n |  sed '1,$s/^[ ]*//g' >user.top
4,统计显式频道的top10

 cat preDealed.data | cut -f 5 |grep '频道:' | cut -d ',' -f 1 | cut -d ':' -f 2 | sed '/^$/d' | sort | uniq -c | sort -r -n | head -n 11 > ../result_data/program.top
5.统计显式节目的top10

 cat preDealed.data | cut -f 5 | grep '节目'  | cut -d ',' -f 3 | cut -d ':' -f 2 | sed '/^$/d' | sort | sed '/^$/d'| uniq -c | sort -r -n | sed '1,$s/^[ ]*//g' | head -n 11 > ../result_data/program.top

6,关于提取时间段的一个java程序

package com.bobo.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

public class TengxunTimeDiff {
    //默认登录时间如果超过10分钟,那么就是一次另外的登录。
    private static int TimeDiff=20*60;
    public static void main(String[] args){
        String inFilePath="./myData/tengxun/preDealed.data";
        String outFilePath="./myData/tengxun/timeDiff.data";
        TengxunTimeDiff timeDiff=new TengxunTimeDiff();
        timeDiff.calTimeDiff(inFilePath,outFilePath);
    
        System.out.println("TengxunTimeDiff執行完畢");
    }
    private void calTimeDiff(String inFilePath,String outFilePath){
        FileReader fr=null;
        BufferedReader br=null;
        FileWriter fw=null;
        BufferedWriter bw=null;
        PrintWriter pw=null;
        ArrayList<Integer> lineNumList=new ArrayList<Integer>();
        try{
            fr=new FileReader(inFilePath);
            br=new BufferedReader(fr);
            fw=new FileWriter(outFilePath);
            bw=new BufferedWriter(fw);
            pw=new PrintWriter(bw);
             //分两次吧,第一次先记录下来变化处的行号
            String line=null;
            String firstLine=br.readLine();
            String previousId=firstLine.split("\t")[0];
            String curId=previousId;
            int lineNum=1;
            lineNumList.add(lineNum);
            while((line=br.readLine())!=null){
                curId=line.split("\t")[0];
                 lineNum++;
                if(!curId.equals(previousId)){
                    //说明上一条的开始时间和结束时间可以写入了
                     previousId=curId;
                     lineNumList.add(lineNum);
                }
            }
            lineNumList.add(lineNum);
            System.out.println(lineNumList);
            fr=new FileReader(inFilePath);
            br=new BufferedReader(fr);
            lineNum=1;
            int listIndex=0;
            while((line=br.readLine())!=null){
                System.out.println(lineNum+":"+lineNumList.get(listIndex));
                //注意對與最後一行也需要單獨處理
                if(listIndex>lineNumList.size()-1){
                    return;
                }
                if(lineNum==lineNumList.get(listIndex)-1){
                    pw.println(line.split("\t")[3]);
                }else if(lineNum==lineNumList.get(listIndex)){
                    pw.println(line.split("\t")[0]+"\n"+line.split("\t")[3]);
                    listIndex++;
                }else if(lineNum==lineNumList.get(lineNumList.size()-1)){
                    pw.println(line.split("\t")[3]);
                }
                

                lineNum++;
            }
            pw.println();
            //一次文件讀兩次
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                bw.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            pw.flush();
            pw.close();
            
        }
    }

}
统计每次的登录时长

 

 

posted @ 2014-02-26 16:05  bobo的学习笔记  阅读(422)  评论(0编辑  收藏  举报