大师兄的数据分析学习笔记(八):探索性数据分析(七)

大师兄的数据分析学习笔记(七):探索性数据分析(六)
大师兄的数据分析学习笔记(九):特征工程

五、复合分析的实现

3. 相关分析
  • 相关分析是衡量两组数据分布趋势或变化趋势的分析方法。
  • 相关分析使用相关系数直接衡量相关性的大小。
  • 如果用相关系数直接衡量连续值的相关性:
>>>import os
>>>import pandas as pd
>>>import matplotlib.pyplot as plt
>>>import seaborn as sns

>>>df = pd.read_csv(os.path.join(".","data","WA_Fn-UseC_-HR-Employee-Attrition.csv"))
>>>corr = df.corr()
>>>sns.heatmap(corr,vmin=-1,vmax=1,cmap=sns.color_palette("RdBu",n_colors=128))
>>>plt.show()
  • 上图中颜色越偏蓝的部分正相关性越高,越偏红的部分负相关性越高。
  • 如果是二类离散属性,比如:true/false,可以用皮尔逊相关系数来直接衡量相关性的大小。
  • 如果是多类离散属性,且数据是定序数据,比如:low/median/high,也可以使用皮尔逊相关系数。
  • 更为常见的离散属性相关性系数,使用熵(entropy)来计算:
  • 是用来计算不确定性的值,:H(X) = - \sum{p_i\log{(p_i)}}
  • 越接近0表示不确定性越小,如果样本的类别越多且分布越均匀,的值越大。
  • 条件熵H(Y|X) = \sum{p(x_i)}H(Y|X=x_i),表示在X条件下,Y的熵为X分布下对Y分别计算熵,并求和。
  • 熵增益I(X,Y) = H(Y) - H(Y|X) = H(X) - H(X|Y),表示条件熵对比减少的部分。
  • 熵增益对于分类数目多的特征有不正确的偏向,不具备归一化的特点。
  • 为了解决上面的问题,可以使用熵的增益率GainRatio(X->Y) = \frac{I(X,Y)}{H(Y)},也就是熵增益/Y的,可以获得一个0-1的值。
  • 但由于熵的增益率是不对称的,所以如果要计算相关性,还需要进行转化:Corr(X,Y) = \frac{I(X,Y)}{\sqrt{H(X)H(Y)}}
>>>import os
>>>import pandas as pd
>>>import numpy as np
>>>import math

>>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))
>>>s1 = df[df.Gender == "Male"].EducationField.head(50).reset_index(drop=True)  # 男性的教育领域
>>>s2 = df[df.Gender == "Female"].EducationField.head(50).reset_index(drop=True)  # 女性的教育领域


>>>def getEntropy(s: pd.Series) -> float:
>>>    """求熵
>>>
>>>    求熵
>>>
>>>    :param s:
>>>    :return:
>>>    """
>>>    prt_ary = s.groupby(s).count().values / float(len(s))
>>>    return -((np.log2(prt_ary)) * prt_ary).sum()


>>>def getCondEntropy(s1: pd.Series, s2: pd.Series) -> float:
>>>    """求条件熵
>>>
>>>    求条件熵
>>>
>>>    :param s1:
>>>    :param s2:
>>>    :return:
>>>    """
>>>    d = {}
>>>    for i in range(len(s1)):
>>>        d[s1[i]] = d.get(s1[i], []) + [s2[i]]
>>>    return sum([getEntropy(pd.Series(d[k])) * len(d[k]) / float(len(s1)) for k in d])


>>>def getEntropyGain(s1: pd.Series, s2: pd.Series) -> float:
>>>    """ 求熵增益
>>>
>>>    求熵增益
>>>
>>>    :param s1:
>>>    :param s2:
>>>    :return:
>>>    """
>>>    return getEntropy(s2) - getCondEntropy(s1, s2)


>>>def getEntropyGainRate(s1: pd.Series, s2: pd.Series) -> float:
>>>    """求熵增益
>>>
>>>    求熵增益
>>>
>>>    :param s1:
>>>    :param s2:
>>>    :return:
>>>    """
>>>    return getEntropyGain(s1, s2) / getEntropy(s2)


>>>def getDiscreteCorr(s1: pd.Series, s2: pd.Series) -> float:
>>>    """求离散值的相关性
>>>
>>>    求离散值的相关性
>>>
>>>    :param s1:
>>>    :param s2:
>>>    :return:
>>>    """
>>>    return getEntropyGain(s1, s2) / math.sqrt(getEntropy(s1) * getEntropy(s2))


>>>print(f"Entropy:{getEntropy(s1)}")
>>>print(f"CondEntropy:{getCondEntropy(s1, s2)}")
>>>print(f"EntropyGain:{getEntropyGain(s1, s2)}")
>>>print(f"EntropyGainRate:{getEntropyGainRate(s1, s2)}")
>>>print(f"getDiscreteCorr:{getDiscreteCorr(s1, s2)}")
Entropy:1.8508248804997625
CondEntropy:1.8971515588855379
EntropyGain:0.24367912565724215
EntropyGainRate:0.11382456698544799
getDiscreteCorr:0.1224177809220504
4. 因子分析
  • 因子分析就是从多个属性变量中,分析共性和相关因子的方法,是一种比较综合的分析方法。
  • 因子分析可以分为探索性因子分析验证性因子分析
  • 探索性因子分析:指通过协方差矩阵、相关性矩阵等指标分析多元属性变量的本质结构,并可以进行转化、降维等操作,得到数据空间中、或者影响目标属性的最主要的因子,比如主成分分析法就是典型的探索性分析。
  • 验证性因子分析:是验证一个因子,与关注属性之间是否有关联,有什么样的关联,是不是符合预期等,比如假设检验、相关分析、回归分析等方法都是验证性因子分析。
>>>import os
>>>import matplotlib.pyplot as plt
>>>import pandas as pd
>>>import seaborn as sns
>>>from sklearn.decomposition import PCA

>>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))
>>>my_pca = PCA(n_components=7)
>>>lower_mat = my_pca.fit_transform(df.drop(labels=["HourlyRate","Department","BusinessTravel","EducationField","Gender","JobRole"],axis=1))
>>>print(f"PCA_Ratio:{my_pca.explained_variance_ratio_}")
PCA_Ratio:[0.54301451 0.42574507 0.00789838 0.00776119 0.00646712 0.00585612
 0.00325762]
>>>sns.heatmap(pd.DataFrame(lower_mat).corr(),vmin=-1,vmax=1,cmap=sns.color_palette("RdBu",n_colors=64))
>>>plt.show()
5. 总结
数据类型 应对方法
连续:联系 假设检验、相关系数
连续:离散(二值) 相关系数、最小基尼系数切分、最大熵增益切分
连续:离散(非二值) 相关系数(定序)
离散(二值):离散(二值) 相关系数、熵相关、F分值
离散:离散(非二值) 熵相关、基尼系数、相关系数(定序)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容