什么是数据科学?
数据科学是一个跨学科领域,专注于从通常数量巨大的数据集中提取知识。该领域包括分析、为分析准备数据以及展示结果以告知组织中的高层决策。因此,它融合了计算机科学、数学、静态、信息可视化、图形和商业方面的技能。
解决问题
数据无处不在,是每个组织最重要的特征之一,它通过根据事实、统计数字和趋势做出决策来帮助企业蓬勃发展。由于数据范围的不断扩大,数据科学应运而生,这是一个多学科的 IT 领域,数据科学家的工作是 21 世纪最苛刻的工作。数据分析/数据科学帮助我们确保从数据中获得问题的答案。数据科学,从本质上讲,数据分析通过帮助我们从数据中发现有用的信息、回答问题,甚至预测未来或未知数,发挥着重要作用。它使用科学的方法、程序、算法和框架从大量数据中提取知识和洞察力。
数据科学是一个将想法、数据检查、机器学习及其相关策略结合在一起的概念,以用数据理解和剖析真实现象。它是数据挖掘、统计、预测分析等数据分析领域的延伸。这是一个巨大的领域,它使用了许多属于其他领域的方法和概念,如信息科学、统计学、数学和计算机科学。数据科学中使用的一些技术包括机器学习、可视化、模式识别、概率模型、数据工程、信号处理等。
帮助您更成功地处理数据科学项目的几个重要步骤:
- 设定研究目标:了解我们的数据科学项目所属的业务或活动是确保其成功和任何健全数据分析项目第一阶段的关键。在项目章程中定义我们项目的内容、原因和方式是首要任务。现在坐下来定义时间表和具体的关键绩效指标,这是启动我们的数据计划必不可少的第一步!
- 检索数据:下一步是查找和访问我们项目所需的数据。混合和合并来自尽可能多的数据源的数据是使数据项目变得出色的原因,因此请尽可能多地查看。这些数据要么在公司内部找到,要么从第三方检索。因此,这里有一些方法可以让我们自己获得一些可用数据:连接到数据库、使用 API 或寻找开放数据。
- 数据准备:下一个数据科学步骤是可怕的数据准备过程,通常会占用我们数据项目的 80% 的时间。检查和修复数据错误,使用来自其他数据源的数据丰富数据,并将其转换为适合您的模型的格式。
- 数据探索:现在我们已经清理了数据,是时候操作它以从中获得最大价值了。使用描述性统计和视觉技术深入研究我们的数据是我们探索数据的方式。一个例子是通过创建基于时间的特征来丰富我们的数据,例如:提取日期组件(月、小时、星期几、一年中的星期等)、计算日期列之间的差异或标记国定假日.丰富数据的另一种方法是连接数据集——本质上是从一个数据集或选项卡中检索列到参考数据集中。
- 演示和自动化:向利益相关者展示我们的结果,并将我们的分析过程工业化,以实现重复重用和与其他工具的集成。当我们处理大量数据时,可视化是探索和交流我们的发现的最佳方式,也是我们数据分析项目的下一阶段。
- 数据建模:使用机器学习和统计技术是进一步实现我们的项目目标和预测未来趋势的步骤。通过使用聚类算法,我们可以构建模型来发现在图表和统计数据中无法区分的数据趋势。这些创建了类似事件(或集群)的组,并且或多或少地明确表达了在这些结果中哪些特征是决定性的。
为什么是数据科学家?
数据科学家横跨商业和 IT 领域,拥有独特的技能组合。由于当今企业对大数据的看法,他们的角色已经发挥了重要作用。企业希望利用可以增加收入的非结构化数据。数据科学家分析这些信息以理解它并提出有助于业务增长的业务洞察力。
用于数据科学的Python包
现在,让我们从最重要的主题开始,即用于数据科学的Python包,它将成为我们开始数据科学之旅的垫脚石。 Python库是函数和方法的集合,允许我们在不编写任何代码的情况下执行大量操作。
1.科学计算库:
- Pandas——它是一个二维大小可变的、潜在异构的表格数据结构,带有标记的轴。它为有效的操作和分析提供了数据结构和工具。它提供对结构化数据的快速访问。
例子:
Python3
import pandas as pd
lst = ['I', 'Love', 'Data', 'Science']
df = pd.DataFrame(lst)
print(df)
Python3
import numpy as np
arr = np.array ([[1, 2, 3], [4, 6, 8]])
print("Array is of type: ", type(arr))
print("No. of dimensions:", arr.ndim)
print("Shape of array: ", arr.shape)
Python3
import numpy as np
from scipy import misc
import matplotlib.pyplot as plt
print ("I like ", np.pi)
face = misc.face()
plt.imshow(face)
plt.show()
Python3
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
Python3
import seaborn as sns
sns.set()
tips = sns.load_dataset("tips")
sns.relplot(x = "total_bill",
y = "tip",
col = "time",
hue = "smoker",
style = "smoker",
size = "size",
data = tips);
Python3
from sklearn import datasets
iris = datasets.load_iris( )
digits = datasets.load_digits( )
print(digits)
Python3
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
dat = sm.datasets.get_rdataset("Guerry", "HistData").data
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)',
data = dat).fit()
print(results.summary())
- 输出:
- Numpy——它使用数组作为输入和输出。它可以扩展到矩阵的对象。它允许开发人员通过较小的编码更改执行快速数组处理。
例子:
Python3
import numpy as np
arr = np.array ([[1, 2, 3], [4, 6, 8]])
print("Array is of type: ", type(arr))
print("No. of dimensions:", arr.ndim)
print("Shape of array: ", arr.shape)
- 输出:
Array is of type:
No. od dimensions: 2
Shape of array: (2, 3)
- Scipy——它是一个基于 Python的开源库。它适用于一些高级数学问题——积分、微分方程、优化和数据可视化。它易于使用和理解以及快速的计算能力。
例子:
Python3
import numpy as np
from scipy import misc
import matplotlib.pyplot as plt
print ("I like ", np.pi)
face = misc.face()
plt.imshow(face)
plt.show()
- 输出:
2. 可视化库:
- Matplotlib —它提供了一个面向对象的 API,用于将绘图嵌入到应用程序中。每个 pyplot函数都会对图形进行一些更改。它在图中创建一个图形或绘图区域,在绘图区域中绘制一些线。
例子:
Python3
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
- 输出:
- Seaborn —用于制作统计图形。它提供了一个用于绘制有吸引力和信息丰富的图形的高级界面。在堆图、团队系列、小提琴图等各种情节中很容易生成。
例子:
Python3
import seaborn as sns
sns.set()
tips = sns.load_dataset("tips")
sns.relplot(x = "total_bill",
y = "tip",
col = "time",
hue = "smoker",
style = "smoker",
size = "size",
data = tips);
- 输出:
3.算法库:
- Scikit learn -它提供统计建模,包括回归、分类、聚类。它是一个用于Python编程的免费软件机器学习库。它使用 NumPy 进行高性能线性代数和数组运算。
例子:
Python3
from sklearn import datasets
iris = datasets.load_iris( )
digits = datasets.load_digits( )
print(digits)
- 输出:
{‘data’: array([[ 0., 0., 5., …, 0., 0., 0.],
[ 0., 0., 0., …, 10., 0., 0.],
[ 0., 0., 0., …, 16., 9., 0.],
…,
[ 0., 0., 1., …, 6., 0., 0.],
[ 0., 0., 2., …, 12., 0., 0.],
[ 0., 0., 10., …, 12., 1., 0.]]), ‘target’: array([0, 1, 2, …, 8, 9, 8]), ‘target_names’: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), ‘images’: array([[[ 0., 0., 5., …, 1., 0., 0.],
[ 0., 0., 13., …, 15., 5., 0.],
[ 0., 3., 15., …, 11., 8., 0.],
…,
[ 0., 4., 11., …, 12., 7., 0.],
[ 0., 2., 14., …, 12., 0., 0.],
[ 0., 0., 6., …, 0., 0., 0.]],
[[ 0., 0., 0., …, 5., 0., 0.],
[ 0., 0., 0., …, 9., 0., 0.],
[ 0., 0., 3., …, 6., 0., 0.],
…,
[ 0., 0., 1., …, 6., 0., 0.],
[ 0., 0., 1., …, 6., 0., 0.],
[ 0., 0., 0., …, 10., 0., 0.]],
[[ 0., 0., 0., …, 12., 0., 0.],
[ 0., 0., 3., …, 14., 0., 0.],
[ 0., 0., 8., …, 16., 0., 0.],
…,
[ 0., 9., 16., …, 0., 0., 0.],
[ 0., 3., 13., …, 11., 5., 0.],
[ 0., 0., 0., …, 16., 9., 0.]],
…,
[[ 0., 0., 1., …, 1., 0., 0.],
[ 0., 0., 13., …, 2., 1., 0.],
[ 0., 0., 16., …, 16., 5., 0.],
…,
[ 0., 0., 16., …, 15., 0., 0.],
[ 0., 0., 15., …, 16., 0., 0.],
[ 0., 0., 2., …, 6., 0., 0.]],
[[ 0., 0., 2., …, 0., 0., 0.],
[ 0., 0., 14., …, 15., 1., 0.],
[ 0., 4., 16., …, 16., 7., 0.],
…,
[ 0., 0., 0., …, 16., 2., 0.],
[ 0., 0., 4., …, 16., 2., 0.],
[ 0., 0., 5., …, 12., 0., 0.]],
[[ 0., 0., 10., …, 1., 0., 0.],
[ 0., 2., 16., …, 1., 0., 0.],
[ 0., 0., 15., …, 15., 0., 0.],
…,
[ 0., 4., 16., …, 16., 6., 0.],
[ 0., 8., 16., …, 16., 8., 0.],
[ 0., 1., 8., …, 12., 1., 0.]]]), ‘DESCR’: “.. _digits_dataset:\n\nOptical recognition of handwritten digits dataset\n————————————————–\n\n**Data Set Characteristics:**\n\n :Number of Instances: 5620\n :Number of Attributes: 64\n :Attribute Information: 8×8 image of integer pixels in the range 0..16.\n :Missing Attribute Values: None\n :Creator: E. Alpaydin (alpaydin ‘@’ boun.edu.tr)\n :Date: July; 1998\n\nThis is a copy of the test set of the UCI ML hand-written digits datasets\nhttps://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handwritten+Digits\n\nThe data set contains images of hand-written digits: 10 classes where\neach class refers to a digit.\n\nPreprocessing programs made available by NIST were used to extract\nnormalized bitmaps of handwritten digits from a preprinted form. From a\ntotal of 43 people, 30 contributed to the training set and different 13\nto the test set. 32×32 bitmaps are divided into nonoverlapping blocks of\n4x4 and the number of on pixels are counted in each block. This generates\nan input matrix of 8×8 where each element is an integer in the range\n0..16. This reduces dimensionality and gives invariance to small\ndistortions.\n\nFor info on NIST preprocessing routines, see M. D. Garris, J. L. Blue, G.\nT. Candela, D. L. Dimmick, J. Geist, P. J. Grother, S. A. Janet, and C.\nL. Wilson, NIST Form-Based Handprint Recognition System, NISTIR 5469, \n1994.\n\n.. topic:: References\n\n – C. Kaynak (1995) Methods of Combining Multiple Classifiers and Their\n Applications to Handwritten Digit Recognition, MSc Thesis, Institute of\n Graduate Studies in Science and Engineering, Bogazici University.\n – E. Alpaydin, C. Kaynak (1998) Cascading Classifiers, Kybernetika.\n – Ken Tang and Ponnuthurai N. Suganthan and Xi Yao and A. Kai Qin.\n Linear dimensionalityreduction using relevance weighted LDA. School of\n Electrical and Electronic Engineering Nanyang Technological University.\n 2005.\n – Claudio Gentile. A New Approximate Maximal Margin Classification\n Algorithm. NIPS. 2000.”}
- 统计模型——它建立在 NumPy 和 SciPy 之上。它允许用户探索数据、估计统计模型和执行测试。它还使用 Pandas 进行数据处理,使用 Patsy 进行类似 R 的公式界面。
例子:
Python3
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
dat = sm.datasets.get_rdataset("Guerry", "HistData").data
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)',
data = dat).fit()
print(results.summary())
- 输出: