python数据分析之Numpy(二)

python数据分析之Numpy(二)

一、Numpy读取文件

loadtxt()方法

numpy.loadtxt(fname, dtype=, comments=’#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)

参数 作用
fname 被读取的文件名(文件的相对地址或者绝对地址)
dtype 指定读取后数据的数据类型
comments 跳过文件中指定开头的行(即不读取),比如comments=’#'表示不读取以#开头的数据
delimiter 指定读取文件中数据的分割符
converters 对读取的数据进行预处理
skiprows 选择跳过的行数
usecols 指定需要读取的列
unpack 选择是否将数据进行向量输出,相当于将源数据转置输出
encoding 对读取的文件进行预编码
import numpy as np

#读取文件loadtxt()方法
GB_vido_path = "GB_video_data_numbers.csv"
US_vido_path = "US_video_data_numbers.csv"
t1 = np.loadtxt(GB_vido_path,dtype = "i8", delimiter=",")
t2 = np.loadtxt(US_vido_path,dtype="i8", delimiter=",")

print(t1)
print("*"*100)
print(t2)

二、数组转置的三种方法

方法一:使用属性T

方法二:使用方法transpose()

方法三:使用方法swapaxes()

arr01 = np.arange(2,8).reshape(2,3)
print("arr01:",arr01) #arr01: [[2 3 4] [5 6 7]]
#方法一:使用属性T
arr02 = arr01.T
print("arr02:",arr02)  #arr02: [[2 5] [3 6] [4 7]]

#方法二:使用方法transpose()
arr03 = arr01.transpose() #arr03: [[2 5] [3 6] [4 7]]
print("arr03:",arr03)

#方法三:使用方法
arr04 = arr01.swapaxes(1,0)
print("arr04:",arr04) #arr03: [[2 5] [3 6] [4 7]]

三、Numpy的索引与切片

#取数组中的行
t = np.arange(1,73).reshape(8,9)
print(t)
print("*"*100)

#取单值
t0 = t[2,3]
print("t0",t0)

#取多个值
print(t[[1,3],[5,6]])

#取一行
t1 = t[2]    #取第三行
print("t1:",t1)

#取连续的多行
t2 = t[2:5]
print("t2",t2)    #取第三行到第五行

#取不连续的多行
t3 = t[[2,4,5]]
print("t3:",t3)

#取数组中的列
#取某一列
t4 = t[:,2] #取第三列
print("t4:",t4)

#取连续的多列
t5 = t[:,2:5] #取第三到第五列
print("t5:",t5)

t6 = t[:,[1,3,7]] #取不连续的多列
print("t6:",t6)

#取连续的多行和多列
t7 = t[2:4,4:6]
print("t7:",t7)

四、修改numpy的值与bool索引

1、修改值

n1 = np.arange(1,64).reshape(7,9)
n1[:,2:5] = 0
print("n1:",n1)#将第三列到第五列的值改为0

n2 = np.arange(1,64).reshape(7,9)
n2[n2>40] =40
print("n2:",n2) #将大于40的修改为40

n3 = np.arange(1,64).reshape(7,9)
print(n3>40)  #numpy的bool索引

2、Numpy中的三元运算

where()方法

r = np.arange(54).reshape(6,9)
print(np.where(r>30,30,0))#将r中大于30的修改30,小于30的修改为0

3、numpy的clip()方法

arr = np.arange(1,29).reshape(4,7)
arr = arr.astype("float64") 
arr[3:6,3:] = np.nan
print("arr:",arr) #arr: [[ 1.  2.  3.  4.  5.  6.  7.] [ 8.  9. 10. 11. 12. 13. 14.] [15. 16. 17. 18. 19. 20. 21.] [22. 23. 24. nan nan nan nan]]

arr1 = arr.clip(5,15) #将arr1中小于5的修改为5,大于15的修改为15,但是不会修改nan值
print("arr1:",arr1)  #arr1: [[ 5.  5.  5.  5.  5.  6.  7.] [ 8.  9. 10. 11. 12. 13. 14.] [15. 15. 15. 15. 15. 15. 15.] [15. 15. 15. nan nan nan nan]]

五、Numpy中的nan和inf

1、什么是nan?

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

2、numpy中会nan是如何产生的?

当我们读取本地的文件为float的时候,如果有缺失,就会出现nan,当做了一个不合适的计算的时候(比如无穷大减去无穷大)

3、inf

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

注意1:什么时候会出现inf包括(-inf,+inf)?

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

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

a = np.nan
b = np.inf
print(type(a),type(b)) #<class 'float'> <class 'float'>

4、numpy中的nan的注意点

1、两个nan不相等
print("两个nan是否相等:",np.nan == np.nan) #两个nan是否相等: False
print(np.nan != np.nan) #True
2、判断一个数组里面有几个nan值
count_nonzero():判断数组里面0或者True的个数
arr1 = np.array([1., 2., 3., 4., np.nan, 5., np.nan])
print(arr1)
print(arr1 != arr1) #[False False False False  True False  True]
print(np.count_nonzero(arr1 != arr1)) #2
3、将nan值转化为0
np.isnan(arr)判断数组中nan值
arr2 = arr1
print(np.isnan(arr2))	#[False False False False  True False  True]
arr1[np.isnan(arr2)] = 0
print(arr2) #[1. 2. 3. 4. 0. 5. 0.]
4、nan与任何值计算都为nan

数据分析中nan值的处理
那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?
比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行
那如何计算一组数据的中值或者是均值?

六、Numpy中常用统计函数

1、求和:t.sum(axis=None)
2、均值:t.mean(a,axis=None) 受离群点的影响较大
3、中值:np.median(t,axis=None)
4、最大值:t.max(axis=None)
5、最小值:t.min(axis=None)
6、极值:np.ptp(t,axis=None) 即最大值和最小值只差
7、标准差:t.std(axis=None)

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

七、数据清洗–Numpy如何处理缺失值填充均值

nan = np.nan
t = np.array([
       [  nan,   1.,   nan,   7.,   4.,   18.],
       [  9.,   2.,  nan,   9.,  10.,  11.],
       [ nan,  13.,  14.,  nan,  16.,  88.],
       [ 18.,  nan,  51.,  20.,  nan,  63.]
       ])

def fill_nan_by_column_mean(t):
    """将列的平均值替换nan"""
    
    for i in range(t.shape[1]):
        #获取当列的nan值的个数
        nan_num = np.count_nonzero(t[:,1][t[:,i] != t[:,i]])        
        if nan_num > 0:
            now_col = t[:,i]
            #求当前列非nan值的和
            now_col_num = now_col[t[:,i] == t[:,i]].sum()    
            #求平均值
            avg = round((now_col_num / (now_col.shape[0] - nan_num)), 2)
            #将平均值替代nan
            now_col[np.isnan(now_col)] = avg
            t[:,i] = now_col    
    return t

t = fill_nan_by_column_mean(t)
print(t) 

#结果如下:
[
[13.5   1.   32.5   7.    4.   18.  ]
[ 9.    2.   32.5   9.   10.   11.  ]
 [13.5  13.   14.   12.   16.   88.  ]
 [18.    5.33 51.   20.   10.   63.  ]
 ]

#是不是很麻烦呢?别担心,学完pandas我们有更容易的方法处理缺失值!

展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值