EDA数据探索性分析

读取数据,输出每个有效变量的数据分布图:

import math
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


class EDA:
#    def __init__(self,file_path):
#        self.file_path=file_path
    #获得数据
    def get_data(file_path):
        file_type = file_path.split('.')[1]
        if file_type=='txt':
            df=pd.read_table(file_path)
        elif file_type=='csv':
            df=pd.read_csv(file_path)
        elif file_type == 'xls' or file_type == 'xlsx':
            df = pd.read_excel(file_path)
        return df
    #获取每列数据类型
    def get_col_type(df):
#        df=get_data(file_path)
        label_col=list(set(df.columns)-set(df.describe().columns))
        other_col=list(set(df.columns)-set(label_col))
        num_col=[]
        for col in other_col:
            if len(set(df[col]))<10:
                label_col.append(col)
            else:
                num_col.append(col)
        return label_col,num_col
    #绘图看数据分布
    def eda_plot(df,label_col,num_col):
        df_count = df.shape[0]
        df_col=df.columns.tolist()
        k = 0
        for col in df_col:
            #对数值型数据进行直方图,箱线图,小提琴图
            if col in num_col:
                if math.floor(len(set(df[col]))*100/df_count)<50:
                    df = df[(df[col].notnull())].sort_values(col, ascending=True).reset_index(drop=True)
                    k = k + 1
                    plt.figure(k)
                    plt.subplot(1,3,1)
                    plt.hist(df[col])
                    plt.subplot(1,3,2)
                    plt.boxplot(df[col])
                    plt.gca().set_title('  %s  分布' %col)
                    plt.subplot(1,3,3)
                    plt.violinplot(df[col])
                    plt.tight_layout()
                
                
            elif col in label_col:
                #类别型数据画柱形图和饼图
                if math.floor(len(set(df[col]))*100/df_count)<5:
                    #k=k+1
                    #df_0=pd.DataFrame(df[col].index.values.tolist(),columns=[col])
                    df_0= df.groupby([col]).agg({col:['count']})
                    df_1=df_0.iloc[:,0].tolist()
                    #df_0['count'] = df.groupby([col]).agg({col:['count']})
                    x_axle = range(len(set(df[col].dropna())))
                    y_axle = df_1
                    x_label = list(set(df[col].dropna()))
                    fig, (ax1, ax2) = plt.subplots(2)
                    ax1.bar(x_axle,y_axle)
                    ax1.set_xticks(x_axle)
                    ax1.set_xticklabels(x_label)
                    ax1.set_title(' %s  分布' % (col))
                    ax2.pie(y_axle,labels=x_label, autopct='%1.2f%%')
        else:
            pass
        
if __name__=="__main__":
    df=EDA.get_data(r'C:\Users\Tiantic\train.csv')
    label_col,num_col=EDA.get_col_type(df)
    EDA.eda_plot(df,label_col,num_col)

输出结果:
在这里插入图片描述
在这里插入图片描述

在EDA类下定义了简单的数据处理包,但是没有把前两个进行实例化(做了没有成功),有好的方法可以留言交流哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值