python数据分析基础——numpy和matplotlib
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的更多相关文章
- Python数据分析基础——Numpy tutorial
参考link https://docs.scipy.org/doc/numpy-dev/user/quickstart.html 基础 Numpy主要用于处理多维数组,数组中元素通常是数字,索引值为 ...
- python数据分析之numpy、matplotlib的使用
5.3 Python的科学计算包 - Numpy numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算.这个库的前身是1995年就开始开发的一 ...
- Python——数据分析,Numpy,Pandas,matplotlib
由于图片内容太多,请拖动至新标签页再查看
- Numpy使用大全(python矩阵相关运算大全)-Python数据分析基础2
//2019.07.10python数据分析基础——numpy(数据结构基础) import numpy as np: 1.python数据分析主要的功能实现模块包含以下六个方面:(1)numpy—— ...
- Python数据分析基础教程
Python数据分析基础教程(第2版)(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1_FsReTBCaL_PzKhM0o6l0g 提取码:nkhw 复制这段内容后 ...
- 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇
始终无法有效把word排版好的粘贴过来,排版更佳版本请见知乎文章: https://zhuanlan.zhihu.com/p/24309547 实在搞不定博客园的排版,排版更佳的版本在: 给深度学习入 ...
- Python数据分析基础PDF
Python数据分析基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1ImzS7Sy8TLlTshxcB8RhdA 提取码:6xeu 复制这段内容后打开百度网盘手 ...
- python数据分析基础
---恢复内容开始--- Python数据分析基础(1) //2019.07.09python数据分析基础总结1.python数据分析主要使用IDE是Pycharm和Anaconda,最为常用和方便的 ...
- Python数据分析(二): Numpy技巧 (1/4)
In [1]: import numpy numpy.__version__ Out[1]: '1.13.1' In [2]: import numpy as np
随机推荐
- svn提示out of date
你需要先update一下,应该会有一个冲突标志,你查看一下历史日志,找到是谁在你之前进行了提交,和他商议一下如何合并你们两个人的修改,然后在你本地处理后,标记“冲突已解决”,最后再次commit
- iPhone开发秘籍(第2版)--具体书签版
http://download.csdn.net/download/fksec/4872499
- 关于Unity的开发模式
Unity是组件化的开发模式,总结起来就是节点与组件.节点就像人,组件就像工具,人拿不同的工具,就变成不同的角色,有不同的作用.人+医学常识=医生. 1.每个空节点创建后,刚开始只有一个Transfo ...
- 【BZOJ】1633: [Usaco2007 Feb]The Cow Lexicon 牛的词典(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1633 一开始也想到了状态f[i]表示i以后的字符串最少删的数 然后想到的转移是 f[i]=min{f ...
- 百家搜索:在站点中加入Google、百度等搜索引擎
来源:http://www.ido321.com/1143.html 看到一些站点上加入了各种搜索引擎. 如Google.百度.360.有道等.就有点好奇.这个怎么实现?研究了一各个搜索引擎怎么传送k ...
- mysql_ado的demo
winform程序 http://pan.baidu.com/s/1nvxm5br
- windows环境通过cmd命令到ftp上下载文件到linux服务器
转自:http://jingyan.baidu.com/article/6525d4b1300912ac7d2e941b.html
- 《jquery权威指南2》学习笔记------基础函数
Math.floor(Math.random() * 7 + 1); Math.random() 生成0和1之间的随机小数Math.random() * 7 生成0和7之间的随机小数Math.rand ...
- 从远程(包括ftp,http等协议)地址获取文件流信息
URL url = new URL("ftp://172.18.251.155:8010/recordsImg/2019-01-28/000008_1548649813267.jpg&quo ...
- poj_1125 Floyd最短路
题目大意 N个股票经纪人,每个股票经纪人都会将得到的消息传播给另外一些股票经纪人,传播的速度均不固定,且从A传到B的速度和B传到A的速度不一定相等.给定一个消息,并不一定能够传遍所有的股票经纪人,因为 ...