本篇文章给大家谈谈Python数据分析与可视化第二版答案,以及Python数据分析与可视化第2版答案,希望对各位有所帮助,不要忘了收藏本站喔。
Source code download: 本文相关源码
一、Jupyter notebook快捷键
基础快捷键
shift+enter 运行本单元格,选中下个单元格
ctrl+enter 运行本单元格
alt+enter 运行本单元格,并在其下插入新单元格
命令模式下:
Y 转换为代码状态
M 转换成Markdown状态
R转换成raw状态
1 设置1级标题
2设置2级标题
3设置3级标题
A在上方插入单元格
B在下方插入单元格
1、代码单元,左边有In[ ]:符号,
2、Markdown单元
Enter+Shift同时按是运行
3、shift+M 合并选择的单元
Crtl+s 或者 s 保存当前单元格
H 显示快捷帮助
编辑模式下:
Tab 代码补全或缩进
shift +tab 提示
ctrl+]缩进
ctrl+[ 解除缩进
ctrl+A 全选
ctrl+z 撤销
esc 切换命令模式
shift + enter 运行本单元,选中下一单元
ctrl +enter 运行本单元
alt + enter 运行本单元,在下面插入1单元
ctrl+s 保存
ctrl+/ 注释整行/撤销注释
在行前加一个“#”字符代表一级标题,加两个“##”字符代表二级标题,以此类推
对于无序列表,使用星号、加号或者减号作为列表标记。
对于有序列表,则是使用数字“.”“(一个空格)”python编程代码。
加粗/斜体:前后有两个星号或下划线表示加粗,前后有 3 个星号或下划线表示斜体。
代码的第一行表示表头,第二行分隔表头和主体部分,从第三行开始,每一行代表一个表格行;列与列之间用符号“|”隔开,表格每一行的两边也要有符号“|”
二、numpy模块
NumPy(Numerical Python)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算
相对于python来说
对于同样的数值计算任务,使用numpy要比直接编写Python代码便捷的多
numpy中的数组的存储效率和输入输出性能均远远优于Python中等价的基本数据结构,且其能够提升性能是与数组中的元素成比例的
numpy的大部分代码都是用C语言写的,其底层算法在设计时就有着优异的性能,这使得numpy比纯Python代码高效得多
NumPy 最重要的一个特点是其N 维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引
ndarrav对象是用于存放同类型元素的多维数组
ndarray 中的每个元素在内存中都有相同存储大小的区域
1、使用创建列表作为array参数
import numpy as np
# 创建一维数组
arr1=np.array([1,2,3,4,5])
print(arr1)
# [1 2 3 4 5]
print(type(arr1))
# <class 'numpy.ndarray'>
# 创建一维数组
arr1=np.array([1,2,3,4,5])
arr1
# array([1, 2, 3, 4, 5])
print(type(arr1))
<class 'numpy.ndarray'>
在jupyter botebook中,是否使用print函数的区别就在于输出结果的形式
使用列表创建二维数组
arr2=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(arr2)
# [[ 1 2 3 4]
# [ 5 6 7 8]
# [ 9 10 11 12]]
查看数据轴的个数 ndim
# 秩,数据轴的个数
arr1.ndim
# 1
arr2.ndim
# 2
查看数组的维度
# 三行四列
arr2.shape
# (3,4)
查看数组类型
arr2.dtype
# dtype('int32')
查看数组元素个数
arr2.size
# 12
查看数组每个元素大小
arr2.itemsize
# 4
创建数组时可以设定数组元素的类型
arr3 = np.array([[1,2,3],[4,5,6]],float) # 方法一
arr3 = np.array([[1,2,3],[4,5,6],dtype=float) # 方法二
重新设定数组的形状
arr4 = np.array([[1,2,3,4],[5,6,7,7],[8,9,9,9]
arr4.reshape(4,3) # 方法一(不改变原数组)
arr4.shape(4,3) # 方法二(改变原数组)
使用字符串作为array的参数
a3 = np.array("abcdefg")
a3
# array('abcdefg', dtype='<U7')
使用元组作为array的参数
a4 = np.array((1,2,3))
a4
# array([1, 2, 3])
字典作为array的参数
a5 = np.array({"zhang":12,"dd":45})
a5
# array({'zhang': 12, 'dd': 45}, dtype=object)
zeros()函数创建数组
np.zeros((2,3)) # 创建两行三列的全0数组
# array([[0., 0., 0.],
# [0., 0., 0.]])
ones()函数创建数组
np.ones((2,3)) # 创建全1数组
# array([[1., 1., 1.],
# [1., 1., 1.]])
np.ones((2,3))*255 # 可以这样用
# array([[255., 255., 255.],
# [255., 255., 255.]])
eye函数创建数组
np.eye(3) # 创建对角线元素为1,其他为0,类似单位矩阵
#array([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
2、Pandas 数据分析(数据分析的重点部分)
Pandas 有3种数据结构,系列(Series)、数据帧(DataFrame)、和面板(Panel)
这些数据都可以构建在Numpy数组之上。
1、Series(系列)
Series 是一个带有 名称 和索引的一维数组,特点:均匀数据、尺寸大小不变、数据值可变等。
Series能够保存任何类型的数据(整数、字符串、浮点数、python对象等。
Pandas中的Series构建函数
pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
参数
参数 | Series函数的参数 |
---|---|
data | 数据采取各种形式,如ndarray、list、constasnts |
index | 索引值必须是唯一的和散列的,与数据长度相同 |
dtype | dtype指定数据类型,如果没有,将推断数据类型 |
name | Series对象的名称属性 |
copy | 默认为False,返回一个视图,如果Series对象元素发生变化,影响原数组data; 设置为True,则为深拷贝,Series对象元素发生变化不影响原数组data. |
指定copy = True,则对Series数组进行修改不影响原数组data
可以用数组、字典、标量值或常数创建Series,还可以创建一个空的系列。
1、列表方式创建 : pd.Series([],index=[])
import pandas as pd
import numpy as np
s = pd.Series(np.random.randint(1,10,size=(3,)),index=['a','b','c'])
s
2、字典方式创建 : pd.Series({})
dic = {"A":1,"B":2,"C":3,"D":2}
s2 = pd.Series(dic) # 字典的键是索引,字典的值是系列的值
s2
import pandas as pd
import numpy as np
data = np.array(["a","b","c","d","e"])
s1 = pd.Series(data)
s2 = pd.Series(data,index=[100,101,102,103,104])
# 可以用索引来获取值
s1[0:2]
s2[100,102]
series索引有五种方式:索引、序号、逻辑值查找、切片,数组
删除Series元素
import pandas as pd
lst = [1,3,5,6,10,23]
s = pd.Series(lst)
s[6]=12
s
del s[6] # 修改原序列,可以是索引的标签名也可以是索引序号
s
s.drop(5) # 默认,不修改原序列
# s.drop(labels, axis=0, level=None, inplace=False, errors='raise')
s.drop(5,inplace=True) # 设定inplace=True),可修改原序列
s
s.pop(4) # 修改原序列
1.Series序列的属性
2.index:索引(标签)
3.values:数组数据
4.name:数组对象的名称
5.shape:数组形状
6.dtypes:数组数据类型
7.ndim:数组的维度
2、数据帧(DataFrame)
数据帧(DataFrame)是一个具有异构数据的二维数组,其特点是异构数据、大小可变、数据多变。
数据以行和列表示,每行是一条记录(对象),每列表示一个属性,属性数据具有数据类型。例如,姓名是字符串,年龄是整数
姓名 | 性别 | 年龄 | 身高 | 班级 |
---|---|---|---|---|
小明 | 男 | 20 | 178 | 1班 |
小花 | 女 | 22 | 165 | 1班 |
小兰 | 女 | 19 | 163 | 2班 |
小何 | 男 | 21 | 175 | 2班 |
Pandas中的DataFrame构建函数
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
DataFrame()函数的参数
参数 | 描述 |
---|---|
data | 数据采取各种形式,如ndarray、list、constasnts |
index | 对于行标签,要用于结果帧的索引时,可选默认值np.arange(n) |
columns | 对于列标签,可选默认语法为:np.arange(n) |
dtype | dtype每列的数据类型 |
copy | 复制数据,默认为false |
Pandas数据帧可以使用各种输入创建,如列表、字典、系列、Numpy的ndarrays、Series或另一个数据帧(DataFrame)等
一、合并函数concat()
pd.concat(objs,axis=0,join='outer',jokin_axes=None,ignore_index=False,keys=None)
函数的参数说明如下:
- objs:指定需要合并的对象,可以是序列、数据框或面板数据构成的列表。
- axis:指定数据合并的轴,默认为0,表示合并多个数据的行(行数发生了变化),如果1,则表示合并多个数据的列(列数发生了变化)。
- join:指定合并的方式,默认为outer,表示合并所有数据,如果改为inner,则表示合并公共部分的数据。
- join_axes:合并数据后,指定保留的数据轴。
- ignore_index:bool类型的参数,表示是否忽略原数据集的索引,默认为False,如果设置为True,则表示忽略原索引并生成新索引。
- keys:为合并后的数据添加新索引,用于区分各个数据部分。
- 对于合并函数concat()有两点需要强调:
- 1 如果纵向合并多个数据集,即使这些数据集都含有“姓名”变量,但变量名称不一致,如Name和name,通过合并后将会得到错误的结果。
- 2 join_axes参数的使用,例如该参数等于[df.index],则表示保留与df行标签值一样的数据,但需要配合axis=1一起使用(即实现的是变量横向合并操作);如果等于[df.columns],则保留df中所有变量值一样的数据,但不需要添加axis=1的约束。
import pandas as pd
dict1={
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']}
df1=pd.DataFrame(dict1)
print(df1)
dict2={
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']}
df2=pd.DataFrame(dict2)
print(df2)
df3 = pd.concat([df1,df2],axis=0,join='outer',ignore_index=True)
print(df3)