大师兄的数据分析学习笔记(三):探索性数据分析(二)
大师兄的数据分析学习笔记(五):探索性数据分析(四)
三、单因子与可视化
6. 数据分类
数据类型 |
描述 |
案例 |
定类数据 |
根据事务离散、无差别属性进行的分类。 |
民族、性别 |
定序数据 |
可以界定数据的大小,但不能测定差值。 |
职称等级 |
定距数据 |
可以界定数据大小的同时,可测定差值,无绝对零点(乘除无意义)。 |
温度 |
定比数据 |
可以界定数据大小,可测定差值、有绝对零点。 |
身高体重 |
7. 异常值分析
-
异常值是指与其他观测值有显著差异的数据点。
-
异常值的存在可能会导致数据无效。
7.1 连续异常值
- 在一组数据中的上四分位数向上取k倍(k通常取1.5-3)为上界,下四分位数向下取k倍为下界,上/下界以外的值称为异常值。
- 通常k取1.5时为中等异常、取3时为非常异常。
- 连续异常值可以根据实际情况舍弃或用上/下界替代。
>>>import numpy as np
>>>k = 1.5
>>>data = np.append(np.random.rand(100),(np.random.rand(10)*10))
>>>Q_L = np.quantile(data,0.25,interpolation='lower')
>>>Q_U = np.quantile(data,0.75,interpolation='higher')
>>>IQR = Q_U - Q_L
>>>outlier_step = k*IQR
>>>abnormal = data[(data>Q_U+outlier_step)|(data<Q_L-outlier_step)]
>>>print(f"上界:{Q_U+outlier_step} 下界:{Q_L-outlier_step}")
上界:1.5504747843883402 下界:-0.3883817114860346
>>>print(f"异常值:{abnormal}")
异常值:[8.17103381 8.41505442 1.88209875 2.42209849 6.89254331 4.46870627
3.74401613 5.98124444 9.12398726]
7.2 离散异常值
- 离散属性定义范围外的所有值均为异常值,比如空值。
-
离散异常值可以直接舍弃或当做单独的值来处理。
>>>import numpy as np
>>>values = ["A","B","C",None]
>>>data = np.random.choice(values,size=100)
>>>print(f"100个数据中的异常值为{len([x for x in data if not x])}")
100个数据中的异常值为26
7.3 知识异常值
- 限制知识以外的异常值为**知识异常值,比如身高超过10米。
8. 对比分析
-
对比分析是通过比较的方式达到认识与了解事实与数据的分析方法。
8.1 对比内容
- 绝对数比较:数字比较,比如收入、身高、面积的比较。
- 相对数比较:把几个有联系的指标进行联合构成相对数比较,常见以下相对数:
相对数 |
描述 |
结构相对数 |
部分与整体进行相比,比如用产品合格率评价产品质量。 |
比例相对数 |
总体内用不同部分的数值进行比较,比如产业结构中农业、重工业和服务业之间的占比变化。 |
比较相对数 |
同一时空下的相似或同质的指标进行对比,比如不同时期下商品的价格。 |
动态相对数 |
时间概念的相对数,比如用户数量的增速。 |
强度相对数 |
性质不同,担忧相互联系的属性及其联合,比如gdp和人均gdp的比较。 |
8.2 对比方法
- 时间维度:根据不同的时间进行比较,比如同比、环比等。
- 空间维度:根据现实方位不同的空间,比如不同城市;或逻辑上的空间进行比较,比如公司内不同的部门。
- 经验与计划维度:比如计划排期与进度进行比较等。
9. 结构分析
- 结构分析可以看做对比分析中的比例相对数的比较,重点研究整体组成结构方面的差异与相关性。
- 结构分析可以分为静态结构分析与动态结构分析。
9.1 静态结构分析
>>>import matplotlib.pyplot as plt
>>>import pandas as pd
>>>plt.rcParams['font.sans-serif']=['SimHei']
>>>data = {
>>> "A班":{"男生":34,"女生":17},
>>> "B班":{"男生":26,"女生":44},
>>> "C班":{"男生":42,"女生":8},
>>>}
>>>data = pd.DataFrame.from_dict(data)
>>>fig,(ax1,ax2,ax3) = plt.subplots(1,3)
>>>ax1.pie(data.A班,labels=data.index)
>>>ax2.pie(data.B班,labels=data.index)
>>>ax3.pie(data.C班,labels=data.index)
>>>ax1.set_title("A班")
>>>ax2.set_title("B班")
>>>ax3.set_title("C班")
>>>plt.show()
9.2 动态结构分析
>>>import pandas as pd
>>>import matplotlib.pyplot as plt
>>>data = {
>>> "2022-2":{"男生":21,"女生":16},
>>> "2022-3":{"男生":25,"女生":14},
>>> "2022-4":{"男生":20,"女生":22},
>>>}
>>>data = pd.DataFrame.from_dict(data,orient="index")
>>>data['男生比例'] = data['男生']/(data['男生']+data['女生'])
>>>data['女生比例'] = data['女生']/(data['男生']+data['女生'])
>>>x = data.index
>>>plt.plot(x,data['男生比例'])
>>>plt.plot(x,data['女生比例'])
>>>plt.legend()
>>>plt.show()
10. 分布分析
10.1 直接获得概率分布
- 将得到的数字排列。
- 如果是离散的,就讲离散值数出来,并将其排列。
- 直接获得的概率分布,有可能有意义的,有可能需要经过比对才有意义,也有可能是没有意义的。
10.2 判断是不是正态分布
- 如果一个分布属于正态分布,就可以用均值、方差等性质来快速定位某具体值相对于整体的位置。
- 判断数据是正态分布,需要用到假设检验的方法。
- 判断数据不是正态分布,可以看数据的偏态和峰态,如果偏态和峰态过大,则不是正态分布。
10.3 极大似然
-
极大似然就是极大相似的样子,是相似程度的衡量,用于比较一组数据和已知的分布有多像。
- 如果一份数据属于正态分布,就一定可以确定一个均值和一个方差;
- 使该均值和方差确定的正态分布下的数据点在这个确定的分布的取值是它们的概率;
- 这些值的和或者集在刚刚确定的均值和方差下是最大的;
- 取这些值的和或者集的对数,这个对数就叫极大似然。
- 对比数据在比如正态分布、t分布或f分布下的极大似然,哪个极大似然越大,就越接近哪种分布。
>>>import matplotlib.pyplot as plt
>>>import numpy as np
>>>import pandas as pd
>>>from scipy.stats import norm
>>>u = 30
>>>d = 2
>>>x = pd.DataFrame(u+d*np.random.randn(5000))
>>>print(f"均值:{x.mean().values}")
>>>print(f"中位数:{x.median().values}")
>>>print(f"峰度:{x.kurt().values}")
>>>print(f"偏度:{x.skew().values}")
>>>print(f"正态分布极大似然估计:{norm.fit(x)}")
>>>print(f"t分布极大似然估计:{t.fit(x)}")
>>>plt.hist(x,bins=100)
>>>plt.show()
均值:[30.01113002]
中位数:[29.99309605]
峰度:[-0.02476348]
偏度:[0.0575392]
正态分布极大似然估计:(30.011130016680593, 1.9851376026711942)
t分布极大似然估计:(44.04636433569924, 30.009866284533302, 1.9221391065961893)
网友评论