大数据分析 订阅
大数据分析是指对规模巨大的数据进行分析。大数据可以概括为5个V, 数据量大(Volume)、速度快(Velocity)、类型多(Variety)、价值(Value)、真实性(Veracity) [1]  。大数据作为时下最火热的IT行业的词汇,随之而来的数据仓库、数据安全、数据分析、数据挖掘等等围绕大数据的商业价值的利用逐渐成为行业人士争相追捧的利润焦点。随着大数据时代的来临,大数据分析也应运而生。 展开全文
大数据分析是指对规模巨大的数据进行分析。大数据可以概括为5个V, 数据量大(Volume)、速度快(Velocity)、类型多(Variety)、价值(Value)、真实性(Veracity) [1]  。大数据作为时下最火热的IT行业的词汇,随之而来的数据仓库、数据安全、数据分析、数据挖掘等等围绕大数据的商业价值的利用逐渐成为行业人士争相追捧的利润焦点。随着大数据时代的来临,大数据分析也应运而生。
信息
分析步骤
可视化分析
外文名
Big data analysis
大数据概括
数据量大、速度快(高性能)
含    义
是指对规模巨大的数据进行分析
中文名
大数据分析
大数据分析工具介绍
用于展现分析的前端开源工具有JasperSoft,Pentaho, Spagobi, Openi, Birt等等。用于展现分析商用分析工具有Style Intelligence、RapidMiner Radoop、Cognos, BO, Microsoft Power BI, Oracle,Microstrategy,QlikView、 Tableau 。国内的有BDP,国云数据(大数据魔镜),思迈特,FineBI等等。有Teradata AsterData, EMC GreenPlum, HP Vertica 等等。有QlikView、 Tableau 、Style Intelligence等等。
收起全文
精华内容
下载资源
问答
  • Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。前文分享了疫情相关新闻数据爬取,并进行中文分词处理及文本...

    思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。希望该系列线上远程教学对您有所帮助,也希望早点战胜病毒,武汉加油、湖北加油、全国加油。待到疫情结束樱花盛开,这座英雄的城市等你们来。

    首先说声抱歉,最近一直忙着学习安全知识,其他系列文章更新较慢,已经有一些人催更了。言归正传,前文分享了疫情相关新闻数据爬取,并进行中文分词处理及文本聚类、LDA主题模型分析。这篇文章将抓取微博话题及评论信息,采用SnowNLP进行简单的情感分析及文本挖掘,包括随时间的情感分布。希望这篇基础性文章对您有所帮助,也非常感谢参考文献中老师的分享,一起加油,战胜疫情!如果您有想学习的知识或建议,可以给作者留言~

    在这里插入图片描述

    在这里插入图片描述

    代码下载地址:https://github.com/eastmountyxz/Wuhan-data-analysis
    CSDN下载地址:https://download.csdn.net/download/Eastmount/12239638

    同时推荐前面作者另外五个Python系列文章。从2014年开始,作者主要写了三个Python系列文章,分别是基础知识、网络爬虫和数据分析。2018年陆续增加了Python图像识别和Python人工智能专栏。

    在这里插入图片描述

    前文阅读:
    [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势
    [Pyhon疫情大数据分析] 二.PyEcharts绘制全国各地区、某省各城市疫情地图及可视化分析
    [Pyhon疫情大数据分析] 三.新闻信息抓取及词云可视化、文本聚类和LDA主题模型文本挖掘



    一.微博话题数据抓取

    该部分内容参考及修改我的学生兼朋友“杨友”的文章,也推荐博友们阅读他的博客,给予支持。作为老师,最开心的事就是看到学生成长和收获。他的博客地址:python爬虫爬取微博之战疫情用户评论及详情

    微博网址: https://m.weibo.cn/


    1.爬虫解析

    第一步,进入微博审查元素,定位评论对应节点,后续抓取评论信息。
    进入微博后,点击《战疫情》主题下,并随便选择一个动态进行分析,我就选择了“央视新闻网”的一条动态“https://m.weibo.cn/detail/4471652190688865”进行分析。

    在这里插入图片描述

    我们刚打开该话题的时候,它显示的是187条评论,但是在审查时可以看到文章中的20个div,并且每个div中装载一条评论,每个页面原始就只能显示20条评论。

    在这里插入图片描述

    当我们把鼠标不断向下滑动的过程中,网页元素中的div也不断随评论的增加而增加,当活动到底部时,所有评论都加载出来了。初步判断该网页属于ajax加载类型,所以先就不要考虑用requests请求服务器了。


    第二步,获取Ajax加载的动态链接数据,通过发布id定位每条话题。
    这些数据都是通过Ajax动态加载的,点击到《战疫情》主题,发现它的URL并没有变化,具体浏览几篇文章后发现,它的的部分URL都是统一的,文章链接 = ‘https://m.weibo.cn/detail/’+发布时的id,可以通过刚找到的 id 在浏览器中拼接试试。

    在这里插入图片描述

    比如下图所示的微博内容。比如:https://m.weibo.cn/detail/4472846740547511

    在这里插入图片描述


    第三步,下拉网页动态刷新数据,发现获取多个page的规律。
    接下来是获取它下一个加载数据的通道,同样是通过抓包的方式获取,不断的下拉网页,加载出其他的Ajax数据传输通道,再进行对比。可以很明显的看出,它的当前链接就只是带上了 “&page=当前数字” 的标签,并且每次加载出18篇动态文章。

    在这里插入图片描述

    查看元素信息如下图所示,每个page显示18个微博话题。

    在这里插入图片描述

    第四步,调用json.loads()函数或在线网站解析Json数据。
    拿到的数据是json格式,再提取信息前需要把str文本转化为json数据,进行查找,可以使用json库查看它的结构 ,也可以在线json解析查看它的结构,更推荐在线解析,方法结构比较清晰。

    在线解析后的结果,简单的给它打上标签,每一个等级为一块,一级包括二级和三级,二级包括三级… 然后通过前面的标签进行迭代输出,索引出来。在线网站:https://www.json.cn/

    在这里插入图片描述


    第五步,获取每条微博的ID值。
    调用方法如下,然后把拿到的id加在https://m.weibo.cn/detail/ 的后面就可以访问具体的文章了。

    import requests
    api_url = 'https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_600059_-_ctg1_600059'
    reponse = requests.get(api_url)
    for json in reponse.json()['data']['statuses']:
        comment_ID = json['id']
        print (comment_ID)
    

    在这里插入图片描述

    此时提取所有链接代码如下:

    import requests,time
    from fake_useragent import UserAgent
    
    comment_urls = []
    def get_title_id():
        '''爬取战疫情首页的每个主题的ID'''
        for page in range(1,3):# 这是控制ajax通道的量
            headers = {
                "User-Agent" : UserAgent().chrome #chrome浏览器随机代理
            }
            time.sleep(2)
            # 该链接通过抓包获得
            api_url = 'https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_600059_-_ctg1_600059&page=' + str(page)
            print (api_url)
            rep = requests.get(url=api_url, headers=headers)
            for json in rep.json()['data']['statuses']:
                comment_url = 'https://m.weibo.cn/detail/' + json['id']
                print (comment_url)
                comment_urls.append(comment_url)
    get_title_id()
    

    输出结果如下:

    https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_600059_-_ctg1_600059&page=1
    https://m.weibo.cn/detail/4472725286834498
    https://m.weibo.cn/detail/4472896510211624
    https://m.weibo.cn/detail/4472846892243445
    https://m.weibo.cn/detail/4472901455185821
    https://m.weibo.cn/detail/4472856669039437
    https://m.weibo.cn/detail/4472897055545751
    https://m.weibo.cn/detail/4472891342667233
    https://m.weibo.cn/detail/4472879381479272
    https://m.weibo.cn/detail/4472889565122923
    https://m.weibo.cn/detail/4472884950738226
    https://m.weibo.cn/detail/4472883461527008
    https://m.weibo.cn/detail/4472904014106917
    ......
    

    第六步,调用requests ajax 爬取更多信息。
    现在需要获取更多的信息,如用户id、性别之类的,这不是selenium可以完成的操作了,还得使用ajax的方式获取json数据,提取详细的信息。这里有个字段是max_id, 我们需要在上一个json文件底部找到该值。

    目标:话题链接、话题内容、楼主ID、楼主昵称、楼主性别、发布日期、发布时间、转发量、评论量、点赞量、评论者ID、评论者昵称、评论者性别、评论日期、评论时间、评论内容

    • 第一个通道

    在这里插入图片描述

    • 现在可以预测下一个max_id
      成功的通过上一个通道拿到了下一个通道的max_id,现在就可以使用ajax加载数据了。
      在这里插入图片描述


    2.爬虫完整代码

    # -*- coding: utf-8 -*-
    import requests,random,re
    import time
    import os
    import csv
    import sys
    import json
    import importlib
    from fake_useragent import UserAgent
    from lxml import etree
    
    importlib.reload(sys)
    startTime = time.time() #记录起始时间
    
    #--------------------------------------------文件存储-----------------------------------------------------
    path = os.getcwd() + "/weiboComments.csv"
    csvfile = open(path, 'a', newline='', encoding = 'utf-8-sig')
    writer = csv.writer(csvfile)
    #csv头部
    writer.writerow(('话题链接','话题内容','楼主ID', '楼主昵称', '楼主性别','发布日期',
                     '发布时间', '转发量','评论量','点赞量', '评论者ID', '评论者昵称',
                     '评论者性别', '评论日期', '评论时间','评论内容')) 
    
    #设置heades
    headers = {
        'Cookie': '_T_WM=22822641575; H5_wentry=H5; backURL=https%3A%2F%2Fm.weibo.cn%2F; ALF=1584226439; MLOGIN=1; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5RJaVYrb.BEuOvUQ8Ca2OO5JpX5K-hUgL.FoqESh-7eKzpShM2dJLoIp7LxKML1KBLBKnLxKqL1hnLBoMceoBfeh2EeKBN; SCF=AnRSOFp6QbWzfH1BqL4HB8my8eWNC5C33KhDq4Ko43RUIzs6rjJC49kIvz5_RcOJV2pVAQKvK2UbAd1Uh6j0pyo.; SUB=_2A25zQaQBDeRhGeBM71cR8SzNzzuIHXVQzcxJrDV6PUJbktAKLXD-kW1NRPYJXhsrLRnku_WvhsXi81eY0FM2oTtt; SUHB=0mxU9Kb_Ce6s6S; SSOLoginState=1581634641; WEIBOCN_FROM=1110106030; XSRF-TOKEN=dc7c27; M_WEIBOCN_PARAMS=oid%3D4471980021481431%26luicode%3D20000061%26lfid%3D4471980021481431%26uicode%3D20000061%26fid%3D4471980021481431',
        'Referer': 'https://m.weibo.cn/detail/4312409864846621',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest'
    }
    
    #-----------------------------------爬取战疫情首页的每个主题的ID------------------------------------------
    comments_ID = []
    def get_title_id():
        for page in range(1,21):  #每个页面大约有18个话题
            headers = {
                "User-Agent" : UserAgent().chrome #chrome浏览器随机代理
            }
            time.sleep(1)
            #该链接通过抓包获得
            api_url = 'https://m.weibo.cn/api/feed/trendtop?containerid=102803_ctg1_600059_-_ctg1_600059&page=' + str(page)
            print(api_url)
            rep = requests.get(url=api_url, headers=headers)
            #获取ID值并写入列表comment_ID中
            for json in rep.json()['data']['statuses']:
                comment_ID = json['id'] 
                comments_ID.append(comment_ID)
    
    #-----------------------------------爬取战疫情每个主题的详情页面------------------------------------------         
    def spider_title(comment_ID):
        try:
            article_url = 'https://m.weibo.cn/detail/'+ comment_ID
            print ("article_url = ", article_url)
            html_text = requests.get(url=article_url, headers=headers).text
            #话题内容
            find_title = re.findall('.*?"text": "(.*?)",.*?', html_text)[0]
            title_text = re.sub('<(S*?)[^>]*>.*?|<.*? />', '', find_title) #正则匹配掉html标签
            print ("title_text = ", title_text)
            #楼主ID
            title_user_id = re.findall('.*?"id": (.*?),.*?', html_text)[1]
            print ("title_user_id = ", title_user_id)
            #楼主昵称
            title_user_NicName = re.findall('.*?"screen_name": "(.*?)",.*?', html_text)[0]
            print ("title_user_NicName = ", title_user_NicName)
            #楼主性别
            title_user_gender = re.findall('.*?"gender": "(.*?)",.*?', html_text)[0]
            print ("title_user_gender = ", title_user_gender)
            #发布时间
            created_title_time = re.findall('.*?"created_at": "(.*?)".*?', html_text)[0].split(' ')
            #日期
            if 'Mar' in created_title_time:
                title_created_YMD = "{}/{}/{}".format(created_title_time[-1], '03', created_title_time[2])
            elif 'Feb' in created_title_time:
                title_created_YMD = "{}/{}/{}".format(created_title_time[-1], '02', created_title_time[2])
            elif 'Jan' in created_title_time:
                title_created_YMD = "{}/{}/{}".format(created_title_time[-1], '01', created_title_time[2])
            else:
                print ('该时间不在疫情范围内,估计数据有误!URL = ')
                pass
            print ("title_created_YMD = ", title_created_YMD)
            #发布时间
            add_title_time = created_title_time[3]
            print ("add_title_time = ", add_title_time)
            #转发量
            reposts_count = re.findall('.*?"reposts_count": (.*?),.*?', html_text)[0]
            print ("reposts_count = ", reposts_count)
            #评论量
            comments_count = re.findall('.*?"comments_count": (.*?),.*?', html_text)[0]
            print ("comments_count = ", comments_count)
            #点赞量
            attitudes_count = re.findall('.*?"attitudes_count": (.*?),.*?', html_text)[0]
            print ("attitudes_count = ", attitudes_count)   
            comment_count = int(int(comments_count) / 20) #每个ajax一次加载20条数据
            position1 = (article_url, title_text, title_user_id, title_user_NicName,title_user_gender, title_created_YMD, add_title_time, reposts_count, comments_count, attitudes_count, " ", " ", " ", " "," ", " ")
            #写入数据
            writer.writerow((position1))
            return comment_count
        except:
            pass
    
    
    #-------------------------------------------------抓取评论信息---------------------------------------------------
    #comment_ID话题编号
    def get_page(comment_ID, max_id, id_type):
        params = {
            'max_id': max_id,
            'max_id_type': id_type
        }
        url = ' https://m.weibo.cn/comments/hotflow?id={}&mid={}&max_id'.format(comment_ID, comment_ID)
        try:
            r = requests.get(url, params=params, headers=headers)
            if r.status_code == 200:
                return r.json()
        except requests.ConnectionError as e:
            print('error', e.args)
            pass
    
    #-------------------------------------------------抓取评论item最大值---------------------------------------------------
    def parse_page(jsondata):
        if jsondata:
            items = jsondata.get('data')
            item_max_id = {}
            item_max_id['max_id'] = items['max_id']
            item_max_id['max_id_type'] = items['max_id_type']
            return item_max_id
    
    #-------------------------------------------------抓取评论信息---------------------------------------------------
    def write_csv(jsondata):
        for json in jsondata['data']['data']:
            #用户ID
            user_id = json['user']['id']
            # 用户昵称
            user_name = json['user']['screen_name']
            # 用户性别,m表示男性,表示女性
            user_gender = json['user']['gender']
            #获取评论
            comments_text = json['text']
            comment_text = re.sub('<(S*?)[^>]*>.*?|<.*? />', '', comments_text) #正则匹配掉html标签
            # 评论时间
            created_times = json['created_at'].split(' ')
            if 'Feb' in created_times:
                created_YMD = "{}/{}/{}".format(created_times[-1], '02', created_times[2])
            elif 'Jan' in created_times:
                created_YMD = "{}/{}/{}".format(created_times[-1], '01', created_times[2])
            else:
                print ('该时间不在疫情范围内,估计数据有误!')
                pass
            created_time = created_times[3] #评论时间时分秒
            #if len(comment_text) != 0:
            position2 = (" ", " ", " ", " "," ", " ", " ", " ", " ", " ", user_id, user_name, user_gender, created_YMD, created_time, comment_text)
            writer.writerow((position2))#写入数据
            #print (user_id, user_name, user_gender, created_YMD, created_time)    
    
    
    #-------------------------------------------------主函数---------------------------------------------------
    def main():
        count_title = len(comments_ID)
        for count, comment_ID in enumerate(comments_ID):
            print ("正在爬取第%s个话题,一共找到个%s话题需要爬取"%(count+1, count_title))
            #maxPage获取返回的最大评论数量
            maxPage = spider_title(comment_ID)
            print ('maxPage = ', maxPage)
            m_id = 0
            id_type = 0
            if maxPage != 0: #小于20条评论的不需要循环
                try:
                    #用评论数量控制循环
                    for page in range(0, maxPage):
                        #自定义函数-抓取网页评论信息
                        jsondata = get_page(comment_ID, m_id, id_type)
                        
                        #自定义函数-写入CSV文件
                        write_csv(jsondata)
                        
                        #自定义函数-获取评论item最大值
                        results = parse_page(jsondata)
                        time.sleep(1)
                        m_id = results['max_id']
                        id_type = results['max_id_type']              
                except:
                    pass
            print ("--------------------------分隔符---------------------------")
        csvfile.close() 
        
    if __name__ == '__main__':
        
        #获取话题ID
        get_title_id()
        
        #主函数操作
        main()
        
        #计算使用时间
        endTime = time.time()
        useTime = (endTime-startTime) / 60
        print("该次所获的信息一共使用%s分钟"%useTime)
    

    保存数据截图如下图所示:

    在这里插入图片描述

    下图时抓取的话题页面网址,每个页面包括18个话题。

    在这里插入图片描述

    接着抓取每个话题的内容,如下所示:

    正在爬取第1个话题,一共找到个361话题需要爬取
    article_url =  https://m.weibo.cn/detail/4484575189181757
    title_text =#国家卫健委回应健康码互通互认#】国家卫生健康委规划司司长毛群安:目前全国低风险县域已占98%,各省份正在按照统一的数据格式标准和内容要求,加快向全国一体化平台汇聚本地区防疫健康信息的目录。截至目前,#全国绝大多数健康码可实现一码通行#。 人民日报的微博视频 
    title_user_id =  2803301701
    title_user_NicName =  人民日报
    title_user_gender =  m
    该时间不在疫情范围内,估计数据有误!URL = 
    maxPage =  None
    --------------------------分隔符---------------------------
    正在爬取第2个话题,一共找到个361话题需要爬取
    article_url =  https://m.weibo.cn/detail/4484288164243251
    title_text =  法国网友自称自己成了长发公主,度过了居家隔离后的第三天.....#全球疫情##法国疫情# 法国囧事的微博视频 
    title_user_id =  2981906842
    title_user_NicName =  法国囧事
    title_user_gender =  m
    该时间不在疫情范围内,估计数据有误!URL = 
    maxPage =  None
    --------------------------分隔符---------------------------
    正在爬取第3个话题,一共找到个361话题需要爬取
    article_url =  https://m.weibo.cn/detail/4484492666507389
    title_text =  #全球疫情# #意大利疫情# #意大利# “罗马还有其他四处的药店都遭到了抢劫。我们遭受到的是持械抢劫。“这是一位罗马药店药剂师的陈述。她说,在当前疫情的危机情况下,我们处在两难困境之中:受到抢劫和疾病的双重威胁。疫情之下,意大利口罩告急,价格飙高。市民认为是药店不卖,而真实情况是药店真的没有,而供货商又抬高了价格。药店处在两难境地。这位药剂师道出了自己的苦衷,冒着危险还在工作,与医护人员一样,都是奋斗在一线做出牺牲的人。呼吁民众理解,也请求大家的帮助。 Nita大呵呵的微博视频
    title_user_id =  6476189426
    title_user_NicName =  Nita大呵呵
    title_user_gender =  f
    该时间不在疫情范围内,估计数据有误!URL = 
    maxPage =  None
    

    最终抓取360个疫情话题内容。

    在这里插入图片描述


    注意:该爬虫评论写入功能需要改进下,且只能抓取当天的“战疫情”话题及评论,如果想针对某个突发事件进行一段时间的分析,建议每天定时运行该程序,从而形成所需的数据集。也可以根据需求修改为热点话题的抓取,增加搜索功能等。

    作者前文:
    [python爬虫] Selenium爬取新浪微博内容及用户信息
    [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
    [Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)



    二.微博话题词云分析

    首先,我们对文本进行简单的词云可视化分析。

    1.基本用法

    词云分析主要包括两种方法:

    • 调用WordCloud扩展包画图(兼容性极强,之前介绍过)
    • 调用PyEcharts中的WordCloud子包画图(本文推荐新方法)

    PyEcharts绘制词云的基础代码如下:

    # coding=utf-8
    from pyecharts import options as opts
    from pyecharts.charts import WordCloud
    from pyecharts.globals import SymbolType
    
    # 数据
    words = [
        ('背包问题', 10000),
        ('大整数', 6181),
        ('Karatsuba乘法算法', 4386),
        ('穷举搜索', 4055),
        ('傅里叶变换', 2467),
        ('状态树遍历', 2244),
        ('剪枝', 1868),
        ('Gale-shapley', 1484),
        ('最大匹配与匈牙利算法', 1112),
        ('线索模型', 865),
        ('关键路径算法', 847),
        ('最小二乘法曲线拟合', 582),
        ('二分逼近法', 555),
        ('牛顿迭代法', 550),
        ('Bresenham算法', 462),
        ('粒子群优化', 366),
        ('Dijkstra', 360),
        ('A*算法', 282),
        ('负极大极搜索算法', 273),
        ('估值函数', 265)
    ]
    
    # 渲染图
    def wordcloud_base() -> WordCloud:
        c = (
            WordCloud()
            .add("", words, word_size_range=[20, 100], shape='diamond')  # SymbolType.ROUND_RECT
            .set_global_opts(title_opts=opts.TitleOpts(title='WordCloud词云'))
        )
        return c
    
    # 生成图
    wordcloud_base().render('词云图.html')
    

    输出结果如下图所示,出现词频越高显示越大。

    在这里插入图片描述

    核心代码为:
    add(name, attr, value, shape=“circle”, word_gap=20, word_size_range=None, rotate_step=45)

    • name -> str: 图例名称
    • attr -> list: 属性名称
    • value -> list: 属性所对应的值
    • shape -> list: 词云图轮廓,有’circle’, ‘cardioid’, ‘diamond’, ‘triangleforward’, ‘triangle’, ‘pentagon’, ‘star’可选
    • word_gap -> int: 单词间隔,默认为20
    • word_size_range -> list: 单词字体大小范围,默认为[12,60]
    • rotate_step -> int: 旋转单词角度,默认为45


    2.疫情词云

    接着我们将3月20日疫情内容复制至“data.txt”文本,经过中文分词后显示前1000个高频词的词云。代码如下:

    # coding=utf-8
    import jieba
    import re
    import time
    from collections import Counter
    
    #------------------------------------中文分词------------------------------------
    cut_words = ""
    all_words = ""
    f = open('C-class-fenci.txt', 'w')
    for line in open('C-class.txt', encoding='utf-8'):
        line.strip('\n')
        seg_list = jieba.cut(line,cut_all=False)
        # print(" ".join(seg_list))
        cut_words = (" ".join(seg_list))
        f.write(cut_words)
        all_words += cut_words
    else:
        f.close()
    
    # 输出结果
    all_words = all_words.split()
    print(all_words)
    
    # 词频统计
    c = Counter()
    for x in all_words:
        if len(x)>1 and x != '\r\n':
            c[x] += 1
    
    # 输出词频最高的前10个词
    print('\n词频统计结果:')
    for (k,v) in c.most_common(10):
        print("%s:%d"%(k,v))
    
    # 存储数据
    name = time.strftime("%Y-%m-%d") + "-fc.csv"
    fw = open(name, 'w', encoding='utf-8')
    i = 1
    for (k,v) in c.most_common(len(c)):
        fw.write(str(i)+','+str(k)+','+str(v)+'\n')
        i = i + 1
    else:
        print("Over write file!")
        fw.close()
    
    #------------------------------------词云分析------------------------------------
    from pyecharts import options as opts
    from pyecharts.charts import WordCloud
    from pyecharts.globals import SymbolType
    
    # 生成数据 word = [('A',10), ('B',9), ('C',8)] 列表+Tuple
    words = []
    for (k,v) in c.most_common(1000):
        # print(k, v)
        words.append((k,v))
    
    # 渲染图
    def wordcloud_base() -> WordCloud:
        c = (
            WordCloud()
            .add("", words, word_size_range=[20, 100], shape=SymbolType.ROUND_RECT)
            .set_global_opts(title_opts=opts.TitleOpts(title='全国新型冠状病毒疫情词云图'))
        )
        return c
    
    # 生成图
    wordcloud_base().render('疫情词云图.html')
    

    输出结果如下图所示,仅3月20日的热点话题内容。

    在这里插入图片描述

    在这里插入图片描述



    3.WordCloud

    另一种方法的代码如下:

    # coding=utf-8
    import jieba
    import re
    import sys
    import time
    from collections import Counter
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    
    #------------------------------------中文分词------------------------------------
    cut_words = ""
    all_words = ""
    f = open('data-fenci.txt', 'w')
    for line in open('data.txt', encoding='utf-8'):
        line.strip('\n')
        seg_list = jieba.cut(line,cut_all=False)
        # print(" ".join(seg_list))
        cut_words = (" ".join(seg_list))
        f.write(cut_words)
        all_words += cut_words
    else:
        f.close()
    
    # 输出结果
    all_words = all_words.split()
    print(all_words)
    
    # 词频统计
    c = Counter()
    for x in all_words:
        if len(x)>1 and x != '\r\n':
            c[x] += 1
    
    # 输出词频最高的前10个词
    print('\n词频统计结果:')
    for (k,v) in c.most_common(10):
        print("%s:%d"%(k,v))
    
    # 存储数据
    name = time.strftime("%Y-%m-%d") + "-fc.csv"
    fw = open(name, 'w', encoding='utf-8')
    i = 1
    for (k,v) in c.most_common(len(c)):
        fw.write(str(i)+','+str(k)+','+str(v)+'\n')
        i = i + 1
    else:
        print("Over write file!")
        fw.close()
    
    #------------------------------------词云分析------------------------------------
    #打开本体TXT文件
    text = open('data.txt').read()
     
    #结巴分词 cut_all=True 设置为精准模式 
    wordlist = jieba.cut(text, cut_all = False)
     
    #使用空格连接 进行中文分词
    wl_space_split = " ".join(wordlist)
    #print(wl_space_split)
     
    #对分词后的文本生成词云
    my_wordcloud = WordCloud().generate(wl_space_split)
     
    #显示词云图
    plt.imshow(my_wordcloud)
    #是否显示x轴、y轴下标
    plt.axis("off")
    plt.show()
    


    三.SnowNLP情感分析用法

    情感分析的基本流程如下图所示,通常包括:

    • 自定义爬虫抓取文本信息;
    • 使用Jieba工具进行中文分词、词性标注;
    • 定义情感词典提取每行文本的情感词;
    • 通过情感词构建情感矩阵,并计算情感分数;
    • 结果评估,包括将情感分数置于0.5到-0.5之间,并可视化显示。

    在这里插入图片描述

    1.SnowNLP

    SnowNLP是一个常用的Python文本分析库,是受到TextBlob启发而发明的。由于当前自然语言处理库基本都是针对英文的,而中文没有空格分割特征词,Python做中文文本挖掘较难,后续开发了一些针对中文处理的库,例如SnowNLP、Jieba、BosonNLP等。注意SnowNLP处理的是unicode编码,所以使用时请自行decode成unicode。

    Snownlp主要功能包括:

    • 中文分词(算法是Character-Based Generative Model)
    • 词性标注(原理是TnT、3-gram 隐马)
    • 情感分析
    • 文本分类(原理是朴素贝叶斯)
    • 转换拼音、繁体转简体
    • 提取文本关键词(原理是TextRank)
    • 提取摘要(原理是TextRank)、分割句子
    • 文本相似(原理是BM25)

    推荐官网给大家学习。
    安装和其他库一样,使用pip安装即可。

    pip install snownlp
    

    在这里插入图片描述



    2.中文分词

    下面是最简单的实例,使用SnowNLP进行中文分词,同时比较了SnowNLP和Jieba库的分词效果。

    # -*- coding: utf-8 -*-
    from snownlp import SnowNLP
    s1 = SnowNLP(u"这本书质量真不太好!")
    print("SnowNLP:")
    print(" ".join(s1.words))
    
    import jieba
    s2 = jieba.cut(u"这本书质量真不太好!", cut_all=False)
    print("jieba:")
    print(" ".join(s2))
    

    输出结果如下所示:

    总体感觉是SnowNLP分词速度比较慢,准确度较低,比如“不太好”这个词组,但也不影响我们后续的情感分析。


    3.常见功能

    代码如下:

    # -*- coding: utf-8 -*-
    from snownlp import SnowNLP
    s = SnowNLP(u"这本书质量真不太好!")
    
    print(u"\n中文分词:")
    print( " ".join(s.words))
    
    print(u"\n词性标注:")
    print(s.tags)
    for k in s.tags:
        print(k)
    
    print(u"\n情感分数:")
    print(s.sentiments)
    
    print(u"\n转换拼音:")
    print(s.pinyin)
    
    print(u"\n输出前4个关键词:")
    print(s.keywords(4))
    for k in s.keywords(4):
        print(k)
    
    print(u"\n输出关键句子:")
    print(s.summary(1))
    for k in s.summary(1):
        print(k)
    
    print(u"\n输出tf和idf:")
    print(s.tf)
    print(s.idf)
    
    n = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')
    print(u"\n繁简体转换:")
    print(n.han)
    

    s.words 输出分词后的结果,词性标注主要通过 s.tags,s.sentiments 计算情感分数,s.pinyin 转换为拼音,s.keywords(4) 提取4个关键词,s.summary(1) 输出一个关键句子,s.tf 计算TF值(频率),s.idf 计算IDF值(倒文档)。

    输出结果如下所示:

    >>> 
    
    中文分词:
    这 本书 质量 真 不 太 好 !
    
    词性标注:
    [(u'\u8fd9', u'r'), (u'\u672c\u4e66', u'r'), (u'\u8d28\u91cf', u'n'), 
    (u'\u771f', u'd'), (u'\u4e0d', u'd'), (u'\u592a', u'd'), 
    (u'\u597d', u'a'), (u'\uff01', u'w')]
    (u'\u8fd9', u'r')
    (u'\u672c\u4e66', u'r')
    (u'\u8d28\u91cf', u'n')
    (u'\u771f', u'd')
    (u'\u4e0d', u'd')
    (u'\u592a', u'd')
    (u'\u597d', u'a')
    (u'\uff01', u'w')
    
    情感分数:
    0.420002029202
    
    转换拼音:
    [u'zhe', u'ben', u'shu', u'zhi', u'liang', u'zhen', u'bu', u'tai', u'hao', u'\uff01']
    
    输出前4个关键词:
    [u'\u592a', u'\u4e0d', u'\u8d28\u91cf', u'\u771f']
    太
    不
    质量
    真
    
    输出关键句子:
    [u'\u8fd9\u672c\u4e66\u8d28\u91cf\u771f\u4e0d\u592a\u597d']
    这本书质量真不太好
    
    输出tf和idf:
    [{u'\u8fd9': 1}, {u'\u672c': 1}, {u'\u4e66': 1}, 
    {u'\u8d28': 1}, {u'\u91cf': 1}, {u'\u771f': 1}, 
    {u'\u4e0d': 1}, {u'\u592a': 1}, {u'\u597d': 1}, {u'\uff01': 1}]
    {u'\uff01': 1.845826690498331, u'\u4e66': 1.845826690498331, u'\u8d28': 1.845826690498331, 
    u'\u592a': 1.845826690498331, u'\u4e0d': 1.845826690498331, u'\u672c': 1.845826690498331, 
    u'\u91cf': 1.845826690498331, u'\u8fd9': 1.845826690498331, u'\u597d': 1.845826690498331, u'\u771f': 1.845826690498331}
    
    繁简体转换:
    「繁体字」「繁体中文」的叫法在台湾亦很常见。
    >>> 
    

    同样可以进行文本相似度计算,代码参考下图所示:


    4.情感分析

    SnowNLP情感分析也是基于情感词典实现的,其简单的将文本分为两类,积极和消极,返回值为情绪的概率,越接近1为积极,接近0为消极。其原理参考zhiyong_will大神和邓旭东老师的文章,也强烈推荐大家学习。地址:
    情感分析——深入snownlp原理和实践
    自然语言处理库之snowNLP

    下面简单给出一个情感分析的例子:

    # -*- coding: utf-8 -*-
    from snownlp import SnowNLP
    s1 = SnowNLP(u"我今天很开心")
    print(u"s1情感分数:")
    print(s1.sentiments)
    
    s2 = SnowNLP(u"我今天很沮丧")
    print(u"s2情感分数:")
    print(s2.sentiments)
    
    s3 = SnowNLP(u"大傻瓜,你脾气真差,动不动就打人")
    print(u"s3情感分数:")
    print(s3.sentiments)
    

    输出结果如下所示,当负面情感特征词越多,比如“傻瓜”、“差”、“打人”等,分数就会很低,同样当正免情感词多分数就高。

    s1情感分数:
    0.84204018979
    s2情感分数:
    0.648537121839
    s3情感分数:
    0.0533215596706
    

    而在真实项目中,通常需要根据实际的数据重新训练情感分析的模型,导入正面样本和负面样本,再训练新模型。

    • sentiment.train(’./neg.txt’, ‘./pos.txt’)
    • sentiment.save(‘sentiment.marshal’)


    四.SnowNLP微博情感分析实例

    下面的代码是对爬取的疫情话题进行情感分析。本文将抓取的356条(其中4条仅图片)微博疫情话题信息复制至TXT文件中 ,每一行为一条话题,再对其进行中文分词处理。注意,这里仅仅获取序号1-356的情感分数,而其他情感分析可以进行时间对比、主题对比等,其方法和此篇文章类似,希望读者学会举一反三。

    在这里插入图片描述


    1.情感各分数段出现频率

    首先统计各情感分数段出现的评率并绘制对应的柱状图,代码如下:

    # -*- coding: utf-8 -*-
    from snownlp import SnowNLP
    import codecs
    import os
    
    source = open("data.txt","r", encoding='utf-8')
    line = source.readlines()
    sentimentslist = []
    for i in line:
        s = SnowNLP(i)
        print(s.sentiments)
        sentimentslist.append(s.sentiments)
    
    import matplotlib.pyplot as plt
    import numpy as np
    plt.hist(sentimentslist, bins = np.arange(0, 1, 0.01), facecolor = 'g')
    plt.xlabel('Sentiments Probability')
    plt.ylabel('Quantity')
    plt.title('Analysis of Sentiments')
    plt.show()
    

    输出结果如下图所示,可以看到

    对应的分数如下:

    >>>
    4.440892098500626e-16
    0.49055395607520824
    0.9999999999972635
    0.9999998677093149
    0.9979627586368516
    0.9999999990959509
    0.9999830199233769
    0.9998699310812647
    0.9999954477924106
    ...
    

    2.情感波动分析

    接下来分析每条评论的波动情况,代码如下所示:

    # -*- coding: utf-8 -*-
    from snownlp import SnowNLP
    import codecs
    import os
    
    source = open("data.txt","r", encoding='utf-8')
    line = source.readlines()
    sentimentslist = []
    for i in line:
        s = SnowNLP(i)
        print(s.sentiments)
        sentimentslist.append(s.sentiments)
    
    import matplotlib.pyplot as plt
    import numpy as np
    plt.plot(np.arange(0, 356, 1), sentimentslist, 'k-')
    plt.xlabel('Number')
    plt.ylabel('Sentiment')
    plt.title('Analysis of Sentiments')
    plt.show()
    

    输出结果如下所示,呈现一条曲线,因为抓取的评论基本都是好评,所以分数基本接近于1.0,而真实分析过程中存在好评、中评和差评,曲线更加规律。

    同时,在做情感分析的时候,我看到很多论文都是将情感区间从[0, 1.0]转换为[-0.5, 0.5],这样的曲线更加好看,位于0以上的是积极评论,反之消极评论。修改代码如下:

    # -*- coding: utf-8 -*-
    from snownlp import SnowNLP
    import codecs
    import os
    
    #获取情感分数
    source = open("data.txt","r", encoding='utf-8')
    line = source.readlines()
    sentimentslist = []
    for i in line:
        s = SnowNLP(i)
        print(s.sentiments)
        sentimentslist.append(s.sentiments)
    
    #区间转换为[-0.5, 0.5]
    result = []
    i = 0
    while i<len(sentimentslist):
        result.append(sentimentslist[i]-0.5)
        i = i + 1
    
    #可视化画图
    import matplotlib.pyplot as plt
    import numpy as np
    plt.plot(np.arange(0, 356, 1), result, 'k-')
    plt.xlabel('Number')
    plt.ylabel('Sentiment')
    plt.title('Analysis of Sentiments')
    plt.show()
    

    绘制图形如下所示:



    3.情感时间分布

    最后补充随时间分布的情感分数相关建议,读者可能也发现抓取的博客存在重复、时间不均衡等现象。微博数据还是非常不好抓取,数据卡住了很多人,也请读者深入分析下。

    (1) 情感分析通常需要和评论时间结合起来,并进行舆情预测等,建议读者尝试将时间结合。比如王树义老师的文章《基于情感分类的竞争企业新闻文本主题挖掘》。

    (2) 情感分析也是可以进行评价的,我们前面抓取的分为5星评分,假设0-0.2位一星,0.2-0.4位二星,0.4-0.6为三星,0.6-0.8为四星,0.8-1.0为五星,这样我们可以计算它的准确率,召回率,F值,从而评论我的算法好坏。

    (3) 作者还有很多情感分析结合幂率分布的知识,因为需要写文章,这里暂时不进行分享,但是这篇基础文章对初学者仍然有一定的帮助。

    (4) BosonNLP也是一个比较不错的情感分析包,建议感兴趣的读者学习,它提供了相关的词典,如下:https://bosonnlp.com/dev/resource。

    (5) 读者如果不太擅长写代码,可以尝试使用情感分析系统。http://ictclas.nlpir.org/nlpir/


    五.总结

    写到这里,第四篇疫情分析的文章就讲解完毕,希望对您有所帮助,尤其是想写文本挖掘论文的读者。后续还会分享舆情分析、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。如果文章对您有所帮助,将是我写作的最大动力。作者将源代码上传至github,大家可以直接下载。你们的支持就是我撰写的最大动力,加油~

    同时,向钟院士致敬,向一线工作者致敬。侠之大者,为国为民。咱们中国人一生的最高追求,为天地立心,为生民立命,为往圣继绝学,为万世开太平。以一人之力系万民康乐,以一身犯险保大业安全。他们真是做到了,武汉加油,中国加油!

    在这里插入图片描述

    (By:Eastmount 2020-03-21 中午12点于贵阳 http://blog.csdn.net/eastmount/)



    参考文献:
    [1] [python数据挖掘课程] 十三.WordCloud词云配置过程及词频分析 - Eastmount
    [2] python爬虫爬取微博之战疫情用户评论及详情
    [3] [python爬虫] Selenium爬取新浪微博内容及用户信息
    [4] [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
    [5] [Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)
    [6] 用pyecharts绘制词云WordCloud - pennyyangpei
    [7] 情感分析——深入snownlp原理和实践
    [8] 自然语言处理库之snowNLP
    [9] 王树义老师的文章《基于情感分类的竞争企业新闻文本主题挖掘》

    展开全文
  • 数据分析-PART2--10大数据分析模型

    万次阅读 多人点赞 2018-07-31 10:00:39
    数据分析-PART2--10大数据分析模型 数据分析-PART3--数据分析常用指标 数据分析-PART4--数据分析方法 数据分析-PART5--数据分析可视化 数据分析-PART6--数据分析能力培养 数据分析-PART 7--数据分析工具网站...

    一、数据分析模型

    要进行一次完整的数据分析,首先要明确数据分析思路,如从那几个方面开展数据分析,各方面都包含什么内容或指标。是分析框架,给出分析工作的宏观框架,根据框架中包含的内容,再运用具体的分析方法进行分析。

    数据分析方法论的作用:

    • 理顺分析思路,确保数据分析结构体系化
    • 把问题分解成相关联的部分,并显示他们的关系
    • 为后续数据分析的开展指引方向
    • 确保分析结果的有效性和正确性

    二、九大数据分析模型

    1.PEST分析模型:主要用于行业分析。

    1、政治环境:

    包括一个国家的社会制度,执政党性质,政府的方针、政策、法令等。不同的政治环境对行业发展有不同的影响。

    • 关键指标:政治体制,经济体制,财政政策,税收政策,产业政策,投资政策,专利数量,国防开支水平,政府补贴水平,民众对政治的参与度。

    2、经济环境:

    宏观和微观两个方面。

    宏观:一个国家国民收入,国民生产总值以及变化情况,以通过这些指标反应国民经济发展水平和发展速度。

    微观:企业所在地区的消费者收入水平、消费偏好、储蓄情况、就业程度等因素,这些因素决定着企业目前以及未来的市场大小。

    • 关键指标:GDP及增长率、进出口总额及增长率、利率、汇率、通货膨胀率、消费价格指数、居民可支配收入、失业率、劳动生产率等。

    3、社会环境:

    包括一个国家或地区的居民受教育程度和文化水平、宗教信仰、风俗习惯、审美观点、价值观等。文化水平营销居民的需求层次,宗教信仰和风俗习惯会禁止或抵制某些活动的进行,价值观会影响居民对组织目标和组织活动存在本身的认可,审美观点则会影响人们对组织活动内容、活动方式以及活动成果的态度。

    • 关键指标:人口规模、性别比例、年龄结构、出生率、死亡率、种族结构、妇女生育率、生活方式、购买习惯、教育状况、城市特点、宗教信仰状况等因素。

    4、技术环境:

    企业所处领域直接相关的技术手段发展变化,国家队科技开发的投资和支持重点,该领域技术发展动态和研究开发费用总额,技术转移和技术商品化速度,专利及其保护情况。

    • 关键指标:新技术的发明和进展、折旧和报废速度、技术更新速度、技术传播速度、技术商品化速度、国家重点支持项目、国家投入的研发费用、专利个数、专利保护情况。

    2.5W2H分析模型

    5W2H分析法主要针对5个W以及2个H提出的7个关键词进行数据指标的选取,根据选取的数据进行分析。

    3.逻辑树分析模型

    将问题的所有子问题分层罗列,从最高层开始,并逐步向下扩展。

    把一个已知问题当作树干,考虑这个问题和哪些问题有关,将相关的问题作为树枝加入到树干,一次类推,就会将问题扩展成一个问题树。

    逻辑树能保证解决问题的过程完整性,将工作细化成便于操作的具体任务,确定各部分优先顺序,明确责任到个人。

    逻辑树分析法三原则:

    • 要素化:把相同问题总结归纳成要素
    • 框架化:将各个要素组成框架,遵守不重不漏原则
    • 关联化:框架内的各要素保持必要的相互关系,简单而不孤立

    4.4P营销理论模型

    产品:

    能提供给市场,被人们使用和消费并满足人们某种需求的任何东西,包括有形产品、服务、人员、组织、观念和它们的组合。

    价格:

    购买产品时的价格,包括基本价格、折扣价格、支付期限等。影响价格的主要因素有需求、成本和竞争。

    渠道:

    产品从生产企业流转到用户手上全过程所经历的各个环节。

    促销:

    企业通过销售行为的改变来激励用户消费,以短期的行为促进消费的增长,吸引其他品牌用户或导致提钱消费来促进销售增长。

    5.用户行为模型

    用户行为指用户为获取、使用产品或服务才去的各种行动,首先要认知熟悉,然后试用,再决定是否继续消费使用,最后成为产品或服务的忠实用户。

    行为轨迹:认知->熟悉->试用->使用->忠诚

    6.AARRR模型

    这个是所有的产品经理都必须要掌握的一个数据分析模型。

    AARRR(Acquisition、Activation、Retention、Revenue、Referral)是硅谷的一个风险投资人戴维 · 麦克鲁尔在2008年时创建的,分别是指获取、激活、留存、收入和推荐。

    比如游戏AARRR各阶段指标

    1.A(How do users find us?)
    
    DNU(日新注册且登陆用户数)、推广渠道监测(成本、流量)
    
    2.A(Do users have a great first experience?)
    
    DAU(每日登陆过游戏用户数)、日均使用时长、道具关联分析模型
    
    3.R(Do users come back?)
    
    留存率(次日留存、7日留存、21日留存、30留存)、流失率、流失预警分析模型
    
    4.R(How do you make money?)
    
    PR(付费率)、 ARPU(平均每用户收入)、ARPPU(平均每付费用户收入))、LTV(生命周期价值)
    
    5.R(Do users tell others?)
    
    K-factor、NPS等

    举个例子,用AARRR模型来衡量一个渠道的好坏。

    如果单从数据表面来看,A渠道会更划算,但实际这种结论是有问题的,用AARRR模型具体分析如下:

    渠道A的单个留存用户成本是60元,单个付费用户成本是300元;而渠道B的单个留存用户成本是20元,单个付费用户成本是33元,这样对比下来,明显B渠道的优势远远大于A渠道。

    高流量≠高转化

    误区:只关心最后一步转化

    转化率提升≠用户体验提升

    提升转化四步曲:正确的用户→流程的体验→最佳转化路径→复购与增购

    业务的了解和用户的了解,才是提高转化率本事。

    7、漏斗分析模型

    用来分析从潜在用户到最终用户这个过程中用户数量的变化趋势,从而寻找到最佳的优化空间,这个方法被普遍用于产品各个关键流程的分析中(流量监控、产品目标转化等日常数据运营工作中)。之所以称为漏斗,就是因为用户(或者流量)集中从某个功能点进入(这是可以根据业务需求来自行设定的),可能会通过产品本身设定的流程完成操作。

    对于我们要做的就是对按照流程操作的用户进行各个转化层级上的监控,寻找每个层级的可优化点;对没有按照流程操作的用户绘制他们的转化路径,找到可提升用户体验,缩短路径的空间。运用漏斗模型比较典型的案例就是电商网站的转化,用户在选购商品的时候必然会按照预先设计好的购买流程进行下单,最终完成支付。如果没有整个业务流程的梳理,就不会有这种漏斗模型的产出,更别说去查找每个步骤出现用户流失的问题了。

    funnel2

    当然有些时候也要做一些竞品分析,对于同行业同类数据的转化情况做到心中有数。尽可能降低用户流失是我们的目标,但是如果可以做到不低于行业平均水准同时资源有限的话,降低这个转化漏斗的用户流失就需要被放置较低的优先级里。

    还有一些比较经典的漏斗转化模型就是用于用户注册流程上:我们需要知道多少用户点击了注册按钮(漏斗的开端),多少用户完成了信息填写(多少用户放弃填写),多少用户点击发送验证码按钮(验证码到达率),成功完成注册的人数。如果一旦在运营过程中发现某一天的注册用户数出现波动,那么除了去查一下市场渠道及广告投放,产品本身的注册功能也是可能出现这个问题的重要因素。

    对于产品的非功能页面,比如某个活动页,公司简介页等等,用户可能不会按照我们既定的流程到达,那么就要根据实际的目标来确认是否有讲这类非功能页面的转化流程做优化的必要性。

    比如,这个例子是分析从用户进入网站到最终购买商品的变化趋势。

    640.webp (1)

    从用户进入网站到浏览商品页面,转化率是40%;浏览商品到加入购物车转化率是20%等,那要找出哪个环节的转化率最低,我们需要有对比数据。

    比如第一个,进入网站到浏览商品,如果同行业水平的转化率是45%,而我们只有40%,那说明这个过程,没有达到行业平均水平,我们就需要分析具体原因在哪里,再有针对性的去优化和改善。

    当然,上面这是我们设计的一种理想化的漏斗模型,数据有可能是经过汇总后得出的。而真实的用户行为往往可能并不是按照这个简单流程来的。此时需要分析用户为什么要经过那么复杂的路径来达到最终目的,思考这中间有没有可以优化的空间。

    8、交叉分析法

    通常是把纵向对比和横向对比综合起来,对数据进行多角度的结合分析。

    举个例子:

    a. 交叉分析角度:客户端+时间

    从这个数据中,可以看出iOS端每个月的用户数在增加,而Android端在降低,总体数据没有增长的主要原因在于Android端数据下降所导致的。

    那接下来要分析下为什么Android端二季度新增用户数据在下降呢?一般这个时候,会加入渠道维度。

    b. 交叉分析角度:客户端+时间+渠道

    从这个数据中可以看出,Android端A预装渠道占比比较高,而且呈现下降趋势,其他渠道的变化并不明显。

    因此可以得出结论:Android端在二季度新增用户降低主要是由于A预装渠道降低所导致的。

    所以说,交叉分析的主要作用,是从多个角度细分数据,从中发现数据变化的具体原因。

    9、A/B测试

    A/B测试就是通过数据支撑,不同渠道、不同人群、最终选定方案。

    A/B测试需要有一定的数据支撑,建立准确性与效率高的框架,比如针对不同渠道、用户分群发布、灰度发布等来得出合适方案,这里不加以展开.

    10、归因模型

    归因模型,更准确的描述其实是一种既定的规则,我们需要根据产品的实际需求,将达成目标(形成转化)之前的功劳根据设定的权重分配给每一个转化节点。产品形成一次转化,用户可能要经历很多个转化节点(转化并不一定只完成销售。一次注册也可以看作一次转化,一次访问也可以看作一次转化,要根据业务实际需求制定)。

    归因模型在使用过程中通常分为几类:最终互动模型、首次互动模型、线性归因模型、时间衰减归因模型、自定义等,这里逐一进行描述:

    产品情景描述:用户在Baidu上搜索一个关键词,点进了一个叫a.com的网站之后放弃继续搜索。过了几天他又在自己的Facebook上看到了这个关键词的广告,随后他点击了广告最终完成购买。

    funnel3

    最终互动模型:最后一个节点将被分配100%的功劳,那么Facebook(社交媒体)上的广告获得100%的功劳;

    首次互动模型:用户首先是在Baidu进行关键词搜索的,那么Baidu(搜索引擎)将被分配100%的功劳;

    线性归因模型:用户从开始搜索到转化,共经历了三个渠道(节点),那么每个节点将被平均授予33.3%的功劳;

    时间衰退归因模型:用户在Baidu搜索和访问了a.com是几天之前的事情,那么这两个渠道因为时间经历比较长的原因将被分配较低的功劳(如各20%),Facebook将被分配相对较高的功劳(60%);

    当然,实际的业务流程和渠道转化流程不会像描述的这样简单,我们也可以根据需求自行定义。归因模型的意义在于寻找到真正对于现阶段产品发展有利的渠道,并将优势扩大化。当然,它是具有时效性的,也就是说产品的不同阶段归因模型所得到的结果很可能是不一样的。

    三、总结

    10 大数据分析模型的应用场景根据数据分析所选取的指标不同也有所区别

    PEST分析模型主要针对宏观市场环境进行分析,从政治、经济、社会以及技术四个维度对产品或服务是否适合进入市场进行数据化的分析,最终得到结论,辅助判断产品或服务是否满足大环境。

    5W2H分析模型的应用场景较广,可用于对用户行为进行分析以及产品业务分析

    逻辑树分析模型主要针对已知问题进行分析,通过对已知问题的细化分析,通过分析结论找到问题的最优解决方案。

    4P营销理论模型主要用于公司或其中某一个产品线的整体运营情况分析,通过分析结论,辅助决策近期运营计划与方案。

    用户行为分析模型应用场景比较单一,完全针对用户的行为进行研究分析

    当然,最后还是要说,模型只是前人总结出的方式方法,对于我们实际工作中解决问题有引导作用,但是不可否认,具体问题还要具体分析,针对不同的情况需要进行不同的改进,希望成为一个数据专家,最重要的一点还是多实践!实践才是真理!

    展开全文
  • 淘宝双11大数据分析(数据可视化)

    千次阅读 多人点赞 2020-02-27 18:18:08
    淘宝双11大数据分析(环境篇) 淘宝双11大数据分析(数据准备篇) 淘宝双11大数据分析(Hive 分析篇-上) 淘宝双11大数据分析(Hive 分析篇-下) 淘宝双11大数据分析(Spark 分析篇) 本篇环境 Idea 中搭建一个 SSM ...

    前言

    这一篇是最终篇,也是展示数据分析之后的结果的一篇。

    其他文章:

    淘宝双11大数据分析(环境篇)

    淘宝双11大数据分析(数据准备篇)

    淘宝双11大数据分析(Hive 分析篇-上)

    淘宝双11大数据分析(Hive 分析篇-下)

    淘宝双11大数据分析(Spark 分析篇)

    本篇环境

    Idea 中搭建一个 SSM 框架的 Web 项目。再整合 Echarts 可视化!

    参考文章:

    idea搭建SSM项目(基于maven)

    结果展示

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    项目结构

    在这里插入图片描述

    这是一个简单的 SSM 架构的项目。

    代码我就不粘贴出来了。

    PS:想要的童鞋,可以评论区留言!

    展开全文
  • 大数据分析概念  大数据分析是指对规模巨大的数据进行分析。大数据可以概括为5个V, 数据量大(Volume)、速度快(Velocity)、类型多(Variety)、价值(Value)、真实性(Veracity)。  大数据作为时下最火热的IT行业...

    大数据分析概念

    大数据分析是指对规模巨大的数据进行分析。大数据可以概括为5个V, 数据量大(Volume)、速度快(Velocity)、类型多(Variety)、价值(Value)、真实性(Veracity)。 

    大数据作为时下最火热的IT行业的词汇,随之而来的数据仓库、数据安全、数据分析、数据挖掘等等围绕大数据的商业价值的利用逐渐成为行业人士争相追捧的利润焦点。随着大数据时代的来临,大数据分析也应运而生。

                                    

    大数据分析工具介绍 

    前端展现 

    用于展现分析的前端开源工具有JasperSoft,Pentaho, Spagobi, Openi, Birt等等。 用于展现分析商用分析工具有Style Intelligence、RapidMiner Radoop、Cognos, BO, Microsoft Power BI, Oracle,Microstrategy,QlikVie、 Tableau 。 

    国内的有BDP,国云数据(大数据魔镜),思迈特,FineBI等等。 

    数据仓库 

    有Teradata AsterData, EMC GreenPlum, HP Vertica 等等。 

    数据集市 

    有QlikView、 Tableau 、Style Intelligence等等。

    大数据分析步骤 

    大数据分析的六个基本方面 

    1. Analytic Visualizations(可视化分析) 

      不管是对数据分析专家还是普通用户,数据可视化是数据分析工具最基本的要求。可视化可以直观的展示数据,让数据自己说话,让观众听到结果。

    2. Data Mining Algorithms(数据挖掘算法) 

      可视化是给人看的,数据挖掘就是给机器看的。集群、分割、孤立点分析还有其他的算法让我们深入数据内部,挖掘价值。这些算法不仅要处理大数据的量,也要处理大数据的速度。

    3. Predictive Analytic Capabilities(预测性分析能力) 

      数据挖掘可以让分析员更好的理解数据,而预测性分析可以让分析员根据可视化分析和数据挖掘的结果做出一些预测性的判断。

    4. Semantic Engines(语义引擎) 

      我们知道由于非结构化数据的多样性带来了数据分析的新的挑战,我们需要一系列的工具去解析,提取,分析数据。语义引擎需要被设计成能够从“文档”中智能提取信息。

     5.Data Quality and Master Data Management(数据质量和数据管理)

    数据质量和数据管理是一些管理方面的最佳实践。通过标准化的流程和工具对数据进行处理可以保证一个预先定义好的高质量的分析结果。 

    假如大数据真的是下一个重要的技术革新的话,我们最好把精力关注在大数据能给我们带来的好处,而不仅仅是挑战。

    6.数据存储,数据仓库 

    数据仓库是为了便于多维分析和多角度展示数据按特定模式进行存储所建立起来的关系型数据库。在商业智能系统的设计中,数据仓库的构建是关键,是商业智能系统的基础,承担对业务系统数据整合的任务,为商业智能系统提供数据抽取、转换和加载(ETL),并按主题对数据进行查询和访问,为联机数据分析和数据挖掘提供数据平台。

                                                                 

    大数据分析业务成果 

    1.积极主动&预测需求: 企业机构面临着越来越大的竞争压力,它们不仅需要获取客户,还要了解客户的需求,以便提升客户体验,并发展长久的关系。客户通过分享数据,降低数据使用的隐私级别,期望企业能够了解他们,形成相应的互动,并在所有的接触点提供无缝体验。 

    为此,企业需要识别客户的多个标识符(例如手机、电子邮件和地址),并将其整合为一个单独的客户ID。由于客户越来越多地使用多个渠道与企业互动,为此需要整合传统数据源和数字数据源来理解客户的行为。此外,企业也需要提供情境相关的实时体验,这也是客户的期望。 

    2. 缓冲风险&减少欺诈: 安全和欺诈分析旨在保护所有物理、财务和知识资产免受内部和外部威胁的滥用。高效的数据和分析能力将确保最佳的欺诈预防水平,提升整个企业机构的安全:威慑需要建立有效的机制,以便企业快速检测并预测欺诈活动,同时识别和跟踪肇事者。 

    将统计、网络、路径和大数据方法论用于带来警报的预测性欺诈倾向模型,将确保在被实时威胁检测流程触发后能够及时做出响应,并自动发出警报和做出相应的处理。数据管理以及高效和透明的欺诈事件报告机制将有助于改进欺诈风险管理流程。 

    此外,对整个企业的数据进行集成和关联可以提供统一的跨不同业务线、产品和交易的欺诈视图。多类型分析和数据基础可以提供更准确的欺诈趋势分析和预测,并预测未来的潜在操作方式,确定欺诈审计和调查中的漏洞。 

                                                 

    3.提供相关产品: 产品是任何企业机构生存的基石,也通常是企业投入最大的领域。产品管理团队的作用是辨识推动创新、新功能和服务战略路线图的发展趋势。 

    通过对个人公布的想法和观点的第三方数据源进行有效整理,再进行相应分析,可以帮助企业在需求发生变化或开发新技术的时候保持竞争力,并能够加快对市场需求的预测,在需求产生之前提供相应产品。 

    4. 个性化&服务: 公司在处理结构化数据方面仍然有些吃力,并需要快速应对通过数字技术进行客户交互所带来的不稳定性。要做出实时回应,并让客户感觉受到重视,只能通过先进的分析技术实现。大数据带来了基于客户个性进行互动的机会。这是通过理解客户的态度,并考虑实时位置等因素,从而在多渠道的服务环境中带来个性化关注实现的。 

    5. 优化&改善客户体验:运营管理不善可能会导致无数重大的问题,这包括面临损害客户体验,最终降低品牌忠诚度的重大风险。通过在流程设计和控制,以及在商品或服务生产中的业务运营优化中应用分析技术,可以提升满足客户期望的有效性和效率,并实现卓越的运营。 

    通过部署先进的分析技术,可以提高现场运营活动的生产力和效率,并能够根据业务和客户需求优化组织人力安排。数据和分析的最佳化使用可以带来端对端的视图,并能够对关键运营指标进行衡量,从而确保持续不断的改进。 

    例如,对于许多企业来说,库存是当前资产类别中最大的一个项目——库存过多或不足都会直接影响公司的直接成本和盈利能力。通过数据和分析,能够以最低的成本确保不间断的生产、销售和/或客户服务水平,从而改善库存管理水平。数据和分析能够提供目前和计划中的库存情况的信息,以及有关库存高度、组成和位置的信息,并能够帮助确定存库战略,并做出相应决策。客户期待获得相关的无缝体验,并让企业得知他们的活动。

     

    展开全文
  • 思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫、可视化分析、GIS地图显示、情感分析、舆情分析、主题挖掘、威胁情报溯源、知识图谱、预测预警及AI和NLP应用等。...
  • 大数据分析与数据分析这几年一直都是个高频词,很多人都开始纷纷转行到这个领域,也有不少人开始跃跃欲试,想找准时机进到大数据或数据分析领域。如今大数据分析和数据分析火爆,要说时机,可谓处处都是时机,关键要...
  • 大数据分析工具

    千次阅读 2018-09-29 09:19:57
    摘要:以下是整理的关于数据分析的最全信息,包括微信大数据分析、数据可视化工具、词频分析工具、舆情分析工具、PPT模板工具、互联网趋势分析工具、在线调查工具、网站分析监测工具、社交媒体监测工具等。...
  • 大数据分析技术方案

    万次阅读 2018-06-11 23:58:30
    大数据分析技术方案lWX471878的博客http://xinsheng.huawei.com/cn/blog/detail_80005.html李万鸿Fire ! Fire! Fire!一.目标现在已经进入大数据时代, 数据是无缝连接网络世界与物理世界的DNA。发现数据DNA、重组数据...
  • 解读大数据分析系统

    千次阅读 2019-08-19 09:44:36
    大数据的重要性日益突出,对于大数据的应用也在逐步加深,对于很多科技公司而言,掌握大数据分析系统开发的前沿,就等于拥有了整个大数据分析市场,过往追求的是大数据分析最终的结果,现如今,分析的快慢,准确性...
  • 2019大数据分析软件介绍

    千次阅读 2019-03-25 18:07:31
    大数据分析是什么?大数据分析软件有哪些?这是现在这个信息时代每一个企业管理者、经营参与者都需要了解的。今天,小编就来针对性地总结一下,什么是大数据分析,以及2019年主流的商业大数据分析软件。 一、大数据...
  • Python金融大数据分析-样章

    千次下载 热门讨论 2016-01-24 21:11:56
    Python金融大数据分析
  • 传统数据分析和大数据分析的区别

    千次阅读 2019-08-26 14:35:38
    随着互联网行业的快速发展,大数据已经成为IT行业最受欢迎的语言之一。据报道,对大数据分析师的...由于前景良好、工资高,许多人开始通过转型进入大数据分析行业,一些人仍在等待和观望。  “大数据”是用来...
  • 从所周知,大数据已经不简简单单是数据大的事实了,而最重要的现实是对大数据进行分析,只有通过分析才能获取很多智能的,深入的,有价值的信息。...基于如此的认识,大数据分析普遍存在的方法理论有哪些呢?
  • 那么要达到这些效果,在电子商务行业大数据分析主要是采用以下算法以及模型:  第一、RFM模型  通过了解在网站有过购买行为的客户,通过分析客户的购买行为来描述客户的价值,就是时间、频...
  • 大数据分析的六大基本组成

    千次阅读 2020-01-17 08:07:19
    ## 大数据分析的六大基本组成 (本文是笔者查阅一定资料整理原创所写,受知识面限制,如存在错误,欢迎支出) 第一部分: Analytic Visualizations 数据分析的基本要求。 大数据分析的对象主要为海量数据,涉及到的...
  • 数据可视化与大数据分析

    千次阅读 2018-11-30 10:31:36
    而数据分析是商业智通的途径之一,而大数据分析的结果可视化,对经营决策将起着关键作用。  数据可视化软件可以让数据分析师和业务用户利用图表、图形传达信息,帮助读者更加直观地理解数据背后的故事。但试图基于...
  • 大数据分析工程师大纲

    千次阅读 2018-07-25 15:58:31
    大数据分析工程师大纲       阶段一、业务数据分析师 课程一、数据挖掘/分析师之硬技能 - 必备常用工具使用与高级技巧 本部分内容主要介绍了数据挖掘、分析师、数据产品经理必备的常用工具的,主要有 ...
  • 大数据分析视频教程,该课程以微博为例,分析大数据在微博舆情分析的整体架构,大数据平台对数据的分析与处理方法。
  • 手把手实战教学大数据分析, 结合 Python 以及最新的 Spark 2.x 从0开始掌握大数据.适合:数据分析师,数据科学家,对大数据分析有兴趣的同学.
  • 今天我们就来好好聊聊数据分析·大数据分析在电商行业中的应用。 电商行业相对于传统零售业来说,最大的特点就是一切都可以通过数据化来监控和改进。通过数据可以看到用户从哪里来、如何组织产品可以实现很好的...
  • Spark大数据分析与实战:RDD编程初级实践 一、安装Hadoop和Spark 具体的安装过程在我以前的博客里面有,大家可以通过以下链接进入操作 Linux基础环境搭建(CentOS7)- 安装Hadoop Linux基础环境搭建(CentOS7)- ...
  • 当我们谈到大数据分析,首先需要确定数据分析的方向和拟解决的问题,然后才能确定需要的数据和分析范围。大数据驱动的分析主要的挑战不是技术问题,而是方向和组织领导的问题,要确定方向,提出问题,需要对行业做...
  • 大数据分析常见算法

    千次阅读 2019-01-06 20:31:32
    大数据分析主要依靠机器学习和大规模计算。机器学习包括监督学习、非监督学习、强化学习等,而监督学习又包括分类学习、回归学习、排序学习、匹配学习等。分类是最常见的机器学习应用问题,比如垃圾邮件过滤、人脸...
  • 大数据分析项目实战

    万次阅读 2018-03-19 18:48:30
    考虑到很多人想了解大数据,我们特地准备了一个关于大数据可视化分析的项目实战课,里面包含多个大数据分析项目的讲解和演示,每周两到三次。具体的信息说明在最后。在这里还是要推荐下我自己建的大数据...
  • 统计学与大数据分析

    万次阅读 2017-10-28 22:16:30
    在谈大数据分析之前我想应该说一说统计学。统计学到底是怎样一种学问呢。先看看我们的周围,其实有无限多的数据。所谓数据呢就是一系列数字的集合或者符号的集合体。我们傻傻的看着这些数据也看不出什么。所以我们会...
  • 在大数据时代,人们迫切希望在由普通机器组成的大规模集群上实现高性能的以机器学习算法为核心的数据分析,为实际业务提供服务和指导,进而实现数据的最终变现。与传统的在线联机分析...基于机器学习的大数据分析...
  • 如何进行大数据分析与处理?

    千次阅读 2019-05-03 11:59:07
    大数据分析的使用者有大数据分析专家,同时还有普通用户,但是他们二者对于大数据分析最基本的要求就是可视化分析,因为可视化分析能够直观的呈现大数据特点,同时能够非常容易被读者所接受。 2. 数据挖掘算法 ...
  • 大数据分析6个核心技术

    万次阅读 2018-08-17 16:14:07
    大数据分析6个核心技术   目前,大数据领域每年都会涌现出大量新的技术,成为大数据获取、存储、处理分析或可视化的有效手段。大数据技术能够将大规模数据中隐藏的信息和知识挖掘出来,为人类社会经济活动提供...
  • 大数据分析学习的详细解读

    千次阅读 2018-11-18 14:13:03
    以大数据分析师为目标,从数据分析基础、JAVA语言入门...大数据分析的使用者有大数据分析专家,同时还有普通用户,但是他们二者对于大数据分析最基本的要求就是可视化分析,因为可视化分析能够直观的呈现大数据特点...
  • Spark大数据分析与实战:IDEA使用Maven构建Spark项目 一、创建maven工程 二、修改pom.xml文件导入依赖 pom.xml文件代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,480
精华内容 61,792
关键字:

大数据分析