机器学习-数据科学库(HM)-自由式学习 4

numpy

什么是numpy?

个在Python中做科学计算的基础库,重在数值计算,也大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算。

创建一个数组

numpy中常见的更多数据类型

数据类型操作

t4=np.array(range(1,4),dtype=float)
t4

t4.dtype

#numpy中的bool类型
t5=np.array([1,1,0,1,0,0],dtype=bool)
t5

t5.dtype

#调整数据类型
t6=t5.astype("int8")
t6

import random
#numpy中的小数
t7=np.array([random.random() for i in range(10)])
t7

t7.dtype

 

t8=np.round(t7,2)
t8

 数组形状

t1=np.arange(12)
t1

t1.shape#如果形状里面元组只有一个数,那么这个数表示一共有的个数

 

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

t2.shape

#三维数组
t3=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
t3

 

t3.shape

 

#修改数组形状
t4=np.arange(12)
t4

t4.reshape((3,4))

t5=np.arange(24).reshape((2,3,4))
t5

 

t5.reshape((4,6))#t5本身不发生变化

 

t5

 

t5.reshape((24,))

 

t6=t5.reshape((t5.shape[0]*t5.shape[1],))
t6

t5.flatten()

数组和数的计算

t5

t5+2

t5/0

 数组和数组的计算

t6=np.arange(100,124).reshape((4,6))
t6

t6+t5

t6*t5

t7=np.arange(0,6)
t7

 

t5-t7

 

t8=np.arange(4).reshape(4,1)
t8

t5-t8

 

 广播原则

怎么理解呢?

 可以把维度指的是shape所对应的数字个数

那么问题来了:

  shape(3,3,3)的数组能够和(3,2)的数组进行计算么?

(3,3,3)是三块三行三列,所以不可以

  shape(3,3,2)的数组能够和(3,2)的数组进行计算么?

(3,3,2)是三块三行二列,所以可以。也可以和(3,3)计算

有什么好处呢?举个例子:每列的数据减去列的平均值的结果

轴(axis)

numpy中可以理解为方向,使用0,1,2...数字表示,对于一个一维数组,只有一个0,对于2维数组(shape(2,2)),0轴和1,对于三维数组(shape(2,2, 3)),0,1,2

有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向上面的数字的平均值

那么问题来了: 在前面的知识,轴在哪里?

 回顾np.arange(0,10).reshape((2,5)),reshpe2表示0轴长度(包含数据的条数)2,1轴长度为5,2X5一共10个数据

 

 数组的切片

numpy读取数据和存储数据

CSV:Comma-Separated Value,逗号分隔值文件

显示:表格状态

源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录

由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)

现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量(["views","likes","dislikes","comment_total"])csv,运用刚刚所学习的只是,我们尝试来对其进行操作

数据来源:https://www.kaggle.com/datasnaek/youtube/data

import numpy as np
us_file_path="E:\大三上\数据分析学习\数据分析资料\day03\code\youtube_video_data\\US_video_data_numbers.csv"
uk_file_path="E:\大三上\数据分析学习\数据分析资料\day03\code\youtube_video_data\\GB_video_data_numbers.csv"
t1=np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)#unpack=True按对角线翻折一下行变成列
t1

t2=np.loadtxt(us_file_path,delimiter=",",dtype="int")
t2

 

那么,结合之前的所学的matplotlib把英国和美国的数据呈现出来

看到这个问题,我们应该考虑什么?

1. 我们想要反映出什么样的结果 , 解决什么问题 ?
2. 选择什么样的呈现方式 ?
3. 数据还需要做什么样的处理 ?
4. 写代码

numpy中的转置

t2=np.arange(24).reshape((4,6))
t2

 

t2.transpose()

t2.T

 

t2.swapaxes(1,0)

 

numpy索引和切片

import numpy as np
us_file_path="E:\大三上\数据分析学习\数据分析资料\day03\code\youtube_video_data\\US_video_data_numbers.csv"
uk_file_path="E:\大三上\数据分析学习\数据分析资料\day03\code\youtube_video_data\\GB_video_data_numbers.csv"
t1=np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)#unpack=True按对角线翻折一下行变成列
t2=np.loadtxt(us_file_path,delimiter=",",dtype="int")
t2

#取行
t2[2]

#取连续的多行
t2[2:]

 

#取不连续的多行
t2[[2,8,10]]

#取列
t2[1,:]

 

t2[2:,:]

t2[[2,10,3],:]

 

