基于python的numpy和pandas库的灰色关联分析及可视化(含实例)

使用python实现灰色关联分析及其可视化

  • 在这里总结一下的数学建模常用的几种模型评估方法,这里讲的是使用python的Pandas库和高效的Numpy科学计算库实现。如果想看用Python实现的模型的灵敏度分析,可以看我上一篇博文,传送门: 模型灵敏度分析及可视化. 下面将详细介绍灰色关联度分析并一个实例结束文章。

灰色关联分析法

简介
  • 灰色系统理论提出了对各子系统进行灰色关联度分析的概念,意图透过一定的方法,去寻求系统中各子系统(或因素)之间的数值关系。因此,灰色关联度分析对于一个系统发展变化态势提供了量化的度量,非常适合动态历程分析。
使用场景
  • 适用于对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度。在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高;反之,则较低。因此,灰色关联分析方法,是根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,作为衡量因素间关联程度的一种方法。
具体计算步骤
第一步,确定分析数列
  • 确定反映系统行为特征的参考数列和影响系统行为的比较数列。反映系统行为特征的数据序列,称为参考数列。影响系统行为的因素组成的数据序列,称比较数列。
    (1)参考数列(又称母序列):能反映系统行为特征的数据序列,类似于因变量Y
    Y = Y ( k ) ∣ k = 1 , 2... n ; Y=Y(k)∣k=1,2...n; Y=Y(k)k=1,2...n
    (2)比较数列(又称子序列):影响系统行为的因素组成的数据序列,类似于自变量X
    X i = X i ( k ) ∣ k = 1 , 2... n , i = 1 , 2... m Xi=Xi(k)∣k=1,2...n, i=1,2...m Xi=Xi(k)k=1,2...n,i=1,2...m
第二步,变量的无量纲化
  • 对变量进行预处理
    目的:去除量纲,缩小度量范围简化计算,便于比较
    处理:对母序列和子序列的每个指标进行预处理:
    常用方法: 标准化,归一化
  1. 标准化:
    x ∗ = ( x − μ ) / σ ( μ 为 均 值 , σ 为 标 准 差 ) x^* = (x - μ)/ σ (μ为均值,σ为标准差) x=(xμ)/σμσ
  2. 归一化:
    x ∗ = x − m i n ( x ) / m a x ( x ) − m i n ( x ) x^* = x - min(x)/ max(x) - min(x) x=xmin(x)/max(x)min(x)
第三步,计算关联系数

在这里插入图片描述
上式中, ξ ( k ) ξ(k) ξ(k) x i x^i xi y ( k ) y(k) y(k) k k k点的关联系数; ∣ y ( k ) − x i ( k ) ∣ |y(k)-x_i(k)| y(k)xi(k)为第 k k k y y y x i x_i xi的绝对差; m i n   m i n ∣ y ( k ) − x i ( k ) ∣ min\,min|y(k)-x_i(k)| minminy(k)xi(k) y y y数列与 x i x_i xi的数列在 k k k点的二级最小差数绝对值, m a x   m a x ∣ y ( k ) − x i ( k ) ∣ 为 max\,max|y(k)-x_i(k)|为 maxmaxy(k)xi(k)y 数 列 与 数列与 x_i的数列在 k k k点的二级最大差数绝对值, ρ \rho ρ为灰色分析系数,取值0~1,一般取0.5。将各性状的关联系数代入公式,可求出 x i x_i xi y ( k ) y(k) y(k)的关联度 r i r_i ri:

r i = 1 n ∑ k = i n ξ i ( k ) r_i = \frac{1}{n} \sum^{n}_{k=i}\xi_i(k) ri=n1k=inξi(k)

实例

  • 为研究红酒各因素之间的影响,使用关联对其进行分析
    在这里插入图片描述
  • 代码(含注释)
# 导入可能要用到的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

# 读取数据
wine = pd.read_excel("C:/Users/Administrate/Desktop/wine.xls",index_col=0)
wine

在这里插入图片描述

# 无量纲化
def dimensionlessProcessing(df_values,df_columns):
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    res = scaler.fit_transform(df_values)
    return pd.DataFrame(res,columns=df_columns)

# 求第一列(影响因素)和其它所有列(影响因素)的灰色关联值
def GRA_ONE(data,m=0): # m为参考列
    # 标准化
    data = dimensionlessProcessing(data.values,data.columns)
    # 参考数列
    std = data.iloc[:,m]
    # 比较数列
    ce = data.copy()
    
    n = ce.shape[0]
    m = ce.shape[1]
    
    # 与参考数列比较,相减
    grap = np.zeros([n,m])
    for i in range(m):
        for j in range(n):
            grap[j,i] = abs(ce.iloc[j,i] - std[j])
            
    # 取出矩阵中的最大值和最小值
    mmax = np.amax(grap)
    mmin = np.amin(grap)
    ρ = 0.5 # 灰色分辨系数
    
    # 计算值
    grap = pd.DataFrame(grap).applymap(lambda x:(mmin+ρ*mmax)/(x+ρ*mmax))
    
    # 求均值,得到灰色关联值
    RT = grap.mean(axis=0)
    return pd.Series(RT)

# 调用GRA_ONE,求得所有因素之间的灰色关联值
def GRA(data):
    list_columns = np.arange(data.shape[1])
    df_local = pd.DataFrame(columns=list_columns)
    for i in np.arange(data.shape[1]):
        df_local.iloc[:,i] = GRA_ONE(data,m=i)
    return df_local

data_gra = GRA(data)
data_gra

在这里插入图片描述

# 结果可视化
import seaborn as sns # 可视化图形调用库
import matplotlib.pyplot as plt
%matplotlib inline

