EDA数据探索性分析_不才~的博客-程序员宅基地

技术标签: python  数据分析  

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45323012/article/details/104817002

智能推荐

解决el-radio-group页面不刷新问题_el-radio-group 绑定model点击后页面不刷新-程序员宅基地

问题:使用v-show后el-radio-group点击后页面不刷新了,但值是改变了的。如下图所示:解决办法:在el-radio-group加一个@change事件如: <el-form-item label-width="30px" v-if="!edit"> <el-radio-group @change="checkAddType" v-model="formData.resource"> <el-radio label="on_el-radio-group 绑定model点击后页面不刷新

vite2.x+vue3 百度地图绘制-程序员宅基地

1.提示:同理可以做其他绘制vite2.x+vue3安装忽略前面有安装介绍https://editor.csdn.net/md/?articleId=120757440vue3 百度地图和高德地图目前没有vue3的版本百度地图提供了用链接方式做https://lbsyun.baidu.com/index.php?title=jspopularGL/guide/helloworld2.效果图在index.html文件上添加百度地图<script type="text/javasc

九、vue3.0路由配置及跳转_vue3.0路由跳转-程序员宅基地

vue3.0路由配置及跳转_vue3.0路由跳转

mysql面试题sql语句_数据库MySQL经典面试题之SQL语句-程序员宅基地

数据库MySQL经典面试题之SQL语句1.需要数据库表1.学生表Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别2.课程表Course(CID,Cname,TID) --CID --课程编号,Cname 课程名称,TID 教师编号3.教师表Teacher(TID,Tname) --TID 教师编号,Tnam..._mysql面试题sql语句

同时安装OFFICE2003和2007,默认用2003打开文件的解决方法(转)(-程序员宅基地

Office2003与2007完美共存的办法 在现在的办公软件中, Microsoft出品的 Office集成办公软件占据了绝大多数的市场份额,从最初的 Office 2000,到后面的 Office 2003以至近两年刚发行的 Office 2007,它直观的界面、强大的文字处理功能和出色图表计算,让我们大大简化了日常办公的烦琐。可在实际的工作中,数据交换和传输已经成了必不可少的工作单元,当一份...

WebScoket 规范 + WebSocket 协议-程序员宅基地

WebSocket握手协议1、客户端握手请求(注意:键值之间有一个空格,行间有换行符号0x13x10或者说\r\n)GET /WebSocket/LiveVideo HTTP/1.1Upgrade: WebSocketConnection: UpgradeHost: localhost:8080 (客户端请求主机)Origin: http

随便推点

Unity技术分享(64)|Shader Variant Collection|打包方式_shadervariantcollection 打包-程序员宅基地

Unity技术分享(64)|Shader Variant Collection|打包方式http://www.sohu.com/a/225673118_100123347原文链接:https://blog.uwa4d.com/archives/TechSharing_64.html我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的..._shadervariantcollection 打包

《疯狂workflow讲义——基于Activiti的工作流应用开发》书中源码相关代码-程序员宅基地

只是为了提醒大家,书本的封面很明显的告知:请访问www.broadview.com.cn/22673下载相关代码。网上资源却很少,捉急啊,没有发现的眼睛只有抱怨作者的闲心,且学且加油吧!

微电子计算机是信息技术的,信息技术说第三十五说,计算机微电子技术_綦望的博客-程序员宅基地

什么是微电子技术微电子技术是在电子电路和电子系统的超小型化及微型化过程中逐渐形成和发展起来的,以集成电路为核心的电子技术。微电子技术的特征微电子技术是在传统的电子技术基础上发展起来的。之所以称之为“微电子”,顾名思义就是由于它是在微小的范畴内的一种先进技术,其特征是“四微”:①它对信号的加工处理是在一种固体内的微观电子运动中实现的;②它的工作范围是固体的微米级甚至晶格级微区;③对信号的传递交换只在..._微电子技术是现代信息技术的基础

键盘事件的检测与修改-程序员宅基地

package test; import java.applet.Applet; import java.awt.*; import java.awt.event.*; /** *//** * * Title: 键盘检测 * * * Description: 在applet使用键盘事件,检测键盘的动作。 * * * Copyri

java类名可以是数字吗_在 Java 中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序特性称为( )。_学小易找答案..._博他一年的博客-程序员宅基地

【简答题】Java 支持多继承吗 ?【单选题】以下关于继承的叙述正确的是( )。【单选题】在 Java 中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序特性称为( )。【简答题】1. 请使用继承关系实现下列描述: (较难) 自行车和豪车属于车类型 车 ( car) :车牌号 ( cid) 、车型 ( dtype) 、价值 ( ..._在java中一个类可同时定义许多同名的方法这些方法的形容参数的个数类型或顺序

java 验证工具类_JAVA工具例大全--文件类型判断工具类_Lean Work的博客-程序员宅基地

增加文件类型映射如果已经存在将覆盖之前的映射*@param fileStreamHexHead 文件流头部Hex信息@param extName 文件扩展名@return 之前已经存在的文件扩展名*/public static String putFileType(String fileStreamHexHead, String extName) {return FILE_TY..._java判断文件是否为ppt的工具类

推荐文章

热门文章

相关标签