精华内容
下载资源
问答
  • python-数据分析案例汇总
    2020-02-22 15:51:16

    接下来的一系列文章会围绕谁说菜鸟不会数据分析这本书还有我本人一年半左右的时间对数据分析的自学总结和拓展,希望能帮助更多人入门数据分析,也帮助我自己复盘。
    什么是数据分析?
    数据分析是指根据分析的目的,用适当的分析方法以及工具,对数据分析进行处理与分析,提取有价值的信息,形成有效结论的过程。
    什么是数据挖掘?
    数据挖掘是从大量的数据中,通过统计学,机器学习,数据可视化等方法,挖掘出来未知而且有价值的信息和知识的过程
    数据分析步骤

    1. 明确分析目的和思路
    2. 数据收集
    3. 数据处理
    4. 数据分析
    5. 数据展现
    6. 报告撰写

    这一章课题主要是进行数据处理和数据分析,这样说过于空洞,正式写文的时候会对这两章进行详细讲述,其余的课题之后我也会慢慢补上的。
    环境要求
    python (anaconda 或者其他都可以,因为做数据分析,推荐还是anaconda,能够实时反应情况)
    编程基础
    需要对python以下几个板块都有一定的基础:

    1. 数据类型
    2. 赋值和变量
    3. 数据结构
    4. 函数

    好了!接下来可以开始进行数据分析啦!下面有一些案例我会持续更新的!

    1. 自然语言处理-网民情绪分析
    2. 对电影评论进行分析
    3. 人民日报语料分析
    4. 实现titannic生存预测
    5. 淘宝数据数据分析
    更多相关内容
  • 主要是对于北京市的二手房信息进行分析和预测,分别对于二手房价格和面积、朝向等锋面展开了叙述,进行数据挖掘分析和可视化,(本资源包括代码、数据。word实验报告)
  • 基于Python实现的新冠疫情数据挖掘案例分析.pdf
  • 安装Anaconda Python集成环境下载环境anaconda下载选择安装环境下载过程中使用默认,但有一个页面需要确认,如下图。anaconda选择页面第一个勾是是否把 Anaconda 加入环境变量,这涉及到能否直接在 cmd中使用 conda...

    友情提示:此篇文章大约需要阅读 7分钟57秒,不足之处请多指教,感谢你的阅读。

    安装Anaconda Python集成环境

    下载环境

    anaconda下载选择

    安装环境

    下载过程中使用默认,但有一个页面需要确认,如下图。

    anaconda选择页面

    第一个勾是是否把 Anaconda 加入环境变量,这涉及到能否直接在 cmd中使用 conda、jupyter、 ipython 等命令,推荐打勾。

    第二个是是否设置 Anaconda 所带的 Python 3.6 为系统默认的 Python 版本,可以打勾。

    安装完成后,在开始菜单中显示“Anaconda2”如下图所示。

    安装显示界面

    安装第三方程序包 Graphviz

    目的是在决策树算法中八进制最终的树结构。

    1、打开 Anaconda Prompt ,输入 conda install python-graphviz,回车即可完成安装,如下图所示,本图所示已经安装 了 graphviz包,若之前没有安装,这时会花点时间安装,安装不用干预。

    安装决策树依赖包

    安装完成后先输入 python,然后再输入 import graphviz,测试是否成功安装,如上图所示。

    需要设置环境变量,才能使用新安装的 graphviz。

    Anaconda及依赖包环境变量设置

    首先查看 anaconda安装在哪个目录下,可以打开 Spyder的属性,看一看目标是什么目 录。例如本机的 anaconda安装路径为 C:\Users\lenovo\Anaconda2。

    下面设置环境变量

    (1) 在用户变量“path”里添加 C:\Users\lenovo\Anaconda2\Library\bin\graphviz

    (2) 在系统变量的“path”里添加 C:\Users\lenovo\Anaconda2\Library\bin\graphviz\dot.exe

    (3) 如果现在有正在打开的 anaconda 程序,例如正在 Spyder,那么关闭 Spyder,再启动,这 样刚才设置的环境变量生效。

    决策树分析

    格式化原始数据

    将下图的表 demo输入到 Excel中,保存为.csv 文件(.csv为逗号分隔值文件格式)。

    注意将表 demo中的汉字值转换成数据字值,例如“是否是公司职员”列中的“是”为“1”, “否”为“0”。转换后的表中数据如下图所示。

    学习表

    编写数据分析代码

    编写程序对上面的数据进行决策树分类,采用信息熵(entropy)作为度量标准。参考代码如下所示:

    from sklearn.tree import DecisionTreeClassifier,export_graphviz

    import graphviz

    import csv

    dataset = []

    reader = csv.reader(open("demo.csv"))

    for line in reader:

    if reader.line_num == 1:

    continue

    dataset.append(line)

    X = [x[0:4] for x in dataset]

    y = [x[4] for x in dataset]

    clf = DecisionTreeClassifier(criterion='entropy').fit(X, y)

    dot_data = export_graphviz(clf, out_file=None)

    graph = graphviz.Source(dot_data)

    graph.render("table");

    digraph Tree {

    node [shape=box] ;

    0 [label="X[0] <= 0.5\nentropy = 0.94\nsamples = 14\nvalue = [9, 5]"] ;

    1 [label="X[1] <= 1.5\nentropy = 0.985\nsamples = 7\nvalue = [3, 4]"] ;

    0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;

    2 [label="entropy = 0.0\nsamples = 3\nvalue = [0, 3]"] ;

    1 -> 2 ;

    3 [label="X[1] <= 2.5\nentropy = 0.811\nsamples = 4\nvalue = [3, 1]"] ;

    1 -> 3 ;

    4 [label="entropy = 0.0\nsamples = 2\nvalue = [2, 0]"] ;

    3 -> 4 ;

    5 [label="X[3] <= 0.5\nentropy = 1.0\nsamples = 2\nvalue = [1, 1]"] ;

    3 -> 5 ;

    6 [label="entropy = 0.0\nsamples = 1\nvalue = [1, 0]"] ;

    5 -> 6 ;

    7 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]"] ;

    5 -> 7 ;

    8 [label="X[1] <= 2.5\nentropy = 0.592\nsamples = 7\nvalue = [6, 1]"] ;

    0 -> 8 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;

    9 [label="entropy = 0.0\nsamples = 4\nvalue = [4, 0]"] ;

    8 -> 9 ;

    10 [label="X[3] <= 0.5\nentropy = 0.918\nsamples = 3\nvalue = [2, 1]"] ;

    8 -> 10 ;

    11 [label="entropy = 0.0\nsamples = 2\nvalue = [2, 0]"] ;

    10 -> 11 ;

    12 [label="entropy = 0.0\nsamples = 1\nvalue = [0, 1]"] ;

    10 -> 12 ;

    }

    数据分析结果

    程序运行结果在与该程序在同一目录下的 table.pdf 文件中,将每一个叶子结点转换成IF-THEN 规则。

    决策树分析结果

    IF-THEN分类规则

    (1)IF"不是公司员工" AND "年龄大于等于40", THEN "不买保险"。

    (2)IF"不是公司员工" AND "年龄小于40", THEN "买保险"。

    (3)IF"不是公司员工" AND "年龄大于50" AND "信用为良", THEN "不买保险"。

    (4)IF"不是公司员工" AND "年龄大于40" AND "信用为优", THEN "买保险"。

    (5)IF"是公司员工" AND "年龄小于50", THEN "不买保险"。

    (6)IF"是公司员工" AND "年龄小于50" AND "信用为优", THEN "买保险"。

    (7)IF"是公司员工" AND "年龄小于50" AND "信用为良", THEN "不买保险"。

    展开全文
  • 基础篇介绍了数据挖掘的基本原理,实战篇介绍了一个个真实案例,通过对案例深入浅出的剖析,使读者在不知不觉中通过案例实践获得数据挖掘项目经验,同时快速领悟看似难懂的数据挖掘理论。读者在阅读过程中,应充分...
  • python数据分析 数据集,包括源代码,实例源码和数据集
  • 其中包含4个案例,以毕业论文的格式写出。包含原始数据。代码可复制粘贴。
  • 数据分析精华案例-香水产品数据挖掘实用案例分析
  • python数据挖掘预测Boston房价  以上为两个博客,本文都是从中整理而来 第一个数据集,包名如下: housing.csv 0.00632 18.00 2.310 0 0.5380 6.5750 65.20 4.0900 1 296.0 15.30 396.90 4.98 24.00 0.02731 ...
  • Python数据分析挖掘

    2021-06-09 13:23:58
    围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 三、数据采集篇: 通过网络爬虫实战解决数据...
  • Python数据挖掘实战案例】K-Means广告效果聚类分析

    千次阅读 多人点赞 2020-06-29 08:30:57
    作者:杨啊小强来源:Python数据科学修炼之路本案例的业务场景:假如你们公司投放广告的渠道很多,每个渠道的客户性质也可能不同,比如在优酷视频投广告和今日头条投放广告,效果可能会...

    作者:杨啊小强

    来源:Python数据科学修炼之路

    本案例的业务场景:

        假如你们公司投放广告的渠道很多,每个渠道的客户性质也可能不同,比如在优酷视频投广告和今日头条投放广告,效果可能会有差异。现在需要对广告效果分析实现有针对性的广告效果测量和优化工作。

        本案例,通过各类广告渠道90天内额日均UV,平均注册率、平均搜索率、访问深度、平均停留时长、订单转化率、投放时间、素材类型、广告类型、合作方式、广告尺寸和广告卖点等特征,将渠道分类,找出每类渠道的重点特征,为加下来的业务讨论和数据分析提供支持。

    目  录

    • 1、应用技术介绍

    • 2、数据介绍

    • 3、导入库,加载数据

    • 4、数据审查

    • 5、数据处理

    • 6、建立模型

    • 7、聚类结果特征分析与展示

    • 8、数据结论

    01

    应用技术介绍

    Law

    01、数据预处理

    a、数据标准化

    数据无量纲化,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或者量级的指标能够进行和加权. 比如身高与体重,房子数量与收入等。

    b、独热编码OneHotEncoder

    对于字符串类别类型的变量,不能直接带入模型,需要转化为数值型。

    02、K-Means聚类算法

    聚类算法:属于无监督机器学习算法,通过计算样本项之间的相似度(也称为样本间的距离),按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小。

    闵可夫斯基距离(Minkowski):

    当p为1的时候是曼哈顿距离(Manhattan)

    当p为2的时候是欧式距离(Euclidean)

    当p为无穷大的时候是切比雪夫距离(Chebyshev)

    算法思想(步骤):

    a、选择初始化的k个类别中心a1,a2,...ak;

    b、计算每个样本Xi到类别中心aj的距离,设定最近的类别j

    c、将每个类别的中心点aj,替换为隶属该类别的所有样本的均值,作为新的质心。

    d、重复上面两步操作,直到达到某个中止条件

    中止条件为:组内最小平方误差MSE最小,或者达到迭代次数,或者簇中心点不再变化。

    之前文章有介绍(点击下方链接查看):

    Python数据挖掘实战:客户价值识别实现差异化管理

    聚类评估——轮廓系数

    如何基于最优的数据尺度确定K-Means算法中的K值?

    轮廓系数的思想:

    最佳的聚类类别划分从数据特征上看,类内距离最小化且类别间距离最大化,直观的理解就是“物以类聚”:同类的“聚集”“抱团”,不同类的离得远。轮廓系数通过枚举每个K计算平均轮廓系数得到最佳值。

    a(i) :i向量到同一簇内其他点不相似程度的平均值

    b(i) :i向量到其他簇的平均不相似程度的最小值

    轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。

    将所有点的轮廓系数求平均,就是该聚类结果总的轮廓系数。

    02

    数据介绍

    Law

    01 数据维度概况

    除了渠道唯一标识,共12个维度,889行,有缺失值,有异常值。

    02 数据13个维度介绍

    1、渠道代号:渠道唯一标识

    2、日均UV:每天的独立访问量

    3、平均注册率=日均注册用户数/平均每日访问量

    4、平均搜索量:每个访问的搜索量

    5、访问深度:总页面浏览量/平均每天的访问量

    6、平均停留时长=总停留时长/平均每天的访问量

    7、订单转化率=总订单数量/平均每天的访客量

    8、投放时间:每个广告在外投放的天数

    9、素材类型:'jpg' 'swf' 'gif' 'sp'

    10、广告类型:banner、tips、不确定、横幅、暂停

    11、合作方式:'roi' 'cpc' 'cpm' 'cpd'

    12、广告尺寸:'140*40' '308*388' '450*300' '600*90' '480*360' '960*126' '900*120'
    '390*270'

    13、广告卖点:打折、满减、满赠、秒杀、直降、满返

    03

    导入库,加载数据

    Law

    import pandas as pd
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from  sklearn.preprocessing import  MinMaxScaler,OneHotEncoder
    from sklearn.metrics import silhouette_score  # 导入轮廓系数指标
    from sklearn.cluster import KMeans  # KMeans模块
    
    %matplotlib inline
    ## 设置属性防止中文乱码
    mpl.rcParams['font.sans-serif'] = [u'SimHei']
    mpl.rcParams['axes.unicode_minus'] = False
    

    以上是加载库的国际惯例,OneHotEncoder是独热编码,如果一个类别特征有n个类别,将该变量按照类别分裂成N维新变量,包含则标记为1,否则为0,用N维特征表示原来的特征。

    读取数据:

    raw_data = pd.read_table('ad_performance.txt', delimiter='\t')
    raw_data.head()
    
       渠道代号    日均UV    平均注册率   平均搜索量   访问深度    平均停留时间  订单转化率   投放总时间   素材类型    广告类型    合作方式    广告尺寸    广告卖点
    0    A203    3.69    0.0071  0.0214  2.3071  419.77  0.0258  20  jpg banner  roi 140*40  打折
    1    A387    178.70  0.0040  0.0324  2.0489  157.94  0.0030  19  jpg banner  cpc 140*40  满减
    2    A388    91.77   0.0022  0.0530  1.8771  357.93  0.0026  4   jpg banner  cpc 140*40  满减
    3    A389    1.09    0.0074  0.3382  4.2426  364.07  0.0153  10  jpg banner  cpc 140*40  满减
    4    A390    3.37    0.0028  0.1740  2.1934  313.34  0.0007  30  jpg banner  cpc 140*40  满减
    
    
    

    渠道代号是唯一标识,日均UV到投放总时间是数值型(float和int)变量,后面是字符型变量。

    04

    数据审查

    Law

    # 查看基本状态
    print('{:*^60}'.format('数据前两行:'))
    print(raw_data.head(2))  # 打印输出前2条数据
    
    print('{:*^60}'.format('数据类型:'))
    print(pd.DataFrame(raw_data.dtypes).T)  # 打印数据类型分布
    
    print('{:*^60}'.format('数据统计描述:'))
    print(raw_data.describe().round(2).T)  # 打印原始数据基本描述性信息
    
    ***************************数据前两行:***************************
       渠道代号    日均UV   平均注册率   平均搜索量    访问深度  平均停留时间   订单转化率  投放总时间 素材类型    广告类型  \
    0  A203    3.69  0.0071  0.0214  2.3071  419.77  0.0258     20  jpg  banner   
    1  A387  178.70  0.0040  0.0324  2.0489  157.94  0.0030     19  jpg  banner   
    
      合作方式    广告尺寸 广告卖点  
    0  roi  140*40   打折  
    1  cpc  140*40   满减
    
    
    ***************************数据类型:****************************
         渠道代号     日均UV    平均注册率    平均搜索量     访问深度   平均停留时间    订单转化率  投放总时间  \
    0  object  float64  float64  float64  float64  float64  float64  int64   
    
         素材类型    广告类型    合作方式    广告尺寸    广告卖点  
    0  object  object  object  object  object  
    
    
    **************************数据统计描述:***************************
            count    mean      std   min     25%     50%     75%       max
    日均UV    889.0  540.85  1634.41  0.06    6.18  114.18  466.87  25294.77
    平均注册率   889.0    0.00     0.00  0.00    0.00    0.00    0.00      0.04
    平均搜索量   889.0    0.03     0.11  0.00    0.00    0.00    0.01      1.04
    访问深度    889.0    2.17     3.80  1.00    1.39    1.79    2.22     98.98
    平均停留时间  887.0  262.67   224.36  1.64  126.02  236.55  357.98   4450.83
    订单转化率   889.0    0.00     0.01  0.00    0.00    0.00    0.00      0.22
    投放总时间   889.0   16.05     8.51  1.00    9.00   16.00   24.00     30.00
    

    上面代码,分别展示前两条数据、所有特征的数据类型、以及数值型特征的五值分布

    查看缺失值情况:

    # 缺失值审查
    na_cols = raw_data.isnull().any(axis=0)  # 查看每一列是否具有缺失值
    print('{:*^60}'.format('含有缺失值的列:'))
    print(na_cols[na_cols==True])  # 查看具有缺失值的列
    print('总共有多少数据缺失: {0}'.format(raw_data.isnull().any(axis=1).sum()))  # 查看具有缺失值的行总记录数
    
    **************************含有缺失值的列:**************************
    平均停留时间    True
    dtype: bool
    总共有多少数据缺失: 2
    # 也可以用下面的代码查看
    raw_data.isnull().sum().sort_values(ascending=False)
    
    

    变量之间的相关性分析:

    # 相关性分析
    print('{:*^60}'.format('Correlation analysis:'))
    print(raw_data.corr().round(2).T)  # 打印原始数据相关性信息
    
    *******************Correlation analysis:********************
            日均UV  平均注册率  平均搜索量  访问深度  平均停留时间  订单转化率  投放总时间
    日均UV    1.00  -0.05  -0.07 -0.02    0.04  -0.05  -0.04
    平均注册率  -0.05   1.00   0.24  0.11    0.22   0.32  -0.01
    平均搜索量  -0.07   0.24   1.00  0.06    0.17   0.13  -0.03
    访问深度   -0.02   0.11   0.06  1.00    0.72   0.16   0.06
    平均停留时间  0.04   0.22   0.17  0.72    1.00   0.25   0.05
    订单转化率  -0.05   0.32   0.13  0.16    0.25   1.00  -0.00
    投放总时间  -0.04  -0.01  -0.03  0.06    0.05  -0.00   1.00
    
    

    前面有有写过,皮尔逊相关的文章,可以用热力图形象展示(放个链接方便回看):

    Python数据分析综合小练习:销售数据分析

    # 相关性可视化展示
    import seaborn as sns
    corr=raw_data.corr().round(2)
    sns.heatmap(corr,cmap="Reds",annot=True)
    

    可以看到,“访问深度”和“平均停留时间”相关性比较高,相关性高说明两个变量在建立模型的时候,作用是一样或者效果是一样的,可以考虑组合或者删除其一。

    05

    数据处理

    Law

    数据了解的差不多了,我们开始时处理数据,把常规数据通过清洗、转换、规约、聚合、抽样等方式变成机器学习可以识别或者提升准确度的数据。

    # 1 删除平均平均停留时间列
    raw_data2 = raw_data.drop(['平均停留时间'], axis=1)
    

    类别变量的独热编码:

    # 类别变量取值
    cols=["素材类型","广告类型","合作方式","广告尺寸","广告卖点"]
    for x in cols:
        data=raw_data2[x].unique()
        print("变量【{0}】的取值有:\n{1}".format(x,data))
        print("-·"*20)
    
    变量【素材类型】的取值有:
    ['jpg' 'swf' 'gif' 'sp']
    -·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·
    变量【广告类型】的取值有:
    ['banner' 'tips' '不确定' '横幅' '暂停']
    -·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·
    变量【合作方式】的取值有:
    ['roi' 'cpc' 'cpm' 'cpd']
    -·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·
    变量【广告尺寸】的取值有:
    ['140*40' '308*388' '450*300' '600*90' '480*360' '960*126' '900*120'
     '390*270']
    -·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·
    变量【广告卖点】的取值有:
    ['打折' '满减' '满赠' '秒杀' '直降' '满返']
    -·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·
    # 字符串分类独热编码处理
    cols = ['素材类型','广告类型','合作方式','广告尺寸','广告卖点']
    model_ohe = OneHotEncoder(sparse=False)  # 建立OneHotEncode对象
    ohe_matrix = model_ohe.fit_transform(raw_data2[cols])  # 直接转换
    print(ohe_matrix[:2])
    out:
    [[0. 1. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.
      0. 0. 0.]
     [0. 1. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.
      0. 0. 0.]]
    # 用pandas的方法
    ohe_matrix1=pd.get_dummies(raw_data2[cols])
    ohe_matrix1.head(5)
    

    结果如下:

    数据标准化:

    数据标准化的意义开篇技术介绍有聊过,统一量纲。

    # 数据标准化
    sacle_matrix = raw_data2.iloc[:, 1:7]  # 获得要转换的矩阵
    model_scaler = MinMaxScaler()  # 建立MinMaxScaler模型对象
    data_scaled = model_scaler.fit_transform(sacle_matrix)  # MinMaxScaler标准化处理
    print(data_scaled.round(2))
    [[0.   0.18 0.02 0.01 0.12 0.66]
     [0.01 0.1  0.03 0.01 0.01 0.62]
     [0.   0.06 0.05 0.01 0.01 0.1 ]
     ...
     [0.01 0.01 0.   0.   0.   0.72]
     [0.05 0.   0.   0.   0.   0.31]
     [0.   0.   0.   0.53 0.   0.62]]
    

    数据处理完,我们将独热编码的数据和标准化转化后的数据合并:

    # 合并所有维度
    X = np.hstack((data_scaled, ohe_matrix))

    数据处理完,就可以带入模型进行训练了。

    06

    建立模型

    Law

    # 通过平均轮廓系数检验得到最佳KMeans聚类模型
    score_list = list()  # 用来存储每个K下模型的平局轮廓系数
    silhouette_int = -1  # 初始化的平均轮廓系数阀值
    for n_clusters in range(2, 8):  # 遍历从2到5几个有限组
        model_kmeans = KMeans(n_clusters=n_clusters)  # 建立聚类模型对象
        labels_tmp = model_kmeans.fit_predict(X)  # 训练聚类模型
        silhouette_tmp = silhouette_score(X, labels_tmp)  # 得到每个K下的平均轮廓系数
        if silhouette_tmp > silhouette_int:  # 如果平均轮廓系数更高
            best_k = n_clusters  # 保存K将最好的K存储下来
            silhouette_int = silhouette_tmp  # 保存平均轮廓得分
            best_kmeans = model_kmeans  # 保存模型实例对象
            cluster_labels_k = labels_tmp  # 保存聚类标签
        score_list.append([n_clusters, silhouette_tmp])  # 将每次K及其得分追加到列表
    print('{:*^60}'.format('K值对应的轮廓系数:'))
    print(np.array(score_list))  # 打印输出所有K下的详细得分
    print('最优的K值是:{0} \n对应的轮廓系数是:{1}'.format(best_k, silhouette_int))
    
    *************************K值对应的轮廓系数:*************************
    [[2.         0.38655493]
     [3.         0.45864451]
     [4.         0.50209812]
     [5.         0.4800359 ]
     [6.         0.47761127]
     [7.         0.4935842 ]]
    最优的K值是:4 
    对应的轮廓系数是: 0.5020981194788053
    

    轮廓系数确定最佳的K值,确定数据分为几类较为合理,开篇技术介绍有轮廓系数的介绍了,聚类效果的评价,之前文章有介绍过聚类数和簇内均方误差绘图出现拐点的时候可以确定为几类。

    总体思想(评价指标)还是怎么聚才能使得簇内距离足够小,簇与簇之间平均距离足够大来评判。

    当然,有兴趣的同学,可以查资料总结一下聚类的评价指标,怎么确定K值,K-Means有什么优缺点,怎么提升?··· ···

    后续文章也可能会专门出个这方面的专题。

    07

    聚类结果特征分析与展示

    Law

    通过上面模型,我们其实给每个观测(样本)打了个标签clusters,即他属于4类中的哪一类:

    # 将原始数据与聚类标签整合
    cluster_labels = pd.DataFrame(cluster_labels_k, columns=['clusters'])  # 获得训练集下的标签信息
    merge_data = pd.concat((raw_data2, cluster_labels), axis=1)  # 将原始处理过的数据跟聚类标签整合
    merge_data.head()
    
    渠道代号    日均UV    平均注册率   平均搜索量   访问深度    订单转化率   投放总时间   素材类型    广告类型    合作方式    广告尺寸    广告卖点    clusters
    0    A203    3.69    0.0071  0.0214  2.3071  0.0258  20  jpg banner  roi 140*40  打折  0
    1    A387    178.70  0.0040  0.0324  2.0489  0.0030  19  jpg banner  cpc 140*40  满减  0
    2    A388    91.77   0.0022  0.0530  1.8771  0.0026  4   jpg banner  cpc 140*40  满减  0
    3    A389    1.09    0.0074  0.3382  4.2426  0.0153  10  jpg banner  cpc 140*40  满减  0
    4    A390    3.37    0.0028  0.1740  2.1934  0.0007  30  jpg banner  cpc 140*40  满减  0
    

    然后看看,每个类别下的样本数量和占比情况:

    # 计算每个聚类类别下的样本量和样本占比
    clustering_count = pd.DataFrame(merge_data['渠道代号'].groupby(merge_data['clusters']).count()).T.rename({'渠道代号': 'counts'})  # 计算每个聚类类别的样本量
    clustering_ratio = (clustering_count / len(merge_data)).round(2).rename({'counts': 'percentage'})  # 计算每个聚类类别的样本量占比
    print(clustering_count)
    print("#"*30)
    print(clustering_ratio)
    
    clusters    0    1    2   3
    counts    154  313  349  73
    ##############################
    clusters       0     1     2     3
    percentage  0.17  0.35  0.39  0.08

    接下来,我们看看每个类别内部最显著的特征:

    # 计算各个聚类类别内部最显著特征值
    cluster_features = []  # 空列表,用于存储最终合并后的所有特征信息
    for line in range(best_k):  # 读取每个类索引
        label_data = merge_data[merge_data['clusters'] == line]  # 获得特定类的数据
    
        part1_data = label_data.iloc[:, 1:7]  # 获得数值型数据特征
        part1_desc = part1_data.describe().round(3)  # 得到数值型特征的描述性统计信息
        merge_data1 = part1_desc.iloc[2, :]  # 得到数值型特征的均值
    
        part2_data = label_data.iloc[:, 7:-1]  # 获得字符串型数据特征
        part2_desc = part2_data.describe(include='all')  # 获得字符串型数据特征的描述性统计信息
        merge_data2 = part2_desc.iloc[2, :]  # 获得字符串型数据特征的最频繁值
    
        merge_line = pd.concat((merge_data1, merge_data2), axis=0)  # 将数值型和字符串型典型特征沿行合并
        cluster_features.append(merge_line)  # 将每个类别下的数据特征追加到列表
    
    #  输出完整的类别特征信息
    cluster_pd = pd.DataFrame(cluster_features).T  # 将列表转化为矩阵
    print('{:*^60}'.format('每个类别主要的特征:'))
    all_cluster_set = pd.concat((clustering_count, clustering_ratio, cluster_pd),axis=0)  # 将每个聚类类别的所有信息合并
    all_cluster_set
    
    *******************每个类别主要的特征:*****************
                  0        1       2       3
    counts       154      313     349     73
    percentage   0.17    0.35    0.39    0.08
    日均UV     2717.42 1390.01 933.015 1904.37
    平均注册率    0.005   0.003   0.003   0.003
    平均搜索量    0.051   0.152   0.064   0.106
    访问深度      0.947   1.168   5.916   0.943
    订单转化率    0.007   0.017   0.006   0.009
    投放总时间    8.529   8.199   8.77    8.217
    素材类型     jpg      swf     jpg     swf
    广告类型     banner  不确定   横幅     tips
    合作方式     cpc      roi     cpc     cpm
    广告尺寸    308*388  600*90  600*90  450*300
    广告卖点     满减       打折    直降     打折
    

    上面看着挺累的,不直观,我们图形化输出:

    #各类别数据预处理
    num_sets = cluster_pd.iloc[:6, :].T.astype(np.float64)  # 获取要展示的数据
    num_sets_max_min = model_scaler.fit_transform(num_sets)  # 获得标准化后的数据
    
    # 画图
    fig = plt.figure(figsize=(6,6))  # 建立画布
    ax = fig.add_subplot(111, polar=True)  # 增加子网格,注意polar参数
    labels = np.array(merge_data1.index)  # 设置要展示的数据标签
    cor_list = ['g', 'r', 'y', 'b']  # 定义不同类别的颜色
    angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False)  # 计算各个区间的角度
    angles = np.concatenate((angles, [angles[0]]))  # 建立相同首尾字段以便于闭合
    # 画雷达图
    for i in range(len(num_sets)):  # 循环每个类别
        data_tmp = num_sets_max_min[i, :]  # 获得对应类数据
        data = np.concatenate((data_tmp, [data_tmp[0]]))  # 建立相同首尾字段以便于闭合
        ax.plot(angles, data, 'o-', c=cor_list[i], label="第%d类渠道"%(i))  # 画线
        ax.fill(angles, data,alpha=2.5)
    # 设置图像显示格式
    ax.set_thetagrids(angles * 180 / np.pi, labels, fontproperties="SimHei")  # 设置极坐标轴
    ax.set_title("各聚类类别显著特征对比", fontproperties="SimHei")  # 设置标题放置
    ax.set_rlim(-0.2, 1.2)  # 设置坐标轴尺度范围
    plt.legend(loc="upper right" ,bbox_to_anchor=(1.2,1.0))  # 设置图例位置
    

    08

    数据结论

    Law

    从案例结果来看,所有的渠道被分为4各类别,每个类别的样本量分别为:154、313、349 、73,对应占比分别为:17%、35%、39%、8%。

    通过雷达图可以清楚的知道:

    类别1(索引为2类的渠道)

    这类广告媒体除了访问深度和投放时间较高,其他属性较低,因此这类广告媒体效果质量较差,并且占到39%,因此这类是主题渠道之一。

    业务部门要考虑他的实际投放价值。

    类别2(索引为1类的渠道)

    这类广告媒体除了访问深度略差,在平均搜索量、日均UV、订单转化率等广告效果指标上表现良好,是一类综合效果较好的渠道。

    但是日均UV是短板,较低。无法给企业带来大量的流量以及新用户,这类广告的特质适合用户转化,尤其是有关订单的转化提升。

    类别3(索引为0类的渠道)

    这类广告媒体的显著特征是日均UV和注册率较高,其“引流”和“拉新”效果好,可以在广告媒体中定位为引流角色。

    符合“广而告之”的诉求,适合“拉新”使用。

    类别4(索引为3类的渠道)

    这类渠道各方面特征都不明显,各个流量质量和流量数量的指标均处于“中等”层次。不突出但是均衡,考虑在各场景下可以考虑在这个渠道投放广告。

    基础知识 温故知新...

    数据获取:关注后,后台回复“广告效果分析”获取,动手练练吧!

    ◆ ◆ ◆  ◆ ◆

    长按二维码关注我们


    数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

    管理员二维码:

    猜你喜欢

     笑死人不偿命的知乎沙雕问题排行榜

     用Python扒出B站那些“惊为天人”的阿婆主!

     全球股市跳水大战,谁最坑爹!

     华农兄弟、徐大Sao&李子柒?谁才是B站美食区的最强王者?

     你相信逛B站也能学编程吗

    展开全文
  • Python数据挖掘分析

    2018-07-30 16:21:43
    此文件夹里包含两本基于Python数据挖掘分析的书籍和一本Python爬虫简写。主要介绍了Python的基本理论和一些实践案例
  • 基于python的情感分析,含有案例分析完整python脚本源码及所用数据
  • 常见的聚类分析算法有: 这里主要介绍一下最常用的K-Means聚类算法 一、K-Means聚类算法简介 K-Means算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数k,采用距离作为...

    聚类算法是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法,是一种无监督学习方法。聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度将他们划分为若干组,划分的原则是组内样本最小而组间距离最大化。

    常用的聚类方法有:

    常见的聚类分析算法有:

    这里主要介绍一下最常用的K-Means聚类算法

    一、K-Means聚类算法简介

    K-Means算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数k,采用距离作为相似性评价指标,即认为两个对象的距离越近,其相似度就越大。

    1.算法过程

    (1)从n个样本数据中随机选取k个对象作为初始聚类中心;

    (2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中;

    (3)所欲对象分配完后,重新计算k个聚类的中心;

    (4)与前一次计算得到的k个聚类中心比较,如果聚类中心发生变化,转至步骤(2),否则转至步骤(5);

    (5)当质心不发生变化时,停止并输出聚类结果。

    2.聚类算法的优缺点

    2.1 优点

    • 容易理解,聚类效果不错,虽然是局部最优, 但往往局部最优就够了;
    • 处理大数据集的时候,该算法可以保证较好的伸缩性;
    • 当簇近似高斯分布的时候,效果非常不错;
    • 算法复杂度低。

    2.2 缺点

    • K 值需要人为设定,不同 K 值得到的结果不一样;
    • 对初始的簇中心敏感,不同选取方式会得到不同结果;
    • 对异常值敏感;
    • 样本只能归为一类,不适合多分类任务;
    • 不适合太离散的分类、样本类别不平衡的分类、非凸形状的分类。

    参考:【机器学习】K-means(非常详细) - 知乎 

    聚类的结果可能依赖于初始聚类中心的随机选择,使得结果严重偏离全局最优分类。因此,在实践中为了得到较好的结果,通常选择不同的初始聚类中心,多次运行k-means算法。在计算k个聚类中心的时候,对于连续数据,聚类中心取该簇的均值但是当样本的某些属性是分类变量时,均值可能无定义,此时可以使用k-众数方法。

    3.相似性的度量

    对于连续属性,要先对各属性值进行零-均值规范,再进行距离的计算。度量样本之间的相似性最常用的是欧几里得距离、曼哈顿距离和闵可夫斯基距离。

     4.目标函数

    使用误差平方和SSE作为度量聚类质量的目标函数。

    SSE=\sum_{i=1}^{k}\sum_{x\epsilon E_{i}}^{}d(e_{i},x)^{2}

     簇E_{i}的聚类中心e_{i}的计算公式

    e_{i}=\frac{1}{n_{i}}\sum_{x\epsilon E_{i}}^{}x

    其中 k表示聚类簇的个数,E_{i}表示第i个簇,x代表样本,e_{i}表示簇E_{i}的聚类中心,n表示数据集中样本的个数,n_{i}表示第i个簇中样本的个数。

    二、用Python实现K-Means聚类算法

    1、导入数据并进行标准化 

    import pandas as pd
    inputfile = './Python数据分析与挖掘实战(第2版)/chapter5/demo/data/consumption_data.xls'
    data = pd.read_excel(inputfile,index_col = 'Id')
    data

    数据如下:

    该数据集表示餐饮客户的消费行为特征 

    k = 3   #聚类的类别
    iteration = 500  #聚类最大循环次数
    data_zs = 1.0*(data-data.mean())/data.std()   #数据标准化
    data_zs

    2.构建kmeans模型

    from sklearn.cluster import KMeans  
    model = KMeans(n_clusters = k, n_jobs = 4, max_iter = iteration, random_state = 1234) #分类为k,并发数为4
    model.fit(data_zs)

    n_clusters: 簇的个数,即你想聚成几类

    init: 初始簇中心的获取方法

    n_init: 获取初始簇中心的更迭次数,为了弥补初始质心的影响,算法默认会初始10个质心,实现算法,然后返回最好的结果。

    max_iter: 最大迭代次数(因为kmeans算法的实现需要迭代)

    tol: 容忍度,即kmeans运行准则收敛的条件

    precompute_distances:是否需要提前计算距离,这个参数会在空间和时间之间做权衡,如果是True 会把整个距离矩阵都放到内存中,auto 会默认在数据样本大于featurs*samples 的数量大于12e6 的时候False,False 时核心实现的方法是利用Cpython 来实现的

    verbose: 冗长模式(不太懂是啥意思,反正一般不去改默认值)

    random_state: 随机生成簇中心的状态条件。

    copy_x: 对是否修改数据的一个标记,如果True,即复制了就不会修改数据。bool 在scikit-learn 很多接口中都会有这个参数的,就是是否对输入数据继续copy 操作,以便不修改用户的输入数据。这个要理解Python 的内存机制才会比较清楚。

    n_jobs: 并行设置

    algorithm: kmeans的实现算法,有:'auto', ‘full', ‘elkan', 其中 ‘full'表示用EM方式实现

    虽然有很多参数,但是都已经给出了默认值。所以我们一般不需要去传入这些参数,参数的。可以根据实际需要来调用。

    参考:https://www.jb51.net/article/129821.htm

    3.结果展示

    #简单打印结果
    r1 = pd.Series(model.labels_).value_counts()  #统计各类别数目
    r2 = pd.DataFrame(model.cluster_centers_)  #找出聚类中心
    r = pd.concat([r2,r1],axis =1)  #得到聚类中心对应的类别下的数目
    
    r.columns = list(data.columns) + ['类别数目']    #重命名表头
    print(r)

    得到结果如下,显示了每个特征在每个簇下的中心位置。

     

     详细输出原始数据及其类别

    r = pd.concat([data, pd.Series(model.labels_,index =data.index)],axis =1)
    r.columns = list(data.columns) + ['聚类类别']
    

    我们还可以用聚类结果可视化工具——TSNE将数据进行降维并在二维或者三维空间展示出来。

    # 使用TSNE进行数据降维并展示聚类结果
    from sklearn.manifold import TSNE
    tsne = TSNE()
    tsne.fit_transform(data_zs)  # 进行数据降维
    # tsne.embedding_可以获得降维后的数据
    print('tsne.embedding_: \n', tsne.embedding_)
    tsn = pd.DataFrame(tsne.embedding_, index=data.index)  # 转换数据格式
    
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
    
    # 不同类别用不同颜色和样式绘图
    color_style = ['r.', 'go', 'b*']
    for i in range(k):
        d = tsn[r[u'聚类类别'] == i]
        # dataframe格式的数据经过切片之后可以通过d[i]来得到第i列数据
        plt.plot(d[0], d[1], color_style[i], label='聚类' + str(i+1))
    plt.legend()
    plt.show()
    

    结果如下: 

     

    展开全文
  • python 数据挖掘算法

    2022-02-19 17:05:33
    1、首先简述数据挖掘的过程 第一步:数据选择 可以通过业务原始数据、公开...将数据提取特征使这些数据符合特定数据挖掘算法的分析模型。数据模型有很多,等下详细讲解。 第四步:模型训练 选择好的数据挖掘算法...
  • python数据分析基础(一) 该部分将对python数据结构、函数等基础内容进行回顾,python大牛和想要直接套用模板进行数据分析方法的朋友可以直接跳过此部分。 一、基本数据结构-元组和列表 元组和列表是python最...
  • 通过实例给大家分析总结了python数据挖掘以及Json结构分析的相关知识点,对此有兴趣的朋友参考下。
  • Python数据分析与挖掘实战》​ 在当今大数据驱动的时代,要想从事机器学习、人工智能、数据挖掘等前沿技术,离不开数据跟踪与分析,通过NumPy、Pandas等进行数据科学计算,通过Seaborn、Matplotlib等进行数据可视...
  • 第八部分 数据挖掘案例分析87 案例一 A Journey through Titanic 597c770e .87 案例二 Analysis forairplane-crashes-since-190894 案例三 贷款预测问题98 案例四 KNN 算法实现葡萄酒价格模型预测及交叉验证107
  • ---------------------------Python数据分析与挖掘实战(第2版)---------------------------前言基础篇第1章 数据挖掘基础 21.1 某知名连锁餐饮企业的困惑 21.2 从餐饮服务到数据挖掘 41.3 数据挖掘的基本任务 ...
  • Python数据挖掘实例:K均值聚类

    千次阅读 2020-06-10 17:21:31
    Python数据挖掘实例:K均值聚类任务任务要求数据预览分析代码实现结果分析数据文件链接 任务 任务要求 数据文件链接在全文的最后 借助Python软件进行上市公司财务状况数据挖掘与统计分析。 已知:132只股票、32个...
  • 主要包括以下内容: 第一部分 数据挖掘与机器学习数学基础 第二部分 机器学习概述 第三部分 监督学习---分类与回归 第四部分 非监督学习---聚类与关联分析 第五部分 Python 数据预处理 ...第八部分 数据挖掘案例分析
  •   这里使用Python对电影《哪吒之魔童降世》的评论进行文本分析,这种分析方式还可用于垃圾邮件的过滤、新闻的分类等场景。   分析步骤:   1、对文本数据进行预处理,包括文本缺失值重复值处理、分词、去除...
  • 全网最全python实现数据挖掘,数据分析(matlablib,pandas,numpy,量化分析)(附源代码) 个人公众号:yk 坤帝 后台回复数据挖掘1 获取源代码 1.横直方图电影票房 2.散点图3月与10月每天的天气 3.条形图电影...
  • 数据挖掘导论.pdf 2.79M Python数据结构与算法(En).chm 3.34M 用Python进行自然语言处理.... 社交网站的数据挖掘分析.pdf 4.81M [Python系列].BeginningPythonFromNovicetoProfessional 4.28M 希望对大家有帮助~
  • python数据挖掘实战

    2019-01-27 17:10:09
    通过python进行数据挖掘分析,对数据进行分析预测,干货满满
  • 数据挖掘实用案例分析 第6章 银行信用卡欺诈与拖欠行为分析,大数据课程的案例分析课件,作者:复旦大学 赵卫东 博士
  • 数据挖掘-实战记录(一)糖尿病python数据挖掘及其分析
  • 基于python数据挖掘论文,数据挖掘期末论文1、引言对很多培养机构而言,目前急需解决的问题主要有:如何根据不同成员需求设置合理的课程、如何通过教学方式提高成员学习积极性、如何提高成员培训效果、如何通过考核...
  • 我使用的是Anaconda(环境)和Jupyter notebook(编译工具)来进行数据分析。 2.问题的提出和获取数据的基本操作 1)数据导入 ①首先将数据集(data.csv)放到编写python脚本的目录下 ②引入pandas库 import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,356
精华内容 14,942
关键字:

python数据挖掘分析案例