matplotlib
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure()
plt.plot([1,0,9],[4,5,6])
plt.show
#1、创建画布
plt.figure(figsize=(20,8),dpi = 80)#大小,清晰度
#绘制折线图
plt.plot([1,2,3,4,5,6],[6,8,4,9,2,1])
#保存图像 plt.savefig(1.png) 路径 先保存在展示
#显示图像
plt.show()
辅助显示层
案例,显示温度变化情况
import random
x = range(60)
y = [random.uniform(15,18) for i in x]
plt.figure(figsize =(20,8),dpi=80)
plt.plot(x,y)
plt.show()
import random
x = range(60)
y = [random.uniform(15,18) for i in x]
#更改刻度
plt.figure(figsize =(20,8),dpi=80)
plt.plot(x,y)
#修改x,y刻度
x_lable=["11点{}分".format(i) for i in x]
plt.xticks(x[::5],x_lable[::5])
plt.yticks(range(0,40,5))
plt.show()
中文显示问题解决
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
import random
x = range(60)
y = [random.uniform(15,18) for i in x]
plt.figure(figsize =(20,8),dpi=80)
plt.plot(x,y)
#插入网格
plt.grid(True,linestyle = "--",alpha = 0.5)# 是否插入 类型 透明度
#添加描述信息
plt.xlabel("时间变化")
plt.ylabel("温度变化")
plt.title("温度图")
plt.show()
再添加一个温度变化
import random
x = range(60)
y = [random.uniform(15,18) for i in x]
y_ = [random.uniform(1,3) for i in x]
plt.figure(figsize =(20,8),dpi=80)
# 线条风格 更改颜色
#增加右上角显示
plt.plot(x,y,linestyle = "-.",label="上海")
plt.plot(x,y_,color="red",label ="北京")
plt.legend(loc = "lower left")#出现位置 不填默认右上角
plt.show()
创建多个绘图区
-plt.subplots
-面向对象的方法
x = range(60)
y = [random.uniform(15,18) for i in x]
y_ = [random.uniform(1,3) for i in x]
#创建多个画布
figure,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi = 80)
# 线条风格 更改颜色
#增加右上角显示
axes[0].plot(x,y,linestyle = "-.",label="上海")
axes[1].plot(x,y_,color="red",label ="北京")
#显示图例
axes[0].legend()
axes[1].legend()
#刻度修改
x_lable=["11点{}分".format(i) for i in x]
axes[0].set_xticks(x[::5],x_lable[::5])
axes[0].set_yticks(range(0,40,5))
axes[1].set_xticks(x[::5],x_lable[::5])
axes[1].set_yticks(range(0,40,5))
plt.show()
绘制数学函数图像
import numpy as np
#1 准备数据
x = np.linspace(-1,1,1000)
y = 2*x*x
#2 创建画布
plt.figure(figsize=(20,8),dpi=80)
#3 绘制图像
plt.plot(x,y)
#4 添加网格
plt.grid(linestyle="--",alpha=0.5)
#显示图像
plt.show()
绘制散点图
-关系,规律
import random
x = [random.uniform(1,100) for i in range(30)]
y = [random.uniform(1,100) for i in range(30)]
plt.figure(figsize = (20,8),dpi = 80)
plt.scatter(x,y)
plt.show()
柱状图
# 准备数据
x = ["雷神","美队","蜘蛛","钢铁"]
tickets = [12334,32424,45363,34245]
#创建画布
plt.figure(figsize=(20,8),dpi=80)
#绘制柱状图
plt.bar(x,tickets,color = ["r","y","b","g"])
#添加标题
plt.title("欢迎程度")
#添加网格
plt.grid(linestyle="--",alpha=0.5)
#展示图像
plt.show()
# 准备数据
name = ["雷神","美队","蜘蛛","钢铁"]
tickets = [12334,32424,45363,34245]
tickets_= [19566,85533,56894,76545]
#创建画布
plt.figure(figsize=(20,8),dpi=80)
#绘制柱状图
plt.bar(range(4),tickets,width=0.2,label="第一天")
plt.bar([0.2,1.2,2.2,3.2],tickets_,width=0.2,label="第二天")
#显示图例
plt.legend()
#添加标题
plt.title("欢迎程度")
#添加网格
plt.grid(linestyle="--",alpha=0.5)
#修改刻度
plt.xticks = ([0.0,1.0,2.0,3.0],name)
#展示图像
plt.show()
直方图
#准备数据
a = [random.randint(1,100) for i in range(100)]
#创建画布
plt.figure(figsize=(20,8),dpi=80)
#绘制图像
plt.hist(a,bins=100) #数据,组数
#修改X轴刻度
#plt.xticks(range(100))
#显示图像
plt.show()
饼图
#准备数据
name = ["蜘蛛侠","美队","钢铁侠","葫芦娃"]
count = [23134,45356,64343,13424]
#创建画布
plt.figure(figsize=(20,8),dpi = 80)
#绘制图像
plt.pie(count,labels=name,colors=["r","b","y","g"],autopct= "%1.2f%%")
#显示图例
plt.legend()
#展示效果
plt.show()
numpy
import numpy as np
from random import *
data = np.random.randint(10,99,(5,5))
in_max = np.where(data == np.max(data))
data[2][2] = data.max()
data[in_max[0][0],in_max[1][0]]=np.random.randint(10,data.max()) #替换原来位置最大值
in_min = np.where(data == np.min(data))
ls_min = []
for i in range(4):
ls_min.append(data.min())
data[in_min[0][0],in_min[1][0]]=np.random.randint(data.min(),99) #替换原来位置最小值
data[0][0] = ls_min[0]
data[0][4] = ls_min[1]
data[4][0] = ls_min[2]
data[4][4] = ls_min[3]
print(data)
import numpy as np
from random import *
score = np.random.randint(60,100,(8,5))
data = np.random.randint(10,99,(5,5))
score.ndim #维度
score.size #元素个数
score.dtype #类型
score.itemsize#每个元素所占内存大小
zero = np.zeros((3,3))#全0
zero
np.linspace(0,10,100)
正态分布
data1 = np.random.normal(loc=1.75,scale=0.1,size=1000000)
data2.reshape((5,3))#不改变原数据 返回新的数组
data2.resize((5,3)) #改变原来数据
data2.T # 转置
data2.astype("float32") #改变数据类型
np.unique(temp) # 数组的去重
temp.flatten() #二维拆成一维
逻辑运算
score_change = np.random.normal(loc=0,scale=1,size=(8,10))
#判断大于0.5的数值
score_change > 0.5
# 布尔索引
score_change[score_change > 0.5]
score_change[score_change > 0.5] = 1.1
# np.all(布尔) 一个false就返回false
# np.any(布尔) 一个true就返回true
np.all(score_change[0:2,0:5]>0.5)
np.where(三元运算符)
#判断大于0的数 大于为 1 小于为 0 (1,0可改)
temp = score_change[:4,:4]
np.where(temp>0,1,0)
#复合逻辑符 np.logical_and np.logical_or
np.where(np.logical_and(temp>0,temp<2),1,0)
统计运算
np.max(temp,axis = 0)#按列求最值
np.max(temp,axis = 1)#按行求最值
np.argmax(temp,axis = 1)#返回最大值的索引 行
数组的运算
arr = np.array([[1,2,3],[4,5,6]])
arr+1 # 数组和数字
数组之间进行运算的条件
- 维度相等
- 维度对应位置为1(从后向前一次排开)
arr1 = np.array([[1,2,3,4,5,6],[2,3,4,5,6,7]])
arr2 = np.array([[2],[3]])
arr1+arr2
矩阵的运算
存储方法
- np.array
- matrix
data1 = np.random.randint(80,100,(8,2))
data2 = np.mat([[99, 81],
[84, 95],
[84, 86],
[92, 98],
[82, 92],
[81, 97],
[81, 95],
[84, 89]])
quan = np.mat([[0.3],[0.7]])
data2 * quan
data1 @ quan # @==* 在np.array类型中
data1 * quan
合并与分割
a = np.array([[1,2,3],[4,5,6]])
b = a+4
np.hstack((a,b)) #水平拼接
np.concatenate((a,b),axis = 1) #水平拼接
np.vstack((a,b))#竖直拼接
np.concatenate((a,b),axis = 0) #竖直拼接
分割
c = np.arange(9)
np.split(c,3)#按个数分割
np.split(c,[2,4,7])# 按数组分割
处理缺失值
- 去除
- 替代(平均值)
pandas
import pandas as pd
data = np.random.randint(60,100,(8,5))
# 添加行索引
stock = ["学生{}".format(i) for i in range(1,9)]
pd.DataFrame(data,index=stock)
#生成列索引(日期)
date = pd.date_range(start="2020-03-28",periods=5,freq='B')
a = pd.DataFrame(data,index=stock,columns=date)
a.head()
a.tail()
修改索引值
- 只能整体修改
shock1 = ["同志{}".format(i) for i in range(1,9)]
a.index = shock1
重设索引
a.reset_index()
a.reset_index(drop = True)
设置新索引
df = pd.DataFrame({'month':[1,2,3,4,5],
'day':[4,5,6,7,8],
'year':[2000,2001,2002,2003,2004]})
#将month设置为新的索引
df.set_index('month',drop = False)#若为 True 则删除 month 列
#设置多个索引
df.set_index(["month","day"],drop = False)#若为 True 则删除 month 列
Panel
- 存储三维数据的Panel
p = pd.Panel(np.arange(24).reshape(4,3,2),
items=list("ABCD"),
major_axis=pd.date_range("20200301",periods=3),
minor_axis=['first','second'])
Series
- 带索引的一维数组
pd.Series(np.arange(2,10))
基本操作
data = pd.read_csv("iris.csv").values
da = pd.DataFrame(data,columns=["one","two","three","four","five"])
索引操作
da["one"][1]#索引时,先列后行 直接索引
da.loc[1,"one"]# 可以先行后列 按名字索引
da.iloc[1,0] # 按数字索引
da.ix[:2,["one","two"]] # 组合索引
赋值排序操作
da.sort_values(by = "one")# 默认从小到大
da.sort_values(by = "one",ascending = False).head()# 默认从小到大
da.sort_values(by = ["one","two"],ascending = False).head() # 第一个相同比较第二个
da.sort_index().head() # 按索引排序a
算数运算
da["one"].add(3).head() #也可以直接“ + ”
da["one"].sub(3).head() #也可以直接“ - ”
da["one"].sub( da["two"] ).head()
逻辑运算 < > & |
da["one"]>5
da[da["one"]>5] .head()#布尔索引
# 多重判断
(da['one']>5) & (da['two']<4)
# 多重判断
da.query('one>5 & two<4').head()
da['one'].isin([5.7,5.4]) #判断某个数据是否在选定 Series 中
统计运算
- max
- min
- meam
- median
- std(均类似numpy)
累加函数
da["two"].cumsum().plot()
da.plot(x="one" ,y="three",kind="pie" )#kind 为所画图的类型
pandas读取文件
data = pd.read_csv("iris.csv",usecols=["5.1"])# 只取出自己想要的列
data
pd.read_csv("iris.csv",names=["one","two","three","four","five"])
文件的写入
- data[:10].to_csv(“text,csv”,columns=[“open”],index=False,mode=“a”)
- 存储前10列 列名为open 不保存行索引 追加写模式