Matplotlib,Numpy,Pandas基础知识

Numpy简介

Numpy是一个科学计算库的基础库,多用于多维数组上执行数值运算。

创建数组及数据类型

import  numpy  as  np

a = np.array([1,2,3,4,5])

b = np.array(range(1,6))

c = np.arange(1,6)

上面的三个创建的数组内容相同

数组的类名:

type(a)

返回: numpy.ndarray

数据的类型:

a.dtype

返回: dtype('int64')

指定创建的数组的数据类型:

a = np.array([1,0,1,0],dtype = '?')  或者  dtype=np.bool

类型对应的类型代码在下图

 修改数组的数据类型:

a.astype("i1")   或者  a.astype(np.int8)

保留几位小数:

np.round(a,2) //数组a中均保留两位小数

数组的属性

查看数组的大小(也就是总的个数):

a.size

查看数组的形状:

a.shape 

若返回 (2,3,4)其中2代表数组含有几块数据,3表示每块数据的行数,4表示每块数据的列数。

a.shape[0] 代表的是块数,也就是2

a.shape[1]代表的是行数,也就是3

a.shape[2] 代表的是列数,也就是4

修改数组的形状:

a.reshape((6,4))

若要修改成一维数据:

a.reshape((24,))

或者  a.flatten()   //进行展平处理

数组的计算

        只要数组的形状在某一个方向上相同即可进行计算。具体计算结果可以自己尝试一下。

shape(1) 一维数组 只有0轴

shape(2,2)二维数组,有0轴和1轴

shape(2,2,2)三维数组,有0轴,1轴,2轴

读取数据

读取csv文件

np.loadtxt(frame ,dtype=np.float,delimiter=',',skiprows= 1,usecols = None,unpack=Flase)

转置

 二维数组转置的几种方法:

t.swapaxes(1,0)

t.transpose()

t.T

数据的索引和切片

因为索引都是从0开始的

a[1:3]   //取第二行和第三行

a[1]      //取第二行

a[:,2]    //取第三列

a[:2:4]   //取第三列,第四列

a<10  //布尔索引,小于10的为true,大于的为false

np.where(a<10,0,10) //表示a中小于10的设置为0,大于10的设置为10

a.clip(10,18)  //小于10的替换为10,大于18的替换为18

切片:

slice(2,7,2) 从索引2开始到索引7停止,间隔为2

数组的拼接

np.vstack((a,b))   //竖直拼接

np.hstack((a,b))   //水平拼接

行列交换

a[[1,2],:] = a[[2,1],:]    //第二行和第三行交换

a[:,[0,2]] = a[:,[2,0]]   //第一列和第三列交换

简单方法

(1)获得最大值和最小值的位置

        np.argmax(t,axis=0)   //返回每一行最大元素的位置

        np.argmin(t,axis=1)    //返回每一列最大元素的位置

(2)创建一个全为0的数组:

        np.zeros((3,4))

(3)创建一个全为1的数组:

        np.ones((3,4))

(4)创建一个对角线为1的正方形的数组(方阵):

        np.eye(3)

生成随机数

 copy和view

(1)a = b 完全不复制,a和b相互影响

(2)a = b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一样的

(3)a = b.copy() ,复制,a和b互不影响。

nan和inf

nan:not a number 表示不是一个数字

(1)两个nan是不相等的

(2)np.nan !=np.nan

(3)利用以上特性可以判断数组中nan的个数

(4)通过np.isnan(a)来判断是不是nan,返回bool类型

(5)nan和任何值计算都是nan

inf表示正无穷,-inf表示负无穷

常用统计函数

求和:a.sun(axis=None)

均值:a.mean(axis=None)

中值:np.median(a,axis=None)

最大值:t.max(axis=None)

最小值:t.min(axis=None)

极值:np.ptp(t,axis=None)   //最大值和最小值的差

标准差:t.std(axis=None)

Matplotlib

简介

        Matplotlib是一个绘图工具,可以绘制折线图,直方图等,也可以将我们对图像进行的操作进行展示。

补充1:

语法:list1[start:stop:step]

参数一:表示截取的开始下标值,默认为0

参数二:表示截取的结束下标值,默认为列表末尾

参数三:表示截取的步长,默认为1,可指定

注意:1.截取区间[start, end),左闭右开

           2.list1[::-1]可以获得倒叙的列表

