4.Python数据分析—数据分析入门知识图谱&索引-知识体系下篇
一·个人简介
🏘️🏘️个人主页:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,CSDN内容合伙人,阿里云社区专家博主,新星计划导师,在职数据分析师。
💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。
![](https://i-blog.csdnimg.cn/blog_migrate/9a634410cc6b7f35886b50945fab99c7.gif)
类型 | 专栏 |
---|---|
Python基础 | Python基础入门—详解版 |
Python进阶 | Python基础入门—模块版 |
Python高级 | Python网络爬虫从入门到精通🔥🔥🔥 |
Web全栈开发 | Django基础入门 |
Web全栈开发 | HTML与CSS基础入门 |
Web全栈开发 | JavaScript基础入门 |
Python数据分析 | Python数据分析项目🔥🔥 |
机器学习 | 机器学习算法🔥🔥 |
人工智能 | 人工智能 |
二·机器学习基础
2.1 监督学习与无监督学习
2.1.1 监督学习:
监督学习的核心在于使用带有标签的训练数据来训练模型,以便模型能够学习输入到输出之间的映射关系。在这个过程中,算法会尝试找到一个最优的模型,使得对于新的输入数据,能够预测出正确的输出。
监督学习的应用场景非常广泛,包括但不限于邮件过滤
、图像识别
、疾病诊断
等。在这些场景中,我们通常有一个明确的任务目标,比如将邮件分类为垃圾邮件或非垃圾邮件,或者识别图像中的物体类别。
2.1.2 无监督学习:
无监督学习不依赖于标注的数据,而是直接从数据中寻找模式或结构。在无监督学习中,算法试图揭示数据中的隐藏结构,如通过聚类算法对数据进行分组,或者通过降维技术减少数据的复杂性,同时保留其主要特征。
无监督学习适用于探索性数据分析
、市场细分
、`社交网络分析等场景,这些场景中我们可能没有预先定义好的标签或结果。
监督学习和无监督学习的主要区别在于是否使用标注数据以及它们的学习目标。
监督学习依赖于标注数据来预测或分类新的数据,而无监督学习则专注于发现数据中的固有结构和关系。
2.2 特征工程
- 定义与目的:特征工程指的是从数据中提取、选择、转换和构造特征的过程,以便更好地代表问题的本质,从而提高模型的预测能力和泛化能力。
- 重要性:特征工程对于模型性能至关重要,好的特征可以使模型训练更加高效,同时也能显著提高模型的准确性。
- 流程与方法:特征工程包括多个步骤,如数据清洗、特征选择、特征构造和特征转换等。其中,特征选择是通过选取最有用的特征来减少数据的维度;特征构造则是创造新的特征,以捕捉数据中的某些模式或关系。
- 工具与实践:在实际中,可以使用各种工具和技术来进行特征工程,如使用sklearn库中的preprocessing模块进行数据预处理和特征选择。还可以使用随机森林等算法来评估特征的重要性,并据此进行选择。
- 类型与处理:特征工程涉及多种类型的数据,包括数值、分类值、日期、空间、图像和文本等。
2.3 常用机器学习算法概述
常用机器学习算法主要包括线性回归、支持向量机 (SVM)、最近邻居 (KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维和梯度增强等。
这些算法根据学习方式可以分为以下三类:
2.3.1 监督学习算法:
在监督学习中,模型从带有标签的训练数据中学习,并预测未知数据的标签。常用的监督学习算法包括:
- 线性回归:用于预测数值型输出,通过找到最佳拟合直线来描述自变量和因变量之间的关系。
- 逻辑回归:虽然命名为回归,但它是用于分类问题的,特别是二分类问题。它通过逻辑函数将线性回归的输出映射到0到1之间,从而预测类别值。
- 支持向量机(SVM):通过找到最优的超平面来区分不同的类别,尤其适用于边界清晰的复杂数据集。
- 决策树:通过树状图模型进行决策,每个节点代表一个特征或属性,而每个分支代表这个特征的一个决策结果。
- 随机森林:由多个决策树组成,通过集成学习提高预测准确性和控制过拟合。
2.3.2 无监督学习算法:
在无监督学习中,模型从未标记的数据中学习,通常用于发现数据中的模式或结构。常用的无监督学习算法包括:
- K-均值聚类:一种划分方法,将数据分为K个簇,使得同一簇内的数据点尽可能相似。
- 主成分分析(PCA):一种降维技术,通过保留数据中最重要的方差来减少数据集的维度。
2.3.3 强化学习:
强化学习与前两者不同,它关注如何基于环境反馈做出最佳决策。
2.4 模型评估与选择
- 评估方法:为了衡量学习器预测输出与样本真实输出之间的差异,我们需要选择合适的模型和参数。将数据集分为训练集和测试集,使用训练集来训练模型,然后使用测试集来评估模型的性能。
- 评估指标:模型的评估指标取决于问题是分类还是回归。对于分类问题,常用的指标包括准确率、召回率、F1分数、ROC曲线和AUC值。对于回归问题,常用的指标包括均方误差(MSE)、平均绝对误差(MAE)、Huber损失和均方根误差(RMSE)。
- 性能度量:通过计算上述指标,我们可以对模型的性能进行量化。例如,准确率告诉我们模型正确分类的比例,而ROC曲线则展示了模型在不同阈值下的表现。
- 泛化能力:泛化能力是指模型在新数据上的表现能力。使用交叉验证等技术,以确保模型不仅在测试集上表现良好,而且能够推广到未见过的数据上。
- 模型选择:在选择模型时,我们不仅要考虑模型的性能,还要考虑模型的复杂性、训练时间以及特征数量等因素。
- 实践应用:在实际应用中,我们通常会尝试多种模型和参数组合,然后根据评估结果来选择最佳的模型。这个过程可能需要多次迭代和调整,直到找到最适合问题的模型。
三·高级主题和工具
3.1 大数据处理工具:
大数据处理工具是一系列用于存储、处理和分析大量数据集的软件和技术。
-
Hadoop:它是一个开源的数据存储和处理框架,能够分布式地处理大规模数据。Hadoop 的核心组件包括 HDFS(Hadoop Distributed File System)用于存储数据,以及 MapReduce 用于数据处理。
-
MongoDB:这是一个领先的NoSQL数据库软件,它以文档形式存储数据,适合快速有效地进行大数据分析。
-
Spark:它是一个强大的开源实时数据处理引擎,特别适合于需要快速迭代访问数据的应用场景。
-
Cassandra:这是一个分布式NoSQL数据库系统,设计用来处理大量的数据跨许多商品服务器,提供高可用性和可扩展性。
-
Excel:虽然通常被认为是一个电子表格软件,但 Microsoft Excel 也广泛用于数据分析,尤其是在需要进行简单的数据处理和可视化时。
-
R:这是一种专门用于统计计算和图形的编程语言和软件环境,非常适合进行复杂的数据分析和建模。
-
SPSS:它是统计分析软件,广泛应用于社会科学、健康科学、市场研究等领域的复杂统计分析。
-
SAS:这是一个全面的软件套件,用于数据管理、高级分析、多变量分析、业务智能等领域。
-
腾讯大数据处理套件(TBDS):这是基于腾讯多年海量数据处理经验提供的大数据处理平台,提供多种大数据分析引擎和服务。
3.2 分布式计算和云服务
分布式计算和云服务都提供了强大的计算能力,但它们的关注点和应用方式有所不同。
3.2.1 分布式计算
- 分布式计算是一种计算方法,它将任务分散到多台计算机上执行,这些计算机在地理上可能相隔很远,但在用户看来它们像一个单一的系统一样工作。
- 这种方法可以提高计算效率和可靠性,因为即使部分计算机出现故障,整个系统仍能继续运行。
- 分布式计算通常用于需要大量计算资源的任务,如大型数据分析、科学研究等。
3.2.2 云服务
- 云计算是分布式计算的一种商业实现,它通过互联网提供了计算资源和服务。
- 云服务依赖于虚拟化技术,允许用户根据需求快速扩展或缩减资源。
- 云服务模型包括基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS),为用户提供了灵活的选择以满足不同的业务需求。
- 分布式云是云计算的一种形式,它将云服务的节点部署得更靠近用户,以降低延迟并提高性能。
3.3 实时数据分析和流处理
实时数据分析和流处理是现代数据处理中的两个关键概念,它们在延迟要求、应用场景和目的上有所不同。
3.3.1 实时数据分析
- 实时分析通常要求数据的处理延迟在微秒到毫秒级别。这意味着数据一旦产生,就必须立即被处理和分析,以便快速做出反应。
- 实时处理常用于那些需要即时数据消费、决策和控制的系统,例如机器人系统、智能驾驶系统等。在这些系统中,实时性对于安全性和可靠性至关重要。
- 实时处理系统的设计要求低延迟和高实时性,以确保决策和控制动作能够迅速反馈。
3.3.2 流处理
- 流处理是指对持续产生的数据流进行处理的能力。它支持对数据进行连续的分析和决策,而不是等到所有数据都可用时再进行处理。
- Flink是一个流行的流处理框架,它适用于多种场景,包括流分析、复杂事件处理、流与流的连接、机器学习、图分析、批处理和ETL等。
- 流处理的目的是从不断变化的数据中获得洞察,并实时更新分析结果,以帮助业务做出更好的决策。
总的来说,实时数据分析侧重于极短时间内的数据处理和反应,而流处理则关注于对持续产生的数据流进行分析和处理。两者都是数据驱动决策的重要工具,但它们的设计目标和技术实现有所不同。
3.4 机器学习库
在机器学习领域,有多个流行的库可供使用,它们各自有不同的特点和优势。
- scikit-learn:这是一个非常流行的机器学习库,提供了多种分类、回归、聚类、降维和预处理算法。它基于NumPy、SciPy和matplotlib,适用于数据挖掘和数据分析。
- TensorFlow:由Google开发的一个开源库,主要用于深度学习和神经网络。它灵活且功能强大,支持多种深度学习模型的构建和训练。
- Keras:一个高层神经网络API,它可以运行在TensorFlow、CNTK或Theano之上。Keras的设计旨在实现快速的实验,能够以TensorFlow作为后端时,具有高速和高效的特点。
- Theano:一个优化的Python库,用于高效地定义、优化和计算数学表达式涉及多维数组。它适合进行深度学习和大数据集的计算。
- PyTorch:一个由Facebook人工智能研究团队开发的库,用于自然语言处理等应用程序。它以其动态计算图和对Python的本地支持而受到欢迎。
四·实际项目和练习
4.1 波士顿房价预测——回归分析案例
回归分析是一种统计学方法,用于研究变量之间的关系,特别是一个或多个自变量(解释变量)对因变量(响应变量)的影响。
目前回归分析的研究范围可以分为如下几个部分组成:
线性回归
:一元线性回归、多元线性回归和多个因变量与多个自变量的回归。
回归诊断
:通过数据推断回归模型基本假设的合理性、基本假设不成立时对数据的修正、回归方程拟合效果的判断以及回归函数形式的选择。
回归变量的选择
:根据什么标准选择自变量和逐步回归分析方法。
参数估计方法
:偏最小二乘回归、主成分回归和岭回归。
非线性回归
:一元非线性回归、分段回归和多元非线性回归。
定性变量的回归
:因变量含有定性变量和自变量含有定性变量。
波士顿房价数据说明:此数据源于美国某经济学杂志上,分析研究波士顿房价( Boston HousePrice)的数据集。数据集中的每一行数据都是对波士顿周边或城镇房价的情况描述,下面对数据集变量说明下,方便大家理解数据集变量代表的意义。
CRIM: 城镇人均犯罪率
ZN: 住宅用地所占比例
INDUS: 城镇中非住宅用地所占比例
CHAS: 虚拟变量,用于回归分析
NOX: 环保指数
RM: 每栋住宅的房间数
AGE: 1940 年以前建成的自住单位的比例
DIS: 距离 5 个波士顿的就业中心的加权距离
RAD: 距离高速公路的便利指数
TAX: 每一万美元的不动产税率
PTRATIO: 城镇中的教师学生比例
B: 城镇中的黑人比例
LSTAT: 地区中有多少房东属于低收入人群
MEDV: 自住房屋房价中位数(也就是均价)
首先对数据分析,处理特殊异常值,然后才是模型和评估,并应用模型进行预测。
1.首先导入数据集,对数据进行分析
#导入Python常用数据分析的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set() #设置画图空间为 Seaborn 默认风格
names=['CRIM','ZN','INDUS','CHAS','NOX','RM','GE','DIS','RAD','TAX','PRTATIO','B','LSTAT','PRICE']
boston=pd.read_csv("/Users/glenji/Desktop/housing.csv",names=names,delim_whitespace=True)
boston.head(10)
查看各字段基础信息:
boston.info()
查看缺失值:
#查看缺失值
boston.isnull().sum()
二、描述性数据分析
①查看描述性数据统计:可以看到各个字段的均值、中位数、标准差等。
描述性数据统计
boston.describe()
查看各字段的相关性:可以看到房子价格跟住宅的房间数成比较强的正相关,而跟低收入人数比例有比较强的负相关。
#查看相关性
corrboston = boston.corr()
corrboston
plt.figure(figsize=(10,10)) #设置画布
sns.heatmap(corrboston,annot=True,cmap='RdGy')
plt.show()
查看是否穿过查尔斯河对房价的影响:可以看到被河流穿过的豪宅仅占比6.92%,而被查尔斯河穿过的豪宅,比没有被穿过的豪宅平均贵了28.7%。
#查看是否穿过查尔斯河的两类占比
#可以看到被河流穿过的豪宅仅占比6.92%
fig,ax = plt.subplots(1,2,figsize=(10,5))
boston['CHAS'].value_counts().plot.pie(ax=ax[0],shadow=False,autopct='%1.2f%%')
ax[0].set_ylabel('') #设置y轴标签
ax[0].set_xlabel('CHAS') #设置x轴标签
sns.countplot('CHAS',data=boston,ax=ax[1])
ax[1].set_ylabel('')
ax[1].set_xlabel('CHAS')
plt.show()
#再来看看两种不同类型的房子的价值如何
#可以看到被查尔斯河穿过的豪宅,比没有被穿过的豪宅平均贵了28.7%
bostonCHAS = boston[['CHAS','PRICE']] #先将CHAS和PRICE两列数据取出
bostonCHAS1=bostonCHAS.pivot_table(values='PRICE', #计算的值
index='CHAS', #透视的行,分组的依据
aggfunc='mean') #聚合函数
# 对透视表进行降序排列
bostonCHAS1 = bostonCHAS1.sort_values(by='PRICE', # 排序依据
ascending=False # 是否升序排列
)
bostonCHAS1
④看看各个字段与价格的散点图:以初步了解价格与相应字段的关系。可以看到不是所有的字段与价格都有较强的相关关系,但本例中不涉及多元线性回归的向后删除,仅做最简单的多元性性回归的分析处理。
x_data = boston[['CRIM','ZN','INDUS','CHAS','NOX','RM','GE','DIS','RAD','TAX','PRTATIO','B','LSTAT']] # 导入所有特征变量
y_data = boston[['PRICE']] # 导入目标值(房价)
plt.figure(figsize=(18,10))
for i in range(13):
plt.subplot(4,4,i+1)
plt.scatter(x_data.values[:,i],y_data,s = 5) #.values将DataFrame对象X_df转成ndarray数组
plt.xlabel(names[i])
plt.ylabel('Price')
plt.title(str(i+1)+'. '+names[i]+' - Price')
plt.tight_layout()
plt.show()
三、预测性数据分析
①选取线性回归字段:
from sklearn import linear_model
#定义线性回归的x和y变量
x=pd.DataFrame(boston[['CRIM','ZN','INDUS','CHAS','NOX','RM','GE','DIS','RAD','TAX','PRTATIO','B','LSTAT']])
y=boston['PRICE']
x
②建立线性回归模型,并调用:可以看到各个字段的回归系数,可以写出一个回归方程:y=ax1+bx2+……,理论上你知道一套新房子的各个字段,带入公式即可预测出价格。
#建立线性回归模型,并将变量带入模型进行训练。
clf = linear_model.LinearRegression()
clf.fit(x, y)
#查看回归系数。本例为一元回归,所以只有一个系数。
print('回归系数:', clf.coef_)
③计算回归系数:计算出的回归系数为0.74,回归拟合效果较好。
from sklearn.metrics import r2_score
score = r2_score(y, y_pred)
score
④可以进行简单的预测:
y_pred =clf.predict(x)
print(y_pred)