Python数据分析实战:从数据清洗到建模分析全流程指南

Ivy
Ivy
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍基于Python的数据分析与建模流程。内容涵盖数据读取、空值与异常值处理(删除、填充、四分位数法)、静态结构分析、数据分区间及对比分析等核心步骤。通过具体代码示例,帮助读者掌握使用Pandas和Numpy进行高效数据预处理与特征工程的方法,适用于实际业务场景中的数据科学实践。

前言与概述

前言

在进行数据分析时,获取科学且真实的结论依赖于高质量的数据基础。然而,现实中的数据往往复杂多变,因此具备强大的数据处理能力至关重要。本文将结合实际业务中常见的数据情况,逐步演示如何进行规范化的数据处理与分析操作。

1.数据的读取

数据读取基础


 (1)读取模块
 Import pandas as pd 
 Import numpy as np
 (2)读取表格的全部数据
 df = pd.read_csv(".data/HR.csv")
 (3)读取你所需要的数据
 sl_s=df["sactisfaction_level"]

2. 数据的处理

2.1.异常值(空值)处理

2.1.1删除

处理空值通常是数据清洗的第一步。

主要策略包括直接删除含有空值的记录,或者通过特定值进行指代替换。

若数据量充足且追求处理效率,直接删除是较为简便的方法,具体实现方式较为直观。

数据清洗:空值与重复值处理


首先,建立一个DataFrame表
 1.为了确定是否含有空值:
 df.isnull() #如果含有空值,返回True
 2.删除
 df.dropna() #去掉含空值的行
 如果想要删除某一个属性含空值的行就加入subset参数
 df.dropna(subset=["B"]) #去掉B属性含空值的行
 判断是否有重复的数据:
 df.duplicated(["A"]) #A属性中重复的数据返回True
 删除A属性重复的行
 df.drop_duplicates(["A"])
 df.drop_duplicates(["A"],keep=False) #删除A属性全部重复的行
 df.drop_duplicates(["A"],keep=first) #删除A属性全部重复的行,保留第一个
 df.drop_duplicates(["A"],keep=last) #删除A属性全部重复的行,保留最后一个

2.1.2指代

对于某些关键数据,直接删除可能导致信息丢失,此时应选择指代策略,即使用特定值替换空值。

数据填充与插值策略


 #含空值的数据被替换为“b*”
 df.fillna("b*")
 #E属性中的含空值的数据被替换成该属性的平均值
 df.fillna(df["E"].mean())
 #插值替换
 如果含空值的元素为最后一个,那么空值的数据替换成和上一个数据一样
 如何含空值的元素为中间,那么空值的数据被(上+下)/2代替
 df["E"].interpolate() 
 #3次样条插值 order 参数就是几次样条插值
 df["E"].interpolate(method="spline",order=3) 

*函数

异常值检测与统计描述


 (4)异常值分析(含有就返回True) --isnull()
 sl_s.isnull()
 主要表示没有空值
 (5)提取异常值的该属性信息 
 sl_s[sl_s.isnull()]
 (6)提取异常值的表格全部信息
 df[df["sactisfaction_level"].isnull()]
 (7)丢弃异常值 --dropna()
 sl_s=sl_s.dropna()
 注:删除为空的异常值
 可以利用where()把异常数据赋空,然后利用dropna()删除
 (8)填充异常值 --fillna()
 sl_s=sl_s.fillna()
 (9)平均值 --mean()
 sl_s.mean()
 (10)标准差 --std()
 Sl_s.std()
 (11)最大值 --max()
 sl_s.max()
 (12)最小值 --min()
 sl_s.min()
 (13)中位数 --median()
 sl_s.median()
 (14)下四分位数 --quantile(q=0.25)
 sl_s.quantile(q=0.25)
 (15)上四分位数 --quantile(q=0.75)
 sl_s.quantile(q=0.75)
 (16)偏度 --skew()
 sl_s.skew() 
 分析:小于0 是负偏 均值偏小,大部分数是比他的均值大的
 大于 0 稍微有些振偏 
 远大于0, 是极度振偏,均值要比他的大多数值大好多。
 (17)峰度 --kurt()
 sl_s.kurt()
 分析:<0 相比于正态分布,他的趋势相对平缓
 远大于0 说明他的形变是非常大的,所以是不靠谱的
 (18)获得离散化的分布(numpy模块) --histogram()
 np.histogram(sl_s.values,bins = np.arange(0.0,1.1,0.1))
 结果分析:
 [195,1214,532,974,…]
 [0.0,0.1,0.2,0.3,0.4…]
 代表0.0-0.1之间有195个数,0.1-0.2之间有1214个数,以此类推
 分布间隔为0.1

