四、Python 中的数据科学

原文:Data Science in Python

译者:飞龙

协议:CC BY-NC-SA 4.0

Python 有大量可用于数据科学的工具。

Python 中的数据科学核心围绕着一些核心模块,通常包括【scipy,numpy,pandas,matplotlib 和 scikit-learn】。

在这里,我们将探讨这些模块的基础知识以及它们的作用。

四、Python 中的数据科学 - 图1

Scipy是一个“生态系统”,包括一系列用于 Python 中科学计算的开源软件包。

scipy 组织的网站在这里,包括生态系统的描述入门,以及广泛的教程

  1. # 你可以导入完整的 scipy 包,通常缩写为 'sp'
  2. import scipy as sp
  3. # 但是,导入特定子模块可能更常见
  4. # 例如,让我们导入 stats 子模块
  5. import scipy.stats as sts

Scipy 具有广泛的功能。

对于一个简单/随机的例子,让我们使用它的统计模块来模拟用伯努利分布翻转硬币,这是一个可以模拟随机变量的分布,随机变量要么是 0(称之为反面),要么是 1(称之为正面)。

  1. # 让我们模拟一个均匀的硬币 - 0.5 的概率是正面
  2. sts.bernoulli.rvs(0.5)
  3. # 0
  4. # 让我们翻转一堆硬币吧!
  5. coin_flips = [sts.bernoulli.rvs(0.5) for i in range(100)]
  6. print('The first ten coin flips are: ', coin_flips[:10])
  7. print('The percent of heads from this sample is: ', sum(coin_flips) / len(coin_flips) * 100, '%')
  8. '''
  9. The first ten coin flips are: [1, 1, 1, 1, 0, 1, 1, 0, 1, 1]
  10. The percent of heads from this sample is: 60.0 %
  11. '''

四、Python 中的数据科学 - 图2

Numpy 包含一个数组对象(用于多维数据,通常是统一类型),以及线性代数和数组分析的操作。

numpy 网站是这里,包括他们的官方快速入门教程

注意:

数组是“相似对象的系统排列,通常在行和列中”(来自 Wikipedia 的定义)

  1. # Numpy 标准导入为 'np'
  2. import numpy as np
  3. # Numpy 的专长是线性代数和(匀质)数据数组
  4. # 定义一些数组
  5. # 数组可以有不同的类型,但数组中的所有数据都需要是相同的类型
  6. arr_1 = np.array([1, 2, 3])
  7. arr_2 = np.array([4, 5, 6])
  8. bool_arr = np.array([True, False, True])
  9. str_arr = np.array(['a', 'b', 'c'])
  10. # 请注意,如果你尝试创建混合数据类型数组,numpy 将不会失败
  11. # 但它将(默默地)
  12. arr = np.array([1, 'b', True])
  13. # 检查数组元素的类型
  14. print(type(arr[0]))
  15. print(type(arr[2]))
  16. '''
  17. <class 'numpy.str_'>
  18. <class 'numpy.str_'>
  19. '''
  20. # 因此,这些数组不会像你期望的那样表现
  21. # 最后一项看起来像布尔值
  22. print(arr[2])
  23. # 但是,因为它实际上是一个字符串,所以它不会像布尔值一样进行求值
  24. print(arr[2] == True)
  25. '''
  26. True
  27. False
  28. '''

有关 numpy 的更多练习,请查看集合 numpy 练习

pandas

Pandas 是一个用于在数据结构组织数据,并对其进行数据分析的软件包。

