如何安装并运行 Julia?
安装 Julia 非常简单。前往 Julia 官网的此页面下载与您操作系统对应的安装程序,并勾选将 Julia 添加到系统 PATH 的选项。如果您在命令行中输入 julia 并得到如下输出,则说明一切正常。

安装并运行 Julia 编程语言
PyCharm 和 VSCode 都提供了支持代码高亮与调试的 Julia 插件。不过,由于数据科学家通常喜欢在 JupyterLab 中工作,给 JupyterLab 添加一个 Julia 内核也很容易。在终端进入 julia 提示符后,只需输入以下两行:
using Pkg
add("IJulia")
上述代码会将 IJulia 包添加到系统中的 Julia 安装。重启任何正在运行的 JupyterLab 会话,您就能在 Launcher 中看到 Julia 选项。
Julia 在 JupyterLab 中运行
Julia 基本语法
本节将介绍 Julia 语法的基础,包括变量、数据类型、运算符、向量等。
运算符
在编程中,有一些特殊字符称为运算符,用于表示特定的数学或逻辑过程。下面展示了最常见的运算符,包括加、减、乘、除等。
注意: 在 Julia 中,注释使用单个 # 字符。程序会忽略 # 之后到该行末尾的所有内容。
# Addition in Julia
37 + 73
110
# Subtraction in Julia
17 - 19
-2
# Multiplication in Julia
29 * 33
957
# Division in Julia
22 / 7
3.142857142857143
# Backwards division in Julia, the above is equal to 0 / 5.
5 \ 0
0
# The remainder operator in Julia
98456 % 23
16
# Raising to the power 2 (squaring)
(22 / 7) ^ 2
9.877551020408163
# Raising to the power 3 (cubing)
-7 ^ 3
-343
# Raising to the power 0.5 (square-rooting)
(355 / 133) ^ 0.5
1.633760365638372
变量
在编程中,我们使用变量来存储信息。变量让我们可以通过名称来引用一段信息。比如,这里我们将数字 73 存入名为 a 的变量,将字符串 “Hello world!” 存入变量 “word”(我们会在下一节查看 Julia 的不同数据类型)。在命令行中输入变量名会打印其值。
# Storing the number 73 in a variable a
a = 73
a
73
# Storing "Hello world!" in word
word = "Hello world!"
word
Hello world!
所有 Julia 运算符和函数在变量上也同样适用。
# Multiplying two numeric variables
a = 73
b = 37
a * b
2701
变量名可以使用任意字母数字字符,包括下划线。但在 Julia 中有一些命名约定。变量名:
- 采用
lower_snake_case(小写,单词间用下划线分隔) - 不能以数字开头。
Julia 中的数据类型简介
数据类型告诉程序变量会取什么样的值,以及在不引发错误的情况下可以对其使用哪些数学或逻辑运算符。Julia 中有多种数据类型,下面是最基础的几类。
|
数据类型 |
表达式 |
示例 |
描述 |
|
整数 |
|
1, -99 |
整值 |
|
浮点数 |
|
1.23, 4.0 |
带小数点的数字 |
|
布尔值 |
|
true, false |
逻辑值 |
|
字符串 |
|
"Hello", "A", "" |
任意长度的文本数据 |
|
字符 |
|
'A', '$', '\u20AC' |
恰好一个字符的文本数据 |
可以使用 typeof() 函数打印变量的数据类型:
# Getting the type of 3.14
typeof(3.14)
Float64
在 Julia 中进行运算时,需要注意不同数据类型带来的影响。例如,浮点数与整数相乘会返回浮点数。
# Bank balance as an integer
balance = 100
# Interest rate as a float
interest_rate = 1.05
# Interest rate as a float
new_balance = balance * interest_rate
typeof(new_balance)
Float64
相反,将字符串与数值类型进行运算通常会导致错误。例如如下所示。
# Bank balance as an integer
balance = 100
# Interest rate as a string
interest_rate = “5%”
# Interest rate as a float
new_balance = balance * interest_rate
ERROR: MethodError:
no method matching *(::Int64, ::String)
在 Julia 中进行数据类型转换
在 Julia 中,可以使用内置函数将不同数据类型互相转换。下表展示了常见的数据类型转换方式。
|
来源类型 |
目标类型 |
函数 |
|
整数 |
浮点数 |
|
|
浮点数 |
整数 |
|
|
整数或浮点数 |
字符串 |
|
|
字符串 |
浮点数 |
|
|
字符串 |
整数 |
|
在 Julia 中处理字符和字符串
上一节我们已经看到 Julia 中的字符和字符串数据类型,本节将深入介绍常见的字符与字符串操作。提醒一下,字符串是用双引号括起、有序排列的一系列字符或文本。
# A string is a series of characters
word = "Hello world!"
word
"Hello world!"
要写多行字符串,可以使用三重引号:
multi_line = """
This is a
multi-line string.
"""
print(multi_line)
This is a
multi-line string.
可以通过多种方式从字符串中提取信息和属性。例如,使用方括号索引可根据位置提取单个字符或某段字符。在此示例中,1:3 表示从 1 到 3(含 3)的序列。
text = "Julia is a high-level, dynamic programming language"
# Extracting the first character in text based on its index
text[1]
'J': ASCII/Unicode U+004A (category Lu: Letter, uppercase)
# Extracting the first three characters in text based on its index
text[1:3]
"Jul"
上面我们在方括号中写入 1,返回了第一个字符。或者,您也可以使用特殊的 begin 运算符:
# Extracting the first character in text with the begin operator
text[begin]
'J': ASCII/Unicode U+004A (category Lu: Letter, uppercase)
当您从字符串中提取单个字符时,其数据类型为 Char。
# Extract the type of the fourth character
typeof(text[4])
Char
# Extract the type of the fourth character
typeof(text[4])
然而,当您对字符串进行切片并提取多个字符时,输出仍是字符串。
# Extract the type of the first 5 characters
typeof(text[begin:5])
String
上面我们截取了文本的前 5 个字符。请注意,冒号两侧的索引都是闭区间。与 Python 不同,Julia 不支持负索引。取而代之,您可以将 end 运算符与负数结合使用。例如,要获取字符串倒数第三个字符,可以这样写。
# Third from the end of the string
text[end-2]
'a': ASCII/Unicode U+0067 (category Ll: Letter, lowercase)
Julia 中常见的字符串操作
您可以使用 length() 函数统计字符串中的字符数量。
# Count the number of characters in a string
length(text)
51
常见任务之一是将两个或多个字符串拼接在一起。您可以使用 string() 函数来完成,将多个字符串以逗号分隔传入函数。
# Creating one string from "Julia", "is", "awesome"
string("Julia ", "is ", "awesome!")
"Julia is awesome!"
您也可以使用 *(乘法)运算符来拼接字符串
# Creating one string by multiplying strings
"73 " * "is " * "the " * "best " * "prime."
"73 is the best prime."
无论哪种方式,都别忘了在单词之间留空格。另一种连接字符串的方法是将某个字符串重复多次。如下所示,可使用 ^(幂运算)运算符实现:
# Creating one string with the exponentiation operator
"Three times the fun!" ^ 3
"Three times the fun! Three times the fun! Three times the fun!"
Julia 中的数组
Julia 及其他语言中另一个常见的数据类型是数组(在 Julia 中称为数组)。数组是用方括号 [] 包起来的一组值。根据维度不同,数组的称呼也不同。
- 一维数组称为向量。
- 二维数组称为矩阵。
- 三维及以上通常就称为数组。
本教程将专注于向量。可以通过在一对方括号中传入元素来创建向量,如下所示。
# Define a three-integer vector
x = [1, 2, 3]
3-element Vector{Int64}:
1
2
3
# Get the type of x
typeof(x)
Vector{Int64} (alias for Array{Int64, 1})
向量 x 的类型是 Vector,它是一个一维数组的别名(输出中显示 alias for Array{In664, 1})。其所有元素的数据类型为 Int64。但这并不意味着所有元素必须具有相同类型。比如,下面是一个包含不同类型元素的向量。
# Define a vector with various data types
array = [1, "Hello", 22/7]
3-element Vector{Any}:
1
"Hello"
3.142857142857143
如您所见,向量元素在花括号中显示为 Any 类型,表示可以包含多种数据类型。您甚至可以在向量中再放入向量。
# Define a vector with various data types, including another vector
array = [1, 2, 3, ["Hello", 73]]
4-element Array{Any,1}:
1
2
3
Any["Hello", 73]
length() 函数在向量上与在字符串上作用相同——统计数组中的元素个数。
# Get the length of a vector
length(array)
3
索引规则也很相似——这里我们对数组的第一个和第二个元素进行索引。
# Get the first element of a vector
array = [1, "Hello", 22/7]
array[begin]
1
# Get the last element of a vector
array[end-1]
"Hello"
布尔运算符与数值比较
编程语言使用布尔值来实现逻辑。布尔值只有两种取值:true 或 false。在进行数值比较与布尔运算时,布尔值尤其有用。我们先来看数值比较。
Julia 中的数值比较运算符
下表列出了 Julia 中最常用的数值比较运算符。正如示例所示,您可以使用数值比较运算符对布尔值、数值对象等进行比较。注意,您可以使用一个或两个符号来表示小于等于/大于等于。若使用单个符号版本,请输入 \le 然后按 TAB,或输入 \ge 然后按 TAB。
|
运算符 |
名称 |
示例 |
|
|
相等 |
|
|
|
不等 |
|
|
|
小于 |
|
|
|
小于或等于 |
|
|
|
大于 |
|
|
|
大于或等于 |
|
Julia 中的布尔运算符
除了数值比较运算符外,还有布尔运算符(如 and/or)。它们可以将两个或多个布尔表达式组合成一个。下面是最常见的布尔运算符及其用法。
|
运算符 |
名称 |
示例 |
|
|
与(and)运算符 |
|
|
|
或(or)运算符 |
|
Julia 进阶语法
Julia 中的条件语句
借助布尔值与运算符,您可以编写条件语句。例如,如果某个表达式的计算结果为 true——就执行某个操作;如果为 false,则执行另一个操作。条件语句也称为 if/else 语句。其写法如下:
if true
print("Do something")
else
print("Do something else")
end
当 if 关键字后面的条件计算结果为 true 时,会执行 if 代码块;否则执行 else 代码块。下面的示例展示了一个判断数字是偶数还是奇数的条件语句。
number = 5
if number % 2 == 0
print("The number is even")
else
print("The number is odd")
end
The number is odd
在 if 后的表达式中,我们使用取模运算符 % 检查该数字除以 2 后的余数是否为 0。由于 5 除以 2 的余数为 1,因此表达式为 false,从而执行 else 分支。现在,让我们运用布尔运算符与条件语句的知识,编写一个程序来判断一个数字是正数、负数还是零。
number = 0
if number > 0
print("The number is positive.")
elseif number == 0
print("The number is equal to zero.")
else
print("The number is negative.")
end
The number is equal to zero.
我们通过 elseif 子句添加了一个新条件。当需要按严格顺序检查两个或多个条件时,会使用 elseif 子句。
for 循环
编程中的 for 循环用于按顺序遍历序列(字符串、向量、元组、集合等)中的每个元素并执行操作。Julia 中的 for 循环语法十分直观。例如,我们来构建一个循环,打印向量中的每个元素:
languages = ["Julia", "Python", "R"]
for lang = languages
println(lang)
end
Julia
Python
R
for 循环以 for 关键字开始。然后我们选择一个临时变量名。在此我们选择 lang,其值会在遍历向量 languages 的过程中变化。接着,为了指定我们正在遍历 languages,在赋值运算符 = 后写上它的名称。
在循环体中,我们使用 println() 函数打印 languages 的每个元素,由临时变量 lang 表示。之所以称其为临时变量,是因为循环结束后它将不可访问。
注意: print() 与 println() 的区别在于 println() 会换行打印。
到目前为止您学到的所有内容都可以在 for 循环中使用。例如,我们创建一个包含 10 个整数的数组,只打印其中的奇数:
integers_vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i = integers_vector
# Print only odd numbers
if i % 2 == 1
println(i)
end
end
1
3
5
7
9
别忘了用 end 结束 for 循环和 if 语句。
您也可以遍历字符串,因为它们同样是序列。例如,这里我们打印字符串 "Julia" 中的每个字母。
for letter = "Julia"
println(letter)
end
J
u
l
i
a
在 Julia 中安装包
我们一直在使用的运算符(+、-、*、^)、函数(print()、println()、typeof())和关键字(for、if、else)都随 Julia 安装一并提供。然而,安装自带的代码并不足以解决我们所有问题。我们需要安装包来加载工具与函数以获得额外功能。包是由其他程序员预先编写的代码库,我们可以将其添加到 Julia 安装中,以帮助我们解决特定问题。
例如,我们将安装两个名为 DataFrames 和 CSV 的包,它们可以帮助我们处理 CSV 文件中的信息。具体如下:
using Pkg
Pkg.add("DataFrames")
Pkg.add("CSV")
Pkg 类是 Julia 的全局包管理器。其 add() 函数用于将新包添加到安装中。要从库中导入所有函数名,我们会在脚本顶部使用 using 关键字导入它们。
using DataFrames
using CSV
我们将在下一节使用它们的函数。
DataFrame 入门
DataFrame 是数据科学语言(如 Julia、Python 或 R)中专为处理表格而设计的一种特殊数据类型。存储表格最常见的文件格式是 CSV(逗号分隔值)。DataFrame 库提供了加载此类文件并对其中信息进行操作的工具。
导入 CSV 文件
本教程将导入 diamonds 数据集。diamonds.csv 文件如下所示:

