欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EDA数据探索性分析

程序员文章站 2022-04-03 21:15:23
...

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

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数据探索性分析
EDA数据探索性分析

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

相关标签: 数据分析 python