使用 PyCharm 创建科学项目

本节主要讲述PyCharm 对科学计算提供了哪些支持?如何在PyCharm 里创建一个科学计算的项目,在创建项目前要做哪些准备?以及对于这类项目在调试与运行过程中,PyCharm 又提供了哪些有用功能等等。

Tips: PyCharm 科学计算是 Profession(专业版)所提供的功能。

1. 科学计算

科学计算是当今科学的"第三支柱",科学计算是解决科学和工程问题的计算机数学模型所需的工具、技术和理论的集合。

当下我们大多数人接触科学计算,都是由人工智能与机器学习开始的。人工智能 可以简单理解为机器学习与大数据。 而 机器学习 是实现人工智能的方法,是人工智能研究的核心技术,在大数据的支撑下,通过各种算法让机器对数据进行深层次的统计分析以进行“自学”。机器学习中数据是非常重要的,而数据收集、分析与建模等过程与科学计算是密不可分的。

2. 常用Python科学计算库

2.1 Matplotlib 官网

图片描述

matplotlib是基于Python语言的开源项目,可用于开发2D图表(包括3D图表),以渐进、交互式方式实现数据可视化, 使用起来非常简单。matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。

可视化是在整个数据分析与挖掘的关键辅助工具,能将数据进行可视化,更直观的呈现,可以清晰的理解数据,从而调整我们的分析方法。这是为什么要使用matplotlib的原因。

Matplotlib能够绘制折线图、散点图、柱状图、直方图、饼图。我们根据不同统计图的意义,以此来决定选择哪种统计图来呈现我们的数据。

  • 折线图:以折线的上升或下降来表示统计数量的增减变化的统计图。能够显示数据的变化趋势,反映事物的变化情况;
  • 散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。能够显示数据的分布规律;
  • 柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中。能够一眼看出各个数据的大小,比较数据之间的差别;
  • 直方图:由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据范围,纵轴表示分布情况。用于展示一组或者多组数据的分布状况;
  • 饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类。可以用于统计分类数据的占比情况。

关于如何通过matplotlib 绘制上方的图形,请参考 或者 更多例子

2.2 Numpy 官网

图片描述

Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。Numpy 使用 ndarray 对象来处理多维数组,该对象是一个快速而灵活的大数据容器。

使用 Python 列表可以存储一维数组,通过列表的嵌套可以实现多维数组,那么为什么还需要使用Numpy 的 ndarray呢?这是因为对于同样的数值计算任务,ndarray的计算速度比直接使用Python快很多,节约了时间。机器学习的最大特点就是大量的数据运算,效率高是一个主要要求。

简单说一下 ndarray 为什么快?

  1. ndarray 在存储数据的时候,数据与数据的地址都是连续的,这样就给使得批量操作数组元素时速度更快。这是因为ndarray中的所有元素的类型都是相同的,而 Python 列表中的元素类型是任意的,所以ndarray 在存储元素时内存可以连续,而 python 原生 lis 就只能通过寻址方式找到下一个元素;
  2. ndarray支持并行化运算;
  3. Numpy 底层使用 C 语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受 Python解释器的限制 ,所以,其效率远高于纯 Python 代码。

关于 numpy 使用,请参考

2.3 Pandas 官网

图片描述

专门用于数据挖掘的开源 python 库, 以 Numpy 为基础,计算方面性能高; 具有独特的数据结构(DataFrame、Series与Panel)。

Numpy已经能够帮助我们处理数据,能够结合matplotlib解决部分数据展示等问题,那么pandas的优势是什么呢?主要有以下三点:

  • 便捷的数据处理能力;
  • 读取文件方便;
  • 封装了 Matplotlib、Numpy 的画图和计算。

关于如何使用 Pandas, 请参考

3. PyCharm 对科学计算支持

  • Numpy、Matplotlib 与 Pandas支持

以上三个基本科学计算库都是支持的,另外需要启用Scientific Mode (View -> Scientific Mode)才能正常显示各种图表,该模式仅在 PyCharm 的专业版中可用。

  • Jupyter Notebook支持

