python机器学习-数据科学
本文是Python 机器学习系列的一部分。您可以在此处找到本系列之前所有帖子的链接
介绍
在上一章中,我们研究了统计中的集中趋势测度。
在本章中,我们将从数据科学开始,顾名思义,它是数据科学。借助它,我们可以改变数据的外观、数据的行为方式,甚至可以在不同格式之间交换数据。
注意:如果你能将任何事情与你自己或你的生活联系起来,那么理解这个概念的机会就更大。因此,尝试通过将一切与人类联系起来来理解一切。
什么是数据?
数据是单独的信息单位。数据描述了某个对象或现象的单一质量或数量。在分析过程中,数据由变量表示。尽管术语“数据”、“信息”和“知识”经常互换使用,但这些术语中的每一个都有不同的含义。
数据被测量、收集、报告和分析,然后可以使用图表、图像或其他分析工具进行可视化。数据作为一般概念是指某些现有信息或知识以适合更好使用或处理的某种形式表示或编码的事实。
一切事物都可以称为数据。数据是一个抽象术语,可用于各种类型的数据。每天生成的数据量可以通过查看下图来估算:
- Google:每天每条数据处理 24 Peta 字节的数据
- Facebook:每小时上传 1000 万张照片
- Youtube:每秒上传 1 小时的视频
- Twitter:每天 4 亿条推文
- Astronomy:卫星数据以数百 PB 为单位
注意: 1 PB 是 100 万兆字节或 1 千万字节或 1000 万亿字节或 1e^15 字节
因此,从上述值中,您可以很容易地理解,我们每天产生大约 1 GB 或千兆字节的数据。甚至上面写的数字也是一种数据。
什么是数据科学?
数据科学是对来自组织存储库中大量数据的信息流的详细研究。它涉及从原始和非结构化数据中获得有意义的见解,这些数据是通过分析、编程和业务技能处理的。
数据科学是一个“统一统计、数据分析、机器学习及其相关方法的概念”,以便用数据“理解和分析实际现象”。它采用了数学、统计学、计算机科学和信息科学背景下许多领域的技术和理论。
什么是数据处理?
数据整理有时也称为数据整理,是将数据从一种“原始”数据形式转换和映射到另一种格式的过程,目的是使其对各种下游目的(例如分析)更合适和更有价值。数据管理员是执行这些转换操作的人。
原始数据可能是非结构化和混乱的,信息来自不同的数据源、不匹配或丢失的记录,以及一系列其他棘手的问题。数据整理是一个术语,用于描述将数据整合到有凝聚力的视图中的数据整理,以及清理数据以使其完善并为下游使用做好准备的清洁工作。这需要良好的模式识别意识和聪明的黑客技能来合并和转换大量数据库级信息。
如果处理不当,脏数据会混淆隐藏在数据集中的“真相”并完全误导结果。因此,在应用更复杂的分析策略之前,任何数据科学家都必须熟练且灵活地处理数据,以便获得准确、可用的数据。
这可能包括进一步处理、数据可视化、数据聚合、训练统计模型以及许多其他潜在用途。
成为数据科学家需要具备哪些技能?
数据科学家是具有收集大量数据以分析和综合信息为公司和其他组织可操作的计划的能力的专业人士。以下是成为一名优秀的数据科学家需要满足的一些要求:
挖掘数据、洞察力和构建数据产品的核心是通过量化视角查看数据的能力。数据中存在可以数学表达的纹理、维度和相关性。利用数据寻找解决方案成为启发式和定量技术的脑筋急转弯。许多业务问题的解决方案涉及构建以数学为基础的分析模型,其中能够理解这些模型的基本机制是成功构建它们的关键。
首先,让我们澄清一下,我们不是在谈论入侵计算机的黑客行为。我们指的是黑客在技术程序员亚文化中的含义——即使用技术技能来构建事物并找到解决问题的巧妙解决方案的创造力和独创性。数据科学黑客是一位可靠的算法思想家,能够分解混乱的问题并以可解决的方式重新组合它们。
对于数据科学家来说,成为战术业务顾问很重要。与数据密切合作,数据科学家能够以其他人无法企及的方式从数据中学习。这创造了将观察转化为共享知识的责任,并为如何解决核心业务问题的战略做出贡献
简而言之,成为数据科学家所需的技能是:
- 统计数据
- 编程技巧
- 批判性思考
- 人工智能、机器学习和深度学习知识
- 数学
- 精通 Python、R、SAS 和 Scala
- 沟通
- 数据整理
- 数据可视化
- 理解分析函数的能力
- 使用 SQL 的经验
- 处理非结构化数据的能力
数据科学组件
现在,我们将讨论数据科学的一些关键组成部分,它们是
1. 数据(及其各种类型)
原始数据集是数据科学的基础,它可以是各种类型的数据,如结构化数据(主要以表格形式)和非结构化数据(图像、视频、电子邮件、PDF 文件等)。
2. 编程(Python 和 R)
数据管理和分析是通过计算机编程完成的。在数据科学领域,两种编程语言最受欢迎:Python 和 R。
3. 统计和概率
数据被操纵以从中提取信息。数据科学的数学基础是统计学和概率。如果没有清楚的统计和概率知识,很可能会误解数据并得出不正确的结论。这就是统计和概率在数据科学中发挥关键作用的原因。
4. 机器学习
作为数据科学家,您每天都会使用机器学习算法,例如回归和分类方法。对于数据科学家来说,了解机器学习是他们工作的一部分非常重要,这样他们才能从可用数据中预测有价值的见解。
5. 大数据
在当今世界,原始数据与原油相比,我们从原油中提取成品油的方式,通过应用数据科学,我们可以从原始数据中提取不同类型的信息。数据科学家用来处理大数据的不同工具有 Java、Hadoop、R、Pig、Apache Spark 等。
什么是数据科学过程?
数据科学过程是数据科学的生命周期。它由一组按时间顺序排列的步骤组成。此过程分为 6 个子部分,如下所示:
1. 数据发现
它包括从各种来源发现数据的方法,这些来源可以是非结构化格式(如视频或图像)或结构化格式(如文本文件),也可以来自关系数据库系统。
2. 数据准备
它包括将不同的数据转换为通用格式,以便无缝地使用它。此过程涉及收集干净的数据子集并插入合适的默认值,还可能涉及更复杂的方法,例如通过建模识别缺失值等。
3. 模型规划
在这里,您将确定绘制变量之间关系的方法和技术。这些关系将为您将在下一阶段实施的算法奠定基础。
4. 模型搭建
在此阶段,您将开发用于训练和测试目的的数据集。您将考虑您现有的工具是否足以运行模型,或者是否需要更强大的环境(如快速并行处理)。您将分析各种学习技术(如分类、关联和聚类)以构建模型。
5. 优化
在此阶段,您将交付最终报告、简报、代码和技术文档。此外,有时也会在实时生产环境中实施试点项目。这将使您在全面部署之前清楚地了解小规模的性能和其他相关限制。
6. 沟通结果
在最后一个阶段,您确定所有关键发现,与利益相关者沟通并根据第 1 阶段制定的标准确定项目的结果是成功还是失败。
Python 实现数据科学
到现在为止,你们都已经获得了很多关于这个概念的理论知识。现在让我们看看我们如何使用 python 实现这个概念。
在这里,我使用的是泰坦尼克号数据,你可以从kaggle下载泰坦尼克号.csv。我为此使用了 Google Colab,您可以为此使用 Jupyter Notebook 或任何其他工具。
1. 将数据加载到 Google Colab
向Google Colab上传数据集有3种方式,以下是我觉得比较简单的方式,其他2种方式大家可以搜索使用。
我使用 Google Colab,原因如下:
- 与 Jupyter Notebook 不同,我不需要安装任何库
- 作为一个 Web 应用程序,处理速度很高(因为我们获得了使用 GPU 和 TPU 的优势)
- 此外,我们能够在具有低 RAM 和系统功能的系统上执行机器学习(我认为最重要的)
from google.colab import files
uploaded = files.upload()
单击上传并选择您要上传的文件,在我的例子中是“titanic.csv”。之后,它将开始自动上传。
2. 准备 Notebook (Google Colab)
在这里,我们将设置 notebook/Google Colab 的环境。然后我们将导入所有必需的 Python 库。
from IPython.core.display import HTML
HTML("""
<style>
.output_png {
display: table-cell;
text-align: center;
vertical-align: middle;
}
</style>
""");
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
warnings.filterwarnings('ignore', category=DeprecationWarning)
import pandas as pd
pd.options.display.max_columns = 100
from matplotlib import pyplot as plt
import numpy as np
import seaborn as sns
import pylab as plot
params = {
'axes.labelsize': "large",
'xtick.labelsize': 'x-large',
'legend.fontsize': 20,
'figure.dpi': 150,
'figure.figsize': [25, 7]
}
plot.rcParams.update(params)
我们将使用pandas 来加载数据集。
data = pd.read_csv('titanic.csv')
4. 打印数据的形状或大小
data.shape
输出
由于我使用的是 891 行 12 列的 CSV 文件,因此我将获得输出为 (891,12)
5.打印数据的前5行
print(data.head())
6. 获得数据集的高级描述
上面的输出给我们的印象是年龄列中缺少 177,因为年龄的计数值与其他列的计数值不匹配。所以要补充的是,我们执行以下操作:
7. 数据可视化
在这个主题下,我们将可视化并尝试理解数据集。
7.1. 性和生存机会的可视化
data['Died'] = 1 - data['Survived']
data.groupby('Sex').agg('sum')[['Survived', 'Died']].plot(kind='bar', figsize=(3, 3),
stacked=True, colors=['g', 'r']);
输出
我们可以将上述数字的比率可视化为:
data.groupby('Sex').agg('mean')[['Survived', 'Died']].plot(kind='bar', figsize=(3, 3),
stacked=True, colors=['g', 'r']);
输出
7.2. 年龄变量与男性和女性的相关性的可视化
fig = plt.figure(figsize=(3, 3))
sns.violinplot(x='Sex', y='Age',
hue='Survived', data=data, split=True,
palette={0: "r", 1: "g"});
所以,从上面我们推断,女性比男性存活得更多
7.3. 票价与生存机会关系的可视化
figure = plt.figure(figsize=(5, 3))
plt.hist([data[data['Survived'] == 1]['Fare'], data[data['Survived'] == 0]['Fare']],
stacked=True, color = ['g','r'],
bins = 50, label = ['Survived','Dead'])
plt.xlabel('Fare')
plt.ylabel('Number of passengers')
plt.legend();
输出

