注:以上图形会存在很多问题,如x,y轴表示什么?还可以做的更好。
plt.figure(figsize=(20, 8),dpi=80) #dpi每英寸的像素点
plt.savefig(“./t1.png”) #保存到当前目录下
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度 单位(℃)")
plt.title("10点到12点每分钟的气温变化情况")
plt.plot(x, y, label = "自己")
plt.legend()
一个在python中做科学计算的基础库,用于大型、多维数组上执行数值计算
# 使用前先导入Numpy包
import numpy as np
# 从列表产生数组
a = np.array([0, 1, 2, 3]) # array([0,1,2,3])
# 修改数据类型
a = a.astype('float') # [0. 1. 2. 3.]
# 生成全0数组
b = np.zeros(5) # array([0.,0.,0.,0.,0.]) 默认都是浮点数
# 生成全1数组
c = np.ones(5) # array([1.,1.,1.,1.,1.]) 默认都是浮点数
d = np.ones(5, dtype='int') # array([1,1,1,1,1]) 默认都是整数
e = np.ones(5, dtype='bool') # array([True,True,True,True,True])
# 使用fill方法将数组设为指定值
d.fill(5) # [5,5,5,5,5]
# 生成整数序列
f = np.arange(1, 4) # [1,2,3]
g = np.arange(1, 4, 2) # [1,3] 间隔2
# 生成等差数列
g = np.linspace(1, 5, 2) # [1. 5.] 包含5,生成2个数字的等差数列
# 生成随机数
np.random.rand(2) # 生成2个0-1不包含1的随机数
np.random.randint(1,10,10) # 1-10里面10个随机整数
# 查看类型
a = np.array([0, 1, 2, 3])
type(a) #
# 查看数组中的数据类型
a.dtype # int32
# 查看形状,返回一个元组,每个元素代表这一维的元素数目
print(a.shape) # (4,)
# 查看数组里面元素的数目
print(a.size) # 4
# 查看数组的维度
print(a.ndim) # 1
a = np.array([0, 1, 2, 3])
# 切片
print(a[1:3]) # [1 2],3取不到
已知一部电影的累积票房数组a,如何知道每日票房是多少?
b=a[1:]-a[:-1]
后一个元素-前一个元素
注:切片中内存中使用的是引用机制。但是列表中并没有使用引用机制。这样做的好处是对于很大的数组,不用大量复制多余的值,节省了空间。缺点在于可能出现改变一个值改变另一个值的情况。如果不想这样,可以copy()产生一个复制,申请新的内存。
a = np.array([0, 1, 2, 3, 4])
b = a[2:4]
b[0] = 10
print(a) # [ 0 1 10 3 4]
a = [0, 1, 2, 3, 4]
b = a[2:4]
b[0] = 10
print(a) # [0, 1, 2, 3, 4]
切片只支持连续或者等间隔的切片操作,相实现任意位置的操作,需要使用花式索引fancy slicing
a = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
index = [1, 2, -3] # 花式索引需要指定索引位置
# 花式索引需要指定索引位置
y = a[index] # [1 2 7]
mask = np.array([0, 1, 1, 0, 0, 0, 0, 1, 0, 0], dtype=bool) # 布尔数组必须与数组长度相等
# 使用布尔数组进行花式索引
y = a[mask] # [1 2 7]
# 二维数组
a = np.array([[0, 1, 2, 3, 4, 5], [10, 11, 12, 13, 14, 15], [20, 21, 22, 23, 24, 25], [30, 31, 32, 33, 34, 35], [40, 41, 42, 43, 44, 45]])
"""
[[ 0 1 2 3 4 5]
[10 11 12 13 14 15]
[20 21 22 23 24 25]
[30 31 32 33 34 35]
[40 41 42 43 44 45]]
"""
# 返回主对角线上的5个值
a[(0, 1, 2, 3, 4), (0, 1, 2, 3, 4)] # [ 0 11 22 33 44]
# 返回最后三行的第1,3,5列
print(a[2:, [0, 2, 4]])
"""
[[20 22 24]
[30 32 34]
[40 42 44]]
"""
# 可以使用mask进行索引
mask = np.array([1, 0, 1, 0, 0], dtype=bool)
a[mask, 2] # [2 22],第一行和第三行在第2列上的元素
和切片不同,花式索引返回的是原对象的一个复制,而不是引用
where(array):函数返回所有非零元素的索引组成的元组
作用:数组内部元素进行类型转换
a.astype(float) #把数组a中的元素类型转换为float
注:astype方法返回一个新数组,上述的a数组本身没有发生任何变化。
np.sort(数组):升序排序,返回一个新的数组,数组本身没有发生变化
返回从小到大排列在原数组中的索引位置组成的数组,返回一个新的数组,数组本身没有发生变化
np.sum(数组)
数组.sum()
np.max(数组)
数组.max()
np.mean(数组)
数组.mean()
np.std(数组)
数组.std()
np.cov(数组1,数组2)
数组.shape=行数,列数 #修改原来数组
数组.reshape=行数,列数 #不会修改原来数组
数组.T
数组.transpose()
concatenate((数组1,数组2,…,数组N),axis=0)
#axis=0,默认=0,按列进行拼接;axis=1,按行进行拼接
np.abs(数组)
pandas为了解决数据分析任务而创建的,提供了大量能快速处理数据的函数和方法。
一维数组,和Numpy中的以为array类似。二者都和python基本数据结构List相近。Series能保存不同种数据类型,如字符串,boolean,数字等。
# 一维Series初始化
s = pd.Series([1, 3, 5, 7])
print(s)
"""
0 1
1 3
2 5
3 7
dtype: int64
"""
# 值
print(s.values) # [1 3 5 7]
可以将DataFrame理解为Series的容器。
# 构造一组时间序列,作为第一维的下标
date = pd.date_range('20180101', periods=6)
print(date)
"""
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06'],
dtype='datetime64[ns]', freq='D')
"""
# 创建一个DataFrame结构,传入二维数组
df = pd.DataFrame(np.random.randn(6, 4), index=date, columns=list('ABCD'))
print(df)
"""
A B C D
2018-01-01 0.028054 -0.011711 -1.815449 -1.660712
2018-01-02 0.023858 0.029602 0.555685 -0.821091
2018-01-03 0.933844 -1.981967 -0.315082 2.741088
2018-01-04 0.656855 -0.933361 -1.157772 -0.125711
2018-01-05 -1.288328 -0.393373 0.016868 -0.475785
2018-01-06 0.687355 -1.174336 1.352607 0.749655
"""
# 下标用index属性查看
print(df.index)
"""
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06'],
dtype='datetime64[ns]', freq='D')
"""
# 列标用colums属性查看
print(df.columns)
"""
Index(['A', 'B', 'C', 'D'], dtype='object')
"""
# 数据值用values查看
print(df.values)
"""
[[-0.75791157 0.21739634 -1.74623798 0.75583372]
[-0.55662077 -1.33064347 -0.07855572 -0.67922539]
[-0.29366036 0.67709975 -1.30220829 0.56232418]
[ 1.30443261 -0.34130766 -0.10806951 -0.10036263]
[ 1.47973816 -0.13419599 0.50770077 1.87527065]
[ 1.52196624 0.1338611 1.49359467 -0.68272916]]
"""
读取如excel文件,
缺失值
异常值
即在数据集中存在不合理的值,如年龄为-1,笔记本的重量为1吨等。通常的处理方法是在不影响整体数据分布的情况下进行删除。
数据处理之后,重新保存,如重新保存到excel(不存在可以创建)中。
很多异常值是经过格式转换之后才会发现,对我们规整数据,清洗数据有重要作用(表面上看数据没有异常,但是可能数据内涵的格式会有不同,在转换过程中就会发生错误)
excel中的数据透视表使用非常广泛,pandas也提供了类似的功能pivot_table(处理数值类型的数据)。数据透视就是按照不同列进行分组,然后获取统计分析。即筛选。
使一个轴上拥有多个索引。
在实际的数据分析项目中,对有的数据属性,往往不关注数据的绝对取值,只关注它所在的区间或等级。如把评分9分以上的电影定义为A,7-9分的电影定义为B。
一般用于有相同列的合并
类似于数据库的合并,可以有左连接右连接。2个数据集进行合并
多个数据集进行批量合并