Jupyter Notebook,原名IPython Notbook,是IPython的加强网页版,一个开源Web应用程序
名字源自Julia、Python 和 R(数据科学的三种开源语言),是一款程序员和科学工作者的编程/文档/笔记/展示软件,.ipynb文件格式是用于计算型叙述的JSON文档格式的正式规范。 在下一小节将详细介绍它的安装与使用

  • R 语言支持

此支持可通过 R 插件获得,该插件支持使用 R 语言进行统计计算。

4. 创建科学项目

在PyCharm 里创建科学项目,我们通常会选择用 Conda 解释器,所以请事先安装 Conda 或者 miniconda, 安装细节请参考

4.1 基本步骤

step1: 主菜单 File -> New -> Project, 选择 Scientific
step2: 在项目设置对话框窗口中,指定项目名称,确保将 Conda 选为新环境,然后单击"Create"。
图片描述
step3: 自动创建了 main.py并且打开, 在其中加下面的代码。(主要功能是用拆线图展示北京与上海两个城市一小时的温度变化曲线。Tips: 使用Conda 解释器,像Numpy , matplotlib 基本的科学计算包都已经自带了,不需要再单独安装。)

# 画出温度变化图
import random
import matplotlib.pyplot as plt

# 准备x, y坐标的数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 增加北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]

# 创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 绘制折线图
# plt.plot(x, y_shanghai)
plt.plot(x, y_shanghai, label="SHANGHAI")
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="BEIJING")

# 显示图例
plt.legend(loc="best")


# 构造x轴刻度标签
x_ticks_label = ["11:{}".format(i) for i in x]
# 构造y轴刻度
y_ticks = range(40)

# 修改x,y轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 添加x轴、y轴描述信息及标题
plt.xlabel("Time")
plt.ylabel("Temperature")
plt.title("Temperature Change between 11am and 12am")

# 显示图像
plt.show()

step4: PyCharm 内需启用 Scientific Mode 才能正常显示 matplotlib 相关图表。主菜单View -> Scientific Mode
图片描述
step5: 运行项目⇧F10 (Shift + F10), 代码执行完毕,会有如下三个工具窗口显示:
图片描述

  1. "SciView"工具窗口。它有两个选项卡, "data"选项卡中预览数据帧,在"plot"选项卡中预览 matplotlib 图表;

  2. "Documentation"工具窗口,显示编辑器内光标插入位置处对象的内联文档,比如光标停留在matplotlib 包导入的地方,就会显示 matplotlib 的相关信息;

  3. Python 控制台。执行完毕后,自动打开,程序中涉及变量详细值也在右侧边栏自动显示出来。

4.2 分段执行代码

在 Scientific mode 模式,可以将代码格式化为一组可执行代码片断,每个片断都可以单独运行。要将代码拆分为独立运行的部分,只需在适当的位置添加 #%% 行。

main.py 中加入以下代码:主要功能是生成一个散点图。

import numpy as np
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2  # 0 to 15 point radii
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()

加了上面代码后,main.py 除了生成上面的折线图,还会再生成散点图。为了使这两张图的生成分段执行,如下图所示,加两行 # %% 行,然后分别点击边框中绿色箭头执行不同代码。

图片描述

4.3 查看数据细节

在 Python 控制台中预览变量时,可以单击 View as Array 链接,在 SciView 工具窗口的"数据"选项卡中查看这些数据。

为了说明这个功能,我们在 main.py 添加一行代码,创建一个多维数组

stock_change = np.random.normal(0, 1, (8, 10))

图片描述

5. 小结

本节主要讲解了 PyCharm 针对科学计算提供了哪些支持,其本身提供的功能都是简单易学的,难点在对科学计算包提供功能的使用与理解,一方面是对 Python 语言的应用,另一方面还是需要一定的高数、线性代数等方面的背景知识。在做一些不复杂的数据分析项目,使用 PyCharm 应该是足够的,如果对数据处理相对复杂,还是建议使用 Anacoda,毕竟它提供了更多专业的科学计算包,也提供了更多利于科学计算的工具。
图片描述