【Python数据挖掘】数据可视化及数据对象的相似性度量算法详解(超详细 附源码)

简介: 【Python数据挖掘】数据可视化及数据对象的相似性度量算法详解(超详细 附源码)

需要PPT和源码请点赞关注收藏后评论区留言私信~~~

一、数据可视化

数据可视化(Data Visualization)通过图形清晰有效地表达数据。它将数据所包含的信息的综合体,包括属性和变量,抽象化为一些图表形式。

数据可视化方法包括:

基于像素的技术

几何投影技术

基于图符的技术和基于图形的技术

几何投影技术帮助发现多维数据集的有趣投影。

难点:在二维显示上可视化高维空间

1:基于像素的技术

m维的数据集,创建m个窗口 一条记录 m 维的值对应 m 个像素在相应的窗口中 像素颜色反映了数据值

2:几何投影可视化技术

几何投影技术可以帮助用户发现多维数据集的有趣投影。几何投影技术的难点在于在二维显示上可视化高维空间。散点图使用笛卡尔坐标显示二维数据点。使用不同颜色或形状表示不同的数据点,可以增加第三维。

import matplotlib.pyplot as plt
import numpy as np
n = 50
# 随机产生50个0~2之间的x,y坐标
x = np.random.rand(n)*2
y = np.random.rand(n)*2
colors = np.random.rand(n) 
# 随机产生50个0~1之间的颜色值
area = np.pi * (10 * np.random.rand(n))**2 
# 点的半径范围:0~10
plt.scatter(x, y, s=area, c=colors, alpha=0.5, marker=(9, 3, 30))
plt.show()

 

随着维度的增加 散点图矩阵变得不太有效,平行坐标图是对于具有多个属性问题的一种可视化方法,在平行坐标图中,数据集的一行数据在平行坐标图中用一条折现表示,纵向是属性值,横向是属性类别

from pyecharts.charts import Parallel
import pyecharts.options as opts
import seaborn as sns
import numpy as np
data = sns.load_dataset('iris')
data_1 = np.array(data[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]).tolist()
parallel_axis = [
    {"dim": 0, "name": "萼片长度"},
    {"dim": 1, "name": "萼片宽度"},
    {"dim": 2, "name": "花瓣长度"},
    {"dim": 3, "name": "花瓣宽度"},
]
parallel = Parallel(init_opts=opts.InitOpts(width="600px", height="400px"))
parallel.add_schema(schema=parallel_axis)
# parallel.config(schema)
parallel.add('iris平行图',data=data_1,linestyle_opts=opts.LineStyleOpts(width=4, opacity=0.5))
parallel.render_notebook()

3:基于图符的可视化技术

基于图符的(Icon-based)可视化技术使用少量图符表示多维数据值。有两种流行的基于图符的技术,即切尔诺夫脸和人物线条图。

切尔诺夫脸如下

把多达18个变量(维)的多维数据以卡通人脸显示

人物线条图如下

把多维数据映射到5-段任务线条图,其中每个都画有四肢和一个躯体,两个维被映射到x和y,其余的映射到四肢角度或长度。

4:层次可视化技术

对于大型高维数据集很难实现可视化技术。层次可视化把大型的高维数据的所有维划分成子集(子空间),这些子空间按层次可视化。

5:可视化复杂对象和关系

早期的可视化技术主要用于分析数值数据,然而现在出现了越来越多的非数值数据,比如文本和社会网络数据,因此可视化这些非数值数据引起了更多广泛的关注。标签云是一种用户产生的标签统计量的可视化。在标签云中,标签通常按字母次序或用户指定的次序列举。

6:高维数据可视化

高维数据可视化主要分为降维方法和非降维方法

1. 降维方法

降维方法将高维数据投影到低维空间,尽量保留高维空间中原有的特性和聚类关系。常见的降维方法有主成分分析、多维度分析(Multi-Dimensional Scaling, MDS)和自组织图(Self-Organization Map, SOM)等。

常用的数据降维方法如下

2. 非降维方法

非降维方法保留了高维数据在每个维度上的信息,可以展示所有的维度。各种非降维方法的主要区别在于如何对不同的维度进行数据到图像属性的映射。

Python可视化

在Python中,使用最多的数据可视化工具是Matplotlib,除此之外还有很多其他可选的可视化工具包,主要包括以下几类。

(1)Matplotlib以及基于Matplotlib开发的工具包:Pandas中的封装Matplotlib API的画图功能,Seaborn和networkx等;

(2)基于JavaScript和d3.js开发的可视化工具,如plotly等,这类工具可以显示动态图且具有一定的交互性;

(3)其他提供了Python调用接口的可视化工具,如OpenGL,GraphViz等,这一类工具各有特点且在特定领域应用广泛。

下面是词云绘制图实例

代码如下

from pyecharts import options as opts
from pyecharts.charts import Page, WordCloud
from pyecharts.globals import SymbolType
words = [
    ("牛肉面", 7800),("黄河", 6181),
    ("《读者》杂志", 4386), ("甜胚子", 3055),
    ("甘肃省博物馆", 2055),("莫高窟", 8067),("兰州大学", 4244),
    ("西北师范大学", 1868),("中山桥", 3484),
    ("月牙泉", 1112),("五泉山", 980),
    ("五彩丹霞", 865),("黄河母亲", 847),("崆峒山",678),
    ("羊皮筏子", 1582),("兴隆山",868),
    ("兰州交通大学", 1555),("白塔山", 2550),("五泉山", 2550)]
c = WordCloud()
c.add("", words, word_size_range=[20, 80])
c.set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-基本示例"))
c.render_notebook()

使用regplot函数绘制回归图

代码如下

import seaborn as sns
df_iris = sns.load_dataset('iris')
df_iris.head()
# sns.barplot(x = df_iris['species'],y=df_iris['petal_length'],data=df_iris)
sns.regplot(x = 'petal_length',y = 'petal_width' ,data = df_iris)

二、数据对象的相似性度量

现实中,我们需要处理的数据具有着不同的形式和特征。而对数据相似性的度量又是数据挖掘分析中非常重要的环节

数据矩阵与相异性矩阵

标称属性的相似性度量

其中 m为匹配的数目 即对象i和j状态相同的属性数  p为对象的属性总数

二元属性的相似性度量

二元属性只有两个状态,通常表示为true或者false 在计算两个属性间的相异性时,涉及由给定的二元数据计算相异性矩阵

对于非对称二元属性,只关心“正匹配”的情况,也就是只关心两个对象属性中,都是1的情况,因此负匹配数t被认为是不重要的,可以忽略,如式3.9所示。

由数据可以看出 对象的二元属性是堆成的,因此根据上述可以计算得到三个人的相异性分别是

0.67 0.67 0.67

数值属性的相似性度量

(1)欧氏距离

(2)曼哈顿距离

(3)切比雪夫距离

(4)闵可夫斯基距离

(5)汉明距离(Hamming Distance)

两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要做的最小替换次数。

序数属性的相似性度量

序数属性的每个属性值都代表了一种次序,所以,无论使用数字还是文字性的叙述,都可以表示成数字的形式。

混合类型属性的相似性

以上几种情况都是针对数据库中单一类型的数据,但是很多时候,遇到的一组数据可能拥有多种类型的属性,也就是混合类型属性。

余弦相似性

针对文档数据的相似度测量一般使用余弦相似性。在处理文档的时候,一般采用文档所拥有的关键词来刻画一个文档的特征。

距离相似度的测试代码如下

import numpy as np
from scipy.spatial.distance import pdist
x=(0.7,0.9,0.2,0.3,0.8,0.4,0.6,0,0.5)
y=(0.6,0.8,0.5,0.4,0.3,0.5,0.7,0.2,0.6)
X=np.vstack([x,y])
d1= pdist(X, 'euclidean')
print('欧式距离:',d1)
d2=pdist(X,'cityblock')
print('曼哈顿距离:',d2)
d3=pdist(X,'chebyshev')
print('切比雪夫距离:',d3)
d4=pdist(X,'minkowski',p=2)
print('闵可夫斯基距离:',d4)
d5=pdist(X,'cosine')
print('余弦相似性:',1-d5)

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
12天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
21 1
|
12天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
12天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
21 0