补充2:

font = {'a':'1','b':'2','c':'3'}

通过    rc('font',**font)

使得a=1,b=2,c=3

折线图

#绘制图像

plt.plot(x,y,color='r',linestyle = '--',linewidth =5,alpha=0.5)

#导入包
from matplotlib import pyplot as plt

#figure图形图标的意思,这里指的是我们要画的图,使用figure实例,传入dpi使图像更加清晰。
fig = plt.figure(figsize=(20,8),dpi=80)

# 使用my_font存出一个加载的中文字体
my_font = fm.FontProperties(fname='C:\Windows\Fonts\YaHei.Consolas.1.12.ttf')

#(x,y)组成一个坐标
x = range(2,12,2)
y = [15,14,18,26,2]
plt.plot(x,y,label="自己的图")    #绘制折线图

plt.savefig("sig_size2.png")  #将折线图进行保存
plt.legend(prop=my_font)  #将label添加到图形上面
plt.show()      #展示图像

修改matplotlib的默认设置:

font = {'family' : 'monospace',

           'weight' : 'bold'   }   #这种的都不用记,直接点进rc的定义里面就可以复制,然后根据自己的需求修改一下就行了

matplotlib.rc("font",**font)

修改坐标轴上的中文标签:

#调整x轴的刻度

_x = x

_xtick_lables = ["hellp,{}".format(i) for i in _x]    #为x轴增加中文标注

plt.xticks(x,_xtick_lables,_xtick_lables[::3],rotation = 90)  #rotation是旋转的度数,可以将标签竖直。

#调整生成图像的各种样式

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']
# 定义2个列表分别作为两条折线的Y轴数据
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]
y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]
# 指定折线的颜色、宽度、线形
ln1, = plt.plot(x_data, y_data, color='red', linewidth=2.0,
        linestyle='--', label='A书年销量')
ln2, = plt.plot(x_data, y_data2, color='blue', linewidth=2.0,
        linestyle='-.', label='B书年销量')
# 使用my_font存出一个加载的中文字体
my_font = fm.FontProperties(fname='C:\Windows\Fonts\YaHei.Consolas.1.12.ttf')
# 赊着prop参数未该字体
plt.legend(loc='best', prop=my_font)
plt.show()

#绘制网格

plt.grid(alpha=0.4)

#alpha代表的透明度

散点图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import font_manager

x_1 = [1,2,3,4,5,9]
y = [7,6,8,1,5,3]

plt.scatter(x_1,y)    #绘制散点图
plt.show()

对于散点图格式上的设置在折线图那一块都有。

条形图

#绘制对比条形图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import font_manager

x_1 = ["战狼1","战狼2","战狼3","战狼4","战狼5","战狼6"]
y = [7,6,8,1,5,3]
y_2 = [5,7,7,6,3,4]

bar_width = 0.3
a = list(range(len(x_1)))
b = [i+bar_width for i in a]

plt.bar(range(len(x_1)),y,width=bar_width)   #绘制条形图
plt.bar(b,y_2,width=bar_width)

#plt.barh    #绘制水平的条形图

plt.show()

直方图

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import font_manager

a = [15,15,75,15,75,33,66,5,33,66,5,19,19,20,25]

bin_width = 3 #设置组距为3
num_bins = int((max(a)-min(a))/bin_width)  #极差除以组距计算出来分多少组

plt.hist(a,num_bins)

plt.xticks(list(range(min(a),max(a)))[::bin_width],rotation = 45)
plt.grid(True,linestyle='-.',alpha = 0.5)
plt.show()

pandas

常用数据类型

1、series 一维,带标签的数组

创建Series数组:

法1:t = pd.Series([1,2,3],index=list("abc"))

法2:dic_1 = {"1":"a","2":"b","3":"c"}

        t2 = pd.Series(dic_1)

访问Series:

        访问index:t.index

        访问value:t.values

2、DataFrame 二维,series容器

在其中,既有行索引,也有列索引

行索引,表明不同行,横向索引,叫 index,0轴,axis=0

列索引,表明不同列,纵向索引,叫columns,1轴,axis=1

创建DataFrame:

法一:t = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list(("wxyz")))

法2:d1 = {"name":["小明","小李"],"age":[12,15],"tel":[10056,10057]}

        t1 = pd.DataFrame(d1)

