Data 8 学习笔记(一)

介绍

DATA 8 是加州大学伯克利分校的数据科学基础课程,使用的编程语言为python。
课程资源:

  • 课程官网

    包含了课程视频,课上ppt,但是作业需要UCB的账号。
    视频在Youtube可以找到,目前最新的是2022Spring(最新的人家不可能让你免费看嘛)

  • Github 课程作业

    包含课堂同步Jupiter notebook还有lab, hw, project以及最重量级的textbook。最新的是2025Spring(太良心了)。

具体的配置很简单,主要是使用numpy, panda, matplotlib, 还有UCB自己的datascience这几个python库。


datascience library

安装(在terminal, cmd):

npm install datascience

这个库属于UCB为了初学者专门创建的preliminary tool,它主要操作的数据类型是库里定义的Table。就如同它的名字一样,Table就是个表格,每一列都是一个np array(大概就是访问速度更快储存空间更小的array),datascience库为它提供了包括可视化在内的基础操作。

别忘了import:

1
2
3
4
import numpy as np
import matplotlib.pyplot as plt
from datascience import *
import panda as pd

对Table的基础操作

Tip: 课程有一部分时间教了python的基本语法,函数,传参还有使用函数等等,这里不做介绍了。对于不熟悉的函数可以参考 datascience 官方文档 , 或者使用help(function)


make_array()

datasicence.util.make_array(), 把传入的每个数据合并到一个np array里面,传入的数据类型必须相同。返回一个np array。
对于np array可以使用numpy库的各种函数,比较常用的有:

  • np.sort() 排序
  • np.diff() 取相邻元素求差值
  • np.sum() 求和
  • np.prod() 求乘积

np.arrange(start, end, step), np.linspace(start, end, num)np.array(list,tuple,etc)也能创造np array。

需要选取一个np array里的数据可以使用.item(index),index遵循python列表的索引规则(正序从0开始,倒序从-1开始)。


Table()

使用Table() 函数会创造一个新的空Table数据,其中不含有任何行或列元素。
该函数通常搭配.with_columns()函数使用。

Table.with_columns(column_name:str, column_data: np_array)
该函数传入一个字符串作为列名称,以及一个np array作为列数据
eg:

1
2
a = Table().with_columns("name", np.array(("Penny", "Brian")))
a.show()
name
Penny
Brian
  • 使用 Table.drop(column_name:str, ...) 可以从Table里删除列(传入的列名称不存在的话报错)
  • 使用Table.num_rowsTable.num_columns可以获取Table里的行和列的数量。
  • 使用 Table.labels 获取Table里所以的列的名称, 使用Table.relabeled(old_label, new_label)可以更换列名称。
  • 使用Table.column(column_label)会返回带有这个列名称的列,返回类型是np array。
  • 使用Table.select()可以返回多个目标列组成的Table, 该函数可以传入索引也可以传入列名称。

Table.sort()

datascience也支持根据某一列来排序Table。

Table.sort()传入列名称,datascience库会根据该列的数据进行排序,并返回一个新列表。

Tip: Table.sort(str, descending = False)默认升序排列,如果想要降序排列可以把descending属性改成True。


Table.take()

之前说的.select() 还有 .column()函数都是选取列的,datascience也是支持选取特殊行的。

Table.take(index,...) 可以选取表格的index行并返回新的Table, index可以是collection,例如:

1
Table.take(np.arange(0,10,2)

这样就会选取Table里从第一行到第10行,每隔一行的目标行,也就是会返回第1,3,5,7,9行组成的新Table。

虽然这样根据行数选取行很有用,但是在有规律地选取行的时候限制很大。


Table.where()

where函数我们可以有条件地筛选需要的行。

Table.where(column_name: str, condition)
我们传入需要筛选的列数据地列名称,以及条件

对于条件参数,datascience也创造了新的类,are。通过are.below(),are.between()等函数,我们可以筛选符合一定数学条件地数据。
但是我个人推荐使用python内置地匿名函数lambda。例如are.below()就可以使用lambda y : y < x来代替。


通过上述的操作,我们可以把数据汇总到我们需要的Table里面。为了获取需要的Table,我们很可能要对数据进行很多步的操作,在此过程中必须格外注意那些函数是直接修改原表格的,而哪些是会返回新的表格的,否则很有可能导致我们的操作不被保存在具体变量里。
想要熟悉这些操作的话可以试一下DATA 8 课程配套的project。


可视化

面对汇总成Table的大量数据,为了方便我们分析,我们往往需要把数据转变成可视化的图。datascience和matplotlib都有能够将数据可视化的强大能力。


散点图 Scatter plots

datascience库提供了极其简单的创造散点图的方法——Table.scatter().

给定一个已经汇总好的Table,我们可以往scatter函数里传入我们想要放入散点图的x,y轴的列名称,例如:

1
Table.scatter(x_column_name: str, y_column_new: str)

Tip: 如果我们使用matplotlib来画散点图的话可能会更复杂点:

1
2
3
4
5
6
import matplotlib.pyplot as plt
plt.scatter(table.column(), table.column(), label="Points")
#重要的是传入两个np array作为x,y轴
plt.title("") #图的标题
plt.xlabel("") #x轴的标签
plt.ylabel("") #y轴的标签

线段图 Line plots

线段图和散点图的语法完全一样,但是是使用Table.plot()函数

传入x,y轴的列数据列名称即可

1
Table.plot(x_column_name: str, y_column_new: str)

如果使用matplotlib的话也很简单:

1
plt.plot(x, y, label="Line")