7.4. 票价、年龄和生存机会之间关系的可视化
plt.figure(figsize=(25, 7))
ax = plt.subplot()
ax.scatter(data[data['Survived'] == 1]['Age'], data[data['Survived'] == 1]['Fare'],
c='green', s=data[data['Survived'] == 1]['Fare'])
ax.scatter(data[data['Survived'] == 0]['Age'], data[data['Survived'] == 0]['Fare'],
c='red', s=data[data['Survived'] == 0]['Fare']);
我们可以观察到不同的集群:
- x=20 和 x=45 之间的大绿点:票价最高的成人
- x=10 和 x=45 之间的小红点,船上下层的成年人
- x=0 和 x=7 之间的小点:这些是孩子
7.5. 票价与舱位关系的可视化
fig = plt.figure(figsize=(5, 3))
sns.violinplot(x='Embarked', y='Fare', hue='Survived', data=data, split=True, palette={0: "r", 1: "g"});
输出
从上面的可视化中,我们可以推断出支付最高或设置在 C 中的乘客存活的时间最多
Python 数据处理
在这里,我们将清理数据,使其为机器学习算法的工作做好准备,即填充缺失值,查看数据是否连续,查看数据是否需要进行任何修改?
data.describe()
输出

从上面的数据,我们得到的印象是乘客的最小年龄是 0.42 岁,即 5 个月。这很可疑,据消息称,我们船上有一个两个月大的婴儿,即最低年龄应该是0.19岁。
同样在“fare”字段中,我们发现一些值为 (0,0)。这要么意味着这些乘客免费旅行,要么数据丢失。
那么,让我们首先检查数据中的任何单元格是否为空?
data.count()
输出
因此,从上面的输出可以清楚地看出,我们在“embarked”、“age”和“cabin”列中缺少一些数据或相应的单元格为空。
那么,现在该怎么办。要么我们必须删除缺少数据的列,要么我们必须填补缺失的地方。现在,我将告诉你我如何减少缺失值的数量。
填补缺失值的三种方式
1. 用 numpy.NaN 替换值为 ‘0’ 的每个单元格
data = data.replace(0, np.NaN)
print(data.isnull().sum())
输出

因此,我们可以看到在某种程度上我们能够清理数据,但有些数据已损坏。所以让我们尝试另一种方式,看看结果
2.用列均值替换每个缺失值
data.fillna(data.mean(), inplace=True)
# count the number of NaN values in each column
print(data.isnull().sum())
输出

在这里,我们看到我们能够纠正“age”并且没有任何损坏。但是我们没能纠正“cabin”和“embarked”。所以现在让我们尝试另一种方式。
3. 用零替换每个 numpy.NaN 值
data = data.replace(np.NaN, 0)
# count the number of NaN values in each column
print(data.isnull().sum())
输出
因此,通过使用它,我能够实现“无空”情况。
注意:但是替换我已经实现的缺失值很可能会导致数据丢失或可能会改变数据的含义。
结论
在本章中,我们学习了数据科学。
在下一章中,我们将学习机器学习及其一些常用术语。
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!