第一行称为表头,包含列名。让我们使用 CSV 和 DataFrames 包来加载它。
# Load in the diamonds DataFrame
diamonds = DataFrame(CSV.File("data/diamonds.csv"))
typeof(diamonds)
DataFrame
我们将 CSV 文件的路径传给 CSV.File(),再将其返回值传入 DataFrame() 函数。typeof() 的输出表明操作已成功。
简单的数据操作
拿到新的 DataFrame 时,第一件事通常是打印几行看看它的样子。可以使用 first() 函数完成。
# Print the first 7 rows of diamond
first(diamonds, 7)
7 × 10 DataFrame

diamonds 数据集的前 7 行
first() 函数返回 DataFrame 的前 n 行。可以看到,其中有 6 列数值型和 3 列分类型(文本)。在 Julia 的 DataFrame 中,索引也被计作一列。
还有一个与 first() 类似的函数 last()。顾名思义,它用于获取最后的 n 行。
另一个有用的函数是 size()。它会打印 DataFrame 的行数与列数。
# Print the dimensions of diamonds
size(diamonds)
(10000, 10)
我们手头的这个包含 1 万行与 10 列(包括索引)。肉眼无法直接把握全部 1 万行,因此我们使用汇总统计来感受数据集中各列的分布。为此,我们使用 describe() 函数
# Summary statistics of diamonds using describe()
describe(diamonds)
10 × 7 DataFrame

describe() 函数的输出
输出是一张包含 7 列的汇总表。min、max、mean 与 median 列仅适用于数值列。在 eltype 列中,您可以看到 diamonds 各列的数据类型。String 后面的数字表示该列中最长字符串的长度。
您也可以使用以下语法从 DataFrame 中选择单独的列。
# Extracting the first 10 rows of the cut column
diamonds[:, :cut][begin:10]
10-element PooledArrays.PooledArray{String15,UInt32,1,Array{UInt32,1}}:
"Ideal"
"Ideal"
"Ideal"
"Premium"
"Fair"
"Premium"
"Very Good"
"Ideal"
"Ideal"
"Premium"
方括号内的第一个冒号选择所有行。然后在逗号和另一个冒号后指定列名(无需引号)。随后,我们对返回的数组再进行索引以选取前十行。为了让上述代码更简单,我们也可以直接在第一对方括号中选择前十行,如下所示:
# Extracting the first 10 rows of the cut column
diamonds[1:10, :carat]
10-element PooledArrays.PooledArray{String15,UInt32,1,Array{UInt32,1}}:
"Ideal"
"Ideal"
"Ideal"
"Premium"
"Fair"
"Premium"
"Very Good"
"Ideal"
"Ideal"
"Premium"
要选择多列,请将(带冒号的)列名组合后放入方括号中。
# Extracting the first 5 rows of the cut, carat, price columns
diamonds[1:5, [:carat, :cut, :price]]
5 × 3 DataFrame

diamonds 数据集的前 5 行与 3 列
让我们只对数值列运行 describe() 函数
# Running describe on numeric columns only
describe(diamonds[:, [:carat, :depth, :table, :price, :x, :y]])

仅对数值列运行 describe()
如需按某列升序查看 DataFrame,可使用 sort() 函数:
# Sort diamonds and see the first 5 rows
sorted_diamonds = sort(diamonds, :price)
first(sorted_diamonds, 5)

排序后的汇总表
若要降序排序,可在列名外包裹 order() 函数。
# Sort diamonds in descending order and see the first 5 rows
sorted_diamonds = sort(diamonds, order(:price, rev=true))
first(sorted_diamonds, 5)

降序排序后的汇总表
很好!现在,您已经可以加载 DataFrame 并进行基础的数据探索了。
进一步学习 Julia
尽管 Julia 仍是一门年轻的编程语言,但已经有大量资源可帮助您掌握它。以下内容可助您精进技能:
- Julia 的崛起 — 2022 年值得学习吗?
- 从 MATLAB 进阶到 Julia
- 查看我们的速查表,涵盖包括 Julia 在内的所有数据工具与技术
- 查看我们的Introduction to Julia 课程

Julia 编程语言是一门用于科学计算的语言,最早于 2012 年发布。自那以后,Julia 已成为数据编程语言领域中一位强有力的竞争者。凭借其易用性、速度以及对科学计算场景的良好支持,如今学习 Julia 对许多数据科学家而言是一个可行的路径。
本文为初学者提供一份深入而详尽的 Julia 编程语言教程,涵盖基础语法、不同数据类型、向量与字符串、数据框等诸多内容。
为什么要学习 Julia?
Julia 之所以迅速走红,原因有很多。尽管 Python 和 R 仍是数据科学中使用最广的编程语言,Julia 的下载量也已超过 3500 万次。其增长背后的原因在这篇文章中有详尽阐述,下面是 Julia 的功能与优势概览:
得益于这些特性,Julia 在 2022 年 StackOverflow 开发者调研中位列最受喜爱的语言前五。对于打算从 Matlab 等工具转向的科研群体而言尤为如此。
截自 StackOverflow Developer Survey 2022
了解完这些,让我们深入看看如何开始使用 Julia。