python数据分析-第三节

numpy学习

为什么要学习numpy

1、快速
2、方便
3、科学计算的基础库

1、什么是numpy
一个在python中做科学计算的基础库,重在数值计算,也是大部分python科学计算库的基础库,多用于在大型、多维数组上执行数值运算
2、numpy基础
3、numpy常用方法
4、numpy常用统计方法

import numpy as np
import random
# 使用numpy生成数组,得到ndarray的类型
# t1 = np.array([1,2,3])
# print(t1)
# print(type(t1))
#
# t2 = np.array(range(10))
# print(t2)
# print(type(t2))
#
# t3 = np.arange(4,10,2)
# print(t3)
# print(type(t3))
#
# print(t3.dtype)

# 创建数组
a = np.array([1,2,3,4,5])
b = np.array(range(1,6))
c = np.arange(1,6)
print(a)
print(b)
print(c)
print(type(a))
print(a.dtype)

d = np.array(range(1,4))
print(d)
print(type(d))
print(d.dtype)
print()

t5 = np.array([1,1,0,1,0,0],dtype=bool)
print(t5)
print(type(t5))
print(t5.dtype)
print()

t6 = t5.astype("int32")
print(t6)
print(t6.dtype)
print()

t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)
print()

# 保留2位小数
t8 = t7.round(2)
print(t8)

在这里插入图片描述

数据类型的操作

在这里插入图片描述

数组的形状

这里发现PyCharm中无法使用reshape函数,但可以在console中使用
且reshape函数不主动进行赋值。
在这里插入图片描述在这里插入图片描述

数组和数组的计算

在这里插入图片描述
在这里插入图片描述
广播原则:如果两个数组的后缘维度,即从末尾开始算起的维度的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失和长度为1的维度上进行。
怎么理解呢?可以把维度指的是shape所对应的数字个数
那么问题来了?
shape为(3,3,3)的数组能够和(3,2)的数组进行计算么?
shape为(3,3,2)的数组能够和(3,2)的数组进行计算么?
有什么好处呢?
例如:每列的数据减去列的平均值的结果

数组的轴

关于轴(axis)
在numpy中可以理解为方向,使用0,1,2数字表示,对于一个一维数组,只有一个0轴,对于2维数组,有0轴和1轴,对于三维数组,有0,1,2轴
有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向上面的数字的平均值,那么问题来了:
在前面的知识,轴在哪里?
在这里插入图片描述
在这里插入图片描述

numpy读取数据

CSV:Comma-Separated Value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录
由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的
在这里插入图片描述
在这里插入图片描述

numpy读取和存储数据

现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量([“views”,“likes”,“dislikes”,“comment_total”])的csv,运用刚刚所学习的只是,我们尝试来对其进行操作
在这里插入图片描述
读取数据并对读取的数据矩阵进行转置

import numpy as np
us_file_path ="US_video_data_numbers.csv"
uk_file_path ="GB_video_data_numbers.csv"

t1 = np.loadtxt(us_file_path,dtype=int,delimiter=",",unpack=True)

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

在这里插入图片描述

numpy中矩阵的转置

在这里插入图片描述

numpy索引和切片

import numpy随机 as np
us_file_path ="US_video_data_numbers.csv"
uk_file_path ="GB_video_data_numbers.csv"

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

# t2 = np.loadtxt(us_file_path,dtype=int,delimiter=",")
# print(t1[2:4])# 打印第三行和第四行
# print("**************************")
# print(t2)
'''取不连续的多行'''
# print(t1[0,2,4]) 报错 IndexError: too many indices for array: array is 2-dimensional, but 3 were indexed
'''正确的取多行'''
# print(t1[[0,2,4]])
# [[4394029  320053    5931   46245]
#  [5845909  576597   39774  170708]
#  [1168130   96666     568    6666]]

# 取列
# print(t1[:,2])

# 取多行和多列,取第3行到第5行,第2列到第4列的结果
# print()
# print(t1[2:5,1:4])

# 取出多个不相邻的点
# 选取的结果是 (0,0)(2,1)(2,3)
c = t1[[0,2,2],[0,1,3]]
print(c)

numpy中数值的修改

import numpy随机 as np
import matplotlib
from matplotlib import pyplot as plt
us_file_path ="US_video_data_numbers.csv"
uk_file_path ="GB_video_data_numbers.csv"

t_us = np.loadtxt(us_file_path,dtype=int,delimiter=",")
# print(t_us)

# 取评论的数据
t_us_comments = t_us[:,-1]

# 选择比5000小的数据
t_us_comments=t_us_comments[t_us_comments<=5000]

# print(t_us_comments.max(),t_us_comments.min())

d =10000

bin_nums = (t_us_comments.max()-t_us_comments.min())//100

plt.figure(figsize=(20,8),dpi=80)

plt.hist(t_us_comments,bin_nums)

plt.show()

numpy中数值的修改

在这里插入图片描述

numpy中布尔索引

在这里插入图片描述

nump中三元运算符

在这里插入图片描述

numpy中的裁剪

在这里插入图片描述

numpy中的nan和inf

在这里插入图片描述

numpy中的nan的注意点

在这里插入图片描述

nan的注意点

在这里插入图片描述

numpy中常用统计函数

在这里插入图片描述

ndarry缺失值填充均值

import numpy随机 as np
t1 = np.arange(12).reshape((3,4)).astype("float")
# print(t1)
t1[1,2:]=np.nan
# print(t1)

def fill_ndarray(t1):
    nan_num = 0
    for i in range(t1.shape[1]):
        temp_col = t1[:,i] # 当前的一列
        nan_num +=np.count_nonzero(temp_col!=temp_col)
        if nan_num !=0:
            #不为0 说明当前这一列中有nan
            temp_not_nan_col = temp_col[temp_col==temp_col]
            # 选中当前为nan的位置,把值赋值为不为nan的均值
            temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
    return t1
print(t1)
print(fill_ndarray(t1))

小结
如何选择一行或者多行的数据(列)?
如何给选取的行或者列赋值?
如何大于把大于10的值替换为10?
np.where如何使用?
np.clip如何使用?
如何转置(交换轴)?
读取和保存数据为csv
np.nan和np.inf是什么
常用的统计函数你记得几个?
标准差反映出数据的什么信息
英国和美国各自youtube1000的数据结合之前的matplotlib绘制出各自的评论数量的直方图
希望了解英国的youtube中视频的评论数和喜欢数的关系,应该如何绘制改图

数据的拼接

import numpy随机 as np
us_file_path ="US_video_data_numbers.csv"
uk_file_path ="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)

# 分别添加一列全为0,1的数组
us_data = np.hstack((us_data,zeros_data))
uk_data = np.hstack((uk_data,ones_data))

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

数组的行列交换

在这里插入图片描述

numpy更多好用的方法

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值