zoukankan      html  css  js  c++  java
  • 文本分析实例---QQ聊天记录分析

    对QQ聊天记录进行分析,由于每天产生的聊天记录比較多,所以选取的是从2月份整月的聊天记录数据。分析要产生的结果有三个,聊天记录中发消息的人前top15。统计24小时时间段那个时间段发贴人最多,还有对消息中的热词进行抽取。

    对QQ用户发贴次数进行统计,须要注意QQ导出的聊天记录格式。【年月日时分秒 QQ账号相关信息】,须要对聊天记录做解析。另外对聊天内容也要做解析。

    详细思路不做详解,仅仅贴结果和部分代码。相信大家一看就明确。



    统计24小时时间段QQ消息数量


    能够看出每天下午3点到5点大家都非常活跃

    另一个就是对讨论的话题做分析,首先要对发的消息做分词处理。去掉一个停用词,然后按词频出现的次数统计,得到例如以下结果。


    第一个表示出现的词,第二个表示在某个时间段内出现的次数,总的来说,我们这个群还算是一个技术群吧。


    相关部分代码:

    def userProcess():
        userArray = []
        contentArray = LoadUserInfo.loadUser()
        for userInfo in contentArray:
            if(len(userInfo)==3):
                userArray.append(userInfo[2])
    
        print(len(userArray))
        #Counter(words).most_common(10)
        userGroupInof = Counter(userArray).most_common(15)
        #print(userGroupInof)
    
        userNameLable = []
        postMessageNum = []
    
        for key,value in userGroupInof:
            userNameLable.append(key)
            postMessageNum.append(value)
    
        #performance = 3 + 10 * np.random.rand(len(people))
        #error = np.random.rand(len(people))
    
        zh_font = matplotlib.font_manager.FontProperties(fname='C:WindowsFontssimsun.ttc')
    
        plt.barh(np.arange(len(userNameLable)), postMessageNum,  align='center', alpha=0.4)
        plt.yticks(np.arange(len(userNameLable)), userNameLable,fontproperties=zh_font)
        plt.xlabel('发贴数量',fontproperties=zh_font)
        plt.title('java-Endless Space群(4881914)发贴最多的15个人',fontproperties=zh_font)
    
        plt.show()

    def hourProcess():
        hourArray = []
        contentArray = LoadUserInfo.loadUser()
        for userInfo in contentArray:
            if(len(userInfo)==3):
                messageDate = userInfo[1]
                hourInfo = re.split('[:]',messageDate)
                hourArray.append(hourInfo[0])
    
        print(len(hourArray))
        #Counter(words).most_common(10)
        hour_counts = Counter(hourArray)
        #对数据进行排序
        sortByHour = sorted(hour_counts.items())
        print(sortByHour)
    
        postMessageLable = []
        postMessageNum = []
    
    
        for key,value in sortByHour:
            postMessageLable.append(key)
            postMessageNum.append(value)
    
        print(postMessageLable)
        print(postMessageNum)
    
        #生成发贴柱状图
        N = len(postMessageNum)
    
        ind = np.arange(N)+0.5  # the x locations for the groups
        #print(ind) #x轴上的数值
        width = 0.35       # the width of the bars
    
        fig, ax = plt.subplots()
        rects = ax.bar(ind, postMessageNum, width, color='r')
    
        # add some text for labels, title and axes ticks
        ax.set_ylabel('message number')
        ax.set_title('QQ message number of hour,total message ( '+ str(len(hourArray)) + ")")
        ax.set_xticks(ind+width)
        ax.set_xticklabels(postMessageLable)
    
        def autolabel(rects):
            # attach some text labels
            for rect in rects:
                height = rect.get_height()
                ax.text(rect.get_x()+rect.get_width()/2., height, '%d'%int(height), ha='center', va='bottom')
    
        autolabel(rects)
    
        plt.show()


    #对导入的文件第四列做中文分词处理
    #对用户发出的消息进行处理
    
    def messageProcess():
        wordArray = []
        contentArray = LoadMessageInfo.loadMessage()
        print("processing original data ........")
        for messageInfo in contentArray:
            #print(messageInfo[3])
            word_list = jieba.cut(messageInfo, cut_all=False)
            for word in word_list:
                #过滤掉短词,仅仅有一个长度的词
                if(len(word)>1):
                    wordArray.append(word)
    
    
        #print(wordArray)
        print("remove stop word data ........")
        jsonResource = open('./data/stopword.json','r',encoding='utf8')
        stopwords = json.load(jsonResource)
        #print(stopwords)
        for word in wordArray:
            print(word)
            if (word in stopwords):
                wordArray.remove(word)
    
    
        #print(wordArray)
        print("text is processing.......")
        word_counts = Counter(wordArray)
        print(word_counts)
        print("processing is over")



  • 相关阅读:
    IE CSS Bug及解决方案参考手册
    如何学习Javascript
    JS获取当前对象大小以及屏幕分辨率等
    自适应网页设计的方法
    【Javascript Trick系列】二、table相关操作
    移动web开发经验总结
    兼容各种浏览器的常用按钮样式
    获取浏览器的高度和宽度
    让页面弹框垂直水平居中
    Vue is used in projects
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7190834.html
Copyright © 2011-2022 走看看