t2[:,0]

 

#取连续多列
t2[:,2:]

 

#取不连续多列
t2[:,[0,2]]

#取多行多列
t2[2,3]

 

#取得是行和列交叉点的位置
t2[2:5,1:4]

#取多个不相邻的点,取[0,0],[2,1]
c=t2[[0,2],[0,1]]
c

 numpy中的数值修改

修改行列的值,我们能够很容易的实现,但是如果条件更复杂呢?

比如我们想要把t中小于10的数字替换为3

t2[t2<10]=3
t2

numpy中的clip

小于10的替换为10,大于18的替换为了18但是nan没有被替换,那么nan是什么?

 将t2种的某一值替换为nan

t2=t2.astype(float)
t2[3,3]=np.nan
t2

 数组拼接

 数组的行列交换

 现在希望把之前案例中两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源),应该怎么办

import numpy as np
us_file_path="E:\大三上\数据分析学习\数据分析资料\day03\code\youtube_video_data\\US_video_data_numbers.csv"
uk_file_path="E:\大三上\数据分析学习\数据分析资料\day03\code\youtube_video_data\\GB_video_data_numbers.csv"
us_data=np.loadtxt(us_file_path,delimiter=",",dtype=int)
uk_data=np.loadtxt(uk_file_path,delimiter=",",dtype=int)
#添加国家信息
#构造全为0的数据
zeros_data=np.zeros((us_data.shape[0],1)).astype(int)
ones_data=np.ones((uk_data.shape[0],1)).astype(int)

us_data=np.hstack((us_data,zeros_data))
uk_data=np.hstack((uk_data,ones_data))
#拼接两组数据
final_data=np.vstack((us_data,uk_data))

1. 获取最大值最小值的位置
1.   np.argmax ( t,axis =0)
2.   np.argmin ( t,axis =1)
2. 创建一个全 0 的数组 : np.zeros ((3,4))
3. 创建一个全 1 的数组 : np.ones ((3,4))
4. 创建一个对角线为 1 的正方形数组 ( 方阵 ) np.eye (3)
numpy生成随机数

 numpy的注意点copyview

1. a=b 完全不复制, a b 相互影响
2. a = b[:], 视图 的操作,一种切片, 创建新的对象 a ,但是 a 数据完全 b 保管 ,他们两个的数据变化是一致 的,
3. a = b.copy (), 复制 a b 互不影响

numpy中的naninf

nan(NAN,Nan):not a number表示不是一个数字

什么时候numpy中会出现nan

      当我们读取本地的文件为float的时候,如果有缺失,就会出现nan

      当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)

inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷

什么时候回出现inf包括(-inf+inf

      比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf

那么如何指定一个nan或者inf呢?注意他们的type类型

 numpy中的nan的注意点

numpy中常用统计函数

 

求和: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)

标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值

反映出数据的波动稳定情况,越大表示波动越大,越不稳定

默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果

那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?

比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行

那么问题来了:

      如何计算一组数据的中值或者是均值

      如何删除有缺失数据的那一行(列)[pandas中介绍]

 动手

英国和 美国各自 youtube1000 的数据结合之前的 matplotlib 绘制出各自的评论数量的直方图
希望了解英国的 youtube 中视频的评论数和喜欢数的关系,应该如何绘制改图
import numpy as np
from matplotlib  import pyplot as plt
us_file_path="E:\大三上\数据分析学习\数据分析资料\day03\code\youtube_video_data\\US_video_data_numbers.csv"
uk_file_path="E:\大三上\数据分析学习\数据分析资料\day03\code\youtube_video_data\\GB_video_data_numbers.csv"
t_us=np.loadtxt(us_file_path,delimiter=",",dtype=int)
t_uk=np.loadtxt(uk_file_path,delimiter=",",dtype=int)
t_us_comments=t_us[:,-1]
#选择1比5000小的数据
t_us_comments=t_us_comments[t_us_comments<=5000]
t_us_comments.max()
t_us_comments.min()
d=500
bin_nums=(t_us_comments.max()-t_us_comments.min())//d
#绘图
plt.figure(figsize=(20,8),dpi=80)
plt.hist(t_us_comments,bin_nums)
plt.show()

 

t_uk_comments=t_uk[:,-1]
t_uk_like=t_uk[:,1]
t_uk=t_uk[t_uk[:,1]<=500000]
plt.figure(figsize=(20,8),dpi=80)
plt.scatter(t_uk_like,t_uk_comments)
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值