牛油果数据聚类分析

牛油果数据聚类分析

简介:

众所周知,千禧一代喜欢牛油果吐司。所有千禧一代都住在他们父母的地下室里。很明显,他们不买房子是因为他们买了太多的牛油果吐司!但也许还有希望……如果千禧一代能找到一个拥有廉价牛油果的城市,他们就能实现千年美国梦。在如今的大数据时代里,要找到这样一个城市并不难,只要获取到了足够的牛油果销量数据,就可以用简单的方式发现其内在价值,这是值得探讨的。为此提出了用数据分析获取低价优质的牛油果的城市,其方法:(1)获取牛油果销量数据,对无用的数据进行整理;(2)对数据进行清洗;(3)对数据采用可视化方式显示数据的类别分布;(4)采用聚类算法对每年的牛油果销量进行聚类,寻找出销售相似的地区

关键词:

数据清洗,数据可视化,聚类分析

课题的主要内容

本课题的总体目标是设计并实现一个基于美国牛油果销售价格和销量数据集的包括数据清洗、数据可视化和数据聚类分析的综合性程序。为了实现基于美国牛油果销售价格和销量数据集的包括数据清洗整理、数据可视化和数据聚类分析,需要从数据整理、可视化和聚类算法三个方面进行研究和设计。首先要实现基于python的数据读取及清洗整理;整理出关牛油果价格及销量有用且关联的数据;其次要实现对海量数据的可视化分析,最后将销量及城市的数据进行聚类分析,找出销售相似的地区。

理论和技术

数据预处理

数据预处理:将未加工数据转换成适合分析的形式,包括多数据源的数据融合、数据清洗、维规约等等。为什么要进行预处理:原始数据普遍存在问题,必须加以处理才能用于分析,一方面要提高数据质量,另一方面为了更好的使数据适应特定的数据挖掘技术及工具。

数据清洗及筛选

数据清洗是整个数据分析过程的第一步,也是整个数据分析项目中最耗费时间的一步;数据分析的过程决定了数据分析的准确性。数据清洗要用到的库有numpy、pandas。根据第一步数据预处理后,整理一下该数据集有下列问题需要处理:1)调整数据类型:由于一开始用到了str来导入,打算后期再更换格式,需要调整数据类型;2)修改列名:该数据的名称不易于理解,需要改列名;3)选择部分子集:因为有部分列在数据分析中不需要用到;4)可能存在逻辑问题需要筛选:比如Unit Price为负;5)格式一致化:Description可能会存在有标点符号掺杂/大小写不一致/空格重复出现等问题;6)消灭空值:出现了NaN值,需要去掉。

数据可视化

数据可视化是信息技术领域一个不断发展的跨学科技术,其目的是通过图像等方式将抽象且无序的数据以一种易于理解的形式汇集起来。可视化更加强调视觉表达、互动方式以及心理感知,结合跨学科的知识来呈现数据并传达其隐含的意义。随着语义 Web、本体论等技术的发展,知识图谱的目的是描述现实世界中实体之间的关系。国内外学者在知识图谱可视化领域已经取得了显著的 成果,包括各种可视化技术和可视化查询方法。[1]

在数据分析和可视化的应用中,jupyter无疑是首选,相比其他如pycharm等工具,可以将每一步的可视化图表输出在同一页面中,方便比较分析。

本文介绍的是常见的python第三方库,选择一款合适的库,先了解各种库的特点,选择合适的库,然后学习绘图原理,掌握的知识点,pylab 模块是一款由python提供的可以绘制二维,三维数据的工具模块,其中包括了绘图软件包 matplotlib,其可以生成matab绘图库的图像。Matplotlib是用于以图形方式可视化数据的最基本的库。它包含许多我们可以想到的图形,Matplotlib的图表由两个主要部分组成,即轴(界定图表区域的线)和图形(我们在其中绘制轴,标题和来自轴区域的东西)。仅仅因为它是基本的并不意味着它并不强大,我们将要讨论的许多其他数据可视化库都基于它。matplotlib是Python数据可视化库的OG。尽管它已有十多年的历史,但仍然是Python社区中使用最广泛的绘图库。

如果是在某些特定场景中,需要用到python做数据分析,输出各种图表用于辅助分析或者数据报告展示,那这些库则显得必不可少。

聚类算法

K-means 聚类分析算法又称群分析,它是研究(样品或指标)分类问题的一种多元统计方法,所谓类就是指相似元素的集合。[2]

聚类(Clustering):是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离。相似的数据划分到一起,具体划分的时候并不关心这一类的标签,目标就是把相似的数据聚合到一起,聚类是一种无监督学习(Unsupervised Learning)方法。

基于python的牛油果销量的可视化分析

数据可视化的总体思想

数据可视化是指使用抽象呈现的方式表达数 据的变化、联系或趋势的方法,根据对工具的工作流程进行综合分析,得到如 图 1 所示的框架图。大致分为以下功能模块:文档 数据分析模块、快捷编辑模块和数据可视化模块。

在这里插入图片描述

本 工 具 的 开 发 主 要 使 用 了 Pandas 库 和 Matplotlib 库。这两个库是 Python 开发中常用于搭 配进行数据可视化的第三方库。Matplotlib 库提供 了一整套和 Matlab 类似的命令 API,多用于数据可 视化。开发者仅需要几行代码即可生成直方图、散 点图、饼图、柱状图等,可以更加方便快捷地进行 数据可视化操作[3]。Pandas 库纳入了大量库和一些 标准数据模型以及一些能够使操作大型数据集更 加便利的工具,提供了大量能够让用户高效处理数 据的的函数和方法[4],多用于处理数据分析类工作。

数据可视化的实现

此工具的使用流程设计如图 2 所示。首先需要 执行读取文档部分。此时程序会自动读取目录下的 文档,并完成数据的展示。用户需选择是否对数据 进行修改。然后将需要数据可视化的部分数据复制 到可视化实现部分,程序会执行分析,完成后直接 输出数据可视化图片。

在这里插入图片描述

文档读取的功能使用 Pandas 库实现,通过读取 对应行列位置的数据进行展示输出。数据可视化功能使用 Matplotlib 库实现。该库可以绘制多种数据可视化图。

配置及代码核心
#可视化展示按月展示数据,销量的平均值
month_data=df.resample('M').mean()['总销量']  #每月平均的销量数据
plt.title('每月销量可视化',size=20,color='r')  #可视化标题
x=len(month_data)   #X轴的数据
y=[float(i) for i in month_data]   #销量
plt.plot(range(1,x+1),y,color='gold')  #绘制折线图
plt.ylabel('销售数量',size=20)  #Y轴的标签
plt.xlabel('月份',size=20)   #X轴的标签
plt.show()   #展示图像

##可视化展示按年展示数据,销量的平均值
year_data=df.resample('Y').mean()['总销量']  #每月平均的销量数据
plt.title('每年销量可视化',size=20,color='r')  #可视化标题
x=len(year_data)   #X轴的数据
y=[int(i) for i in year_data]   #销量
plt.bar(range(1,x+1),y,color='pink')  #绘制折线图
plt.ylabel('销售数量',size=20)  #Y轴的标签
plt.xlabel('年份',size=20)   #X轴的标签
plt.show()   #展示图像

基于聚类的牛油果销量相似区域的分析

聚类算法的总体思想

使用这个基本思想的算法:K-MEANS算法

划分法(partitioning methods):是给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K<N。而且这K个分组满足下列条件:(1) 每一个分组至少包含一个数据纪录;(2)每一个数据纪录属于且仅属于一个分组(注意:这个要求在某些模糊聚类算法中可以放宽)。对于给定的K,算法首先给出一个初始的分组方法,以后通过反复迭代的方法改变分组,使得每一次改进之后的分组方案都较前一次好,而所谓好的标准就是:同一分组中的记录越近越好,而不同分组中的纪录越远越好。

大部分划分方法是基于距离的。给定要构建的分区数k,划分方法首先创建一个初始化划分。然后,它采用一种迭代的重定位技术,通过把对象从一个组移动到另一个组来进行划分。一个好的划分的一般准备是:同一个簇中的对象尽可能相互接近或相关,而不同的簇中的对象尽可能远离或不同。还有许多评判划分质量的其他准则。传统的划分方法可以扩展到子空间聚类,而不是搜索整个数据空间。当存在很多属性并且数据稀疏时,这是有用的。为了达到全局最优,基于划分的聚类可能需要穷举所有可能的划分,计算量极大。实际上,大多数应用都采用了流行的启发式方法,如k-均值和k-中心算法,渐近的提高聚类质量,逼近局部最优解。这些启发式聚类方法很适合发现中小规模的数据库中小规模的数据库中的球状簇。为了发现具有复杂形状的簇和对超大型数据集进行聚类,需要进一步扩展基于划分的方法。

k-means算法的流程

1.创建k个点作为初始质心(通常是随机选择)
2.当任意一个点的簇分配结果发生改变时,对数据集中的每个数据点,对每个质心计算质心与数据点之间的距离
3.将数据点分配到距其最近的簇
4.对每个簇,计算簇中所有点的均值并将均值作为质心

聚类算法的实现(步骤)

数据准备:特征标准化和降维

特征选择:从最初的特征中选择最有效的特征,并将其存储在向量中

特征提取:通过对选择的特征进行转换形成新的突出特征

聚类:基于某种距离函数进行相似度度量,获取簇

聚类结果评估:分析聚类结果,如距离误差和(SSE)等

k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。

k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。

一般都采用均方差作为标准测度函数. k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。

