数据挖掘常用库 matplotlib+numpy+pandas

matplotlib

import matplotlib.pyplot as plt
%matplotlib inline

plt.figure()
plt.plot([1,0,9],[4,5,6])
plt.show

out

#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 不保存行索引 追加写模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值