精华内容
下载资源
问答
  • 数据科学网 这是一个将卷积神经网络用于数据挖掘的案例,Python3.7,Pytorch1.7.1,多分类,深度学习 参考链接: :
  • 关于大数据分析的案例,网上诸如啤酒与尿布的例子实在是太多了,但是关于数据挖掘的案例很少会有人关注。本文分享了两个关于数据挖掘的案例,希望能够体现出数据挖掘强大效果之一二。一、数据挖掘预测电影票房2019年...

    关于大数据分析的案例,网上诸如啤酒与尿布的例子实在是太多了,但是关于数据挖掘的案例很少会有人关注。本文分享了两个关于数据挖掘的案例,希望能够体现出数据挖掘强大效果之一二。

    一、数据挖掘预测电影票房

    2019年春节档关注的电影一共有《疯狂外星人》、《流浪地球》、《飞驰人生》、《新喜剧之王》四部,而关于这几部电影的票房,我们的团队在电影上映一周前就做了出了预测:

    1c19d2b4b1b68da5eea6759349cb2cc0.png

    截止到2月12日早上9点,我们再来看一下首周票房对比结果:

    196716253c8bb79a858d3784fe6c34e9.png

    除了《流浪地球》这匹黑马杀出重围之外(挖掘算法也没想到国产科幻电影也有翻身的一天),其他电影的预测结果与实际结果几乎完全吻合!

    那么,我们是怎么用数据挖掘预测电影票房的呢?简而言之思路就是先根据历史票房变化预测出春节档总票房,然后根据各导演、演员制作的历史电影质量、票房情况、SEO情况等预测出各电影票房占比,之后综合预测出各电影的实际票房。

    1、获取数据

    从m1095、票房网、豆瓣网等获取电影票房、质量、属性等数据,如下图:

    04a299007e840b1fbc037fca5ff05c7d.png

    获取数据如下:

    5fb4c5464b707eb85524749445cf7671.png

    影响电影票房的三个重要因素:电影质量、电影宣传力度、档期电影总票房。

    2、用算法工具进行预测

    预测出2019年春节档首周总票房为76亿,预测步骤如下图:

    636b649fb7ab1c61772df6652a0dcadc.png

    3、预测电影质量,从而预测电影在该档期的票房占比

    如何使用历史数据来预测电影质量?对于电影来讲不变的就是那些导演与演员,导演的水平与演员的水平基本决定电影质量从而影响电影票房。

    为了客观衡量导演、演员水平,根据历史电影评分、导演信息、演员信息、票房信息、电影类型信息、评价信息等特征进行组合最终共有74个特征,再结合历史票房数据等通过加权算法分析得到四部电影的票房占比情况,处理后的数据如下:

    2583712bab55e8a566dab62838188848.png

    4、结合SEO、市场响应等优化票房占比

    电影票房还与SEO等相关,我们找寻了百度指数、微信指数、淘票票指数等数据,如下图:

    506ed2bb62319fa15d59e7d41bdee4c5.png

    从历史数据发现这些指数与电影票房呈正相关关系,也就是指数越高票房越高,加入这些指数后,使用算法重新进行预测得到我们最后的票房预测结果如下:

    e5f7ec8b8464cad6af2aef416e8f9a48.png

    二、数据挖掘应用于店铺选址,预测销售额

    某服装品牌是一家大型的品牌服装企业,每年都会在全国开设许多门店,那这店铺的选址怎么做呢?

    一般的做法是组建一个选址团队,到现场进行实地考察,然后根据粗略统计的统计,预测一下这个地方的销售量会怎么样,然后对比分析之后靠经验选择一个地址。但这种方法成本大,效率低,误差大,而且非常仰仗经验。

    为了解决这个问题,服装品牌公司希望能够用更科学的方法优化店铺选址,于是就用到了数据挖掘:

    1、数据处理

    原有的数据包括店铺基础数据以及旧店铺的历史销售数据,项目团队首先对这些已有的数据进行格式化统一,然后收集了原始数据没有的人流量、消费水平、消费时尚等数据,将获取的数据根据业务与后续算法实施来进行预处理,比如异常值删除、缺失值填补、数据标准化等处理。

    如下图,是使用lof算法进行异常值筛选的过程:

    75308864a798815fa883079bbb3f9283.png

    2、特征工程与模型构建

    所谓特征工程就是与预测结果相关的特征(指标)组合,也就是与新店铺相关的销售额特征组合。

    该项目的原始数据加上结合业务知识生成的组合特征与leakage特征,构建的特征工程共计80余个,通过CFS、MRMR、MBF等方法综合分析,去除相关性权重不高的特征,最终剩余40余个。

    然后建立算法模型,适合该项目的算法有决策树、随机森林、回归、XGBOST等。最后通过模型准确率以及模型与业务的契合度对比,选择了随机森林作为模型算法。

    3、模型优化

    模型优化主要是在找到模型可改进的地方之后所做的事情,比如模型算法的参数调整、特征工程调整等。该项目中模型优化过程除了参数调整,主要就是依据业务,进行特征工程的调整以及数据清洗。比如业务研究过程中发现新的相关特征,需要将其加入特征工程。

    4、得出结果

    在该项目中,将特征与销售额的相关性用权重来表示,权重越高表示该特征与销售额的相关性越强,权重结果如下:

    ad27f290fba3b2827c694642b2e46865.png

    利用建立的模型预测出某个新店铺一年的销售额,预测如下:

    a46cc9dc27b8e51cb6f81f975d02bb05.png

    5、误差分析

    预测的结果究竟准确不准确呢?团队将新店铺销售额拿来与人为预测销售额、实际销售额做了个误差分析,以此来衡量店铺销量预测误差。如下图所示,人为预测月平均误差为8.08万,算法预测月平均误差为1.478万,人为预测误差大概为算法预测误差6倍。算法预测最小误差仅300元,预测精度最高为99.7%!

    0f3136b162d144207eaf5d4ce184ce7d.png

    文章来源于知乎,版权归作者所有。

    原文链接:

    https://www.zhihu.com/question/21409399/answer/667496388

    ·END·

    见微知著,数析万象!请扫码联系我们

    daa4d3ae541e5446e4d6c754172bb548.png往期内容推荐:
    • 4个步骤,用聚类分析法实现用户分析!
    • 机器学习算法:6种常用的经典方法
    • 10分钟快速搞懂RFM用户分析模型
    展开全文
  • 数据挖掘案例

    千次阅读 2020-07-01 17:41:46
    数据挖掘的入门案例总结

    数据挖掘步骤

    一 、数据取样:

    对数据进行精选,以保证数据的科学性、有效性、均衡性等。
    二、数据探索与预处理:

    对数据的特征进行探索,对数据进行清洗(去除错误数据、去除噪声、填补缺失值等过程),特征提取,降维等操作,数量、异常值、缺失值等。对数据进行标准化。
    三、模式发现:

    发现问题是属于哪一类,选取合适的数据挖掘方法。
    四、构建模型:

    将经过预处理之后的可用数据代入模型进行数据挖掘。
    五、模型评价:

    对构建的模型进行评价(不同类别的模型评价方法可能不同),若效果不理想,则进一步调整模型。

    为什么选择这个案例?

    1.辅助媒体产出奥运会相关文案

    数据记录了120年的奥运会参赛国家、人员以及成绩等相关信息,案例主要从运动员身高与体重的角度进行分析, 总览奥运会发展的历史过程。分析结果可帮助媒体行业向用户更直观展示奥运会的发展过程,拉动用户兴趣,增加活跃度。
    2.把实际问题转化为数学模型,达到学以致用的目的。

    一 、数据取样

    数据集包括从1896年雅典奥运会到2016年里约奥运会的所有比赛,数据源下载地址:https://www.juhe.cn/market/product?id=10246
    下载完成有两个文件:athlete_events.csv以及noc_regions.csv,下面是数据概览,如果直接想要数据集的可以在下方留言。
    (1) athlete_events.csv文件: 记录着运动员赛事(运动员的名字,参加的比赛,体重等等) 文件说明: 该文件包含271116行和15列;每行对应一个运动员参加单个奥林匹克项目(运动员项目)的情况。
    ID--------每个运动员的唯一编号;
    Name------运动员的名字;
    Sex-------M or F;
    Age-------岁数(整数);
    Height----身高(厘米);
    Weight----重量(千克);
    Team------所属团队名称;
    NOC-------国家奥委会三字母代码3-letter code;
    Games-----哪一年哪个季节的项目;
    Year------年份(整数);
    Season----夏季或冬季;
    City------主办城市;
    Sport-----体育活动;
    Event-----事件(项目名);
    Meda1-----金,银,铜或NA;

    (2)noc_regions.csv 文件:记录着国家奥委会地区信息(National Olympic Committee,缩写为NOC)

    导入相关的库

    import numpy as np
    import pandas as pd
    import seaborn as sns
    from matplotlib import pyplot as plt
    import os 
    

    读取文件,获取数据集

    dirpath = 'E:\Jupyter\A\B'
    data = pd.read_csv(os.path.join(dirpath, 'athlete_events.csv'))
    regions = pd.read_csv(os.path.join(dirpath, 'noc_regions.csv'))
    #通过已知信息,我们发现文件1和文件2的NOC字段相同,采用左连接将两个文件连接起来
    merged = pd.merge(data, regions, on='NOC', how='left')
    

    打印前五行数据

    # 过滤出金牌数据
    goldMedals = merged[(merged.Medal == 'Gold')]
    #打印出前五行数据
    goldMedals.head()
    

    在这里插入图片描述

    二、数据探索与预处理

    检查年龄是否有NaN

    goldMedals.isnull().any()
    

    在这里插入图片描述
    #显示数据的基本信息

    goldMedals.info()
    

    在这里插入图片描述
    #过滤出非空的值

    notNullMedals = goldMedals[(goldMedals['Height'].notnull()) & (goldMedals['Weight'].notnull())]
    #再查看一下非空数据的信息 
    notNullMedals.head()
    

    在这里插入图片描述
    #pandas的describe可以用来展示数据的一些描述性统计信息

    notNullMedals.describe()
    

    在这里插入图片描述

    三、模式发现

    选择线性回归算法, 人的身高和体重是两种相关性的量,可以用回归分析来分析。

    通过seaborn可视化快速简便地探索数据集

    plt.subplots(figsize=(10, 6))
    plt.xlabel('Height', fontsize=12)
    plt.ylabel('Weight', fontsize=12)
    plt.title('Height and Weight')
    # 绘制数据并拟合出数据的线性回归模型
    sns.regplot(x='Height', y='Weight', data=notNullMedals,ci=None)
    #默认参数ci=95,置信度(指的是发生事件A的基础上发生事件B的概率,即条件概率)为0.95的置信区间,此处数据过多,设为None线性回归拟合。
    

    在这里插入图片描述
    特殊值数据
    箱型图

    plt.figure(figsize=(20,10))
    plt.tight_layout() # 紧凑型布局,图更干净好看
    sns.boxplot('Height', 'Weight', data=notNullMedals)
    plt.rcParams['font.sans-serif'] = ['SimHei']#添加中文字体支持
    plt.rcParams['axes.unicode_minus'] = False  #添加中文字体支持
    plt.xticks(rotation=90)
    plt.title('金牌运动员身高体重关系')
    

    在这里插入图片描述
    我们发现,基本在回归线上,但是有一些是比较异常的,下面查看体重大于120公斤的参加的是什么项目

    notNullMedals.loc[notNullMedals['Weight'] > 120]
    

    在这里插入图片描述
    查询可知,主要包括了以下三种运动项目,举重项目对体重的要求确实要高,不同级别的体重只能参加不同级别的赛事
    Athletics 竞技;田径运动
    Weightlifting 举重
    Judo 柔道

    男女分类,比较男性和女性的身高体重关系还是有区别的。

    Men_Medals   = notNullMedals[(notNullMedals.Sex == 'M')]
    Women_Medals = notNullMedals[(notNullMedals.Sex == 'F')]
    Men_Medals.info()#男金牌运动员信息
    Women_Medals.info()#女金牌运动员信息
    

    四、构建模型

    采用线性模型,为什么不采用逻辑回归?
    线性回归要求因变量必须是连续性数据变量;逻辑回归要求因变量必须是分类变量,二分类或者多分类的;比如要分析性别、年龄、身高、饮食习惯对于体重的影响,如果这个体重是属于实际的重量,是连续性的数据变量,这个时候就用线性回归来做;如果将体重分类,分成了高、中、低这三种体重类型作为因变量,则采用logistic回归。

    下面按照男运动员和女运动员来分析
    分训练集和测试集,train_x,train_y为训练集,test_x和test_y 为测试集

    男运动员

    #utils模块的shuffle方法打乱数集
    import sklearn.utils as su 
    
    x = Men_Medals['Height']
    y = Men_Medals['Weight']
    
    #打乱原始数据集的输入和输出
    #random_state随机种子,下次random_state=7生成的打乱顺序一样
    x,y = su.shuffle(x,y,random_state=7)
    train_size = int (len(x)*0.8)#8/2
    train_x,test_x,train_y,test_y = x[:train_size],x[train_size:],y[:train_size],y[train_size:]
    print(train_x.shape, train_y.shape)#查看数组的维数
    print(test_x.shape, test_y.shape)#查看数组的维数
    
    
    #划分测试集和训练集
    train_x = train_x.values.reshape(-1, 1)
    train_y = train_y.values.reshape(-1, 1)
    test_x  = test_x.values.reshape(-1, 1)
    test_y  = test_y.values.reshape(-1, 1)
    
    
    
    #导入线性回归模块
    import sklearn.linear_model as lm
    
    # 创建模型----线性回归
    model = lm.LinearRegression() 
    # 训练模型
    model.fit(train_x, train_y)
    # 根据输入预测输出
    pred_y = model.predict(test_x)
    #评估训练结果误差(metrics)
    import sklearn.metrics as sm
    
    # 平均绝对值误差:1/m∑|实际输出-预测输出|
    print('平均绝对值误差:',sm.mean_absolute_error(test_y, pred_y))
    
    # 中位绝对值误差:MEDIAN(|实际输出-预测输出|)
    print('中位绝对值误差:',sm.median_absolute_error(test_y, pred_y))
    
    # R2得分,(0,1]区间的分值。分数越高,误差越小。
    print('R2得分:        ',sm.r2_score(test_y, pred_y))
    

    在这里插入图片描述
    可视化

    #可视化
    plt.figure('Linear Regression', facecolor='lightgray')
    plt.title('Linear Regression', fontsize=20)
    plt.xlabel('Height', fontsize=14)
    plt.ylabel('Weight', fontsize=14)
    plt.tick_params(labelsize=10)
    plt.grid(linestyle=':')
    plt.scatter(train_x, train_y, marker='s', c='dodgerblue', alpha=0.5, s=80, label='Training')#训练集,正方形
    plt.scatter(test_x, test_y, marker='D', c='orangered', alpha=0.5, s=60, label='Testing')#测试集,钻石
    plt.scatter(test_x, pred_y, c='orangered',alpha=0.5, s=80, label='Predicted')#预测,s参数代表的是形状的大小
    plt.plot(test_x, pred_y, '--', c='limegreen', label='Regression', linewidth=1)
    plt.legend()
    plt.show()
    

    在这里插入图片描述

    #可视化----测试值和真实值 
    plt.scatter(test_y, pred_y)
    plt.xlabel('True')
    plt.ylabel('Predictions')
    

    在这里插入图片描述
    女金牌运动员过程同上,此处不再赘述,下面再统一放上代码

    因为是在jupyter notebook进行的编程,所以导出的py文件有相应的行号。

    
    # ### 导入相关的库
    
    # In[1]:
    
    
    import numpy as np
    import pandas as pd
    import seaborn as sns
    from matplotlib import pyplot as plt
    import os 
    
    
    # ### 读取文件,获取数据集
    
    # In[2]:
    
    
    dirpath = 'E:\Jupyter\A\B'
    data = pd.read_csv(os.path.join(dirpath, 'athlete_events.csv'))
    regions = pd.read_csv(os.path.join(dirpath, 'noc_regions.csv'))
    
    
    # In[3]:
    
    
    #通过已知信息,我们发现文件1和文件2的NOC字段相同,采用左连接将两个文件连接起来
    merged = pd.merge(data, regions, on='NOC', how='left')
    
    
    # In[4]:
    
    
    # 过滤出金牌数据
    goldMedals = merged[(merged.Medal == 'Gold')]
    #打印出前五行数据
    goldMedals.head()
    
    
    # 下面进行预处理操作
    # 
    
    # ## 二、数据探索与预处理
    
    # In[5]:
    
    
    # 检查年龄是否有NaN
    goldMedals.isnull().any()
    
    
    # In[6]:
    
    
    #显示数据的基本信息
    goldMedals.info()
    
    
    # In[7]:
    
    
    #过滤出非空的值
    notNullMedals = goldMedals[(goldMedals['Height'].notnull()) & (goldMedals['Weight'].notnull())]
    
    
    # In[8]:
    
    
    #再查看一下非空数据的信息
    notNullMedals.head()
    
    
    # In[9]:
    
    
    #pandas的describe可以用来展示数据的一些描述性统计信息
    notNullMedals.describe()
    
    
    # # 三、模式发现  
    # 
    # 选择线性回归算法, 人的身高和体重是两种相关性的量,可以用回归分析来分析   
    
    # ### 通过seaborn可视化快速简便地探索数据集
    
    # In[10]:
    
    
    plt.subplots(figsize=(10, 6))
    plt.xlabel('Height', fontsize=12)
    plt.ylabel('Weight', fontsize=12)
    plt.title('Height and Weight')
    # 绘制数据并拟合出数据的线性回归模型
    sns.regplot(x='Height', y='Weight', data=notNullMedals,ci=None)
    #默认参数ci=95,置信度(指的是发生事件A的基础上发生事件B的概率,即条件概率)为0.95的置信区间,此处数据过多,设为None线性回归拟合。
    
    
    # ### 特殊值数据
    
    # 我们发现,基本在回归线上,但是有一些是比较异常的,下面查看体重大于120公斤的参加的是什么项目
    
    # In[11]:
    
    
    plt.figure(figsize=(20,10))
    plt.tight_layout() # 紧凑型布局,图更干净好看
    sns.boxplot('Height', 'Weight', data=notNullMedals)
    plt.rcParams['font.sans-serif'] = ['SimHei']#添加中文字体支持
    plt.rcParams['axes.unicode_minus'] = False  #添加中文字体支持
    plt.xticks(rotation=90)
    plt.title('金牌运动员身高体重关系')
    
    
    # In[12]:
    
    
    notNullMedals.loc[notNullMedals['Weight'] > 120]
    
    
    # 查询可知,主要包括了以下三种运动项目,举重项目对体重的要求确实要高,不同级别的体重只能参加不同级别的赛事  
    # Athletics 竞技;田径运动  
    # Weightlifting 举重  
    # Judo 柔道  
    
    # ###  男女分类
    # 
    
    # In[13]:
    
    
    Men_Medals   = notNullMedals[(notNullMedals.Sex == 'M')]
    Women_Medals = notNullMedals[(notNullMedals.Sex == 'F')]
    
    
    # In[14]:
    
    
    Men_Medals.info()#男金牌运动员信息
    
    
    # In[15]:
    
    
    Women_Medals.info()#女金牌运动员信息
    
    
    #  
    
    # # 四、构建模型
    # 
    # ## 线性模型
    # 为什么不采用逻辑回归?  
    # 线性回归要求因变量必须是连续性数据变量;逻辑回归要求因变量必须是分类变量,二分类或者多分类的;比如要分析性别、年龄、身高、饮食习惯对于体重的影响,如果这个体重是属于实际的重量,是连续性的数据变量,这个时候就用线性回归来做;如果将体重分类,分成了高、中、低这三种体重类型作为因变量,则采用logistic回归。
    
    # # 五、模型评估
    # #### 按比例划分样本集
    # 在K-Folds交叉验证中,我们将数据分割成k个不同的子集。我们使用第k-1个子集来训练数据,并留下最后一个子集作为测试数据。接下来结束模型之后,我们对测试集进行测试。
    # 
    #  
    # #### 下面按照男运动员和女运动员来分析
    # 
    # 分训练集和测试集  
    # train_x,train_y为训练集,test_x和test_y 为测试集
    # 
    
    # #### 1  男运动员
    
    # In[16]:
    
    
    #utils模块的shuffle方法打乱数集
    import sklearn.utils as su 
    
    x = Men_Medals['Height']
    y = Men_Medals['Weight']
    
    #打乱原始数据集的输入和输出
    #random_state随机种子,下次random_state=7生成的打乱顺序一样
    x,y = su.shuffle(x,y,random_state=7)
    train_size = int (len(x)*0.8)#8/2
    train_x,test_x,train_y,test_y = x[:train_size],x[train_size:],y[:train_size],y[train_size:]
    print(train_x.shape, train_y.shape)#查看数组的维数
    print(test_x.shape, test_y.shape)#查看数组的维数
    
    
    # In[17]:
    
    
    #划分测试集和训练集
    train_x = train_x.values.reshape(-1, 1)
    train_y = train_y.values.reshape(-1, 1)
    test_x  = test_x.values.reshape(-1, 1)
    test_y  = test_y.values.reshape(-1, 1)
    
    
    # In[18]:
    
    
    #导入线性回归模块
    import sklearn.linear_model as lm
    
    # 创建模型----线性回归
    model = lm.LinearRegression() 
    # 训练模型
    model.fit(train_x, train_y)
    # 根据输入预测输出
    pred_y = model.predict(test_x)
    
    
    # #模型评估,准确度
    # print('男金牌运动员Score:',model.score(test_x,test_y))
    
    
    # In[19]:
    
    
    #评估训练结果误差(metrics)
    import sklearn.metrics as sm
    
    # 平均绝对值误差:1/m∑|实际输出-预测输出|
    print('平均绝对值误差:',sm.mean_absolute_error(test_y, pred_y))
    
    # 中位绝对值误差:MEDIAN(|实际输出-预测输出|)
    print('中位绝对值误差:',sm.median_absolute_error(test_y, pred_y))
    
    # R2得分,(0,1]区间的分值。分数越高,误差越小。
    print('R2得分:        ',sm.r2_score(test_y, pred_y))
    
    
    # In[20]:
    
    
    #可视化
    plt.figure('Linear Regression', facecolor='lightgray')
    plt.title('Linear Regression', fontsize=20)
    plt.xlabel('Height', fontsize=14)
    plt.ylabel('Weight', fontsize=14)
    plt.tick_params(labelsize=10)
    plt.grid(linestyle=':')
    plt.scatter(train_x, train_y, marker='s', c='dodgerblue', alpha=0.5, s=80, label='Training')#训练集
    plt.scatter(test_x, test_y, marker='D', c='orangered', alpha=0.5, s=60, label='Testing')#测试集
    plt.scatter(test_x, pred_y, c='orangered',alpha=0.5, s=80, label='Predicted')#预测
    plt.plot(test_x, pred_y, '--', c='limegreen', label='Regression', linewidth=1)
    plt.legend()
    plt.show()
    
    
    # In[21]:
    
    
    #可视化----测试值和真实值 
    plt.scatter(test_y, pred_y)
    plt.xlabel('True')
    plt.ylabel('Predictions')
    
    
    # #### 2 女金牌运动员
    # 过程同上
    
    # In[22]:
    
    
    #utils模块的shuffle方法打乱数集
    import sklearn.utils as su 
    
    x = Women_Medals['Height']
    y = Women_Medals['Weight']
    
    #打乱原始数据集的输入和输出
    #random_state随机种子,下次random_state=7生成的打乱顺序一样
    x,y = su.shuffle(x,y,random_state=7)
    train_size = int (len(x)*0.8)#8/2
    train_x,test_x,train_y,test_y = x[:train_size],x[train_size:],y[:train_size],y[train_size:]
    print(train_x.shape, train_y.shape)#查看数组的维数
    print(test_x.shape, test_y.shape)#查看数组的维数
    
    
    # In[23]:
    
    
    #划分测试集和训练集
    train_x = train_x.values.reshape(-1, 1)
    train_y = train_y.values.reshape(-1, 1)
    test_x  = test_x.values.reshape(-1, 1)
    test_y  = test_y.values.reshape(-1, 1)
    
    
    # In[24]:
    
    
    #导入线性回归模块
    import sklearn.linear_model as lm
    # 创建模型----线性回归
    model = lm.LinearRegression() 
    # 训练模型
    model.fit(train_x, train_y)
    # 根据输入预测输出
    pred_y = model.predict(test_x)
    
    
    # In[25]:
    
    
    import sklearn.metrics as sm#评估训练结果误差(metrics)
    
    # 平均绝对值误差:1/m∑|实际输出-预测输出|
    print('平均绝对值误差:',sm.mean_absolute_error(test_y, pred_y))
    
    # 中位绝对值误差:MEDIAN(|实际输出-预测输出|)
    print('中位绝对值误差:',sm.median_absolute_error(test_y, pred_y))
    
    # R2得分,(0,1]区间的分值。分数越高,误差越小。
    print('R2得分:        ',sm.r2_score(test_y, pred_y))
    
    
    # In[26]:
    
    
    #可视化
    plt.figure('Linear Regression', facecolor='lightgray')
    plt.title('Linear Regression', fontsize=20)
    plt.xlabel('Height', fontsize=14)
    plt.ylabel('Weight', fontsize=14)
    plt.tick_params(labelsize=10)
    plt.grid(linestyle=':')
    plt.scatter(train_x, train_y, marker='s', c='dodgerblue', alpha=0.5, s=80, label='Training')#训练集
    plt.scatter(test_x, test_y, marker='D', c='orangered', alpha=0.5, s=60, label='Testing')#测试集
    plt.scatter(test_x, pred_y, c='orangered',alpha=0.5, s=80, label='Predicted')#预测
    plt.plot(test_x, pred_y, '--', c='limegreen', label='Regression', linewidth=1)
    plt.legend()
    plt.show()
    
    
    # In[27]:
    
    
    #可视化----测试值和真实值 
    plt.scatter(test_y, pred_y)
    plt.xlabel('True')
    plt.ylabel('Predictions')
    
    
    # ###  sklearn.model_selection 的train_test_split方便操作
    # 更改训练集和测试集的比例
    # 
    
    # In[28]:
    
    
    # Necessary imports: 
    from sklearn.model_selection import train_test_split #分割测试集
    # from sklearn.model_selection import cross_val_predict#预测
    # from sklearn.model_selection import cross_val_score#准确度
    
    
    # In[29]:
    
    
    #utils模块的shuffle方法打乱数集
    import sklearn.utils as su 
    
    
    x1 = Men_Medals['Height'][:6730].values.reshape(-1, 1)# 本来有6731个数据,删去最后一个数据,使得能够7:3比例分割
    y1 = Men_Medals['Weight'][:6730].values.reshape(-1, 1)
    x2 = Women_Medals['Height'][:6730].values.reshape(-1, 1)
    y2 = Women_Medals['Weight'][:6730].values.reshape(-1, 1)
    
    
    #打乱原始数据集的输入和输出
    #random_state随机种子,下次random_state=7生成的打乱顺序一样
    x1,y1 = su.shuffle(x1,y1,random_state=7)
    x2,y2 = su.shuffle(x2,y2,random_state=7)
    
    
    # In[30]:
    
    
    #导入线性回归模块
    import sklearn.linear_model as lm
    
    
    # 9:1比例划分测试集和训练集
    train_x, test_x, train_y, test_y = train_test_split(x1, y1, test_size=0.1)
    print(train_x.shape, train_y.shape)#查看数组的维数
    print(test_x.shape, test_y.shape)
    
    
    # 创建模型----线性回归
    model = lm.LinearRegression() 
    # 训练模型
    model.fit(train_x, train_y)
    # 根据输入预测输出
    pred_y = model.predict(test_x)
    
    
    
    # In[31]:
    
    
    #评估训练结果误差(metrics)
    import sklearn.metrics as sm
    
    # 平均绝对值误差:1/m∑|实际输出-预测输出|
    print('平均绝对值误差:',sm.mean_absolute_error(test_y, pred_y))
    
    # 中位绝对值误差:MEDIAN(|实际输出-预测输出|)
    print('中位绝对值误差:',sm.median_absolute_error(test_y, pred_y))
    
    # R2得分,(0,1]区间的分值。分数越高,误差越小。
    print('R2得分:        ',sm.r2_score(test_y, pred_y))
    
    
    # In[32]:
    
    
    #可视化----测试值和真实值 
    plt.scatter(test_y, pred_y)
    plt.xlabel('True')
    plt.ylabel('Predictions')
    
    
    # 女金牌运动员
    
    # In[33]:
    
    
    #导入线性回归模块
    import sklearn.linear_model as lm
    
    
    # 9:1比例划分测试集和训练集
    train_x, test_x, train_y, test_y = train_test_split(x2, y2, test_size=0.1)
    print(train_x.shape, train_y.shape)#查看数组的维数
    print(test_x.shape, test_y.shape)
    
    
    # 创建模型----线性回归
    model = lm.LinearRegression() 
    # 训练模型
    model.fit(train_x, train_y)
    # 根据输入预测输出
    pred_y = model.predict(test_x)
    
    
    # In[34]:
    
    
    #评估训练结果误差(metrics)
    import sklearn.metrics as sm
    
    # 平均绝对值误差:1/m∑|实际输出-预测输出|
    print('平均绝对值误差:',sm.mean_absolute_error(test_y, pred_y))
    
    # 中位绝对值误差:MEDIAN(|实际输出-预测输出|)
    print('中位绝对值误差:',sm.median_absolute_error(test_y, pred_y))
    
    # R2得分,(0,1]区间的分值。分数越高,误差越小。
    print('R2得分:        ',sm.r2_score(test_y, pred_y))
    
    
    # In[35]:
    
    
    #可视化----测试值和真实值 
    plt.scatter(test_y, pred_y)
    plt.xlabel('True')
    plt.ylabel('Predictions')
    
    

    总结

    我们发现,经过调整训练集和测试集的比例,可以提高预测的概率。
    8:2比例划分的时候,男女运动员预测准确率分别为:

    平均绝对值误差 : 6.468241160875661
    中位绝对值误差 : 4.987672129090541
    男金牌运动员R2得分 : 0.5415336138589381

    平均绝对值误差 : 5.263819850060556
    中位绝对值误差 : 3.919112100002536
    女金牌运动员R2得分: 0.5042538766701146
    采用9:1划分比例划分,男女运动员预测准确率变为:

    平均绝对值误差 : 6.409984653111301
    中位绝对值误差 : 5.05029332334918
    男金牌运动员R2得分 : 0.6118971581875867

    平均绝对值误差 : 5.035672223424354
    中位绝对值误差 : 3.5369478461228
    女金牌运动员R2得分 : 0.5416717045293267


    但是,可以优化的地方还有很多,比如把体重超标的异常值和太轻的没有去掉,比赛类型的不同影响情况也不一样,还可以对数据进行标准化等,数据集还有其他的属性没有用到,大家也可以自行进行挖掘,本文仅仅是对数据挖掘的进行入门的基本学习,难免有很多不足的地方,还请各位见谅,今天是7月1号,也是香港回归23周年,2020太不平凡,大事小事,大家都辛苦了,祝祖国国泰民安。

    展开全文
  • 作者:Nature出品:AI机器思维“从数据处理基础扎实练习是数据分析与数据挖掘的第一步”做一道好菜需要食材,好的食材需要经过优质的萃取提炼。食材的提炼过程包括选型、运输保鲜、加工清洗、按要求切菜等才能按菜谱...

    ed8cc99d3584573839da5bed8702b0ed.gif

    4eb81b8e5e43a535d03e19f239c2320f.png

    作者:Nature

    出品:AI机器思维

    从数据处理基础扎实练习是数据分析与数据挖掘的第一步

    做一道好菜需要食材,好的食材需要经过优质的萃取提炼。食材的提炼过程包括选型、运输保鲜、加工清洗、按要求切菜等才能按菜谱进行真正的做出一道口感美味的菜。大数据时代数据分析与数据挖掘关键的一步在处理食材,这里的各类数据就是我们的食材,选择优质的数据,经过深加工清洗,去伪纯真这个过程需要耗费很长时间,也需要更多的实践经验。根据多年经验,要想运用好数据,首先要研究学习对各种类型的数据进行处理(如各类数据库数据、EXCEL数据、TXT数据、DAT数据等等)。无论用那种语言做数据分析与数据挖掘,首先得有数据食材,对于数据分析与数据挖掘工具只是帮助我们更好的做出一道好菜,正如开车,那种车都能到达目的地,技术不同效率不同,安全系数也不同。数据分析与数据挖掘的工具目前主流的是SAS、python、R等。这些数据分析挖掘工具能对海量的数据进行处理分析与挖掘。业界中用到的数据量都超过GB级别,研究数据处理,学好数据处理是万里长征第一步,也是学习数据分析与数据挖掘的核心。练习基本功需要耐心和毅力,也需要学习方式。建议学习方式如下:○对各类数据每一种类型的数据处理根据案例学习并总结数据处理经验。○对数据处理生成能够被数据分析与数据挖掘工具的数据集进行二次加工处理,需要理解业务衍生业务数据指标,这是一个深加工的过程。根据数据分析和数据挖掘目标找几个案例真正落实,多加练习。○数据分析与数据挖掘的过程就是运用工具中已经内置好的数据分析工具以及函数包的过程,这个过程只是占了整个数据分析与数据挖掘的百分之三十的工作量,大部分时间都是在做数据处理的清洗工作。○数据分析报告可以研习案例写作,数据挖掘结果分析根据研习的案例学习。数据分析与数据挖掘真正上手的方式就是加大案例学习与实践,跟着案例手把手练习,才能真正掌握数据分析与数据挖掘的真谛。案例如下面是零售客户数据,文件名buy.txt,目前存放在我的个人文件夹    E:/testdata/buy.txt

    f63dda2ddb3ee61cda8896f9d7a42cef.png

    数据说明:数据中每列为面包、牛奶、奶酪、苹果和香蕉对此类数据研究客户交叉销售,根据客户购买行为判断客户在买其中一种食物时会购买那类食物,这样把客户可能购买概率最高的放在货架上相同的位置。因此处理数据是核心环节:下面是python3.7版本下数据处理程序,数据文件以”|”分割,处理数据时程序指明了分隔符。这里的x=np.loadtxt(dataset_filename,delimiter='|')语句中delimiter=’|’指明了数据以|分割,默认是以空格,如果以空格就需要这个参数了。
    importtnumpyas np
    dataset_filename=
    "E:/testdata/buy.txt"x=np.loadtxt(dataset_filename,delimiter='|')print(x[:6])
    查看数据处理的数据如下:

    3d2d949ca182f950f28d6c4c916b6625.png

    输出结果从横向和纵向看都可以,横着看,每次只看一行。第一行(0, 0, 0, 1,1)表示 第一条交易数据所包含的商品。竖着看,每一列代表一种商品。在我们这个例子中,这五种商品分别是面包、牛奶、奶酪、苹果和香蕉。从第一条交易数据中,我们可以看到顾客购买了苹果和香蕉,但是没有买面包、牛奶和奶酪。每个特征只有两个可能的值,1或0,表示是否购买了某种商品,而不是购买商品的数量。1 表示顾客至少买了该商品,0表示顾客没有买该种商品。我们要找出“如果顾客购买了商品X,那么他们可能愿意购买商品Y”这样 的规则。简单粗暴的做法是,找出数据集中所有同时购买的两件商品。找出规则后,还需要判断其优劣,我们挑好的规则用。规则的优劣有多种衡量方法,常用的是支持度(support)和置信度(confidence)。 支持度指数据集中规则应验的次数,统计起来很简单。有时候,还需要对支持度进行规范化,即再除以规则有效前提下的总数量。我们这里只是简单统计规则应验的次数。支持度衡量的是给定规则应验的比例,而置信度衡量的则是规则准确率如何,即符合给定条件(即规则的“如果”语句所表示的前提条件)的所有规则里,跟当前规则结论一致的比例有多大。计算方法为首先统计当前规则的出现次数,再用它来除以条件(“如果”语句)相同的规则数量。 接下来,通过一个例子来说明支持度和置信度的计算方法,我们看一下怎么求“如果顾客购买了苹果,他们也会购买香蕉”这条规则的支持度和置信度。如下面的代码所示,通过判断交易数据中sample[3]的值,就能知道一个顾客是否买了苹果。 这里,sample表示一条交易信息,也就是数据集里的一行数据。
    num_apple_purchases=0for sample in x:if sample[3]==1:
            num_apple_purchases+=
    1print("{0}people bought apples".format(num_apple_purchases))
    下面是程序执行后统计购买苹果的结果:

    fd2611fb078b2f744160a1ab94b74293.png

    同理,检测sample[4]的值是否为1,就能确定顾客有没有买香蕉。现在可以计算题目给定规则在数据集中的出现次数,从而计算置信度和支持度。 我们需要统计数据集中所有规则的相关数据。首先分别为规则应验和规则无效这两种情况创 建字典。字典的键是由条件和结论组成的元组,元组元素为特征在特征列表中的索引值,不要用 实际特征名,比如“如果顾客购买了苹果,他们也会买香蕉”就用(3, 4)表示。如果某个个体的条件和结论均与给定规则相符,就表示给定规则对该个体适用,否则如果通过给定条件推出的结论与给定规则的结论不符,则表示给定规则对该个体无效。 为了计算所有规则的置信度和支持度,首先创建几个字典,用来存放计算结果。这里使用defaultdict,好处是如果查找的键不存在,返回一个默认值。附件:以空格分隔数据案例,整个程序源代码,数据可以自己多创造几条,如需要数据文件请留言,跟着案例学习可以更好的体验应用价值,提供学习兴趣:

    624ec871f825cdd57a052a7849568f53.png

    运行结果如下:

    32203a95f2d2f37242492cb4c2f0c58b.png

    从排序结果来看,“顾客买苹果,也会买奶酪”和“顾客买奶酪,也会买香蕉”,这两条规 则的支持度和置信度都很高。超市可以根据这些规则来调整商品摆放位置。例如如果苹果促销,就在旁边摆上奶酪。但是香蕉和奶酪同时搞促销就没有多大意义了,因为我们发现购买奶酪的顾客中,接近66%的人即使不搞促销也会买香蕉——即使搞促销,也不会给销量带来多大提升。 从上面这个例子就能看出从海量的数据中进行数据挖掘的洞察力有多强大,帮助我们发现数据背后的信息提升决策依据,指导经营提升营收。人们可以用数据挖掘技术探索数据集中各变量之间的关系,寻找商业价值,商品组合价值,营销价值等。学好数据挖掘,数据处理是关键,其他就是引用统计学的方法以及机器学习的算法等!

    ——往期精彩——

    额度授予模型

    开启数据挖掘之旅——以Python应用案例讲解(NO1)

    信用风险评分卡研究(1)

    品玩SAS:电商平台销售数据分析——以英国电商平台为例

    P2P网贷用户数据分析——以拍拍贷为例

    a57bd288983c8a274325837259dcdeee.png

    如果您觉得文章不错,请点击右下角的在看支持我们!

    展开全文
  • icrosoft 数据分析与数据挖掘 实战案例 杨大川 dyangminesage 讲师简介 杨大川-迈思奇科技有限公司CT0 微软MP.2019(最有价值专家) 曾任美国硅谷 Annuncio公司首席工程师 招商迪辰产品研发部总经理 现兼任中科院客座...
  • 在这个案例开始之前,希望大家回忆一下大学里讲过线性回归知识,这是数据挖掘里非常重要一部分知识。当然,鉴于大家都学过,本篇就不再赘述。一.数据集介绍diabetesdataset数据集这是一个糖尿病数据集,主要...

    今天给大家讲解一个实战案例:如何根据现有数据预测糖尿病。在这个案例开始之前,希望大家回忆一下大学里讲过的线性回归的知识,这是数据挖掘里非常重要的一部分知识。当然,鉴于大家都学过,本篇就不再赘述。

    一.数据集介绍diabetesdataset数据集

    这是一个糖尿病的数据集,主要包括442行数据,10个属性值,分别是:Age(年龄)、性别(Sex)、Bodymassindex(体质指数)、AverageBloodPressure(平均血压)、S1~S6一年后疾病级数指标。Target为一年后患疾病的定量指标。

    输出如下所示:

    二、LinearRegression使用方法

    LinearRegression模型在Sklearn.linear_model下,它主要是通过fit(x,y)的方法来训练模型,其中x为数据的属性,y为所属类型。

    sklearn中引用回归模型的代码如下:

    输出的函数原型如下所示:

    fit(x,y):训练。分析模型参数,填充数据集。其中x为特征,y位标记或类属性。

    predict():预测。它通过fit()算出的模型参数构成的模型,对解释变量进行预测其类属性。预测方法将返回预测值y_pred。

    引用搬砖小工053″大神的例子:

    运行结果如下所示,首先输出数据集,同时调用sklearn包中的LinearRegression()回归函数,fit(X,Y)载入数据集进行训练,然后通过predict()预测数据12尺寸的匹萨价格,最后定义X2数组,预测它的价格。

    输出的图形如下所示:

    线性模型的回归系数W会保存在他的coef_方法中,截距保存在intercept_中。score(X,y,sample_weight=None)评分函数,返回一个小于1的得分,可能会小于0。

    三、线性回归判断糖尿病

    1.Diabetes数据集(糖尿病数据集)

    糖尿病数据集包含442个患者的10个生理特征(年龄,性别、体重、血压)和一年以后疾病级数指标。

    然后载入数据,同时将diabetes糖尿病数据集分为测试数据和训练数据,其中测试数据为最后20行,训练数据从0到-20行(不包含最后20行),即diabetes.data[:-20]。

    输出结果如下所示,可以看到442个数据划分为422行进行训练回归模型,20行数据用于预测。输出的diabetes_x_test共20行数据,每行仅一个特征。

    2.完整代码

    改代码的任务是从生理特征预测疾病级数,但仅获取了一维特征,即一元线性回归。【线性回归】的最简单形式给数据集拟合一个线性模型,主要是通过调整一系列的参以使得模型的残差平方和尽量小。

    线性模型:y=βX+b

    X:数据y:目标变量β:回归系数b:观测噪声(bias,偏差)

    运行结果如下所示,包括系数、残差平方和、方差分数。

    绘制图形如下所示,每个点表示真实的值,而直线表示预测的结果,比较接近吧。

    同时绘制图形时,想去掉坐标具体的值,可增加如下代码:

    四、优化代码

    下面是优化后的代码,增加了斜率、截距的计算,同时增加了点图到线性方程的距离,保存图片设置像素。

    运行结果如下所示:

    绘制图形如下所示:

    展开全文
  • 通过采用自动或半自动手段,在海量数据中发现有意义行为和规则探测和分析活动 数据挖掘是一门科学,有科学方法和模型作为...数据挖掘又是一门艺术,需要使用者对商业问题深入理解和模型适用条件深刻认识
  • 数据挖掘医院案例.py

    2019-09-11 22:13:16
    数据挖掘案例解析 一、本次数据分析,通过提供数据,分析出月均销售额、月均销售次数、客单价、报销金额 1、 读取'xx医院2019年销售数据.xlsx',将前5行数据打印输出,确保数据正确。 二、数据清洗 1、 将”购药...
  • 数据挖掘案例

    万次阅读 2018-10-19 16:32:48
    图中的左边是SPSS在1999年提出的《跨行业数据挖掘标准流程》,在图中定义了数据挖掘的6个步骤。虽然这个图已经提出有10几年了,但是在大数据环境下,这个流程依然适用。 1.理解商业问题。这需要大数据科学家和行业...
  • 基于SAS的数据挖掘商业案例解析,从入门到精通。
  • 数据挖掘是从大量数据(包括文本)中挖掘出隐含、先前未知、对决策有潜在价值关系、模式和趋势,并用这些知识和规则建立用于决策支持模型,提供预测性决策支持方法、工具和过程。数据挖掘有助于企业发现...
  • 数据挖掘经典案例

    2011-03-17 12:02:00
    数据挖掘经典案例 当前,市场竞争异常激烈,各商家企业为了能在竞争中占据优势,费劲心思。使用过OLAP技术的企业都知道,OLAP...“啤酒与尿布”的故事家喻户晓,在IT界里,几乎是数据挖掘的代名词,那么各商...
  • 数据挖掘应用案例

    千次阅读 2012-09-07 05:49:57
    但是沃尔玛一年内数据挖掘的结果显示,在居民区中尿布卖得好的店面啤酒也卖得很好。原因其实很简单,一般太太让先生下楼买尿布的时候,先生们一般都会犒劳自己两听啤酒。因此啤酒和尿布一起购买的机会是最多的。这是...
  • 电信数据挖掘案例讲解,资料很不错,详细地讲解了一些例子。
  • 这次数据分析的案例是,经典的数据分析案例——泰坦尼克号生还预测。本案例的分析思路包括以下三个部分:数据集描述与来源展示数据分析过程明确分析问题、理解数据数据清洗数据探索性分析数据建模与分析模型选择与...
  • 数据挖掘 应用案例

    2014-11-21 17:01:27
    个人的判断是,一个数据库只要有几十万以上记录,就有数据挖掘的价值。  搜集以下案例,希望有一定的启发和学习价值。  1. 哪些商品放在一起比较好卖?  这是沃尔玛的经典案例:一般看来,啤酒和尿布是顾客群...
  • 数据挖掘实用案例分析第1章 数据分析过程主要问题, 作者:复旦大学 赵卫东 博士,大数据课程更具有使用价值和案例课件,值得借鉴参考!
  • 数据挖掘实用案例分析 第6章 银行信用卡欺诈与拖欠行为分析,大数据课程的案例分析课件,作者:复旦大学 赵卫东 博士
  • 数据挖掘方法案例介绍

    千次阅读 2015-07-31 14:47:56
    数据挖掘方法案例介绍 发表于 2013-11-14 22:14 来源:未知 分类  分类是用于识别什么样事务属于哪一类方法,可用于分类算法有决策树、bayes分类、神经网络、支持向量机等等。 决策树 例1  
  • 很好的数据挖掘案例,帮助更好理解数据挖掘技术。希望对你们有用呢
  • 数据挖掘案例分析

    2018-12-04 12:45:53
    从三个案例,全面系统地阐述了大数据挖掘的整个过程 包括Jupyter Notebook的Python代码、数据集、和一些简单的解释说明。 教学课件
  • 本资源是SAS编程与数据挖掘商业案例的程序代码,为各位正在学习SAS童鞋们提供帮助。
  • 《SAS编程与数据挖掘商业案例》一书数据集和代码。
  • 在沃尔玛庞大数据仓库里集合了其所有门店详细原始交易数据,在这些原始交易数据基础上,沃尔玛利用数据挖掘工具对这些数据进行分析和挖掘。一个令人惊奇和意外结果出现了:“跟尿不湿一起购...
  • 第3章 数据挖掘建模  数据挖掘是从海量数据中提取隐含在其中的有用信息和知识的过程。...3.1 数据挖掘的过程  数据挖掘提供了从数据到价值的解决方案: 数据+工具+方法+目标+行动=价值  目前...
  • python中字典应用及案例分析今天我们带入一个新的数据类型,跟之前学习的数据类型关系不大,但是是一种很实用的数据类型。字典:可能你觉得很陌生,这个字典不是咱们用来查询字义解释“字典”。在其他语言中你...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,731
精华内容 1,092
关键字:

数据挖掘的案例