商务数据分析

赵卫东

目录

  • 1 课程介绍
    • 1.1 基本情况
    • 1.2 课程大纲
    • 1.3 学习建议
    • 1.4 课程规则
  • 2 商务智能概论
    • 2.1 课程概述
    • 2.2 商务智能概念
    • 2.3 商务智能的价值和功能
    • 2.4 商务智能的应用
    • 2.5 章节习题
  • 3 商务智能系统架构
    • 3.1 商务智能系统组成
    • 3.2 商务智能系统架构|
    • 3.3 商务智能系统架构II
  • 4 数据仓库**
    • 4.1 数据仓库概述
    • 4.2 数据仓库结构
    • 4.3 元数据
    • 4.4 操作数据存储
    • 4.5 数据仓库模型
    • 4.6 医保数据仓库设计
  • 5 在线分析处理
    • 5.1 在线分析处理基本概念
    • 5.2 在线分析处理操作
    • 5.3 OLAP操作语言
    • 5.4 OLAP分类
    • 5.5 章节习题
  • 6 可视化分析
    • 6.1 可视化分析基础
    • 6.2 超市销售数据的可视化分析@
    • 6.3 章节习题
  • 7 数据挖掘基础
    • 7.1 数据挖掘概论
    • 7.2 数据挖掘的过程
    • 7.3 数据挖掘的预处理
    • 7.4 数据挖掘的原语和语言
    • 7.5 数据挖掘隐私保护、应用领域
    • 7.6 章节习题
  • 8 分类分析I
    • 8.1 决策树基本概念、ID3、CART算法
    • 8.2 CHAID、C4.5算法、分类模型评估
    • 8.3 集成算法*
    • 8.4 章节习题
    • 8.5 测试题
  • 9 分类分析II
    • 9.1 贝叶斯分类器
    • 9.2 支持向量机*
    • 9.3 BP神经网络*与k最近邻算法
    • 9.4 章节习题
  • 10 聚类分析
    • 10.1 聚类分析基本概念
    • 10.2 k-means算法
    • 10.3 层次型聚类算法和k-prototype算法
    • 10.4 基于密度聚类
    • 10.5 kohonen算法
    • 10.6 章节习题
  • 11 关联分析
    • 11.1 关联分析基本概念
    • 11.2 Apriori和FP-growth算法
    • 11.3 序列模式
    • 11.4 章节习题
  • 12 回归分析
    • 12.1 回归分析基本概念@
    • 12.2 回归分析基础
    • 12.3 线性回归
    • 12.4 非线性回归
    • 12.5 零售企业商品销售回归预测
    • 12.6 电缆质量管理案例
    • 12.7 章节习题
  • 13 实验
    • 13.1 网页数据抓取
    • 13.2 银行客户流失分析
    • 13.3 集装箱危险品瞒报预测
    • 13.4 更多实验
网页数据抓取


对应的Python代码

from bs4 import BeautifulSoup

import re

import urllib

import xlwt

import pandas as pd

import matplotlib

import matplotlib.pyplot as plt


#得到页面全部内容

def askURL(url):

    header = { # 打开浏览器,修改为自己浏览器的Header中的User-Agent

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.30'

}

    request = urllib.request.Request(url, headers = header)#发送请求

    try:

        response = urllib.request.urlopen(request)#取得响应

        html=response.read()#获取网页内容

        print ("%s crawl success" % url)

    except urllib.error.URLError as e:

        print ("%s crawl fail" % url)

        if hasattr(e,"code"):

            print (e.code)

        if hasattr(e,"reason"):

            print (e.reason)

    return html


#获取相关内容

def getData(baseurl):

    findLink=re.compile(r'<a href="(.*?)">')#找到影片详情链接

    findImgSrc=re.compile(r'<img.*src="(.*?)"',re.S)#找到影片图片

    findTitle=re.compile(r'<span class="title">(.*)</span>')#找到片名

    #找到评分

    findRating=re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')

    #找到评价人数

    findJudge=re.compile(r'<span>(\d*)人评价</span>')

    #找到概况

    findInq=re.compile(r'<span class="inq">(.*)</span>')

    #找到影片相关内容:导演,主演,年份,地区,类别

    findBd=re.compile(r'<p class="">(.*?)</p>',re.S)

    #去掉无关内容

    remove=re.compile(r' |\n|</br>|\.*')

    datalist=[]

    for i in range(0,10):

        url=baseurl+str(i*25)

        # print(url)

        html=askURL(url)

        soup = BeautifulSoup(html, "html.parser")

        for item in soup.find_all('div',class_='item'):#找到每一个影片项

            data=[]

            item=str(item)#转换成字符串

            # 影片详情链接

            link=re.findall(findLink,item)[0]

            data.append(link)#添加详情链接  

            imgSrc=re.findall(findImgSrc,item)[0]

            data.append(imgSrc)#添加图片链接

            titles=re.findall(findTitle,item)

            #片名可能只有一个中文名,没有外国名

            if(len(titles)==2):

                ctitle=titles[0]

                data.append(ctitle)#添加中文片名

                otitle=titles[1].replace("/","")#去掉无关符号

                data.append(otitle)#添加外国片名

            else:

                data.append(titles[0])#添加中文片名

                data.append(' ')#留空

                

            rating=re.findall(findRating,item)[0]

            data.append(rating)#添加评分

            judgeNum=re.findall(findJudge,item)[0]

            data.append(judgeNum)#添加评论人数

            inq=re.findall(findInq,item)

            #可能没有概况

            if len(inq)!=0:

                inq=inq[0].replace("。","")#去掉句号

                data.append(inq)#添加概况

            else:

                data.append(' ')#留空

            bd=re.findall(findBd,item)[0]

            bd=re.sub(remove,"",bd)

            bd=re.sub('<br(\s+)?\/?>(\s+)?'," ",bd) #去掉<br >

            bd=re.sub('/', " ",bd)#替换/

            data.append(bd.strip())

            datalist.append(data)

    return datalist


#将相关数据写入excel中

def saveData(datalist,savepath):

    book=xlwt.Workbook(encoding='utf-8',style_compression=0)

    sheet=book.add_sheet('豆瓣电影',cell_overwrite_ok=True)

    col=('电影详情链接','图片链接','影片中文名','影片外国名',

                '评分','评价数','概况','相关信息')

    for i in range(0,8):

        sheet.write(0,i,col[i])#列名

    for i in range(0,250):

        data=datalist[i]

        for j in range(0,8):

            sheet.write(i+1,j,data[j])#数据

    book.save(savepath)#保存



print ("开始爬取......")

baseurl='https://movie.douban.com/top250?start='

datalist=getData(baseurl)

savapath=u'豆瓣电影.xls'

saveData(datalist,savapath)


df = pd.read_excel(savapath)

print(df.head())

print(df.info())

matplotlib.rcParams['font.size']=20

plt.figure(figsize=(20,5))

plt.subplot(1,2,1)

plt.scatter(df['评分'],range(1,251))

plt.xlabel('score')

plt.ylabel('rank')


#集中趋势的直方图

plt.subplot(1,2,2)

plt.hist(df['评分'],bins=15)

plt.xlabel('score')

plt.ylabel('number')