配置及代码核心(参数确定)
#聚类销量 利用kmeans进行聚类分析全年每天的销量
from sklearn.cluster import KMeans
kmeans=KMeans(n_clusters=3,random_state=123).fit(df)  #训练模型
print('查看聚类中心:\n',kmeans.cluster_centers_)
print('查看样本的类别标签:\n',kmeans.labels_)   #查看样本的类别标签
labels_series=pd.Series(kmeans.labels_)  #将标签转化为series
s1=labels_series[labels_series.values==0]  #销量的分类中心点3
s2=labels_series[labels_series.values==1]  #销量的分类中心点2
s3=labels_series[labels_series.values==2]  #销量的分类中心点3
df2=pd.DataFrame(day_volume)
print('第一个簇地区为:',set(df2.iloc[s1.index]['region']))
print('第二个簇地区为:',set(df2.iloc[s2.index]['region']))
print('第三个簇地区为:',set(df2.iloc[s3.index]['region']))
num=pd.Series(kmeans.labels_).value_counts()
print('每个销量分类群的数目为:\n',num)

结果

按年月进行可视化

在这里插入图片描述

在这里插入图片描述

销售相似的地区

在这里插入图片描述

参考文献

[1] 陈 氢, 刘文梅.基于关联数据的企业数据治理可视化框架研究[J].湖北工业大学经济与管理学院,2021.

[2] 周树功.基于 K-means 聚类分析算法的大学生在线学习行为分析[J].唐山师范学院,2020.

[3] 胡汝鹏,许新华,虞烨青,黄瑾.基于Matplotlib的学生宿舍电网负荷可视化分析.电脑信息与技术,2020,28(05):59-61

[4] 李天辉 . 基 于 python 的 数 据 分 析 可 视 化 研 究 与 实 现 . 电子测 试,2020(20):78-79

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供使用Apriori算法对超市数据集进行关联规则挖掘的步骤。 首先,我们需要了解什么是Apriori算法和关联规则挖掘。 Apriori算法是一种常用的关联规则挖掘算法,用于在大规模数据集中寻找项集之间的频繁项集和关联规则。关联规则挖掘是一种在大规模数据集中寻找项集之间有趣关系的技术,它可以用于产品推荐、市场营销、网络安全等领域。 接下来,我们将使用Python中的mlxtend库来实现Apriori算法,并在超市数据集上进行关联规则挖掘。 ```python # 导入所需库 from mlxtend.frequent_patterns import apriori from mlxtend.frequent_patterns import association_rules import pandas as pd # 读取超市数据集 df = pd.read_csv('supermarket.csv') # 将数据集进行独热编码,将每个商品转换为一个独立的列 df = pd.get_dummies(df) # 使用Apriori算法,寻找频繁项集 frequent_itemsets = apriori(df, min_support=0.02, use_colnames=True) # 根据频繁项集,寻找关联规则 rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.2) # 根据关联规则的提升度(lift)和置信度(confidence)进行排序 rules = rules.sort_values(['lift', 'confidence'], ascending=[False, False]) # 输出前10条关联规则 print(rules.head(10)) ``` 在上面的代码中,我们首先使用pandas库读取超市数据集,并使用独热编码将每个商品转换为一个独立的列。然后,我们使用Apriori算法寻找频繁项集,并使用关联规则挖掘方法寻找关联规则。最后,我们根据关联规则的提升度和置信度进行排序,并输出前10条关联规则。 您可以根据需要修改代码中的参数,例如:min_support表示最小支持度,use_colnames=True表示使用商品名称作为列名,metric表示度量方法,min_threshold表示最小提升度阈值等等。 输出结果会显示前10条关联规则,例如: ``` antecedents consequents antecedent support consequent support support confidence lift leverage conviction 0 (chicken) (avocado) 0.177 0.246 0.062 0.350 1.421 0.018 1 (avocado) (chicken) 0.246 0.177 0.062 0.253 1.421 0.018 2 (almonds) (avocado) 0.153 0.246 0.033 0.216 0.877 -0.005 3 (avocado) (almonds) 0.246 0.153 0.033 0.134 0.877 -0.005 4 (almonds) (salmon) 0.153 0.209 0.033 0.216 1.031 0.001 5 (salmon) (almonds) 0.209 0.153 0.033 0.157 1.031 0.001 6 (almonds) (shallot) 0.153 0.105 0.020 0.130 1.232 0.004 7 (shallot) (almonds) 0.105 0.153 0.020 0.187 1.232 0.004 8 (shallot) (salmon) 0.105 0.209 0.024 0.229 1.096 0.002 9 (salmon) (shallot) 0.209 0.105 0.024 0.115 1.096 0.002 ``` 这些关联规则包括前提(antecedents)和结论(consequents),以及支持度(support)、置信度(confidence)、提升度(lift)等指标。通过观察关联规则,我们可以发现一些有趣的规律,例如:购买鸡肉和牛油果的顾客,也有可能购买杏仁;购买杏仁和鲑鱼的顾客,也有可能购买香葱等等。这些规律可以用于制定产品推荐策略,提高销售额和顾客满意度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChlinRei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值