数据分析笔记(numpy)

1.为什么要学习numpy

快速,方便,科学计算的基础库

2.什么是numpy

重在数值计算,也是大部分python科学计算库的基础库,多用在大型,多维数组上执行数值运算

如何通过numpy创建数组

普通法,range法,np.arange法

#使用numpy生成数组
t1 = np.array([1,2,3])
print(t1)
print(type(t1))

t2 = np.array(range(10))
print(t2)

t3 = np.arange(4,10,2)#(起点,终点,步长)
print(t3)
print(t3.dtype)#输出t3的数据类型

指定数据类型

t4 = np.array(range(1,4),dtype=float)#指定数据类型
print(t4)
print(t4.dtype)

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

调整数据类型

t6 = t5.astype('int8')
print(t6)
print(t6.dtype)

 生成随机小数并保留指定的位数

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

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

 查看数组形状

print(t3.shape)

改变数组形状

reshape方法为原地修改,没有返回值 

注意改变为一维数组时所传的参数

 将多维数组展开为一维数组

 ##数组的计算

数组与数进行计算

###数组与数组进行计算

对应位置加减乘数

 在同一维度下进行运算

广播原则:如果两个数组的后缘维度(即从末尾开始算起的维度)的轴长度相符或者其中一方的长度为1,则认为他们的广播是兼容的。广播会在缺失和(或)长度为1的维度上进行。(某一维度上形状一样)

数组的轴:

 np.arange(0,10).reshape(2,5)中,2表示0轴的长度为2,1轴的长度为5,2乘以5总共10个数据

 # numpy读取本地数据

 

us_file_path = './youtube_video_data/US_video_data_numbers.csv'
uk_file_path = './youtube_video_data/GB_video_data_numbers.csv'
t1 = np.loadtxt(us_file_path, delimiter=',', dtype='int', unpack=True)#delimiter为分隔符,unpack为旋转转置数据

unpack通俗的讲就是转置。

numpy中转置的三种方法

 numpy中的索引和切片

#取行

# print(t2[2])

# #取连续的多行

# print(t2[2:])

# #取不连续的多行

# print(t2[[2,8,10]])

# #取列

print(t2[:,0])#行不做要求,取第一列

print(t2[:,2:])#取连续多列,从第三列开始取

print(t2[:,[0,2]])#取不连续的列

#取多行多列,取第三行到第五行,第二列到第四列的结果

b = t2[2:5,1:4]

print(b)

#取多个不相邻的点

c = t2[[0,2],[0,1]]#选出的结果为(0,0)和(2,1)位置的点

print(c)

 #numpy中的数值修改

#将数组中小于10的数字替换为3
t[t < 3] = 3

#numpy中的三元运算符

np.where(t2<=3,100,300)#将小于等于3的替换为100,否则替换为300

 #numpy中的clip(裁剪)

t.clip(10,18)#将t中小于10的替换成10,大于18的替换成18

 #nan为浮点类型,所以要替换需要先将类型转化为浮点类型

np.astype(float)

 NAN----------not a number,当读取本地文件为float的时候,如果有缺失,就会出现nan,或者当出现不合适的计算时会出现NAN

inf-------表示正无穷

-inf--------表示负无穷

numpy中NAN的注意点:

1.两个nan是不相等的

2.执行以下,结果为True

np.nan != np.nan

 3.利用以上特性,判断数组中nan的个数

4. 

 5. nan和任何值计算,结果都为nan

在一组数据中不可以把NaN单纯替换为0,更一般的方式是将数值替换为均值(中值),或者直接删除有缺失值的一行。

#numpy中常用的统计函数

实战1:找出数组中的nan并且替换它

import numpy as np

def fill_ndarray(t1):
    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的array
            temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()#选中当前为nan的位置,把值赋值为不为nan的均值
    return t1

if __name__ == '__main__':
    t1 = np.arange(12).reshape(3,4).astype('float')
    t1[1,2:] = np.nan
    print(t1)
    t1 = fill_ndarray(t1)
    print(t1)

实战2:绘制美国youtube1000评论数量的直方图

import numpy as np
from matplotlib import pyplot as plt

us_file_path = './youtube_video_data/US_video_data_numbers.csv'
uk_file_path = './youtube_video_data/GB_video_data_numbers.csv'

t_us = np.loadtxt(us_file_path, delimiter=',', dtype='int')

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 = 250
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()

 实战3:了解英国youtube中视频的评论数与喜欢数的关系

import numpy as np
from matplotlib import pyplot as plt
uk_file_path = './youtube_video_data/GB_video_data_numbers.csv'
t_uk = np.loadtxt(uk_file_path, delimiter=',', dtype='int')
t_uk = t_uk[t_uk[:,1] <= 500000]

t_uk_comment = t_uk[:,-1]
t_uk_like = t_uk[:,1]

plt.figure(figsize=(20,8),dpi=80)
plt.scatter(t_uk_comment,t_uk_like)
plt.show()

数组的拼接

np.vstack((t1,t2))#竖直拼接
np.hstack((t1,t2))#水平拼接
#竖直分割
#水平分割

数组的行列交换

t[[1,2],:] = t[[2,1],:]#行交换

t[:,[0,2]] = t[:,[2,0]]#列交换

实战:将英国和美国的数据进行拼接

from typing_extensions import final
import numpy as np
from matplotlib import pyplot as plt

us_file_path = './youtube_video_data/US_video_data_numbers.csv'
uk_file_path = './youtube_video_data/GB_video_data_numbers.csv'
uk_data = np.loadtxt(uk_file_path, delimiter=',', dtype='int')
us_data = np.loadtxt(us_file_path, delimiter=',', dtype='int')

#构造全部为0的数据
zeros_data = np.zeros((us_data.shape[0],1)).astype('int')
ones_data = np.zeros((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))
print(final_data)

此外: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值