本文共 6358 字,大约阅读时间需要 21 分钟。
设置图片大小
fig = plt.figure (figsize = (20,8),dpi = 80)
长,宽; dpi==>每英寸像素,数值越大越清晰
导入pyplot工具
import import matplotlib.pyplot as plt
设置中文显示。若不设置,在绘制图片时中文不能显示。方法有三种,分别如下:
方法1
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
方法2
# 修改显示中文的方法2:使用rc来进行修改# from matplotlib import pyplot as plt'''font = {'family' : 'monospace', 'weight' : 'bold', 'size' : 'larger'} rc('font', **font) # pass in the font dict as kwargs'''
方法3
# 修改显示中文的方法3: 使用font_manage中的FontProperties方法实例一个对象进行设
设置图片大小,使用figure方法
plt.figure(figsize=(20,8),dpi=80)
处理参数
x:很坐标参数是可迭代对象,可以是range,tuple,list等,生成器不可以
y:可迭代对象形式给定
对坐标刻度及刻度描述标签进行设置,使用 xticks/yticks 属性(方法)进行设定
plt.xticks(_x[::3], _xticks_lables[::3],rotation = 45)# 至少传入两个参数,第一个是x的刻度,第二个是x轴的刻度标签,两者是一一对应的关系,rotation设置显示角度
调用绘图命令,不同的图形显示使用不同的命令,命令表格如下:
plt.comand(x,y,关键字传参)
comand: plot:绘制折线图
scatter: 绘制散点图
bar:绘制矩形图,横向显示的使用barh
# 添加图例,显示上面设置的label标签plt.legend()
# 设置坐标轴的标签显示plt.xlabel('时间')plt.ylabel('温度')plt.show()
创建数组:
a = np.array([1,2,3,4,5])b = np.array(range(1,6))c = np.arrage(1,6)# 以上三个语句的内容相同# arange方法中有dtype属性指定生成的数组中的元素数据类型
数组的形状
查看数组的形状
a.shape()方法可以查看数组的形状(维度)
修改数组的形状
a.reshape(x,y):方法实现将数组修改为x行y列的数组形式。
a.reshape(n,):n是数组元素数量,方法实现将数组修改为1维数组时,注意后面需要添加“ , ”
reshape方法不改变原来的数据格式,返回一个参数要求的数组
a.flatten():方法实现将数组修改为1维数组
数组的运算
同维度的数组运算
不同维度的数组运算
a = np.array([[1,2,3], [4,5,6], [7,8,9]])b = np.array([[1,2,3]])print(a+b)print(a*b)
结果:
[[ 2 4 6] [ 5 7 9] [ 8 10 12]][[ 1 4 9] [ 4 10 18] [ 7 16 27]]
结论:列相同的数组进行算数运算,结果等于对应位置的元素算数运算后组成的数组
a = np.array([[1,2,3], [4,5,6], [7,8,9]])b = np.array([[1,2,3]]).reshape(3,1)'''b=[[1] [2] [3]]'''print(a+b)print(a*b)
[[ 2 3 4] [ 6 7 8] [10 11 12]][[ 1 2 3] [ 8 10 12] [21 24 27]]
轴
数据文件格式 : CSV:comma-separated value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
调用函数
np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
二维数组中的转置方法:
t.transpose(): 此函数为转置函数
t.T
t.swapaxes(1,0) 交换轴函数,也可以实现数组的转置
numpy中的索引和切片
取单行
t[n,:]: 表示取第n+1行
取多行
t[n:m,:]:表示取第n到m-1行
取不连续的多行,取第n,m,k行
t[[n,m,k],:]
取列,在数组名后面的参数列表中添加逗号,逗号之后表示的是列,逗号之前表示的是行
t[:,n:m]:表示取n行m列
取连续的列
t[:,n:m] 表示取n到m列的数据
取不连续的列
t[:,[n,m,k]]
取连续行连续列
t[a:b,n:m]
取对应行对应列
numpy中数值修改
只需要取出后直接赋值就可以
ndarry中条件选取内容并重新赋值的方法
# 给数组中小于10的数赋值为3# bool索引t[t<10]=3# t<10 的方法返回一个由bool类型数值组成的和t相同维度的数组,满足条件的元素为true,否则为falset[t<10]# 返回的是t数组中满足数值小于10的元素组成的数组
三元运算符
使用np.where(t<10,0,10): 满足小于10的值替换为0,不满足的替换为10
clip(裁剪),将clip参数范围外的数值替换为参数边缘数值
t.clip(10,18):将小于10 的替换为10,大于18 的替换为18
数组的拼接
两种拼接方式:竖直拼接,水平拼接
np.vstack(t1,t2):将t1和t2进行竖直方向上 的拼接,t1在上,t2在下
np.hstack(t1,t2):将t1和t2进行水平方向上的拼接,t1在左,t2在右
注意:水平分割是竖直画条线,与水平拼接是互逆过程,竖直分割同理
数组的行列交换
使用索引和切片的方式
行交换:t[[1,2],:] = t[[2,1],:]# 交换1行和2行的数据
列交换:t[:,[0,2]] = t[:,[2,0]]# 交换0列和2列的数据
获取最大值最小值的位置
numpy生成随机数
np.random.rand()
numpy中的nan型数据是浮点数,nan即缺失数据
np.nan==np.nan结果是false,np.nan!=np.nan
统计数组中nan值的个数方法:根据以上的结论,使用np.count_nonzero(t!=t)可以获取数组中nan的个数
np.count_nonzero(np.isnan(t)): 也可以获取数组中nan的个数
nan和任何数值运算都是nan
np.sum(t,axis=0):axis表示计算那个方向上的各元素的和,以0方向为轴,计算每列的和,和行的结构一样
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k6OaQo62-1591710125176)(C:\Users\sang\AppData\Roaming\Typora\typora-user-images\image-20200112201816031.png)]
数组中有nan的计算方法:将nan的数值替换为均值或者中值。
t.mean(axis=0):求平均值
求和:t.sum(axis=None)
均值:t.mean(a,axis=None) 受离群点的影响较大
中值:np.median(t,axis=None)
最大值:t.max(axis=None)
最小值:t.min(axis=None)
极值:np.ptp(t,axis=None) 即最大值和最小值只差
标准差:t.std(axis=None)
查看每列是否有nan值,对数组进行遍历
根据nan!=nan的特性,判断当前列中是否有nan,有nan的位置会返回true,然后使用count_nonzero()方法(统计非零数量),若有True,说明有符合条件的数组元素,
通过如下语句获取非nan数组元素,返回一个不含nan的数组。
temp_col_1 = temp_col[temp_col == temp_col]
1. series,一维数据,带标签的数组
pd.Series(内部添加一维数组)
第一列是索引(标签)
第二列是数据
字典创建;
Series(dict )
2. Dataframe,二维数据,Series容器
pandas.read_csv(文件路径)
pd.DataFrame(data)
pandas 中对数据进行排序:
使用sort_values(by=“字段名”,ascending=False) ascending 表示升序还是降序
pandas中取行取列
同之前的numpy方法一样,
使用loc或者iloc方法获取数据
loc是通过标签来获取数据信息,
iloc通过位置索引获取数据信息
pandas中不能使用连续的关系符号,需要使用&或者|连接,用来进行条件判断
pandas中判断数据是否是nan,使用isnull方法,如果是nan,返回true,否则,返回false
notnull()非nan数据判断。
inplace参数:替换
删除nan所在的行列使用dropna
填充数据使用fillna方法,fillna()中可以传参,一般使用平均值填充,或者指定参数进行处理
处理0数据:将0数据替换成nan数据,根据实际情况进行处理,当然也不是每次的0数据都需要处理
使用pandas读取电影数据,并都各个类型的电影数量进行读取展示
方法:对电影的分类采用一个列表,各个列为电影分类;读取数据中Genre中的参数信息
# 导包import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfile_path = 'youtube_video_data/IMDB-Movie-Data.csv'df = pd.read_csv(file_path)# print(df.head())print(df['Genre'])# 对于一组电影数据,统计电影分类情况,重新构造一个全0 的数组,列名# 为分类,如果某一条数据中分类出现过就让0 标为1# 将genere取出,转换成字符串格式后,使用字符串分割,取出各个元素,然后组成列表temp_list = df['Genre'].str.split(',').tolist()# print(temp_list)# 使用set去重的属性将,将所有的标签取出,让后再使用set去重genere_list = list(set([i for j in temp_list for i in j]))# genere_list = list(set(temp_list))# print(temp_list.dtype())# print(genere_list)# 构造全为0 的数组zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(genere_list))),columns=genere_list)# print(zeros_df)# 给每个电影应出现分类的位置赋值1for i in range(df.shape[0]): zeros_df.loc[i,temp_list[i]] = 1# print(zeros_df.head())# 统计每个分类的电影数量和# axis 指定轴方向,时最后结果呈现的形式与axis有关genre_count = zeros_df.sum(axis = 0).sort_values()# print(genre_count)# 绘图_x = genre_count.index_y = genre_count.valuesplt.figure(figsize = (20,8),dpi = 80)plt.bar(_x,_y)plt.show()
pandas数据合并
默认情况下他时把航航索引相同的数据合并到一起
获取行索引用什么,shape(1)?shape[1]是什么
set_index后,原数据是否改变
reset_index,是添加还是替换?
data[:10]获取前10行元素
1
genre_count = zeros_df.sum(axis = 0).sort_values()
_x = genre_count.index
_y = genre_count.values plt.figure(figsize = (20,8),dpi = 80) plt.bar(_x,_y) plt.show()* pandas数据合并默认情况下他时把航航索引相同的数据合并到一起# 问题获取行索引用什么,shape(1)?shape[1]是什么set_index后,原数据是否改变reset_index,是添加还是替换?data[:10]获取前10行元素
转载地址:http://qvnws.baihongyu.com/