为了账号安全,请及时绑定邮箱和手机立即绑定

Python制作数据分析工具

Alex_Cen 产品经理
难度初级
时长 1小时10分
学习人数
综合评分9.17
20人评价 查看评价
9.2 内容实用
9.1 简洁易懂
9.2 逻辑清晰

    1. 定义缺失值。np.nan是Numpy缺失的一个表示 

    2. 计数值,

      len来计数

      apply函数遍历每一列

    3. df.iloc[指定的行数开头:指定的行数结尾,指定的列数]
      unique函数看这一个特征有多少个不同的值
    4. 找0值

    df.iloc[:,0:3] ==0 会返回每一个值是否是0的一个数组True或者False
    np.sum对数组取和(True当作1,False当作0)算出有多少个True
    查看全部
  • 统计指标可以自己去构建,以上是常规指标

    查看全部
    1. 读取下载的数据。把数据集都进来命名df

    2. lable属于预测目标,‘TARGET’就是特征的名字。在df中把因变量TARGET取出来命名为lable

    3. 删除掉一些不需要的值。把ID,TARGET这两列去掉重新赋值为df

    查看全部
  • 依赖包:Numpy

                 Pandas

                 Scipy


    查看全部
  • 依赖包:1、numpy 2、pandas 3、scipy

    查看全部
  • 数据诊断的目的:1、了解特征的分布,缺失和异常等情况  2、统计指标可直接用于数据预处理

    查看全部
    0 采集 收起 来源:1.2 案例介绍

    2021-09-07

  • 测试

    查看全部
  • 统计指标介绍

    查看全部
  • 数据获取与读取1

    查看全部
  • 数据诊断目的

    查看全部
    0 采集 收起 来源:1.2 案例介绍

    2021-01-20

  • 数据诊断的目的

    查看全部
    0 采集 收起 来源:1.2 案例介绍

    2021-01-20

  • python 制作数据分析工具
    查看全部
  • 课程目标,掌握数据的统计指标

    查看全部
  • 1.# 2.Calculating Running time

    import timeit

     

    start = timeit.default_timer()

    df_eda_summary = eda_analysis(missSet=[np.nan, 9999999999, -999999], df=df.iloc[:, 0:3])

    print('EDA Running Time: {0:.2f} seconds'.format(timeit.default_timer() - start))

    上面是时间的测试示例,我们去测试每一块所用时间,由此可以判断我们的优化重点,经过测试可知,众数部分的时间较长,所以我们后期可对这一部分进行优化,优化的方法有:1)注释掉没用的代码 2)使用更好的方法去替代原有方法。


    查看全部
  • # 数据分析工具
    from __future__ import division  # 除的结果是小数
    import pandas as pd
    import numpy as np
    from scipy import stats
    
    
    def fill_fre_top_5(x):  # 频数前五位的函数:若不足5,则nan补齐
        if (len(x)) <= 5:
            new_array = np.full(5, np.nan)
            new_array[0:len(x)] = x
            return new_array
    
    
    def eda_analysis(missSet=[np.nan, 9999999999, -999999], df=None):
        # 种类计数
        count_un = df.apply(lambda x: len(x.unique()))
        count_un = count_un.to_frame('count')  # 转成dataframe
    
        # 零的计数
        count_zero = df.apply(lambda x: np.sum(x == 0))
        count_zero = count_zero.to_frame('count_zero')
    
        # 均值
        df_mean = df.apply(lambda x: np.mean(x[~np.isin(x, missSet)]))
        df_mean = df_mean.to_frame('mean')
    
        # 中位数
        df_median = df.apply(lambda x: np.median(x[~np.isin(x, missSet)]))
        df_median = df_median.to_frame('median')
    
        # 众数
        df_mode = df.apply(lambda x: stats.mode(x[~np.isin(x, missSet)])[0][0])
        df_mode = df_mode.to_frame('mode')
    
        # 众数的频数和比例
        df_mode_count = df.apply(lambda x: stats.mode(x[~np.isin(x, missSet)])[1][0])
        df_mode_count = df_mode_count.to_frame('mode_count')
        df_mode_perct = df_mode_count / df.shape[0]
        df_mode_perct.columns = ['mode_perct']
    
        # 最小值
        df_min = df.apply(lambda x: np.min(x[~np.isin(x, missSet)]))
        df_min = df_min.to_frame('min')
    
        # 最大值
        df_max = df.apply(lambda x: np.min(x[~np.isin(x, missSet)]))
        df_max = df_max.to_frame('max')
    
        # 分位数
        json_quantile = {}
        for i, name in enumerate(df.columns):
            json_quantile[name] = np.percentile(df[name][~np.isin(df[name], missSet)], (1, 5, 25, 50, 75, 95, 99))
        df_quantile = pd.DataFrame(json_quantile)[df.columns].T
        df_quantile.columns = ['quan01', 'quan05', 'quan25', 'quan50', 'quan75', 'quan95', 'quan99']
    
        # 频数(产出为数组,不能使用apply)
        json_fre_name = {}
        json_fre_count = {}
    
        for i, name in enumerate(df.columns):
            # 频数前五的数
            index_name = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5, ].index.values
            index_name = fill_fre_top_5(index_name)
    
            json_fre_name[name] = index_name
    
            # 频数前五的数的频数
            value_count = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5, ].values
            value_count = fill_fre_top_5(value_count)
    
            json_fre_count[name] = value_count
    
        df_fre_name = pd.DataFrame(json_fre_name)[df.columns].T
        df_fre_count = pd.DataFrame(json_fre_count)[df.columns].T
    
        df_fre = pd.concat([df_fre_name, df_fre_count], axis=1)  # 合并
        df_fre.columns = ['Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'freq1', 'freq2', 'freq3', 'freq4', 'freq5']
    
        # 缺失值
        df_miss = df.apply(lambda x: np.sum(np.isin(x, missSet)))
        df_miss = df_miss.to_frame('freq_miss')
    
        # 合并所有统计指标
        df_eda_summary = pd.concat(
            [count_un, count_zero, df_mean, df_median, df_mode, df_mode_count, df_mode_perct, df_min, df.max, df_fre,
             df_miss], axis=1)
    
        return df_eda_summary


    查看全部
    0 采集 收起 来源:4.1 工具整合

    2020-01-10

  • 工具 整合

    查看全部
    0 采集 收起 来源:4.1 工具整合

    2020-01-10

  • 1.统计指标示例-缺失值

    # (12)Miss Value

    np.sum(np.in1d(df.iloc[:, 0], missSet))     # 统计缺失值

    df_miss = df.iloc[:, 0:3].apply(lambda x: np.sum(np.in1d(x, missSet)))  # 遍历每一个遍历的缺失值情况,因为返回的是一个值,所以直接用apply遍历


    查看全部
  • #(11)Frequent Values

    df.iloc[:,0].value_counts().iloc[0:5,]


    df.iloc[:,0][~np.isin(df.iloc[:,0], missSet)]

    df.iloc[:,0][~np.isin(df.iloc[:,0], missSet)].value_counts()[0:5,]


    json_fre_name = {}

    json_fre_count = {}


    def fill_fre_top_5(x):

        if len(x) <= 5:

            new_array = np.full(5, np.nan)

            new_array[0:len(x)] = x

            return new_array


    df['ind_var1_0'].value_counts()

    len(df['imp_sal_var16_ult1'].value_counts())


    for i,name in enumerate(df[['ind_var1_0','imp_sal_var16_ult1']].columns):

        index_name = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5,].index.values

        index_name = fill_fre_top_5(index_name)

        

        json_fre_name[name] = index_name

        

        values_count = df[name][~np.isin(df[name], missSet)].value_counts().iloc[0:5,].values

        values_count = fill_fre_top_5(values_count)

        

        json_fre_count[name] = values_count


    df_fre_name = pd.DataFrame(json_fre_name)[df[['ind_var1_0','imp_sal_var16_ult1']].columns].T


    查看全部
  • 特殊描述值

    查看全部
  • 1.统计指标示例-最小值/最大值

    # (8)Min Value

    np.min(df.iloc[:, 0])

     

    df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]     # 去除缺失值

    np.min(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)])   # 去除缺失值后进行最小值计算

     

    df_min = df.iloc[:, 0:3].apply(lambda x: np.min(x[~np.in1d(x, missSet)]))

     

    # (9)Max Value

    np.max(df.iloc[:, 0])

     

    df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]     # 去除缺失值

    np.max(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)])   # 去除缺失值后进行最大值计算

     

    df_max = df.iloc[:, 0:3].apply(lambda x: np.max(x[~np.in1d(x, missSet)]))


    查看全部
  • 统计指标实例-众数

    # (6)Mode Value

    df_mode = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[0][0])    # mode这个函数返回的是一个数组,对应每一列出现频率最高的数以及它出现的频数,[0][0]表示取的是这个数字。

     

    # (7)Mode Percetage

    df_mode_count = df.iloc[:, 0:3].apply(lambda x: stats.mode(x[~np.in1d(x, missSet)])[1][0])   # [1][0]表示取的这个众数出现的频数

     

    df_mode_perct = df_mode_count/df.shape[0]       # df.shape[0]确定有多少个样本


    查看全部
  • 查看全部
  • 1.# (4)Mean Value  均值

    np.mean(df.iloc[:, 0])   # 没有去除缺失值之前的均值很低

     

    df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]    # 去除缺失值,np.in1d(df.iloc[:, 0], missSet)找到缺失值的位置,是缺失值返回true,但我们要找的是去除缺失值之后的数据

    np.mean(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)])   # 去除缺失值后进行均值计算

     

    df_mean = df.iloc[:, 0:3].apply(lambda x: np.mean(x[~np.in1d(x, missSet)]))

     

    # (5)Median Value  中位数

    np.median(df.iloc[:, 0])    # 没有去除缺失值之前

     

    df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)]     # 去除缺失值

    np.median(df.iloc[:, 0][~np.in1d(df.iloc[:, 0], missSet)])      # 去除缺失值后进行计算

     

    df_median = df.iloc[:, 0:3].apply(lambda x: np.median(x[~np.in1d(x, missSet)]))

      

    重点是如何去除缺失值。


    查看全部
  • 1.统计指标示例-计数类

    ##1.Basic Analysis##

    # (1)Missing Value  缺失值

    missSet = [np.nan, 9999999999, -999999]     # np.nan是numpy中缺失值的表示,后面两个数是分析得到的缺失值

     

    # (2)Count distinct  统计值出现多少

    len(df.iloc[:, 0].unique())     # df.iloc[:, 0]取第一列,unique()看这一列哪些不同的值,返回一个类似数组,然后len看有多少个

     

    count_un = df.iloc[:, 0:3].apply(lambda x: len(x.unique()))  # df.iloc[:, 0:3]取前三列,apply用于遍历,看看前三列每一列有多少个不同的值

     

    # (3)Zero Value  看看每一列有多少个值为0

    np.sum(df.iloc[:, 0] == 0)   # 第一列==0,返回True或False的数组

     

    count_zero = df.iloc[:, 0:3].apply(lambda x: np.sum(x == 0))


    查看全部
首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
适合人群:希望从传统分析人员转型到数据挖掘和机器学习领域的人员;技术储备:python基本知识,统计学基本知识
老师告诉你能学到什么?
1.用Python制作一个高效的数据诊断工具; 2.数据诊断的各种指标;

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!