Python 探索性数据分析(Exploratory Data Analysis,EDA)

此脚本读取的是 SQL Server ,只需给定表名或视图名称,如果有数据,将输出每个字段符合要求的每张数据分布图。

# -*- coding: UTF-8 -*-
# python 3.5.0
# 探索性数据分析(Exploratory Data Analysis,EDA)
__author__ = ‘HZC‘

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

class EDA:
    def __init__(self,d):
        self.engine = sqlalchemy.create_engine("mssql+pymssql://%s:%[email protected]%s/%s" %(d[‘user‘],d[‘pwd‘],d[‘ins‘],d[‘db‘]))

    def get_df_from_table(self,table_name):
        df = pd.read_sql_table(table_name, self.engine)
        return df

    def get_df_from_query(self,sql):
        df = pd.read_sql_query(sql, self.engine)
        return df

    #读取表各字段数据类型
    def get_table_type(self,table_name):
        sql = """select c.name as colname,t.name as typename
        from sys.sysobjects o inner join syscolumns c on o.id=c.id and o.name<>‘dtproperties‘
        inner join sys.systypes t on c.xusertype=t.xusertype
        where o.name=‘%s‘""" % table_name
        df = self.get_df_from_query(sql)
        return df

    #绘图
    def eda_plot(self,table_name):
        list_char = [‘char‘,‘nchar‘,‘varchar‘,‘nvarchar‘,‘text‘,‘ntext‘,‘sysname‘]
        list_num = [‘tinyint‘,‘smallint‘,‘int‘,‘real‘,‘money‘,‘float‘,‘decimal‘,‘numeric‘,‘smallmoney‘,‘bigint‘]
        df_type = self.get_table_type(table_name)
        df_date = self.get_df_from_table(table_name)
        date_count = df_date.shape[0]
        k = 0
        for row in df_type.itertuples():
            k = k + 1
            #字符类型,绘柱状图
            if row.typename in list_char:
                col = df_date.groupby([row.colname]).agg({row.colname:[‘count‘]})
                row_count = col.shape[0]
                #col_count = col.shape[1]
                col = col.sort_index()
                val = col.values.tolist()
                #只绘不重复数占总数比小于 5% 的
                if math.floor(row_count*100/date_count) <5:
                    df_ = pd.DataFrame(col.index.values.tolist(), columns=[row.colname])
                    df_[‘count‘] = list(i[0] for i in val)
                    x_axle = range(len(df_[row.colname]))
                    y_axle = df_[‘count‘].tolist()
                    x_label = df_[row.colname].tolist()
                    fig, ax = plt.subplots()
                    ax.bar(x_axle,y_axle)
                    ax.set_xticks(x_axle)
                    ax.set_xticklabels(x_label)
                    ax.set_title(‘表[%s]  %s  分布‘ % (table_name,row.colname))

            #数值类型,其他分布图
            elif row.typename in list_num:
                df__ = pd.DataFrame(df_date[row.colname])
                df__ = df__[(df__[row.colname].notnull())].sort_values(row.colname, ascending=True).reset_index(drop=True)
                k = k + 1
                plt.figure(k)
                plt.subplot(1,3,1)
                plt.hist(df__[row.colname])
                plt.subplot(1,3,2)
                plt.boxplot(df__[row.colname])
                plt.gca().set_title(‘表[%s]  %s  分布‘ % (table_name,row.colname))
                plt.subplot(1,3,3)
                plt.violinplot(df__[row.colname])
                plt.tight_layout()
            else:
                pass
        plt.show()

if __name__ == "__main__":
    conn = {‘user‘:‘kk‘,‘pwd‘:‘kk‘,‘ins‘:‘hzc‘,‘db‘:‘Demo‘}
    eda = EDA(conn)
    eda.eda_plot("V_ClientInfoAll")

显示图分为字符型(离散型)和数值型(连续型),示例结果如下:

原文地址:https://www.cnblogs.com/hzc2012/p/8276350.html

时间: 2024-10-12 15:21:39

Python 探索性数据分析(Exploratory Data Analysis,EDA)的相关文章

探索性数据分析(Exploratory Data Analysis,EDA)

