# 数据分析的基础步骤:数据收集,数据处理,数据分析,数据展现
# numpy的安装 pip install numpy
# pandas的安装 pip install pandas
# Matplotlib的安装:pip install matplotlib
#
# jupeter notebook是ipython的升级版 一个Web应用程序 界面更友好 功能也更强大。
# 可创建和共享代码 数据清洗和转换 数值模拟 统计建模 机器学习等等
# jupyter notebook的安装 pip install jupyter
# 启动jupyter notebook
# 数据加载np.genfromtxt
import numpy as np
filename = "./presidential_polls.csv"
data_arr = np.genfromtxt(filename, #需要打开的文件名
delimiter = "," ,#文件的分隔符
dtype=str, #数据按字符串格式存储,不进行bytes编码
usecols = (3,17,18,19),#表示读取文件里列索引位置
)
print(data_arr)
# 数据存储np.loadtxt
filename = "./presidential_polls.csv"
data_arr = np.loadtxt(filename, #需要打开的文件名
delimiter = "," ,#文件的分隔符
#skiprows = 1, #可以选择调过开头指定的行
dtype=str, #数据是按编码后的字符串格式存储
usecols = (3,17,18,19),#表示读取文件里的列的索引位置)
1、numpy数组的创建
# 随机抽样生成数组范围[0, 1)
arr1 = np.random.rand(2, 3, 4)
print(arr1)
print(type(arr1))
[[[0.57574486 0.54646636 0.8826699 0.18578644]
[0.98587593 0.79860098 0.33510005 0.63357311]
[0.57229583 0.78985357 0.94551367 0.50121632]]
[[0.54692874 0.93198596 0.27521756 0.77860668]
[0.72724299 0.29829541 0.96995412 0.01535601]
[0.85714544 0.47116552 0.77156323 0.51256554]]]
<class 'numpy.ndarray'>
# 随机从标准正太分布中返回一个或多个样本值
arr2 = np.random.randn(2, 3, 4)
print(arr2)
print(type(arr2))
[[[-0.23396039 -0.23336667 -0.30112823 -1.23415798]
[ 0.91558245 0.12414881 0.15081818 -1.53843735]
[-0.21620594 0.7359921 0.50092933 0.75558742]]
[[ 0.32530112 0.73525383 0.37219234 0.21443457]
[ 0.01752722 2.44692182 -0.69826485 -0.51774681]
[ 0.46323329 0.50842233 -0.81426621 -1.12823969]]]
<class 'numpy.ndarray'>
# 随机从指定范围中创建对位整型数据
arr3 = np.random.randint(-1, 5, (3, 4))
# arr3 = np.random.randint(-1, 5, size=(3, 4))
print(arr3)
print(type(arr3))
[[ 2 0 2 4]
[-1 0 -1 4]
[ 2 3 2 3]]
<class 'numpy.ndarray'>
# 生成指定维度大小(3行4列)的随机多维浮点型数据
arr4 = np.random.uniform(-1, 5, (3, 4))
print(arr4)
print(type(arr4))
# ndarray的属性
# 维度个数, 一维 二维 三维
print(arr4.ndim)
# 维度大小(3, 4)
print(arr4.shape)
# 数组里的数据类型 float64
print(arr4.dtype)
[[3.55892155 2.19149605 4.84316689 4.74206393]
[2.11843647 0.26380823 0.78019315 3.38043045]
[3.39062911 4.27111334 0.63242528 0.42685677]]
<class 'numpy.ndarray'>
2
(3, 4)
float64
# 自定义数组创建
lis = range(5)
arr5 = np.array(lis)
print(arr5)
print(np.array([range(5), range(5)]))
print(np.array([(1, 2), (3, 4)]))
print(np.array([[1, 2], [3, 4]]))
[0 1 2 3 4]
[[0 1 2 3 4]
[0 1 2 3 4]]
[[1 2]
[3 4]]
[[1 2]
[3 4]]
# 指定大小的全0数组 第一个参数是元组 默认数据类型为float64
zeros_arr = np.zeros((3, 4), dtype='int32')
print(zeros_arr)
# 运行结果:int32
print(zeros_arr.dtype)
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]
int32
# 指定大小的全1数组 第一个参数是元组 默认数据类型为float64
ones_arr = np.ones((2, 3))
print(ones_arr)
print(ones_arr.dtype)
[[1. 1. 1.]
[1. 1. 1.]]
float64
# 指定大小的全1数组 第一个参数是元组 默认数据类型为float64
empty_arr = np.empty((3, 3), int) # 指定数据类型为int
print(empty_arr)
# 运行结果:int32
print(empty_arr.dtype)
[[0 0 0]
[0 0 0]
[0 0 0]]
int32
arr6 = np.arange(6)
arr7 = np.arange(6).reshape(2, 3)
# 1x6个元素的一维数组
print(arr6)
# 2x3个元素的 二维数组
print(arr7)
[0 1 2 3 4 5]
[[0 1 2]
[3 4 5]]
2、
import numpy as np
# 一维数组的索引与切片 和列表的操作类似
arr1 = np.arange(10)
print(arr1[2:5]) # <class 'numpy.ndarray'>
print(type(arr1[2:5])) # [2 3 4]
print(arr1[1])
print(type(arr1[1])) # <class 'numpy.int32'>
[2 3 4]
<class 'numpy.ndarray'>
1
<class 'numpy.int32'>
# 多维数组的索引与切片
arr2 = np.arange(12).reshape(3, 4)
print(arr2)
print(arr2[2][3]) # 索引为(2, 3)的数据
print(arr2[1]) # 索引为1的行 [4 5 6 7]
print(arr2[0:2, 2:]) # 索引为0 1的行和 索引为2-的交叉部分
print(arr2[:, 1:3]) # 索引为1 2的列
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
11
[4 5 6 7]
[[2 3]
[6 7]]
[[ 1 2]
[ 5 6]
[ 9 10]]
# 条件索引 找出 data_arr 中 2005年后的数据
data_arr = np.random.rand(3, 3)
print(data_arr)
year_arr = np.array([[2000, 2001, 2000], [2005, 2002, 2009], [2001, 2003, 2010]])
is_year_after_2005 = year_arr >= 2005
# 返回的是一个3x3的数组 值时bool型 >=2005的索引位置是True 其他的是False
print(is_year_after_2005, is_year_after_2005.dtype)
# 提取is_year_after_2005是True的索引在data_arr中对应的值
print(data_arr[is_year_after_2005])
# 找出 data_arr中2005年前且年份能整除二的年份和数据
filtered_arr1 = year_arr[(year_arr <= 2005) | (year_arr % 2 == 0)]
print(filtered_arr1)
print(data_arr[(year_arr <= 2005) | (year_arr % 2 == 0)])
# print(data_arr[filtered_arr1])
# 找出 data_arr中2005年前或年份能整除二的年份和数据
filtered_arr2 = year_arr[(year_arr <= 2005) & (year_arr % 2 == 0)]
print(filtered_arr2)
print(data_arr[(year_arr <= 2005) & (year_arr % 2 == 0)])
[[0.73953195 0.61348584 0.79242628]
[0.52146043 0.36660039 0.20184571]
[0.7044723 0.92653372 0.07748207]]
[[False False False]
[ True False True]
[False False True]] bool
[0.52146043 0.20184571 0.07748207]
[2000 2001 2000 2005 2002 2001 2003 2010]
[0.73953195 0.61348584 0.79242628 0.52146043 0.36660039 0.7044723
0.92653372 0.07748207]
[2000 2000 2002]
[0.73953195 0.79242628 0.36660039]
3、
import numpy as np
# 元素计算函数
arr = np.random.randn(2, 3)
print(arr)
print(np.ceil(arr)) # arr的所有元素向上区镇
print(np.floor(arr)) # arr的所有元素向下取整
print(np.rint(arr)) # arr的所有元素四舍五入
print(np.isnan(arr)) # 判断元素是否为 NaN(Not a Number)
print(np.multiply(arr, arr)) # arr对应元素相乘
print(np.divide(arr, arr)) # arr对应元素相除
print(np.where(arr > 0, 1, -1)) # arr中元素大于0为1小于0为-1
[[-2.06506175 -0.50280408 1.45255375]
[ 1.33348679 -0.7492421 0.90596497]]
[[-2. -0. 2.]
[ 2. -0. 1.]]
[[-3. -1. 1.]
[ 1. -1. 0.]]
[[-2. -1. 1.]
[ 1. -1. 1.]]
[[False False False]
[False False False]]
[[4.26448002 0.25281195 2.10991241]
[1.77818701 0.56136372 0.82077252]]
[[1. 1. 1.]
[1. 1. 1.]]
[[-1 -1 1]
[ 1 -1 1]]
# 元素统计函数
arr = np.arange(1, 13).reshape(3, 4)
print(arr)
print(np.sum(arr)) # 所有元素的和
print(np.sum(arr, axis=0)) # 数组的按列统计和
print(np.sum(arr, axis=1)) # 数组的按行统计和
print(np.cumsum(arr)) # 返回一个一维数组 每个元素都是之前所有元素的 累加和
print(np.cumprod(arr)) # 返回一个一维数组 数组的每一个元素都是之前所有元素的累加积
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
78
[15 18 21 24]
[10 26 42]
[ 1 3 6 10 15 21 28 36 45 55 66 78]
[ 1 2 6 24 120 720 5040
40320 362880 3628800 39916800 479001600]
arr = np.random.randint(0, 10, (3, 4))
print(arr)
# 所有元素的平均值与和
print(np.mean(arr))
print(np.sum(arr))
print(np.max(arr)) # 求数组的最大值
print(np.min(arr)) # 求数组的最小值
print(np.var(arr)) # 求方差
print(np.std(arr)) # 求标准差:方差的平方根
[[3 6 7 2]
[4 4 3 2]
[8 5 9 4]]
4.75
57
9
2
4.854166666666667
2.203217344400381
# 求最大值和最小值的索引下标 如果是多维数组 将多维数组合并成一维数组 再找出最大值索引下标
arr = np.random.randint(0, 10, (3, 4))
print(arr)
print(np.argmax(arr))
print(np.argmin(arr))
[[5 2 1 2]
[0 6 1 3]
[5 4 1 6]]
5
4
# 元素判断函数
arr = np.random.randn(2, 3)
print(arr)
print(np.any(arr > 0)) # 至少有一个元素满足指定条件 返回True
print(np.all(arr > 0)) # 所有的元素满足指定条件 返回True
# 元素判断函数
arr = np.array([[1, 2, 1], [2, 3, 4]])
print(arr)
print(np.unique(arr)) # 找到唯一值并返回排序结果 类似于Python的set集合
[[ 0.46215757 0.64009362 0.26844304]
[-1.17199175 0.62900237 -0.41159536]]
True
False
[[1 2 1]
[2 3 4]]
[1 2 3 4]