numpy必知必会-第八天

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

皮尔逊相关系数计算公式如下:
r_{pb} = \frac{\sum (x - m_x) (y - m_y)} {\sqrt{\sum (x - m_x)^2 \sum (y - m_y)^2}}

例如:

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='<U6'), array([3, 2]))

输出意味着,一共有两种水果,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='<U6')

解决办法:
首先进行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='<U6')

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

apple_categorical.reshape(-1,1)

输出

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

最终执行合并操作。

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='<U6')

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容