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

matplotlib库

基本用法

import numpy as np
import matplotlib.pyplot as plt

# 年份
year = [1950,1970,1990,2010]
# 全球总人口(单位:10亿)
pop = [2.519,3.692,5.263,6.972]

# 画折线图
plt.plot(year,pop)  # year:x轴,pop:y轴
# 显示出折线图
plt.show()

画散点图

plt.scatter(year,pop)
plt.show()

画直方图

# 数据样本为1000个身高的正态模拟数据
values = np.round(np.random.normal(1.75,0.20,1000),2)
# bins表示直方图划分的区间数
plt.hist(values,bins = 10)
plt.show()

图表个性化

pop = [1.0,1.262,1.650] + pop
year = [1800,1850,1900] + year

# 设置图表标题
plt.title('World Polulation')
# x,y轴名称
plt.xlabel('Year')
plt.ylabel('Polulation')

# y轴刻度,第二个参数为显示的刻度
plt.yticks([0,2,4,6,8,10],['0','2B','4B','6B','8B','10B'])

# 填充曲线下方区域
plt.fill_between(year,pop,0,color = 'green')

plt.show()

解决绘图时中文显示为方块的问题

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
plt.rcParams['axes.unicode-minus'] = False  # 解决负号显示为方块的问题

原文链接:

https://www.cnblogs.com/jiayongji/p/7354213.html

-END-


识别图中二维码,领取python全套视频资料

python数据分析基础——numpy和matplotlib的更多相关文章

  1. Python数据分析基础——Numpy tutorial

    参考link  https://docs.scipy.org/doc/numpy-dev/user/quickstart.html 基础 Numpy主要用于处理多维数组,数组中元素通常是数字,索引值为 ...

  2. python数据分析之numpy、matplotlib的使用

    5.3 Python的科学计算包 - Numpy numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算.这个库的前身是1995年就开始开发的一 ...

  3. Python——数据分析,Numpy,Pandas,matplotlib

    由于图片内容太多,请拖动至新标签页再查看

  4. Numpy使用大全(python矩阵相关运算大全)-Python数据分析基础2

    //2019.07.10python数据分析基础——numpy(数据结构基础) import numpy as np: 1.python数据分析主要的功能实现模块包含以下六个方面:(1)numpy—— ...

  5. Python数据分析基础教程

    Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...

  6. 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇

    始终无法有效把word排版好的粘贴过来,排版更佳版本请见知乎文章: https://zhuanlan.zhihu.com/p/24309547 实在搞不定博客园的排版,排版更佳的版本在: 给深度学习入 ...

  7. Python数据分析基础PDF

    Python数据分析基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1ImzS7Sy8TLlTshxcB8RhdA 提取码:6xeu 复制这段内容后打开百度网盘手 ...

  8. python数据分析基础

    ---恢复内容开始--- Python数据分析基础(1) //2019.07.09python数据分析基础总结1.python数据分析主要使用IDE是Pycharm和Anaconda,最为常用和方便的 ...

  9. Python数据分析(二): Numpy技巧 (1/4)

    In [1]: import numpy numpy.__version__ Out[1]: '1.13.1' In [2]: import numpy as np  

随机推荐

  1. 未能加载文件或程序集“Autofac, Version=3.4.0.0,

    遇到这个错误的时候:如下图 未能加载文件或程序集“Autofac, Version=3.4.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da” ...

  2. Linux 新增一个用户命令 adduser

    这几天新增用户老是会用 useradd , 这条命令比较复杂,记录 adduser 这条超级简单的命令. Full name 最后和用户差不多,不然登录的时候不好辨别 附: 新增用户无法 sudo 请 ...

  3. Linux kernel 之 kobject

    总听有人说 Linux kernel 拥有一团无比巨大看似杂乱无章其实有迹可循的链表,今天参考一下其他大牛的相关资料记录一下. kset 结构体 151 /** 152 * struct kset - ...

  4. 用c++封装linux系统调用

    #include <pthread.h> #include <cstdlib> #include <ctime> #include <iostream> ...

  5. TensorFlow基础笔记(7) 图像风格化效果与性能优化进展

    参考 http://hacker.duanshishi.com/?p=1693http://blog.csdn.net/hungryof/article/details/53981959http:// ...

  6. 【BZOJ】1500: [NOI2005]维修数列(splay+变态题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1500 模板不打熟你确定考场上调试得出来? 首先有非常多的坑点...我遇到的第一个就是,如何pushu ...

  7. shell命令技巧——文本去重并保持原有顺序

    简单来说,这个技巧相应的是例如以下一种场景 假设有文本例如以下 cccc aaaa bbbb dddd bbbb cccc aaaa 如今须要对它进行去重处理.这个非常easy,sort -u就能够搞 ...

  8. 登陆Oracle11g的企业管理器

    本地:https://localhost:1158/em/ 如果远程:那么把localhost换成服务器IP

  9. 【mysql-python】安装+基本使用

    安装:从SourceForge.net上下载最新的MySQLdb,http://sourceforge.net/projects/mysql-python/ 运行exe文件 使用 From:http: ...

  10. hdu 4739(状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4739 思路:状态压缩. #include<iostream> #include<cs ...