python数据分析基础——初识numpy库

numpy库是python的一个著名的科学计算库,本文是一个quickstart。

引入:计算BMI

BMI = 体重(kg)/身高(m)^2

假如有如下几组体重和身高数据,让求每组数据的BMI值:

weight = [65.4,59.2,63.6,88.4,68.7]
height = [1.73,1.68,1.71,1.89,1.79]
print weight / height ** 2

执行上面代码,报错:TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

这是因为普通的除法是元素级的而非向量级的,并不能应用到一组数据上。

解决方案:使用numpy.ndarray数据结构(N维数组),运算是面向矩阵的:

import numpy as np
np_weight = np.array(weight)
np_height = np.array(height)
print type(np_weight)
print type(np_height)
<type 'numpy.ndarray'>
<type 'numpy.ndarray'>
print np_weight
print np_height
[ 65.4  59.2  63.6  88.4  68.7]
[ 1.73  1.68  1.71  1.89  1.79]

注:和python的列表不同的是,numpy.ndarray数据结构的元素之间是没有逗号分隔的。

np_bmi = np_weight / np_height ** 2
print type(np_bmi)
print np_bmi
<type 'numpy.ndarray'>
[ 21.85171573  20.97505669  21.75028214  24.7473475   21.44127836]

numpy数组:numpy.ndarray

numpy.ndarray是numpy最基本的数据结构,即N维数组,且数组中的元素需要是同一种类型,如果不是,则会自动转换成同一种类型,如:

print np.array([1.0,'hi',True])
['1.0' 'hi' 'True']

可以看到都被转成了字符串类型。

不同数据类型的不同行为

# 普通的python列表
py_list = [1,2,3]
# numpy数组
np_array = np.array(py_list)
print py_list + py_list  # 这是列表的拼接
[1, 2, 3, 1, 2, 3]
print np_array + np_array  # 这是每两个对应元素之间的运算
[2 4 6]

子集

print np_bmi[0]
21.8517157272
print np_bmi > 23
[False False False  True False]
print np_bmi[np_bmi > 23]
[ 24.7473475]

二维numpy数组

二维numpy数组是以list作为元素的数组,比如:

np_2d = np.array([height,weight])
print type(np_2d)
<type 'numpy.ndarray'>
print np_2d
[[  1.73   1.68   1.71   1.89   1.79]
 [ 65.4   59.2   63.6   88.4   68.7 ]]
print np_2d.shape
(2, 5)

通过shape属性值可以看出,np_2d是一个2行5列的二维数组。

single type原则

print np.array([[1,2],[3,'4']])
[['1' '2']
 ['3' '4']]

二维numpy数组的子集

np_2d = np.array([height,weight])
print np_2d
[[  1.73   1.68   1.71   1.89   1.79]
 [ 65.4   59.2   63.6   88.4   68.7 ]]
print np_2d[0][2]
1.71
print np_2d[0,2]
1.71

还可以在两个轴向上分别切片:

print np_2d[:,1:3]
[[  1.68   1.71]
 [ 59.2   63.6 ]]

选取第1行:

print np_2d[1,:]
[ 65.4  59.2  63.6  88.4  68.7]

求对应的BMI值:

print np_2d[1,:] / np_2d[0,:] ** 2
[ 21.85171573  20.97505669  21.75028214  24.7473475   21.44127836]

应用

用numpy生成呈正态分布的随机测试数据,并求各项基本的统计数据。

比如生成10000条数据集,记录的是某个镇上所有居民的身高(m)、体重(kg)数据,所用到的函数:

np.random.normal(均值,标准差,取样数)

height = np.random.normal(1.75,0.20,10000)
weight = np.random.normal(60.32,15,10000)

下面将若干个(这里是2个)一维数组拼成一个二维数组(有点像zip()函数的作用):

np_info = np.column_stack((height,weight))
print np_info
[[  1.88474198  76.24957048]
 [  1.85353302  64.62674488]
 [  1.74999035  67.5831439 ]
 ..., 
 [  1.78187257  50.11001273]
 [  1.90415778  50.65985964]
 [  1.51573081  41.00493358]]

求np_info身高平均值:

print np.mean(np_info[:,0])
1.75460102053

求身高的中位数:

print np.median(np_info[:,0])
1.75385473036

求身高和体重的相关系数:

print np.corrcoef(np_info[:,0],np_info[:,1])
[[  1.00000000e+00  -1.50825116e-04]
 [ -1.50825116e-04   1.00000000e+00]]

求身高的标准差:

print np.std(np_info[:,0])
0.201152169706

排序(不会影响源数组):

print np.sort(np_info[0:10,0])
[ 1.46053123  1.59268772  1.74939538  1.74999035  1.78229515  1.85353302
  1.88474198  1.99755291  2.12384833  2.3727505 ]

求和:

print np.sum(np_info[0:10,0])
18.5673265584

思维导图:numpy基础知识

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

推荐阅读更多精彩内容