Python介绍、 Unix & Linux & Window & Mac 平台安装更新 Python3 及VSCode下Python环境配置配置
python基础知识及数据分析工具安装及简单使用(Numpy/Scipy/Matplotlib/Pandas/StatsModels/Scikit-Learn/Keras/Gensim))
数据探索(数据清洗)①——数据质量分析(对数据中的缺失值、异常值和一致性进行分析)
数据探索(数据清洗)②—Python对数据中的缺失值、异常值和一致性进行处理
数据探索(数据集成、数据变换、数据规约)③—Python对数据规范化、数据离散化、属性构造、主成分分析 降维
数据探索(数据特征分析)④—Python分布分析、对比分析、统计量分析、期性分析、贡献度分析、相关性分析
挖掘建模①—分类与预测
挖掘建模②—Python实现预测
挖掘建模③—聚类分析(包括相关性分析、雷达图等)及python实现
挖掘建模④—关联规则及Apriori算法案例与python实现
挖掘建模⑤—因子分析与python实现

数据特征分析

对数据进行质量分析以后,接下来就是对数据做特征分析。一般可通过绘制图表、计算某些特征量等手段进行数据的特征分析。

分布分析

分布分析能揭示数据的分布特征和分布类型,便于发现某些特大或特小的可疑值。对于定量数据,欲了解其分布形式,是对称的、还是非对称的,可做出频率分布表、绘制频率分布直方图、绘制茎叶图进行直观地分析;对于定性分类数据,可用饼图和条形图直观地显示分布情况。

定量数据的分布分析

对于定量变量而言,做频率分布分析时选择“组数”和“组宽”是主要的问题,一般按照以下步骤:

  1. 求极差 : 极差 = 最大值 - 最小值
  2. 决定组距与组数: 这里根据业务数据的含义,组数 = 极差/组距
  3. 决定分点
  4. 列出频率分布表
  5. 绘制频率分布直方图
遵循的主要原则有
  • 各组之间必须是相互排斥的
  • 各组必须将所有的数据包含在内
  • 各组的组宽最好相等
实例Python实现

在这里插入图片描述

  • 第一步:求极差

  • 第二步:分组
    这里根据业务数据的含义,可取组距为10。

  • 第三步:决定分点,如下表:

  • 第四步:绘制频率分布直方图

  • 第五步:绘制频率分布直方图

代码实现
import pandas as pd

height = 'data/身高_无缺失.xls'  # 餐饮数据
data = pd.read_excel(height, index_col=u'id')  # 读取数据,指定“id”列为索引列
data = data.loc[(data['身高'] > 130) & (data['身高'] < 200)]  # 过滤异常数据
statistics = data.describe()  # 保存基本统计量

statistics.loc['range'] = statistics.loc['max']-statistics.loc['min']  # 极差
statistics.loc['var'] = statistics.loc['std']/statistics.loc['mean']  # 变异系数
statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%']  # 四分位数间距

print(statistics)

在这里插入图片描述

import matplotlib.pyplot as plt  # 导入图像库
import seaborn as sns
from scipy.stats import norm  # 用于拟合正态分布曲线
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
def norm_comparision_plot(data, title, figsize=(12, 10), color="#099DD9",
                          ax=None, surround=True, grid=True):
    # """
    # function: 传入 DataFrame 指定行,绘制其概率分布曲线与正态分布曲线(比较)
    # color: 默认为标准天蓝  #F79420:浅橙  ‘green’:直接绿色(透明度自动匹配)
    # ggplot 经典三原色:'#F77B72':浅红, '#7885CB':浅紫, '#4CB5AB':浅绿
    # ax=None: 默认无需绘制子图的效果;  surround:sns.despine 的经典组合,
    #                                      默认开启,需要显式关闭
    # grid:是否添加网格线,默认开启,需显式关闭
    # """
    plt.figure(figsize=figsize)  # 设置图片大小
    # fit=norm: 同等条件下的正态曲线(默认黑色线);lw-line width 线宽
    sns.distplot(data, fit=norm, color=color,
                 kde_kws={"color": color, "lw": 3}, ax=ax)
    (mu, sigma) = norm.fit(data)  # 求同等条件下正态分布的 mu 和 sigma
    # 添加图例:使用格式化输入,loc='best' 表示自动将图例放到最合适的位置
    plt.legend([title+'概率密度图', '正态分布曲线拟合图 ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.
               format(mu, sigma)], loc='best')
    plt.ylabel('频率')
    plt.title(title+"分布图")
    if surround == True:
        # trim=True-隐藏上面跟右边的边框线,left=True-隐藏左边的边框线
        # offset:偏移量,x 轴向下偏移,更加美观
        sns.despine(trim=True, left=True, offset=10)
    if grid == True:
        plt.grid(True)  # 添加网格线
    # plt.savefig(f".\\img\\{title}分布图.png")
    plt.show()