探索性数据分析(Exploratory Data Analysis,EDA)主要的工作是:对数据进行清洗,对数据进行描述(描述统计量,图表),查看数据的分布,比较数据之间的关系,培养对数据的直觉,对数据进行总结等. 探索性数据分析(EDA)与传统统计分析(Classical Analysis)的区别: 传统的统计分析方法通常是先假设样本服从某种分布,然后把数据套入假设模型再做分析.但由于多数数据并不能满足假设的分布,因此,传统统计分析结果常常不能让人满意. 探索性数据分析方法注重数据的真实分布,

特征工程-EDA(Exploratory Data Analysis)

定义 探索性数据分析(Exploratory Data Analysis,EDA)是指对已有数据在尽量少的先验假设下通过作图.制表.方程拟合.计算特征量等手段探索数据的结构和规律的一种数据分析方法.一般有以下几个目的: 弄清楚数据的含义 发现数据的结构 锁定一些重要的特征 异常值以及离群数据的检测(类别极致不平衡以及方差很小) 结合行业背景选择合适的模型 常用方法 绘图方法 1. 对原始数据绘图 2. 绘制原始数据的一些统计学图(箱型图.小提琴图.直方图等) 3. 多特征对比性绘图(查看不同的特

Exploratory data analysis and feature extraction with Python

此图片是学习kaggle中某篇kernel时的思维导图,总结了python进行探索性数据分析和特征提取的基本方法和步骤,有可借鉴内容. 暂时无法找到全篇kernel的链接,若重新找到再附上. 原文地址:https://www.cnblogs.com/balabalaeight/p/10127557.html

Spark的Python和Scala shell介绍(翻译自Learning.Spark.Lightning-Fast.Big.Data.Analysis)

Spark提供了交互式shell,交互式shell让我们能够点对点(原文:ad hoc)数据分析.如果你已经使用过R,Python,或者Scala中的shell,或者操作系统shell(例如bash),又或者Windows的命令提示符界面,你将会对Spark的shell感到熟悉. 但实际上Spark shell与其它大部分shell都不一样,其它大部分shell让你通过单个机器上的磁盘或者内存操作数据,Spark shell让你可以操作分布在很多机器上的磁盘或者内存里的数据,而Spark负责在集

《python for data analysis》第四章,numpy的基本使用

<利用python进行数据分析>第四章的程序,介绍了numpy的基本使用方法.(第三章为Ipython的基本使用) 科学计算.常用函数.数组处理.线性代数运算.随机模块-- # -*- coding:utf-8 -*-# <python for data analysis>第四章, numpy基础# 数组与矢量计算import numpy as npimport time # 开始计时start = time.time() # 创建一个arraydata = np.array([[

Python.Data.Analysis(PACKT,2014)pdf

下载地址:网盘下载 Finding great data analysts is difficult. Despite the explosive growth of data in industries ranging from manufacturing and retail to high technology, finance, and healthcare, learning and accessing data analysis tools has remained a challe

探索性数据分析EDA综述

目录 1. 数据探索的步骤和准备 2. 缺失值处理 为什么需要处理缺失值 Why data has missing values? 缺失值处理的技术 3. 异常值检测和处理 What is an outlier? What are the types of outliers? What are the causes of outliers? What is the impact of outliers on dataset? How to detect outlier? How to remov

Python For Data Analysis -- NumPy

NumPy作为python科学计算的基础,为何python适合进行数学计算,除了简单易懂,容易学习 Python可以简单的调用大量的用c和fortran编写的legacy的库   The NumPy ndarray: A Multidimensional Array Object ndarray,可以理解为n维数组,用于抽象矩阵和向量 Creating ndarrays 最简单的就是,从list初始化, 当然还有其他的方式,比如, 汇总,     Data Types for ndarrays

Python For Data Analysis -- Pandas

首先pandas的作者就是这本书的作者 对于Numpy,我们处理的对象是矩阵 pandas是基于numpy进行封装的,pandas的处理对象是二维表(tabular, spreadsheet-like),和矩阵的区别就是,二维表是有元数据的 用这些元数据作为index更方便,而Numpy只有整形的index,但本质是一样的,所以大部分操作是共通的 大家碰到最多的二维表应用,关系型数据库中的表,有列名和行号,这些就是元数据 当然你可以用抽象的矩阵来对这些二维表做统计,但使用pandas会更方便