3.利用四分位数来去除异常值

基于四分位数的异常值过滤


 3.1.提取大于1的值
 le_s[le_s>1]
 3.2 去除大于1的异常值
 le_s[le_s<=1]
 3.3 提取正常值(利用四分位数)
 3.3.1 下四分位
 q_low=le_s.quantile(q =0.25)
 3.3.2 上四分位
 q_high=le_s.quantile(q=0.75)
 3.3.3 四分位间距
 q_interval=q_high-q_low
 3.3.4 定义k的值
 K=1.5~3之间
 如果k=1.5,删除的异常值是中度异常
 如果k=3.0,删除的异常值是极度异常
 3.3.5 筛选
 le_s=le_s[le_s<q_high+k*q_interval][le_s>q_low-k*q_interval]
 3.4 数据的个数 --len()
 len(le_s)
 3.5离散分布直方图(numpy模块)
 np.histogram(le_s.values,bins=np.arange(0.0,1.1,0.1))
 3.6回顾数据的平均值,标准差,中位数,最大值,最小值,偏度,峰度,确定数据的正常。

4.静态结构分析

静态结构分析与分布统计


 4.1每个值出现的次数 --values_counts()
 np_s.value_counts()
 4.2获取该数据的构成和比例(每个值的频率)
 np_s.value_counts(normalize=True)
 4.3 排序
 np_s.value_counts(normalize=True).sort_index()

5.数据分区间

数据分区间与频数统计


 5.1把数据分成几份 --histogram() 
 np.histogram(amh_s.values,bins=10) 把数据分成10份
 5.2另一种方法 加了区间,计算区间的频数
 (左闭右开的区间)
 Np.histogram(amh_s.values,bins = np.arange(amh_s.min(),amh_s.max()+10,10))
 (左开右闭的区间)
 amh_s.value_counts(bins=np.arange (amh_s.min(),amh_s.max()+10,10)) 

6.英文异常值数据的处理

非数值型异常值处理


 6.1 首先,统计该数据的分布频数
 s_s.value_counts()
 6.2确定异常值的名字。
 6.3把异常值赋空(NaN) --where()
 s_s.where(s_s!="name")
 意思是把”name”的数据赋空
 6.4把赋空的异常值删除 --dropna()删除异常值
 s_s.where(s_s!="name").dropna()
 6.5 检查删除异常值的结果
 s_s.where(s_s!="name").dropna().value_counts()

7.对比分析

对比分析与分组聚合


7.1对表格中空值的行删除
 Df = df.dropna(axis=0,how='any')
 axis =0 ,代表的是行删除
 how=‘any' 代表的是含有部分空值就执行行删除
 how=‘all' 代表的是一行全部是空值执行行删除
 7.2含有条件性的对异常值的删除
 df=df[df["last_evaluation"]<=1] [df["salary"]!="name"][df["department" ]!="sale"]
 7.3分组(比如:把同一部门的人分为一组) --groupby()
 df.groupby("department")
 7.4对分组后的组取均值
 df.groupby("department").mean()
 7.5 取部分数据(切片) --loc()
 df.loc[:,["last_evaluation","department"]] .groupby("department")
 7.6 取部分数据求平均
 df.loc[:,["last_evaluation","department"]] .groupby("department").mean()
 7.7 取部分数据求极差 --apply()
 df.loc[:,["average_monthly_hours" ,"department"]].groupby ("department")[ "average_monthly_hours"]. apply(lambda x:x.max()-x.min())

总结

以上内容介绍了使用Python进行数据分析与建模的关键步骤,希望能对读者有所帮助。如有任何疑问,欢迎留言交流,我们将及时回复。感谢大家的支持! 若本文对您有参考价值,欢迎转载,请注明出处,谢谢!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。