norm_comparision_plot(data,'身高')

在这里插入图片描述

定性数据的分布分析

  • 对于定性变量,常常根据变量的分类类型来分组,可以采用饼图和条形图来描述定性变量的分布。
  • 饼图的每一个扇形部分代表每一类型的百分比或频数,根据定性变量的类型数目将饼图分成几个部分,每一部分的大小与每一类型的频数成正比;条形图的高度代表每一类型的百分比或频数,条形图的宽度没有意义。

对比分析

对比分析是指把两个相互联系的指标数据进行比较,从数量上展示和说明研究对象规模的大小,水平的高低,速度的快慢,以及各种关系是否协调。特别适用于指标间的横纵向比较、时间序列的比较分析。在对比分析中,选择合适的对比标准是十分关键的步骤,选择得合适,才能做出客观的评价,选择不合适,评价可能得出错误的结论。

对比分析主要有以下两种形式:

  • 第一种:绝对数比较
    它是利用绝对数进行对比,从而寻找差异的一种方法。
  • 第二种:相对数比较
    它是由两个有联系的指标对比计算的,用以反映客观现象之间数量联系程度的综合指标,其数值表现为相对数。由于研究目的和对比基础不同,相对数可以分为以下几种:
    1)结构相对数:
    将同一总体内的部分数值与全部数值对比求得比重,用以说明事物的性质、结构或质量。如居民食品支出额占消费支出总额比重、产品合格率等。
    2)比例相对数:
    将同一总体内不同部分的数值对比,表明总体内各部分的比例关系,如人口性别比例、投资与消费比例等。
    3)比较相对数:
    将同一时期两个性质相同的指标数值对比,说明同类现象在不同空间条件下的数量对比关系。如不同地区商品价格对比,不同行业、不同企业间某项指标对比等。
    4)强度相对数:
    将两个性质不同但有一定联系的总量指标对比,用以说明现象的强度、密度和普遍程度。如人均国内生产总值用“元/人”表示,人口密度用“人/平方公里”表示,也有用百分数或千分数表示的,如人口出生率用‰表示。
    5)计划完成程度相对数:
    是某一时期实际完成数与计划数对比,用以说明计划完成程度。
    6)动态相对数:
    将同一现象在不同时期的指标数值对比,用以说明发展方向和变化的速度。如发展速度、增长速度等。

代码实现

outputfile = 'tmp/sport.csv'  # 输出数据路径
data = pd.read_csv(outputfile) 
data[['年级代码']] = data[['年级代码']].astype(str)  # 转字符串
scorestrs = ["体重指数成绩", "肺活量成绩", "50米跑成绩", "一分钟仰卧成绩",
            "坐位体前屈成绩", "立定跳远成绩", "800米成绩", "总分"]
nj = data.groupby(data['年级代码'])
markers = ['*', 'o', '1', '2']
colors = ['steelblue', 'indianred', 'orange', 'green']
labels = ['大一', '大二', '大三', '大四']
i = 0
for njdm in nj.count().index.tolist():
   data_nj = nj.get_group(njdm)[scorestrs]
   plt.plot(scorestrs,  # x轴数据
            data_nj.mean().values.tolist(),  # y轴数据
            linestyle='-',  # 折线类型,实心线
            marker=markers[i],
            color=colors[i],  # 折线颜色
            label=labels[i]
            )
   i = i+1
plt.ylabel('考试类别')
plt.xlabel('平均分数')
plt.title('不同年级各体测项目平均分')
plt.ylim((0, 100))  # y轴的刻度范围被设为a'到b'
plt.legend() # 添加图例
plt.show()

在这里插入图片描述

统计量分析

用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两个方面进行分析。
平均水平的指标是对个体集中趋势的度量,使用最广泛的是均值和中位数;反映变异程度的指标则是对个体离开平均水平的度量,使用较广泛的是标准差(方差)、四分位间距。
集中趋势度量主要有:均值、中位数、众数
离中趋势度量主要有:极差、标准差、变异系数

周期性分析

