Data 8 学习笔记(一)
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 | import numpy as np |
对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_rows
和Table.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")