基本属性:

df.shape   #行数,列数

df.dtypes #列数据类型

df.ndim  #数据维度

df.index  #行索引

df.columns  #列索引

df.values  #对象值,二维ndarray数组

整体查询:
df.head(3)    #查看前三行  ,默认是5行

df.tail(3)      #查看后三行,默认是5行

df.info()    #相关信息概览:行数,列数,列索引,列非空值个数,行类型,列类型,内存占用

df.describe()   #快速综合统计结果:计数,均值,标准差,最大值,最小值

df.sort_values(by="XXX",sdcending=True)   #按照某一个属性进行升序排列(具体内容可以看源码)

对DataFrame进行索引:

# 根据loc函数进行选取指定行,loc是通过标签进行索引
print(df.loc["name",:])

# 使用loc函数选取所有行 并对列上的数据进行筛选
print(df.loc[:,("人员1","人员2","人员3")])

# 使用loc函数筛选行与列
print(df.loc["name",["人员1","人员2","人员3"]])


 

# 使用iloc函数对行与列的位置进行选取,iloc是通过位置来进行索引

# 使用iloc函数选取第三行第三列的数据
print(df.iloc[3,3])

# 使用iloc函数选取第3行到第5行与第3列到第5列的数据
print(df.iloc[3:5,3:5])

# 使用iloc函数选取1、2、5行与2、4、5列数据
print(df.iloc[[1,2,5],[2,4,5]])

#使用boolean index参数进行切片

print(df[[True,True,False,True,True,False]])  #true是展示的行数,false是展示的列数
或者

df[df["age"]>14]


#boolean index和loc进行结合使用
df.loc["age",:]>14]

读取外部数据

读csv文件和txt文件都是:

        pd.read_csv("文件名")

字符串方法

cat      实现元素级字符串的连接操作

contains    返回表示各字符串是否含有指定模式的布尔型数组

lower,upper     转化大小写,相当于对各个元素执行x.lower()或x.upper()

replace     用指定字符串替换找到的模式

split     分割

strip,rstrip,lstrip   去除空白符,包括换行符。

缺失数据的处理

pd.isnull(t)

#判断t里面是否有non,有的位置就是True,没有的位置就是False

pd.notnull(t)

#判断t里面是否有non,有的位置就是False,没有的位置就是True

处理NaN:

(1)删除NaN所在的行列 dropma(axis=0,how='any',inplace=False)

当how='any'的时候表示有一个NaN就删除

当how='all'的时候表示全都为NaN才会删除

(2)填充数据,三种方式:t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)

处理数据为0:

t[t==0] = np.nan

0和NaN并不一样,计算平均值的时候,nan不参与计算,而0参与计算。

常用的统计方法

d.tolist()   #将数组或矩阵转为列表。

max()返回最大值

argmax()返回的是函数中最大的x对应的y的值

np.unique() 去重,不过只能去相邻的重复元素,所以在使用unique之前要先对元素进行排序。 使用的时候直接 list1 = np.unique(list1)

set()函数也是去重操作,返回一个无序不重复的列表。

使用set函数的时候一般是  list1 = list(set(list1))


join是把行索引相同的数据合并到一起

t1.join(t2)

merge是把列索引相同的数据合并到一起

(1)t1.merge(t2,left_on="O",right_on="X",how="inner") #left_on=“O”代表的是t1中按照O的列,right_on="X"代表的是t2中按照X的列,表示t1中的O列和t2中的X列相同的元素的行合并,inner为默认参数,表示并集合并

(2)t1.merge(t2,left_on="O",right_on="X",how="outer")  #交集合并,NaN补全

(3)t1.merge(t2,left_on="O",right_on="X",how="left")   #左边为准

(4)t1.merge(t2,left_on="O",right_on="X",how="right")   #右边为准

 分组和聚合

组合:

group_1  =  df.groupby(by="age")       #根据age进行分组

count_1 = grouped["age"].count()

索引和复合索引

简单的索引:df.index

指定索引:df.index=['x','y']

重新设置索引:df.reindex(list("abcdefg"))

指定某一列作为index:df.set_index("Country",drop=False)

返回index中的唯一值:df.set_index("Country").index.unique()

对于嵌套列表的列表:可以用swaplevel()进行层级的交换

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值