周期性分析是探索某个变量是否随着时间变化而呈现出某种周期变化趋势。周期性趋势相对较长的有年度周期性趋势、季节性周期趋势,相对较短的一般有月度周期性趋势、周度周期性趋势,甚至更短的天、小时周期性趋势。

贡献度分析

贡献度分析又称帕累托分析,帕累托法则又称20/80定律。同样的投入放在不同的地方会产生不同的效益。比如对一个公司来讲,80%的利润常常来自于20%最畅销的产品;而其他80%的产品只产生了20%的利润。贡献度分析要求我们抓住问题的重点,找到那最有效的20%的热销产品、渠道或者销售人员,在最有效的20%上投入更多资源,尽量减少浪费在80%低效的地方。

相关性分析

分析连续变量之间线性的相关程度的强弱,并用适当的统计指标表示出来的过程称为相关分析。
相关性分析方法主要有:

直接绘制散点图

在这里插入图片描述

绘制散点图矩阵

需要同时考察多个变量间的相关关系时,若一一绘制它们间的简单散点图,十分麻烦。此时可利用散点图矩阵来同时绘制各自变量间的散点图,这样可以快速发现多个变量间的主要相关性,这一点在进行多元线性回归时显得尤为重要。
代码实现
# 相关关系分析
from pandas.plotting import scatter_matrix
stock_data = read_excel('.\\doc\\data.xls',
                            parse_dates=['date'], index_col='date')
scatter_matrix(
    data[['volume', "open", "close", "low"]])
plt.show()

在这里插入图片描述

计算相关系数

为了更加准确的描述变量之间的线性相关程度,可以通过计算相关系数来进行相关分析。在二元变量的相关分析过程中比较常用的如Pearson相关系数、Spearman秩相关系数和判定系数。

在这里插入图片描述
在这里插入图片描述

代码实现

Spearman(Pearson)相关系数

import numpy as np
cov = np.corrcoef(
    data[['volume', 'USD/CNY', 'p_change', 'EUR/CNY', '100JPY/CNY']].T)
print(cov)
img = plt.matshow(cov)
plt.colorbar(img, ticks=[-1, 0, 1])
plt.show()

在这里插入图片描述

在这里插入图片描述
pearson皮尔森相关系数

import seaborn as sns
ylabels = data[['volume', 'USD/CNY', 'p_change', 'EUR/CNY', '100JPY/CNY']].columns.values.tolist()
plt.subplots(figsize=(15, 10))  # 设置画面大小
# 皮尔逊相关系数——Pearson correlation coefficient,用于度量两个变量之间的相关性,其值介于-1与1之间,值越大则说明相关性越强。
  '''
  0.8-1.0     极强相关
  0.6-0.8     强相关
  0.4-0.6     中等程度相关
  0.2-0.4     弱相关
  0.0-0.2     极弱相关或无相关
  '''
sns.heatmap(data['volume', 'USD/CNY', 'p_change', 'EUR/CNY', '100JPY/CNY']].corr(), annot=True, vmax=1, square=True,
            yticklabels=ylabels, xticklabels=ylabels, cmap="RdBu")

在这里插入图片描述

数据特征分析常用Python函数

统计特征函数

统计特征函数用于计算数据的均值、方差、标准差、分位数、相关系数、协方差等,这些统计特征能反映出数据的整体趋势。本小节所介绍的统计特征函数如下表所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sum

功能:计算数据样本的总和(按列计算)
使用格式:
D.sum() 按列计算样本D的总和,样本D可为DataFrame或者Series。

mean

功能:计算数据样本的算术平均数
使用格式:
D.mean() 按列计算样本D的均值,样本D可为DataFrame或者Series。

var

功能:计算数据样本的方差
使用格式:
D.var() 按列计算样本D的均值,样本D可为DataFrame或者Series。

std

功能:计算数据样本的标准差
使用格式:
D.std() 按列计算样本D的均值,样本D可为DataFrame或者Series。

corr

功能:计算数据样本的Spearman(Pearson)相关系数矩阵
使用格式:
D.corr(method=‘pearson’) 样本D可为DataFrame,返回相关系数矩阵,method参数为计算方法,支持ppearson(皮尔森相关系数,默认选项)、kendall(肯德尔系数)、spearman(斯皮尔曼系数);
S1.corr(S2, method=‘pearson’) S1、S2均为Series,这种格式指定计算两个Series之间的相关系数。
在这里插入图片描述

cov

