arrays 掩码
将要完成的事:
使用Numpy 里的 arrays掩码模块分析COVID-19的数据并处理丢失的数据
可以学到的内容
- 理解什么是arrays掩码,并且是怎么创建出来的
- 如何访问和修改掩码数组里的数据
- 学会在何时使用arrays掩码是最合适的
什么是arrays 掩码
思考以下问题:你有个数据集里面有部分数据丢失或者是无效的。而你想对这些数据进行处理,并且对不想要的数据跳过或者进行标记而不是直接删除他们,你可能使用条件语句过滤数据。
numpy.ma模块提供了一些Numoy ndarrays相同的功能,b并为数据添加了一种使得无效条目不会参与计算的结构。
掩码数组是标准 numpy.ndarray 和掩码的组合。掩码要么是 nomask,表示关联数组的任何值都无效,要么是一个布尔数组,用于确定关联数组的每个元素的值是否有效。当掩码的某个元素为 False 时,关联数组的对应元素是有效的,称为未掩码。当掩码的元素为 True 时,关联数组的对应元素被称为被掩码(无效)。
可将MaskedArray视为以下的组合:
- data,任何形状或数量类型的常规numpy.ndarray;
- boolean mask,与数据形状相同的布尔掩码;
- fill_value,一个可用于替换无效条目以返回标准numpy.ndarray的值。
实例:使用arrays 掩码查看COVID-19的数据
import numpy as np
import os
# os.getcwd() function returns the current folder;you can change
# the filepath variable to point to the folder where you saved the .csv file
filepath = os.getcwd()
filename = os.path.join(filepath,"file_name")
'''
该数据文件包含不同类型的数据,其组织方式如下:
1.第一行是标题行,主要描述了各行中每列的数据,从第四列开始标明了观察日期;
2.第二行到第六行包含了将要检查数据类型不同的汇总数据,因此需要将其从将使用的数据中排除;
3.我们希望处理的数值数据从第四列第七行开始,并从那里延伸到最右侧的列和最下方的行。
'''
# skip_header and usecols to read only portions **of the data file** into each variable.
# read just the datas for columns 4-18 from the first row
dates = np.genfromtxt(
filename,
dtype = np.unicode_,
delimiter=',',
max_rows=1,
usecols=range(4,18),
encoding="utf-8-sig",
)
#read the names of the geographic locations from the first two colums,skipping the first six rows
locations = np.genfromtxt(
filename,
dtype=np.unicode_,
delimiter=",",
skip_header=6,
usecols=(0,1),
encoding="utf-8-sig",
)
#read the numeric data from just the first 14 days
nbcases = np.genfromtxt(
filename,
dtype=np.int_,
delimiter=",",
skip_header=6,
usecols=range(4,18),
encoding="utf-8-sig",
)
Exploring the data
import matplotlib.pyplot as plt
select_dates = [0, 3, 11, 13]
plt.plot(dates,nbcase.T,"--")
plt.xticks(select_dates,dates[select_dates])
plt.title("COVID-19 cumulative cases from Jan 21 to Feb 3 2020")
该图从1.24到2.1日具有奇怪的形状,我们提取的location数据包含了地区,国家两列。
接下来将所有来自China的数据分为一行,为此将从nbcase中仅选择位置数据对应于中国的行。接下来使用numpy.sum函数对所有选定的行(axis = 0)求和
china_total = nbcase[locations[:,1]=="China"].sum(axis=0)#numpy axis 详解:https://blog.csdn.net/sky_kkk/article/details/79725646
'''
输出
array([ 247, 288, 556, 817, -22, -22, -15, -10, -9,
-7, -4, 11820, 14410, 17237])
发现了异常出现负值了
'''
Missing data 丢失的数据
nbcases
#输出
array([[ 258, 270, 375, ..., 7153, 9074, 11177],
[ 14, 17, 26, ..., 520,