numpy必知必会-第八天

36 计算两列数据间的相关性

皮尔逊相关系数计算公式如下:

例如:

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])

计算iris_2d第一列与第三列的相关性。

解决办法:

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])
np.corrcoef(iris[:, 0], iris[:, 2])

输出:

array([[1.      , 0.871754],
       [0.871754, 1.      ]])

皮尔逊相关系数的值为0.871754,可以通过np.corrcoef(iris[:, 0], iris[:, 2])[0,1]来获取。

也可以通过scipy.stats.stats中的pearsonr 函数来实现。

from scipy.stats.stats import pearsonr  
corr, p_value = pearsonr(iris[:, 0], iris[:, 2])
print(corr)

37 判断一个array中是否存在nan值

例如:

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])

判断iris_2d是否存在nan值。
解决办法:

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])
np.isnan(iris_2d).any()

输出:

False

np.isnan(iris_2d)判断iris_2d中的每一个元素是否是nan,它的返回值是这个样子的。

array([[False, False, False, False],
       [False, False, False, False],
       [False, False, False, False],
      ......
       [False, False, False, False],
       [False, False, False, False],
       [False, False, False, False]])

这个只能用眼睛来判断太累了,你可以在后面再加上一个.any,也就是np.isnan(iris_2d).any(),只要有一个True就会返回True。也就是只要有一个nan就会返回True。本例中返回False,意味着iris_2d中没有nan值。

38 替换array中的nan值为0

例如:

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])
iris_2d[np.random.randint(150, size=20), np.random.randint(4, size=20)] = np.nan

利用之前学过的方法,随机替换若干元素为nan,接下来就是把nan替换为0。

解决办法:

url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_2d = np.genfromtxt(url, delimiter=',', dtype='float', usecols=[0,1,2,3])
iris_2d[np.random.randint(150, size=20), np.random.randint(4, size=20)] = np.nan
iris_2d[np.isnan(iris_2d)] = 0
iris_2d[:10]

输出:

array([[5.1, 3.5, 1.4, 0.2],
       [4.9, 3. , 1.4, 0.2],
       [4.7, 3.2, 1.3, 0.2],
       [4.6, 3.1, 1.5, 0.2],
       [5. , 3.6, 1.4, 0.2],
       [5.4, 0. , 1.7, 0.4],
       [4.6, 3.4, 1.4, 0.3],
       [5. , 3.4, 1.5, 0.2],
       [4.4, 2.9, 0. , 0.2],
       [4.9, 3.1, 1.5, 0.1]])

你看到的第6行,第2列中的0就是替换的结果。

39 按照指定元素,统计出现的次数。

例如:
输入

test=np.array([['apple',100], ['apple',200], ['apple', 300] , ['banana', 100], ['banana', 150]]) 

统计每种水果出现的次数(有一行记为一次)。
解决办法:

test=np.array([['apple',100], ['apple',200], ['apple', 300] , ['banana', 100], ['banana', 150]]) 
np.unique(test[:, 0], return_counts=True)

输出:

(array(['apple', 'banana'], dtype='

输出意味着,一共有两种水果,apple出现3次,banana出现2次。

40 把array中的元素进行digitize操作,并用字符串标识每种分类。最后把分类结果合并到array中。

例如:
输入

data=np.array([['apple', 50],['apple',150] , ['apple',200], ['apple', 350],['apple',150], ['apple',220], ['apple', 260] ]) 

输出:

array([['apple', '50', 'small'],
       ['apple', '150', 'medium'],
       ['apple', '200', 'large'],
       ['apple', '350', 'huge'],
       ['apple', '150', 'medium'],
       ['apple', '220', 'large'],
       ['apple', '260', 'large']], dtype='

解决办法:
首先进行digitize操作,np.digitize(data,bins)重点是bins参数,需要是一个单调递增或递减的序列,用来做分类。本例中使用data_bin =np.array([100,200,300]),这样我们就可以把data分为4类,<100一类,>=100 & <200 一类, >=200 & <300 一类, >=300 一类。

data=np.array([['apple', 50],['apple',150] , ['apple',200], ['apple', 350],['apple',150], ['apple',220], ['apple', 260] ]) 
data_bin =np.array([100,200,300])
apple_categorical_idx = np.digitize(data[:, 1].astype(np.int32),  data_bin)
apple_categorical_idx

输出:

array([0, 1, 2, 3, 1, 2, 2])

接下来建立id与分类字符串之间的对应关系。

label_map = {0: 'small', 1: 'medium', 2: 'large', 3: 'huge'}
apple_categorical = np.array([label_map[x] for x in apple_categorical_idx])
apple_categorical

输出:

array(['small', 'medium', 'large', 'huge', 'medium', 'large', 'large'],
      dtype='

我们需要把apple_categorical改变一下形状,以便于合并。

apple_categorical.reshape(-1,1)

输出

array([['small'],
       ['medium'],
       ['large'],
       ['huge'],
       ['medium'],
       ['large'],
       ['large']], dtype='

最终执行合并操作。

np.concatenate((data, apple_categorical.reshape(-1,1)) ,axis=1)

输出:

array([['apple', '50', 'small'],
       ['apple', '150', 'medium'],
       ['apple', '200', 'large'],
       ['apple', '350', 'huge'],
       ['apple', '150', 'medium'],
       ['apple', '220', 'large'],
       ['apple', '260', 'large']], dtype='

完活!~ 步骤有点多,需要你自己敲一遍代码,再好好观察观察。

你可能感兴趣的:(numpy必知必会-第八天)