功能:计算数据样本的协方差矩阵
使用格式:
D.cov() 样本D可为DataFrame,返回协方差矩阵;
S1.cov(S2) S1、S2均为Series,这种格式指定计算两个Series之间的协方差。
在这里插入图片描述

skew/kurt

功能:计算数据样本的偏度(三阶矩)/ 峰度(四阶矩)
使用格式:
D.skew() / D.kurt() 计算样本D的偏度(三阶矩)/ 峰度(四阶矩)。
样本D可为DataFrame或Series。

Describe

功能:直接给出样本数据的一些基本的统计量,包括均值、标准差、最大值、最小值、分位数等。
使用格式:
D.describe() 括号里可以带一些参数,比如percentiles = [0.2, 0.4, 0.6, 0.8]就是指定只计算0.2、0.4、0.6、0.8分位数,而不是默认的1/4、1/2、3/4分位数。

cum系列函数

cum系列函数是作为DataFrame或Series对象的方法而出现的,命令格式为D.cumsum()。

rolling_系列

rolling_系列是pandas的函数,不是DataFrame或Series对象的方法,使用格式为pd.rolling_mean(D, k),意思是每k列计算一次均值,滚动计算。

统计作图函数

通过统计作图函数绘制的图表可以直观地反映出数据及统计量的性质及其内在规律,如盒图可以表示多个样本的均值,误差条形图能同时显示下限误差和上限误差,最小二乘拟合曲线图能分析两变量间的关系。
Python的主要作图库是Matplotlib,而Pandas基于Matplotlib并对某些命令作了简化,因此作图通常是Matplotlib和Pandas相互结合着使用。
在这里插入图片描述

导入包在这里插入图片描述

plot

功能:绘制线性二维图,折线图。
使用格式:
plt.plot(x, y, S) 这是Matplotlib通用的绘图方式,绘制y对于x(即以x为横轴的二维图形),字符串参量S指定绘制时图形的类型、样式和颜色,常用的选项有:’b’为蓝色、’r’为红色、’g’为绿色、’o’为圆圈、’+’为加号标记、’ -’为实线、’ --’为虚线。当x、y均为实数同维向量时,则描出点 ,然后用直线依次相连。
D.plot(kind = ‘box’) 这里使用的是DataFrame或Series对象内置的方法作图,默认以Index为横坐标,每列数据为纵坐标自动作图,通过kind参数指定作图类型,支持line(线)、bar(条形)、barh、hist(直方图)、box(箱线图)、kde(密度图)、area、pie(饼图)等,同时也能够接受plt.plot()中接受的参数。因此,如果数据已经被加载为Pandas中的对象,那么以这种方式作图是比较简洁的。
在这里插入图片描述

pie

功能:绘制饼型图。
使用格式:
plt.pie(size) 使用Matplotlib绘制饼图,其中size是一个列表,记录各个扇形的比例。
在这里插入图片描述

hist

功能:绘制二维条形直方图,可显示数据的分布情形。
使用格式:
Plt.hist(x, y) 其中x是待绘制直方图的一维数组,y可以是整数,表示均匀分为n组;也可以是列表,列表各个数字为分组的边界点(即手动指定分界点)。
在这里插入图片描述

boxplot

功能:绘制样本数据的箱型图。
使用格式:
D.boxplot() / D.plot(kind = ‘box’) 有两种比较简单的方式绘制D的箱型图,其中一种是直接调用DataFrame的boxplot()方法,另外一种是调用Series或者DataFrame的plot()方法,并用kind参数指定箱型图(box)。其中,盒子的上、下四分位数和中值处有一条线段。箱形末端延伸出去的直线称为须,表示盒外数据的长度。如果在须外没有数据,则在须的底部有一点,点的颜色与须的颜色相同。
在这里插入图片描述

plot(logx = True) / plot(logy = True)

功能:绘制x或y轴的对数图形。
使用格式:
D.plot(logx = True) / D.plot(logy = True) 对x轴(y轴)使用对数刻度(以10为底),y轴(x轴)使用线性刻度,进行plot函数绘图,D为Pandas的DataFrame或者Series。
在这里插入图片描述

plot(yerr = error)

功能:绘制误差条形图。
使用格式:
D.plot(yerr = error) 绘制误差条形图。D为Pandas的DataFrame或Series,代表着均值数据列,而error则是误差列,此命令在y轴方向画出误差棒图;类似地,如果设置参数xerr = error,则在x轴方向画出误差棒图。
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