Python数据探索-数据简单分析

202 阅读5分钟

数据挖掘发展史

数据挖掘是KDD的核心部分,它是指从数据集合中自动抽取隐藏再数据中的有用信息的非平凡过程,这些信息的表现形式有规则、概念、规律和模式等

数据挖掘的常用方法

  • 分类
  • 聚类
  • 关联规则
  • 智能推荐
  • 时间序列

数据挖掘的通用流程

  • 目标分析
  • 数据抽取
  • 数据探索
  • 数据预处理
  • 分析与建模
  • 模型评价

数据校验

isnull用于判断是否为缺失值

pandas.DataFrame.isnull()
pandas.isnull(obj)

notnull用于判断是否为非缺失值

pandas.DataFrame.notnull()
pandas.notnull(obj)

count用于计算非缺失值

  • axis:这是一个可选参数,用于指定计算的轴向。默认值为0,意味着沿着列进行计算。如果设置为1,则沿着行进行计算。
  • level:这是一个可选参数,用于在具有多级索引的DataFrame中指定要在哪一级上进行计数。如果你的DataFrame没有多级索引,这个参数不会产生影响。
  • numeric_only:这也是一个可选参数,默认为False。当设置为True时,只对数值类型的列进行计数,忽略非数值类型的列(如字符串或布尔类型)。如果想对所有类型的列都进行计数,保持默认值即可。
pandas.DataFrame.count(axis=0,level=None,numeric_only=False)

异常值检测

异常值检测是数据分析中的一个重要环节,它有助于识别数据中的噪声或离群点,这些点可能会影响模型的训练结果或数据分析的准确性。以下是在Python中进行异常值检测的一些常用方法:

1. Z-Score 方法

Z-Score 是一种统计测量,表示一个值相对于平均值的距离,以标准差为单位。一般认为,Z-Score 绝对值大于3的数据点可以被视为异常值。

Python
1from scipy import stats
2import numpy as np
3import pandas as pd
4
5# 假设df是包含数值型数据的DataFrame
6z_scores = np.abs(stats.zscore(df))
7outliers = df[(z_scores > 3).any(axis=1)]

2. IQR(四分位距)方法

IQR 是第一四分位数(Q1)和第三四分位数(Q3)之差,用于衡量数据的离散程度。一般认为,低于 Q1 - 1.5IQR 或高于 Q3 + 1.5IQR 的值为异常值。

Python
1Q1 = df.quantile(0.25)
2Q3 = df.quantile(0.75)
3IQR = Q3 - Q1
4outliers = df[~((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).any(axis=1)]

注意这里的逻辑取反~是为了找出非异常值,如果要直接筛选异常值,应去掉~

percentile(a,q,axis)用于计算百分位数

  • a:接收 amay_like(类数组 )。表示输人数组或可以转换为数组的对象。无默认值。
  • q:接收浮点类型的 aray_like。表示要计算的百分位数或百分位数的序列,必须在 0~100之间(含0和100)。无默认值:
  • axis:接收 int 类型的值、imnt元组、None。表示计算百分位数的一个或多个的轴默认值为 None
import pandas as pd 

# 假设我们有一个数据系列 
data = [23, 67, 34, 89, 12, 45, 68, 72, 39, 53] 

# 将数据转换为pandas的Series或DataFrame 
series = pd.Series(data) 

# 计算75th百分位数 
q75 = series.quantile(0.75) 

print(f"75th Percentile: {q75}")

mean(axis,skipna)用于计算平均值

  • axis:接收 int 类型的值。表示所要应用的功能的轴,可选0和1。默认值为 None
  • skipna:接收 bool 类型的值。表示排除缺失值。默认值为 None
  • level:接收 int 类型的值或级别名称。表示标签所在级别。默认值为 None
data.mean()

std(axis,skipna,level,ddof)用于计算标准差

  • axis:接收 int 类型的值。表示所要应用的功能的轴,可选0和 1。默认值为 None
  • skipna:接收 bool类型的值。表示排除缺失值。默认值为 None
  • level:接收int类型的值或级别名称。表示标签所在级别。默认值为 None
  • ddof:接收 int 类型的值。表示 Delta 的自由度。默认值为1
data.std()

描述性统计分析

相关性分析

corr()函数的用法

import pandas as pd 

# 假设df是一个包含两列数值数据的DataFrame 
data = { 'Column1': [1, 2, 3, 4, 5], 'Column2': [2, 4, 6, 8, 10] } 
df = pd.DataFrame(data) 

# 计算'Column1'和'Column2'之间的相关系数 
correlation = df['Column1'].corr(df['Column2']) 

print("Correlation between Column1 and Column2:", correlation)

cut()函数用法

cut()函数在Python的数据分析中是一个非常实用的工具,特别是在使用Pandas库时。这个函数主要用于将连续的变量(如数值型数据)分割成几个区间或“bins”,从而将连续数据离散化。这对于数据分组、创建直方图或进行数据分箱等操作非常有用。

  • 基本语法
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
  • x:需要切割的数组或序列,通常是一列数值数据。
  • bins:分割区间(bins)的边界。可以是整数(表示想要的区间数量),或者一个具体的区间边界值的列表或数组。
  • right:布尔值,默认为True,表示区间是右闭合的([a, b))。如果设为False,则区间变为左闭合((a, b])。
  • labels:可选参数,用于指定每个区间的标签。如果给定,返回的Series或DataFrame将包含这些标签而不是区间表示。
  • retbins:布尔值,默认为False。如果为True,函数会同时返回区间边界(bins)。
  • precision:指定区间边界显示的小数点后位数。
  • include_lowest:布尔值,默认为False。若为True,则确保区间包含最小值,即使最小值等于区间的起始点。
  • duplicates:处理区间边界重复时的行为,默认为'raise',即当区间边界有重复时抛出错误。
#销售频数 
bins=[0,200,400,600,800] 

cate = pd.cut( data['销售额(元)'], bins, right=False,
            labels=['低销量','中等销量','中高等销量','高等销量'] )

data['销量区间']=cate

describe()函数用法

df.describe()

对于数值型列,describe()的输出通常如下:

  • count: 非空值的数量。
  • mean : 平均值。
  • std : 标准差。
  • min : 最小值。
  • 25% : 第一四分位数(下四分位数)。
  • 50% : 中位数(第二四分位数)。
  • 75% : 第三四分位数(上四分位数)。
  • max : 最大值。

集中趋势度量

  • 均值:df.mean()
  • 中位数:df.median()
  • 众数:df.mode()
  • 方差:df.var()
  • 偏度:df.skew()
  • 峰度:df.kurt()