精华内容
下载资源
问答
  • 利用python对数据进行描述性统计分析-以鸢尾花数据集为例学习前准备下载Anaconda软件主题主要讲述数据分析中,数理统计基础中的描述性统计知识和python中的实现。知识要点数理统计基础数理统计,以概率论为基础,...

    03958a9e342a437ab694d64d212bbb5a.png

    利用python对数据进行描述性统计分析-以鸢尾花数据集为例

    学习前准备

    • 下载Anaconda软件

    主题

    主要讲述数据分析中,数理统计基础中的描述性统计知识和python中的实现。

    知识要点

    数理统计基础

    数理统计,以概率论为基础,研究大量随机现象的统计规律性,分为以下两类:

    • 描述统计
    • 推断统计

    描述性统计分析概述

    概念

    描述性统计所提取的统计信息,称之为统计量,主要包括:

    • 频数与频率
    • 集中趋势分析:均值、中位数、众数、分位数
    • 离散程度分析:极差、方差、标准差
    • 分布形状:偏度、峰度

    变量类型

    • 类别变量:无序类别变量、有序类别变量‘
    • 数值变量:连续变量、离散变量

    统计量

    频数与频率

    import numpy as np
    import pandas as pd 
    import matplotlib.pyplot as plt
    import seaborn as sns
    from sklearn.datasets import load_iris
    import warnings
    
    # 设置seaborn绘图的样式。
    
    sns.set(style= "darkgrid", font_scale=1.2)
    #设置中文字体
    plt.rcParams["font.family"] = "SimHei"
    #是否使用Unicode字符集中的负号
    plt.rcParams["axes.unicode_minus"] = False
    
    # 忽略警告信息。
    
    warnings.filterwarnings("ignore")
    #加载鸢尾花数据集
    iris = load_iris()
    #iris.data 鸢尾花数据集,
    print(iris.data[:10])
    #iris.target:每朵鸢尾花对应的类别。(取值为0,1,2)
    print(iris.target[::20])
    #iris.feature_names: 特征列的名称
    print(iris.feature_names)
    #iris.target_names: 鸢尾花类别的名称
    print(iris.target_names)
    [[5.1 3.5 1.4 0.2]
     [4.9 3.  1.4 0.2]
     [4.7 3.2 1.3 0.2]
     [4.6 3.1 1.5 0.2]
     [5.  3.6 1.4 0.2]
     [5.4 3.9 1.7 0.4]
     [4.6 3.4 1.4 0.3]
     [5.  3.4 1.5 0.2]
     [4.4 2.9 1.4 0.2]
     [4.9 3.1 1.5 0.1]]
    [0 0 0 1 1 2 2 2]
    ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
    ['setosa' 'versicolor' 'virginica']
    # 将鸢尾花数据与对应的类型合并,组合成完整的记录。记得iris.data, iris.target.reshape()要带中括号
    
    data = np.concatenate([iris.data, iris.target.reshape(-1,1)], axis = 1)
    data = pd.DataFrame(data, 
                        columns=["sepal length", "sepal width", "petal length", "petal width","type"])
    data.sample(10)# sample(), 随机抽样

    ad659c260eac6750ad3f3f01479b0331.png
    将鸢尾花数据与对应的类型合并,组合成完整的记录
    frequency = data["type"].value_counts()
    print(frequency)
    #计算每个类别的频率
    percentage = frequency * 100 / len(data)
    print(percentage)
    2.0    50
    1.0    50
    0.0    50
    Name: type, dtype: int64
    2.0    33.333333
    1.0    33.333333
    0.0    33.333333
    Name: type, dtype: float64
    # 绘制直方图,展示频数
    
    frequency.plot(kind="bar")
    
    # 或者通过seaborn 来绘制
    
    sns.countplot(x= "type", data=data)

    8258e9155e48e0a8f739bc838a6e2785.png

    意义

    频数(频率)统计量 可以用来衡量分类变量中,每个不同类别出现的多少

    集中趋势

    均值

    即平均值,其为一组数据的总和除以数据的个数

    中位数

    一组数据升序排列,位于最中间位置的值

    众数

    一组数据中出现次数最多的值

    python实现

    我们以花萼长度列(sepal length)为例,计算该列的均值、中位数、众数。

    # 计算花萼长度的均值。
    mean = data["sepal length"].mean()
    # 计算花萼长度的中位数。
    median = data["sepal length"].median()
    # 计算花萼长度的众数。
    s = data["sepal length"].mode()
    print(s)
    # 注意,mode方法返回的是Series类型。
     mode = s.iloc[0] #将值取出,iloc函数:通过行号来取行数据(如取第二行的数据),loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行)
    print("mean, median, mode:",mean, median, mode)

    绘制鸢尾花的花萼长度列的数据分布情况

    # 绘制数据的分布(直方图 + 密度图)
    sns.distplot(data["sepal length"])
    # 绘制垂直线
    plt.axvline(mean, ls = '-', color = 'r', label = "均值")
    plt.axvline(median, ls = '-', color = 'g', label = "中位数")
    plt.axvline(mode, ls = '-', color = 'indigo', label = "众数")
    plt.legend()

    3b5cf47f0952d512b1f0d5717527703c.png

    意义

    • 集中趋势可以衡量数据的综合水平
    • 在缺失值填充中,有重要作用,根据实际情况选择均值、中位数、众数的其中之一来填充缺失值

    分位数

    概念

    ** 分位数(Quantile),亦称分位点**,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。

    四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

    1)第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;

    2)第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;

    3)第三四分位数(Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。

    第三四分位数与第一四分位数的差距又称四分位距。

    Numpy中计算分位数

    #用Numpy计算
    x = np.arange(10,19)
    n = len(x)
    # 计算四分位的索引(index)
    q1_index = (n-1)*0.25
    q2_index = (n-1)*0.5
    q3_index = (n-1)*0.75
    print(q1_index,q2_index,q3_index)
    2.0 4.0 6.0
    # 将index转换成整数类型。
    index = np.array([q1_index, q2_index, q3_index]).astype(np.int32)
    print(x[index])
    [12 14 16]

    使用pandas计算分位数

    # 使用pandas计算分位数
    x = [1,3,5,7,9,20,21,23,40]
    s = pd.Series(x)
    print(s.describe())
    count     9.000000
    mean     14.333333
    std      12.678722
    min       1.000000
    25%       5.000000
    50%       9.000000
    75%      21.000000
    max      40.000000
    dtype: float64
    #默认情况 describe 会统计四分位的值,可以通过percentiles参数来自定义需要的分位
    s.describe(percentiles=[0.25,0.9])
    count     9.000000
    mean     14.333333
    std      12.678722
    min       1.000000
    25%       5.000000
    50%       9.000000
    90%      26.400000
    max      40.000000
    dtype: float64
    x = [1,3,5,7,9,20,21,23,40]
    x = np.array(x)#只有整数标量数组才能转换为标量索引。这应该是最新版本的python、numpy的问题。版本升级,有些方法已经发生改变,使将元素数组作为标量进行索引成为一个错误。
    plt.figure(figsize=(15, 4))
    plt.xticks(x)
    plt.plot(x, np.zeros(len(x)), ls="", marker="D", ms=15, label="元素值")
    plt.plot(x[index], np.zeros(len(index)), ls="", marker="X", ms=15, label="四分位值")
    plt.legend()

    7d004cdb5b2386155fbc280bf9bf2f5f.png

    意义

    通过分位数和极值,可以知道数据的分布情况,

    • 如果其他值相差较小,3/4分位与最大值相差很多,则数据呈现右偏分布。
    • 如果其他值相差较小,1/4分位与最小值相差很多,则数据呈现左偏分布。

    可以通过箱线图结合四分位来查看数据的分布和检测异常值,之后的文章会讲到。

    离散程度

    集中趋势可以体现数据的综合水平,只看集中趋势会有一定的局限,所以我们需要考虑数据和均值偏离程度的大小。

    极差

    一组数据中,最大最小值之差

    方差

    方差体现一组数据中每个元素与均值偏离的大小。

    标准差

    方差的开方

    意义

    方差(标准差)体现数据的分散性,方差(标准差)越大,数据越离散,反之越集中。

    方差(标准差)可以体现数据的波动性(稳定性),方差(标准差)越大,波动性越大,反之,波动性越小。

    python计算极差、方差、标准差

    # 计算极差。
    sub = data["sepal_length"].max() - data["sepal_length"].min()
    # 计算方差。
    var = data["sepal_length"].var()
    # 计算标准差。
    std = data["sepal_length"].std()
    print(sub, var, std)
    3.6000000000000005 0.6856935123042505 0.8280661279778629

    绘制图形,进行对比

    plt.figure(figsize=(15, 4))
    plt.ylim(-0.5, 1.5)#y轴的范围
    plt.plot(data["petal length"], np.zeros(len(data)), ls="", marker="o", ms=10, color="g", label="花瓣长度")
    plt.plot(data["petal width"], np.ones(len(data)), ls="", marker="o", ms=10, color="r", label="花瓣宽度")
    plt.axvline(data["petal length"].mean(), ls="--", color="g", label="花瓣长度均值")
    plt.axvline(data["petal_width"].mean(), ls="--", color="r", label="花瓣宽度均值")
    plt.legend()

    bea87a095b80c8441ba58e15a6fcfb82.png

    分布形状

    偏度

    偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度(Skewness)亦称偏态、偏态系数。

    表征概率分布密度曲线相对于平均值不对称程度的特征数。直观看来就是密度函数曲线尾部的相对长度。

    的偏度为0,两侧尾部长度对称。若以bs表示偏度。

    bs<0称分布具有负偏离,也称左偏态,此时数据位于均值左边的比位于右边的少,直观表现为左边的尾部相对于与右边的尾部要长,因为有少数变量值很小,使曲线左侧尾部拖得很长;

    bs>0 称分布具有正偏离,也称右偏态,此时数据位于均值右边的比位于左边的少,直观表现为右边的尾部相对于与左边的尾部要长,因为有少数变量值很大,使曲线右侧尾部拖得很长;

    而bs接近0则可认为分布是对称的。

    若知道分布有可能在偏度上偏离正态分布时,可用偏离来检验分布的正态性。右偏时一般算术平均数>中位数>众数,左偏时相反,即众数>中位数>平均数。正态分布三者相等。

    # 构造左偏分布数据。
    t1 = np.random.randint(1, 11, size=100)
    t2 = np.random.randint(11, 21, size=500)
    t3 = np.concatenate([t1, t2])
    left_skew = pd.Series(t3)
    # 构造右偏分布数据。
    t1 = np.random.randint(1, 11, size=500)
    t2 = np.random.randint(11, 21, size=100)
    t3 = np.concatenate([t1, t2])
    right_skew = pd.Series(t3)
    # 计算偏度。
    print(left_skew.skew(), right_skew.skew())
    # 绘制核密度图。
    sns.kdeplot(left_skew, shade=True, label="左偏")
    sns.kdeplot(right_skew, shade=True, label="右偏")
    plt.legend()

    739c59532a8d67d0f8bfdec59beca711.png

    峰度

    峰度是描述数据分布陡缓程度的统计量,计算公式为中心距与标准差四次方的比值

    • 对于标准正态分布,峰度为0
    • 峰度>0,则密度图高于标准正态分布,分布较密集,即方差较小
    • 峰度<0,与之相反。
    # 标准正态分布。
    standard_normal = pd.Series(np.random.normal(0, 1, size=10000))
    print("标准正态分布峰度:", standard_normal.kurt(), "标准差:", standard_normal.std())
    print("花萼宽度峰度:", data["sepal width"].kurt(), "标准差:", data["sepal width"].std())
    print("花瓣长度峰度:", data["petal length"].kurt(), "标准差:", data["petal length"].std())
    sns.kdeplot(standard_normal, label="标准正态分布")
    sns.kdeplot(data["sepal width"], label="花萼宽度")
    sns.kdeplot(data["petal length"], label="花瓣长度")
    
    标准正态分布峰度: 0.03850702132794659 标准差: 1.0042152792418642
    花萼宽度峰度: 0.2282490424681929 标准差: 0.435866284936698
    花瓣长度峰度: -1.4021034155217518 标准差: 1.7652982332594667

    461ad004c39dab0a4ce6866f666d36a2.png

    意义

    通过偏度与峰度统计量:

    • 可以得知数据的分布特征
    • 可以利用该特征进行数据的正态性检验(因为我们很多理论都是建立在正态分布上的《所以正态性检验是很重要的)

    拓展点

    我们还可以在上面的基础上拓展一些相关知识:

    • seaborn的使用,可以查看官方教程
    • 分位数的计算细节
    • 箱线图的运用

    总结

    • 描述性统计分析的概念和应用
    • 频率频数的使用
    • 集中趋势和离散程度
    • 数据分布形状之偏度和峰度
    • 统计量之python实现
    展开全文
  • 利用python对数据进行描述性统计分析-以鸢尾花数据集为例学习前准备下载Anaconda软件主题主要讲述数据分析中,数理统计基础中的描述性统计知识和python中的实现。知识要点数理统计基础数理统计,以概率论为基础,...

    利用python对数据进行描述性统计分析-以鸢尾花数据集为例

    学习前准备下载Anaconda软件

    主题

    主要讲述数据分析中,数理统计基础中的描述性统计知识和python中的实现。

    知识要点

    数理统计基础

    数理统计,以概率论为基础,研究大量随机现象的统计规律性,分为以下两类:描述统计

    推断统计

    描述性统计分析概述

    概念

    描述性统计所提取的统计信息,称之为统计量,主要包括:频数与频率

    集中趋势分析:均值、中位数、众数、分位数

    离散程度分析:极差、方差、标准差

    分布形状:偏度、峰度

    变量类型类别变量:无序类别变量、有序类别变量‘

    数值变量:连续变量、离散变量

    统计量

    频数与频率

    import numpy as np

    import pandas as pd

    import matplotlib.pyplot as plt

    import seaborn as sns

    from sklearn.datasets import load_iris

    import warnings

    # 设置seaborn绘图的样式。

    sns.set(style= "darkgrid", font_scale=1.2)

    #设置中文字体

    plt.rcParams["font.family"] = "SimHei"

    #是否使用Unicode字符集中的负号

    plt.rcParams["axes.unicode_minus"] = False

    # 忽略警告信息。

    warnings.filterwarnings("ignore")

    #加载鸢尾花数据集

    iris = load_iris()

    #iris.data 鸢尾花数据集,

    print(iris.data[:10])

    #iris.target:每朵鸢尾花对应的类别。(取值为0,1,2)

    print(iris.target[::20])

    #iris.feature_names: 特征列的名称

    print(iris.feature_names)

    #iris.target_names: 鸢尾花类别的名称

    print(iris.target_names)

    [[5.1 3.5 1.4 0.2]

    [4.9 3. 1.4 0.2]

    [4.7 3.2 1.3 0.2]

    [4.6 3.1 1.5 0.2]

    [5. 3.6 1.4 0.2]

    [5.4 3.9 1.7 0.4]

    [4.6 3.4 1.4 0.3]

    [5. 3.4 1.5 0.2]

    [4.4 2.9 1.4 0.2]

    [4.9 3.1 1.5 0.1]]

    [0 0 0 1 1 2 2 2]

    ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

    ['setosa' 'versicolor' 'virginica']

    # 将鸢尾花数据与对应的类型合并,组合成完整的记录。记得iris.data, iris.target.reshape()要带中括号

    data = np.concatenate([iris.data, iris.target.reshape(-1,1)], axis = 1)

    data = pd.DataFrame(data,

    columns=["sepal length", "sepal width", "petal length", "petal width","type"])

    data.sample(10)# sample(), 随机抽样

    将鸢尾花数据与对应的类型合并,组合成完整的记录

    frequency = data["type"].value_counts()

    print(frequency)

    #计算每个类别的频率

    percentage = frequency * 100 / len(data)

    print(percentage)

    2.0 50

    1.0 50

    0.0 50

    Name: type, dtype: int64

    2.0 33.333333

    1.0 33.333333

    0.0 33.333333

    Name: type, dtype: float64

    # 绘制直方图,展示频数

    frequency.plot(kind="bar")

    # 或者通过seaborn 来绘制

    sns.countplot(x= "type", data=data)

    意义

    频数(频率)统计量 可以用来衡量分类变量中,每个不同类别出现的多少

    集中趋势

    均值

    即平均值,其为一组数据的总和除以数据的个数

    中位数

    一组数据升序排列,位于最中间位置的值

    众数

    一组数据中出现次数最多的值

    python实现

    我们以花萼长度列(sepal length)为例,计算该列的均值、中位数、众数。

    # 计算花萼长度的均值。

    mean = data["sepal length"].mean()

    # 计算花萼长度的中位数。

    median = data["sepal length"].median()

    # 计算花萼长度的众数。

    s = data["sepal length"].mode()

    print(s)

    # 注意,mode方法返回的是Series类型。

    mode = s.iloc[0] #将值取出,iloc函数:通过行号来取行数据(如取第二行的数据),loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行)

    print("mean, median, mode:",mean, median, mode)

    绘制鸢尾花的花萼长度列的数据分布情况

    # 绘制数据的分布(直方图 + 密度图)

    sns.distplot(data["sepal length"])

    # 绘制垂直线

    plt.axvline(mean, ls = '-', color = 'r', label = "均值")

    plt.axvline(median, ls = '-', color = 'g', label = "中位数")

    plt.axvline(mode, ls = '-', color = 'indigo', label = "众数")

    plt.legend()

    意义集中趋势可以衡量数据的综合水平

    在缺失值填充中,有重要作用,根据实际情况选择均值、中位数、众数的其中之一来填充缺失值

    分位数

    概念

    ** 分位数(Quantile),亦称分位点**,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。

    四分位数(Quartile)是统计学中分位数的一种,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

    1)第一四分位数(Q1),又称“较小四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;

    2)第二四分位数(Q2),又称“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;

    3)第三四分位数(Q3),又称“较大四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。

    第三四分位数与第一四分位数的差距又称四分位距。

    Numpy中计算分位数

    #用Numpy计算

    x = np.arange(10,19)

    n = len(x)

    # 计算四分位的索引(index)

    q1_index = (n-1)*0.25

    q2_index = (n-1)*0.5

    q3_index = (n-1)*0.75

    print(q1_index,q2_index,q3_index)

    2.0 4.0 6.0

    # 将index转换成整数类型。

    index = np.array([q1_index, q2_index, q3_index]).astype(np.int32)

    print(x[index])

    [12 14 16]

    使用pandas计算分位数

    # 使用pandas计算分位数

    x = [1,3,5,7,9,20,21,23,40]

    s = pd.Series(x)

    print(s.describe())

    count 9.000000

    mean 14.333333

    std 12.678722

    min 1.000000

    25% 5.000000

    50% 9.000000

    75% 21.000000

    max 40.000000

    dtype: float64

    #默认情况 describe 会统计四分位的值,可以通过percentiles参数来自定义需要的分位

    s.describe(percentiles=[0.25,0.9])

    count 9.000000

    mean 14.333333

    std 12.678722

    min 1.000000

    25% 5.000000

    50% 9.000000

    90% 26.400000

    max 40.000000

    dtype: float64

    x = [1,3,5,7,9,20,21,23,40]

    x = np.array(x)#只有整数标量数组才能转换为标量索引。这应该是最新版本的python、numpy的问题。版本升级,有些方法已经发生改变,使将元素数组作为标量进行索引成为一个错误。

    plt.figure(figsize=(15, 4))

    plt.xticks(x)

    plt.plot(x, np.zeros(len(x)), ls="", marker="D", ms=15, label="元素值")

    plt.plot(x[index], np.zeros(len(index)), ls="", marker="X", ms=15, label="四分位值")

    plt.legend()

    意义

    通过分位数和极值,可以知道数据的分布情况,如果其他值相差较小,3/4分位与最大值相差很多,则数据呈现右偏分布。

    如果其他值相差较小,1/4分位与最小值相差很多,则数据呈现左偏分布。

    可以通过箱线图结合四分位来查看数据的分布和检测异常值,之后的文章会讲到。

    离散程度

    集中趋势可以体现数据的综合水平,只看集中趋势会有一定的局限,所以我们需要考虑数据和均值偏离程度的大小。

    极差

    一组数据中,最大最小值之差

    方差

    方差体现一组数据中每个元素与均值偏离的大小。

    标准差

    方差的开方

    意义

    方差(标准差)体现数据的分散性,方差(标准差)越大,数据越离散,反之越集中。

    方差(标准差)可以体现数据的波动性(稳定性),方差(标准差)越大,波动性越大,反之,波动性越小。

    python计算极差、方差、标准差

    # 计算极差。

    sub = data["sepal_length"].max() - data["sepal_length"].min()

    # 计算方差。

    var = data["sepal_length"].var()

    # 计算标准差。

    std = data["sepal_length"].std()

    print(sub, var, std)

    3.6000000000000005 0.6856935123042505 0.8280661279778629

    绘制图形,进行对比

    plt.figure(figsize=(15, 4))

    plt.ylim(-0.5, 1.5)#y轴的范围

    plt.plot(data["petal length"], np.zeros(len(data)), ls="", marker="o", ms=10, color="g", label="花瓣长度")

    plt.plot(data["petal width"], np.ones(len(data)), ls="", marker="o", ms=10, color="r", label="花瓣宽度")

    plt.axvline(data["petal length"].mean(), ls="--", color="g", label="花瓣长度均值")

    plt.axvline(data["petal_width"].mean(), ls="--", color="r", label="花瓣宽度均值")

    plt.legend()

    分布形状

    偏度

    偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度(Skewness)亦称偏态、偏态系数。

    表征概率分布密度曲线相对于平均值不对称程度的特征数。直观看来就是密度函数曲线尾部的相对长度。

    的偏度为0,两侧尾部长度对称。若以bs表示偏度。

    bs<0称分布具有负偏离,也称左偏态,此时数据位于均值左边的比位于右边的少,直观表现为左边的尾部相对于与右边的尾部要长,因为有少数变量值很小,使曲线左侧尾部拖得很长;

    bs>0 称分布具有正偏离,也称右偏态,此时数据位于均值右边的比位于左边的少,直观表现为右边的尾部相对于与左边的尾部要长,因为有少数变量值很大,使曲线右侧尾部拖得很长;

    而bs接近0则可认为分布是对称的。

    若知道分布有可能在偏度上偏离正态分布时,可用偏离来检验分布的正态性。右偏时一般算术平均数>中位数>众数,左偏时相反,即众数>中位数>平均数。正态分布三者相等。

    # 构造左偏分布数据。

    t1 = np.random.randint(1, 11, size=100)

    t2 = np.random.randint(11, 21, size=500)

    t3 = np.concatenate([t1, t2])

    left_skew = pd.Series(t3)

    # 构造右偏分布数据。

    t1 = np.random.randint(1, 11, size=500)

    t2 = np.random.randint(11, 21, size=100)

    t3 = np.concatenate([t1, t2])

    right_skew = pd.Series(t3)

    # 计算偏度。

    print(left_skew.skew(), right_skew.skew())

    # 绘制核密度图。

    sns.kdeplot(left_skew, shade=True, label="左偏")

    sns.kdeplot(right_skew, shade=True, label="右偏")

    plt.legend()

    峰度

    峰度是描述数据分布陡缓程度的统计量,计算公式为中心距与标准差四次方的比值对于标准正态分布,峰度为0

    峰度>0,则密度图高于标准正态分布,分布较密集,即方差较小

    峰度<0,与之相反。

    # 标准正态分布。

    standard_normal = pd.Series(np.random.normal(0, 1, size=10000))

    print("标准正态分布峰度:", standard_normal.kurt(), "标准差:", standard_normal.std())

    print("花萼宽度峰度:", data["sepal width"].kurt(), "标准差:", data["sepal width"].std())

    print("花瓣长度峰度:", data["petal length"].kurt(), "标准差:", data["petal length"].std())

    sns.kdeplot(standard_normal, label="标准正态分布")

    sns.kdeplot(data["sepal width"], label="花萼宽度")

    sns.kdeplot(data["petal length"], label="花瓣长度")

    标准正态分布峰度: 0.03850702132794659 标准差: 1.0042152792418642

    花萼宽度峰度: 0.2282490424681929 标准差: 0.435866284936698

    花瓣长度峰度: -1.4021034155217518 标准差: 1.7652982332594667

    意义

    通过偏度与峰度统计量:可以得知数据的分布特征

    可以利用该特征进行数据的正态性检验(因为我们很多理论都是建立在正态分布上的《所以正态性检验是很重要的)

    拓展点

    我们还可以在上面的基础上拓展一些相关知识:seaborn的使用,可以查看官方教程

    分位数的计算细节

    箱线图的运用

    总结描述性统计分析的概念和应用

    频率频数的使用

    集中趋势和离散程度

    数据分布形状之偏度和峰度

    统计量之python实现

    展开全文
  • 描述批处理数据和流式处理数据之间的差异 数据处理就是通过某个过程将原始数据转换为有意义的信息。 根据数据引入系统的方式,可能需要在每个数据项到达时进行处理,也可能需要先缓冲原始数据,然后按组进行处理。 ...

    描述批处理数据和流式处理数据之间的差异

    数据处理就是通过某个过程将原始数据转换为有意义的信息。 根据数据引入系统的方式,可能需要在每个数据项到达时进行处理,也可能需要先缓冲原始数据,然后按组进行处理。 在数据到达时进行处理被称为流式处理。 对组中的数据进行缓冲,然后处理,称为批处理。

    了解批处理

    在批处理中,新到达的数据元素将被收集到一个组中。 然后,在将来的某个时间对整个组进行批处理。 处理每个组的确切时间可以通过多种方式来确定。 例如,可以根据计划的时间间隔(例如,每小时)处理数据,也可以在到达特定数量的数据时触发数据处理,或者作为某些其他事件的结果进行处理。

    批处理的一个示例是通常在选举中计算选票的方式。 投票时不输入选票,而是在同一时间以一个批次全部输入。

    批处理的优点包括:

    • 可以在方便的时间处理大量数据。
    • 可以计划在计算机或系统可能处于空闲状态(如整夜)或在非高峰时间运行。

    批处理的缺点包括:

    • 引入数据和获取结果之间的时间延迟。
    • 在执行批处理之前,必须准备好批处理作业的所有输入数据。 这意味着必须仔细检查数据。 在批处理作业期间发生的数据问题、错误和程序崩溃会使整个进程停止运行。 必须仔细检查输入数据,然后才能再次运行作业。 甚至小的数据错误(如日期中的录入错误)也会阻碍批处理作业运行。

    高效使用批处理的一个示例是连接到大型机系统。 大量的数据需要传输到数据分析系统中,并且这些数据不是实时的。 批处理效率低下的一个示例是传输少量的实时数据,例如金融股票代码。

    了解流式处理和实时数据

    在流式处理中,每个新数据在到达时就会得到处理。 例如,数据引入本质上是一种流式处理进程。

    流式处理过程是实时处理数据。 与批处理不同,不存在等待下一批要处理的数据的情况,而是将数据作为独立单位进行处理,不视为一次处理一个的批次。 在大多数连续生成新动态数据的情况下,流式数据处理非常有用。

    流式处理数据的示例包括:

    • 金融机构会实时跟踪股票市场的变化,计算风险值,并根据股票价格变动自动重新平衡投资组合。
    • 在线游戏公司收集有关玩家游戏交互的实时数据,并将数据馈送到其游戏平台。 然后,它会实时分析数据,提供奖励和动态体验来吸引玩家。
    • 一个房地产网站需要跟踪使用者的移动设备中的数据子集,并基于其地理位置对要访问的房产提供实时房产建议。

    流处理非常适合需要实时响应的时间关键操作。 例如,监控建筑物烟雾和热量的系统需要触发警报并为门解锁,以便在发生火灾时居民能够立即逃离。

    了解批处理数据和流式处理数据之间的差异

    批处理和流式处理之间除了处理数据的方式以外,还有一些其他不同之处:

    • 数据范围:批处理可处理数据集中的所有数据。 流式处理通常只能访问接收到的最新数据,或在滚动时间范围(例如过去 30 秒)内访问。

    • 数据大小:批处理适用于高效处理大型数据集。 流式处理适用于单个记录或包含少量记录的小批数据。

    • 性能:批处理的延迟通常是几个小时。 流式处理通常会立即发生,延迟以秒或毫秒计。 延迟是接收和处理数据所需的时间。

    • 分析:通常使用批处理来执行复杂的分析。 流式处理用于简单的响应功能、聚合或计算(例如移动平均值)。

    展开全文
  • Python数据描述与分析

    2019-08-14 20:26:41
    而后才是对数据进行建模分析,挖掘数据中隐藏的位置信息。怒气按在数据描述和简单分析方面做得比较好的是Pandas库。当然,它还需要结合Numpy。Scipy等科学计算相关库才能发挥功效。 Pandas数据结构 在进行Pandas相.....

    在进行数据分析之前,我们需要做的事情是对数据有初步的了解,比如对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数据的形状等;而后才是对数据进行建模分析,挖掘数据中隐藏的位置信息。怒气按在数据描述和简单分析方面做得比较好的是Pandas库。当然,它还需要结合Numpy。Scipy等科学计算相关库才能发挥功效。

    Pandas数据结构

    在进行Pandas相关介绍时,我们首先需要知道的是Pandas的两个数据结构(即对象)Series和DataFrame,这是Pandas的核心结构,掌握了此二者结构和属性要素,会在具体的数据处理过程中如虎添翼。

    1)Series简介

    Series是一种类似于一维数组的对象,它由两部分组成,第一部分是一维数据,另外一部分是与此一维数据对应的标签数据。但是语言描述不好理解,具体如下:

    import pandas as pd
    #这是约定俗成的写法,一般而言,大家都会写pd,当然也可以换成别的
    
    centerSeries=pd.Series(['中国科学院','文献情报中心','大楼','北四环西路']);
    print(centerSeries);
    #output:
    # 0     中国科学院
    # 1    文献情报中心
    # 2        大楼
    # 3     北四环西路
    # dtype: object
    

    因为我们没有指定标签数据,而Python默认是通过数字排序进行标识,接下来给它添加标识数据。

    import pandas as pd
    #这是约定俗成的写法,一般而言,大家都会写pd,当然也可以换成别的
    
    centerSeries=pd.Series(['中国科学院','文献情报中心','大楼','北四环西路'],index=['a','b','c','d']);
    # index的size同Series必须一样大,否则报错
    print(centerSeries);
    #output:
    # a     中国科学院
    # b    文献情报中心
    # c        大楼
    # d     北四环西路
    # dtype: object
    

    对比之前的默认标识,我们可以看出它是由1,2,3,4变成了a,b,c,d。接下来将解释这样标识的意义。

    import pandas as pd
    #这是约定俗成的写法,一般而言,大家都会写pd,当然也可以换成别的
    
    centerSeries=pd.Series(['中国科学院','文献情报中心','大楼','北四环西路'],index=['a','b','c','d']);
    # index的size同Series必须一样大,否则报错
    print(centerSeries[0])#通过一维数组进行获取数据
    print(centerSeries[1])
    print(centerSeries['c'])#通过标识index获取数据
    print(centerSeries['d'])
    # output:
    # 中国科学院
    # 文献情报中心
    # 大楼
    # 北四环西路
    

    另外,我们可以看到通过一位数组格式获取数据和通过index标识获取数据都可以,这样的index就像曾经学过的数据库中的id列的作用,相当于建立了每个数据的索引。当然,针对Series的操作不只限于此,还有很多需要我们自己去通过“help”查看得到的。

    2)DataFrame简介

    DataFrame是一个表格型的数据结构,它包含有列和行索引,当然你也可以把它看做是由Series组织成的字典。需要说明的是,DataFrame的每一列中不需要数据类型相同,且它的数据是通过一个或者多个二维块进行存放,在了解DataFrame之前如果你对层次化索引有所了解,那么DataFrame可能相对容易理解,当然不知道也没有关系,举个简单的例子:它类似于常见的excel表格格式,可将它理解为一张excel表,至于DataFrame在内部具体如何处理,这个作为应用层的过程我们先不讨论。

    import pandas as pd
    # 简单的DataFrame制作
    # 字典格式的数据
    data={'name':['国科图','国科图','文献情报中心','文献情报中心'],
         'year':['2012','2013','2014','2015'],
         'local':['北四环西路','北四环西路','北四环西路','北四环西路'],
         'student':['甲','乙','丙','丁']}
    centerDF=pd.DataFrame(data);
    centerDF #同样,默认的index是数字表示,而且它的列名也是按字母顺序排序的
    

    运行结果:

    image

    当然我们可以调整列的格式,index仍采用默认:

    在pd.DataFrame()函数中明确指定参数columns

    centerDF=pd.DataFrame(data,columns=['year','name','local','student']);

    结果:

    image

    更改index的默认设置:

    在pd.DataFrame()函数中明确指定参数index

    centerDF=pd.DataFrame(data,columns=['year','name','local','student'],index=['a','b','c','d']);

    image

    既然DataFrame是行列格式的数据,那么理所当然可以通过行、列的方式进行数据获取,按列进行数据获取:

    import pandas as pd
    # 简单的DataFrame制作
    # 字典格式的数据
    data={'name':['国科图','国科图','文献情报中心','文献情报中心'],
         'year':['2012','2013','2014','2015'],
         'local':['北四环西路','北四环西路','北四环西路','北四环西路'],
         'student':['甲','乙','丙','丁']}
    centerDF=pd.DataFrame(data,columns=['year','name','local','student'],index=['a','b','c','d']);
    print(centerDF['name']);
    print()
    print('列的类型:',type(centerDF['name']))
    print();
    print(centerDF['year'])
    # output:
    # a       国科图
    # b       国科图
    # c    文献情报中心
    # d    文献情报中心
    # Name: name, dtype: object
    
    # 列的类型: <class 'pandas.core.series.Series'>
    
    # a    2012
    # b    2013
    # c    2014
    # d    2015
    # Name: year, dtype: object
    

    另外,可以看出按列进行获取时它们的index表示是相同的,且每一列是一个Series对象。

    按行进行数据获取,其实是通过index进行操作。

    import pandas as pd
    # 简单的DataFrame制作
    # 字典格式的数据
    data={'name':['国科图','国科图','文献情报中心','文献情报中心'],
         'year':['2012','2013','2014','2015'],
         'local':['北四环西路','北四环西路','北四环西路','北四环西路'],
         'student':['甲','乙','丙','丁']}
    centerDF=pd.DataFrame(data,columns=['year','name','local','student'],index=['a','b','c','d']);
    print(centerDF.loc['a']);
    print()
    print('行的类型:',type(centerDF.loc['a']))
    # output:
    #year        2012
    # name         国科图
    # local      北四环西路
    # student        甲
    # Name: a, dtype: object
    
    # 行的类型: <class 'pandas.core.series.Series'>
    

    其中‘loc’,也可用‘iloc’,不推荐使用‘ix’,因为其已经被弃用。

    可以看出,每一行是一个Series对象,此时该Series的index其实就是DataFrame的列名称,综上来看,对于一个DataFrame来说,它是纵横双向进行索引,只是每个Series(纵横)都共用一个索引而已。

    3)利用Pandas加载、保存数据

    在进行数据处理时我们首要的工作是把数据加载到内存中,这一度成为程序编辑的软肋,但是Pandas包所提供的功能几乎涵盖了大多数的数据处理的加载问题,如read_csv、read_ExcelFile等。

    1.加载、保存csv格式的数据

    原文件:

    image

    代码:

    #! /usr/bin/env python  
    #coding=utf-8  
    
    #加载csv格式的数据
    data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv');#它的默认属性有sep=','
    data_csv
    

    运行结果:

    image

    更改默认属性

    data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv',sep='#');#更改默认属性有sep='#'
    data_csv

    运行结果:

    image

    不要表头:

    data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv',header=None,skiprows=[0]);#不要表头Header
    data_csv

    结果:

    image

    自行添加表头列:

    #! /usr/bin/env python  
    #coding=utf-8  
    
    #加载csv格式的数据
    data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv',header=None,skiprows=[0]);#不要表头Header
    print(type(data_csv))#通过它的类型我们可以看到它是DataFrame
    #可自行添加表头列
    data_csv.columns=['第一列','第二列','第三列','第四列','第五列','第六列','第七列','第八列','第十列','第十一列','第十二列','第十三列'];
    data_csv
    

    运行结果:

    image

    保存csv数据:

    #! /usr/bin/env python  
    #coding=utf-8  
    
    #加载csv格式的数据
    data_csv=pd.read_csv(r'C:\Users\123\Desktop\result.csv',header=None,skiprows=[0]);#不要表头Header
    print(type(data_csv))#通过它的类型我们可以看到它是DataFrame
    #可自行添加表头列
    data_csv.columns=['第一列','第二列','第三列','第四列','第五列','第六列','第七列','第八列','第十列','第十一列','第十二列','第十三列'];
    data_csv.loc[0,'第一列']='新添加内容';
    data_csv.to_csv(r'C:\Users\123\Desktop\result2.csv');
    data_csv
    

    运行结果:

    image

    生成新文件:

    image

    综上所述,通过对csv格式的文件进行读取,我们可以指定读入的格式(sep=’,’),也可以指定它的header为空None,最后添加column,而之所以可以后来添加的原因是读入的csv已经是DataFrame对象了。

    展开全文
  • 下面的文章主要介绍的是据库手边系列之SQL Server数据信息,你如果其有兴趣的话你就可以点击以下的文章进行观看了,以下就是文章的主要内容的详细描述,望大家在浏览之后会其有更深的了解。SELECT表名=case ...
  • 问题描述:接口要求,在传入参数后,首先检查class中是否存在相关班级,如果存在则在stu_class表中插入一条申请信息,如果不存在就不插入,并返回插入成功与否的有关信息。 数据库字段: stu_class class: 思路...
  • C# 元数据描述

    2020-03-31 14:54:48
     元数据概述:元数据是一种二进制信息,用以存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存中的程序进行描述。将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中,而将代码转换为 ...
  • 读入数据观察描述统计,了解数据大概信息3.数据预处理3.1数据清洗3.1.1 删除重复值3.1.2缺失值处理3.2数据加工4.数据可视化4.1城市岗位数量4.2学历和工作经验4.3薪资情况4.3.1薪资与学历的关系4.3.2薪资与工作经验...
  • Kickstarter数据进行分析以发现趋势 Will Finnegan的分析 概述和目的 该分析的目的是帮助路易丝了解Kickstarter广告系列与发布日期和筹款目标之间的关系。 为此,我们从Kickstarter的原始数据开始,这些数据包括可...
  • 问题描述 代码实现 参考文章 8行Python代码实现excel两个sheet表合并 用Python将同一个excel中的多个sheet合并成一个sheet python读取excel指定列名,dataframe连接,两列相减作为第三列的值
  • 描述统计通俗来说就是大量信息进行归纳,找出相应的指标对此进行描述。 也就是将复杂的数据简化为能起到描述性的数字(可衡量的指标)。 常用描述数据集整体情况的指标有: 1. 平均值 描述整体情况,但当有...
  • 数据结构C#描述教程

    2011-03-16 19:10:09
    储在计算机中的数据进行操作,可以有哪些操作,如何实现这些操作以及如何 同一问题的不同操作方法进行评价;四是必须理解每种数据结构的性能特征,以 便选择一个适合于某个特定问题的数据结构。这些问题就是数据...
  • 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转化解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存...
  • 描述统计学是对数据信息归纳为存在着大量数据,无任何意义且数据越多,信息很大的模糊数据集,经过分析处理进行简化,将一系列复杂的数据,减少为几个能起到关键数值的数据。归纳分析出能起到有描述作用的数值,又...
  • 利用Python股票数据进行定向爬虫

    千次阅读 2019-09-22 19:32:45
    功能描述: 目标:获取上交所和深交所所有股票的名称和交易信息 输出:保存到文件中 技术路线:requests-bs4-re 候选数据网站的选择: 新浪股票:https://finance.sina.com.cn/stock/ 百度股票:...
  • 【问题描述】:需求:员工信息进行聚合分析1.先员工按照国家country分组,然后再按入职年限join_date进行分组,分组后在计算组内平均薪资员工数据如下:{ "took": 4, "timed_out": false,...
  • 数据源 Kesci的CrunchBase 初创公司数据数据集内容 acquisitions.csv: 初创公司被收购...companies.csv: 公司信息记录 investments.csv: 投资记录 rounds.csv : 投资轮次记录 问题描述 VC在投资的时候...
  • 该模块的最初目标是使用数据透视表,描述性统计信息和图表来熟悉excel。 注意:该文档包含每周挑战和模块工作。 以下是挑战的概述和分析。 项目概况 该项目的目标是使用Kickstarter筹款数据集来帮助我们的朋友...
  • 由于上次抓的数据里面包含有 ID 这样的信息,我们需要将它去掉,并且查看描述性统计,确认是否存在异常值或者确实值。 read_file = analyst.csv # 读取文件获得数据 data = pd.read_csv(read_file, encoding=gbk) #...
  • 数据结构电子书,C++描述 数据结构是在整个计算机科学与技术... 数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。
  • 用R语言网络数据进行统计分析(四) 网络图特征的描述性统计 简介 在给定的复杂系统的研究中,利益问题通常可以用作为相应的网络图的结构或特征的某些方面的问题的方式来重新表述。例如,各种类型的基本...
  • 任务描述:给定一个step文件,该文件的字符串进行信息抽取,结构化的组织文件描述模型的数据。形成抽象化数据结构,存入计算机数据库。并能按照有条理结构把这些数据展示出来。 信息抽取的结果描述:  1 数据...
  • 对信息的一种符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。如图象、声音等都可以通过编码而归之于数据的范畴。 2、数据元素(Data Element) 是数据的基本单位,在计算机...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,627
精华内容 2,650
关键字:

对数据信息进行描述