Pandas 官方网站在这里,包括[ 10 分钟入门]等材料(http://pandas.pydata.org/pandas-docs/version/0.17.0/10min.html)和[基本功能]教程(http://pandas.pydata.org/pandas-docs/version/0.17.0/basics.html)。

Pandas 主要数据对象是 DataFrame(数据帧),它是一个功能强大的数据对象,用于将混合数据类型与标签一起存储。

Pandas 数据帧还提供了大量可用于处理和分析数据的方法。

如果你熟悉 R,pandas 数据帧对象和方法与 R 非常相似。

  1. # Pandas 标准导入为 pd
  2. import pandas as pd
  3. # 让我们从一组数据开始,但我们也为每个数据项放置一个标签
  4. dat_1 = np.array(['London', 'Washington', 'London', 'Budapest'])
  5. labels = ['Ada', 'Alonzo', 'Alan', 'John']
  6. # Pandas 提供 'Series' 数据对象来存储带有轴标签的 1d 数据
  7. pd.Series?
  8. # 让我们制作一个没有数据的序列,并收好它
  9. ser_1 = pd.Series(dat_1, labels)
  10. ser_1.head()
  11. '''
  12. Ada London
  13. Alonzo Washington
  14. Alan London
  15. John Budapest
  16. dtype: object
  17. '''
  18. # 如果我们有一些不同的数据(标签相同),我们可以制作另一个序列
  19. dat_2 = [36, 92, 41, 53]
  20. ser_2 = pd.Series(dat_2, labels)
  21. ser_2.head()
  22. '''
  23. Ada 36
  24. Alonzo 92
  25. Alan 41
  26. John 53
  27. dtype: int64
  28. '''
  29. # 然而,拥有一系列序列可能会很快变得非常混乱
  30. # 因此,Pandas 提供了数据帧 - 一个强大的数据对象,用于存储带标签的混合类型数据
  31. pd.DataFrame?
  32. # 有几种方法可以初始化数据帧
  33. # 在这里,我们提供了一个由我们的序列组成的字典
  34. df = pd.DataFrame(data={'Col-A': ser_1, 'Col-B':ser_2}, index=labels)
  35. # 对于类别数据,我们可以检查每个值的数量
  36. df['Col-A'].value_counts()
  37. '''
  38. London 2
  39. Washington 1
  40. Budapest 1
  41. Name: Col-A, dtype: int64
  42. '''
  43. # 请注意,数据帧实际上是Series的集合
  44. # 当我们索引 df 时,如上所述,我们实际上是拉出一个序列
  45. # 因此,'.value_counts()' 实际上是一个 Series 方法
  46. type(df['Col-A'])
  47. # pandas.core.series.Series
  48. # Pandas 还为我们提供了一种直接探索和分析数据帧中数据的方法
  49. # 例如,所有数字数据列的平均值
  50. df.mean()
  51. '''
  52. Col-B 55.5
  53. dtype: float64
  54. '''

对于 Pandas 的更多练习,你可以尝试一些练习集,包括这个这个

matplotlib

Matplotlib 是一个用于绘图的库,特别是 2D 绘图。

Matplotlib 官方网站包括官方教程以及示例的画廊,你可以从中起步和修改。

  1. # 这个魔术命令用于在笔记本中内联绘制所有图形
  2. %matplotlib inline
  3. # Matplotlib 标准导入为 plt
  4. import matplotlib.pyplot as plt
  5. # 绘制基本折线图
  6. plt.plot([1, 2, 3], [4, 6, 8])
  7. # [<matplotlib.lines.Line2D at 0x11c0c5128>]

png

matplotlib 还有许多外部材料,包括这个

sklearn

Scikit-Learn 是一个用于数据挖掘,数据分析和机器学习的软件包。

这是 scikit-learn 官方网站,包括他们的官方教程

  1. # 导入 sklearn
  2. import sklearn as skl
  3. # 查看模块说明
  4. skl?

我们将在稍后的教程中入门机器学习并使用 sklearn。

外部资源

有许多资源可供学习如何使用这些软件包。

上面的链接包括官方文档和教程,这是最好的起点。

你还可以在谷歌中搜索其他资源和练习。

涵盖所有这些工具的特别好(和免费)的资源是 Jake Vanderplas数据科学手册