def ShowGRAHeatMap(data):
    # 色彩集
    colormap = plt.cm.RdBu
    plt.figure(figsize=(18,16))
    plt.title('Person Correlation of Features',y=1.05,size=18)
    sns.heatmap(data.astype(float),linewidths=0.1,vmax=1.0,square=True,\
               cmap=colormap,linecolor='white',annot=True)
    plt.show()

ShowGRAHeatMap(data_gra)
  • 最终结果可视化
    在这里插入图片描述
  • 23
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 37
    评论
### 回答1: pandasnumpyPython中常用的数据分析,可以用于处理和分析各种数据。以下是一些pandasnumpy的数据分析实例: 1. 数据清洗:使用pandas清洗数据,包括去除重复值、处理缺失值、转换数据类型等。 2. 数据可视化:使用pandas和matplotlib进行数据可视化,包括绘制折线图、柱状图、散点图等。 3. 数据分析:使用pandasnumpy进行数据分析,包括计算统计量、数据聚合、数据透视表等。 4. 机器学习:使用pandasnumpy进行机器学习,包括数据预处理、特征工程、模型训练等。 5. 时间序列分析:使用pandas进行时间序列分析,包括时间序列数据的处理、分析和预测等。 总之,pandasnumpyPython中非常强大的数据分析工具,可以帮助我们更好地处理和分析各种数据。 ### 回答2: PandasNumpy是数据分析领域中最为重要的两个工具,在处理数据时可以大大提高效率和准确度。下面就为大家介绍一些PandasNumpy的数据分析实例。 1. 数据载入与清洗 Pandas提供了很多函数用于把数据从各种来源导入到数据框中,例如:read_csv()、read_excel()、read_json()等等。读入后数据框的数据结构就便于清洗和处理了。 进行数据清洗时,我们可以使用Pandas的dropna()、fillna()等函数实现缺失值的处理,使用replace()函数进行数据替换,使用duplicates()函数去除重复行等等。 2. 数据过滤与筛选 在数据分析中,我们经常需要根据某些条件对数据进行过滤和筛选。可以使用Pandas的查询函数query()、元素选分函数isin()、布尔函数bool()等函数进行数据筛选。 3. 数据统计与分析 利用NumpyPandas的各种数学函数可以方便地对数据进行统计和分析。例如:describe()函数可以快速计算数据的平均值、标准差、分位数等基本统计量;mean()、median()、sum()等函数可以计算数据的统计值、中位数、总和等等。 4. 数据可视化 将分析结果可视化是数据分析的重要组成部分。Pandas提供了强大的绘图功能,通过调用plot()函数可以轻松地生成各种类型的图表,包括折线图、散点图、热力图等等。 总之,PandasNumpy的数据分析工具使处理大量数据变得更加简便、高效。通过这些工具,我们能够更加准确地进行数据分析与决策,实现数据挖掘、处理和应用的目标。 ### 回答3: PandasNumPy 是我们经常用来处理和分析数据的 Python Pandas 提供了一个高效的数据结构 DataFrame,可以方便地进行数据分析和展示;而 NumPy 则提供了高性能的矩阵计算功能,可以进行科学计算。 以下是一个使用 PandasNumPy 进行数据分析的例子: 我们有一个 CSV 文件包销售数据,包括销售日期、商品名称、销售数量和单价等信息。我们希望对这些数据进行分析,找出哪些商品被销售得最多,哪些时间段是销售高峰期等。 首先,我们需要使用 Pandas 读取 CSV 文件,并将其转化为一个 DataFrame 对象,方便我们操作和分析数据。代码如下: ```python import pandas as pd import numpy as np # 读取 CSV 文件并转化为 DataFrame df = pd.read_csv('sales.csv') ``` 接着,我们可以用 Pandas 的 groupby 函数分组,统计每种商品的销售数量和销售总额,并按照销售数量对商品进行排序。代码如下: ```python # 按照商品名称分组统计销售情况 sales_by_product = df.groupby(['product'])[['quantity', 'price']].agg(['sum', 'mean']) # 增加商品的销售总额和销售数量,按照销售数量排序 sales_by_product['total'] = sales_by_product['quantity']['sum'] * sales_by_product['price']['mean'] sales_by_product = sales_by_product.sort_values(('quantity', 'sum'), ascending=False) print(sales_by_product.head()) ``` 输出结果如下: ``` quantity price total sum mean sum mean product 手机 1224 3.297297 2396 645.945946 788191.192093 电视 780 2.812500 1516 546.875000 426600.000000 电脑 546 3.735632 1188 811.224490 443387.755102 空调 382 3.023810 756 5.985714 394228.571429 冰箱 346 2.932203 708 6.000000 277176.271186 ``` 可以看到,销售量最多的商品是手机,销售总额为 788191.19 元。我们还可以继续使用 Pandas 对数据进行分析和可视化,以便更好地理解数据。 除了 PandasNumPy 在数据分析中也发挥着重要作用。我们可以使用 NumPy 矩阵计算的功能,计算总销售额、平均值等统计量。代码如下: ```python # 计算总销售额和平均值 total_sales = np.sum(df['quantity'] * df['price']) average_sales = np.average(df['quantity'] * df['price']) print('总销售额:%.2f 元' % total_sales) print('平均销售额:%.2f 元' % average_sales) ``` 输出结果如下: ``` 总销售额:906245.00 元 平均销售额:301.56 元 ``` 可以看到,我们的销售数据总销售额为 906245 元,平均销售额为 301.56 元。 综上所述,PandasNumPyPython 数据分析中不可或缺的两个。我们可以使用它们来对数据进行处理和分析,以便更好地理解数据并提取有用信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值