python Numpy 的基础用法以及 matplotlib 基础图形绘制
1. 环境搭建
1.1 Anaconda
anaconda 集成了数据分析,科学计算相关的所有常用安装包,比如Numoy、Scipy、Matplotlib、Ipython 等等。
1.2 pycharm
非常好用的python集成开发环境。
2. Numpy是什么
Numpy 是 python 的开源的数值计算扩展
可用来存储和处理大型矩阵,比python自身数据结构高效
Numpy 将python 变成一种免费的强大的Matlab系统
2.1 Numpy的核心数据对象ndarray
相当于一个矩阵,存储了我们所需要的一些数据
2.1.1 创建ndarray数据对象的三种方式
从python的基础数据对象转化
import numpy as nplist1 = [1,2,3]x1 = np.array(list1)print(x1) -----> array([1,2,3]) # numpyarray 对象
通过Numpy内生的函数生成
x1 = np.arange(3)print(x1) -----> array([0,1,2])
从硬盘文件读取数据
x1 = np.loadtxt('文件名',delimiter='已什么符号做分割',skiprows=跳过第几行,usecols=(用到第几列,列数 ,列数.. ),unpack=False) # 返回数组# 其他参数 import matplotlib.dates as mdatesconverters = {0:mdates.strpdate2num('%m/%d/%Y')} # 转换日期格式的数据 23/2/ 0是列数
2.1.2 基本操作
c = np.arange(11)c+c# 矩阵加法c-c# 矩阵减法 等等# 索引和切片c[0] ----> 0c[3] ----> 3c[-1] ----> 10c[0:5] ----> array([0,1,2,3,4]) # 等等python list 支持的切片语法# numpy 中经常用到的统计函数min max medain mean (均值) variance (方差) sort# numpy 中调用一个函数np.func(x) x.func()# 列:c = np.random.randint(1,100,10) # 随机生成10个1-100的整数 np.max(c) np.mean(c) 或 c.max() c.min()两者区别在于 使用第一种 会生成一个新的序列 使用第二种 c 变化 并不产生一个新的序列
3. 0 matplotlib 的使用:
3.1 : 散点图
顾名思义就是由一些散乱的点组成的图表,这些点在哪个位置,是由其X值和Y值确定的。所以 也叫 做XY散点图。
散点图最大作用就是验求两个变量的相关性
相关性: 正相关 、负相关、 不相关
正相关:散点图有明显向右上的趋势
负相关:散点图有明显的右下趋势
不相关 : 散点图没有明显的趋势
实列 :股票价格涨幅
# 散点图实例 列如 身高和体重的散点图import matplotlib.pyplot as pltheight = [161,170,183,190,156]weight = [50,80,65,73,80]# height 为 x 轴坐标 weight 为 y 轴坐标plt.scatter(height,weight)plt.show()# 外观调整#颜色c#点大小s#透明度alpha# 点形状 marker plt.scatter(height,weight,s=100,c='r',marker='<',aloha=0.5) # 具体参数使用去官网查看
3.2 : 折线图
折线图和带数据标记的折线图 折线图用于显示随时间或有序类别而变化的趋势,可能显示数据点以表示单个数据值,也可能不显示这些数据点。在有很多数据点并且它们的显示顺序很重要时,折线图尤其有用。如果有很多类别或者数值是近似的,则应该使用不带数据标记的折线图。
import matplotlib.pyplot as plt# 从 -10 到 10 平均分成100份x = np.linspace(-10,10,100)# linspace 是numpy里的一个函数 用于生成一组等区间的数值y = x**2plt.plot(x,y)plt.show()# 如果是时间格式需要使用专门提供的函数plt.plot_date(date,open,'-') # 自动识别date转换为相应的时间# 外观调整# 颜色color='red'# 点形状 marker='0'# 线性linestyle='-' # 虚线 ’--’#多条直线的话多plt生成多条
3.3 条形图
条形统计图是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条,然后把这些直条按一定的顺序排列起来。从条形统计图中很容易看出各种数量的多少。条形统计图一般简称条形图,也叫长条图或直条图。
import numpy as npimport matplotlib.pyplot as plt# 垂直条形图N = 5y = [20,10,30,25,15]index = np.arange(N)p1 = plt.bar(left=index,height=y)plt.show()# 外观调整color='red'width=0.8 # 宽度默认为0.8# 水平条形图1. 在垂直条形图加上一个参数:orientation='horizontal' # 条形图的方向# 当把垂直条形图变为水平之后,他的left不在是横坐标了,他的横坐标变成了他的纵坐标left=0,bottom=index2. p1 = plt.barh(left=0,bottom=index,width=y)#并列条形图index = np.arange(5)sales_BJ = [52,55,63,53]sales_SH = [44,66,55,41]bar_width = 0.3 plt.bar(index,sales_BJ,bar_width,color='b')plt.bar(index+bar_with,sales_SH,bar_width,color='r') # SH 横坐标宽度比 BJ 多一个bar_widthplt.show()# 层叠图的话是两个或多个横坐标一样,只是多出的会堆积在前一个之上属性加上bottom=sales_BJ
3.4 直方图
直方图显示图像数据时会以左暗又亮的分布曲线形式呈现出来,而不是显示原图像数据,并且可以通过算法来对图像进行按比例缩小,且具有图像平移、旋转、缩放不变性等众多优点。直方图在进行图像计算处理时代价较小,所以经常用于图像处理!
import numpy as npimport matplotlib.pyplot as pltmu = 100 # 均值100sigma = 20 # 标准差x = mu + sigma * np.random.randn(2000) # 随机生成一个大小为2000的数组plt.hist(x,bins=10,color='red',normed=True) # bins 总共有几个直方 normed 是否对数据进行标准化plt.show()# 双变量直方图x = random.randn(1000) +2 # x的中心在2y = random.randn(1000) +3 # y的中心在3plt.hist2d(x,y,bins=40)plt.show()
双变量直方图 探索双变量的联合分布很有用
3.5 饼状图:
饼状图就是在一个圆形上以圆心为轴切割,表示不同的内容在整体中所占比例。看上去像一张饼。
打开我的电脑,在盘符上右键,属性,看到的表示可用空间和已用空间的图形就是一个简单的饼状图
import matplotlib.pyplot as pltlabels = 'A','B','C','D'fracs = [15,30,45,10]explode = [0,0.05,0,0]plt.axes(aspect=1)plt.pie(x=fracs,labels=labels,autopct='%.of%%',explode=explode,shadow=True) # autopct 将每一块的比例用python格式化字符串显 explode 突出显示 shadow 加阴影示出来plt.show()
3.6 箱型图
须图又称为箱形图,其绘制须使用常用的统计量,最适宜提供有关数据的位置和分散的参考,尤其在不同的母体数据时更可表现其差异,常用的统计量 :平均数、中位数、百分位数、四分位数、全距、四分位距、变异数和标准差。
import numpy as npimport matplotlib.pyplot as pltnp.random.seed(100)data = np.random.norma(size=1000,loc=0,scale=1)plt.boxplot(data,sym='0',whis=1.5) # sym 异常值点的形状 虚线的长度 默认1.5plt.show()# 同时画几组数据‘import numpy as npimport matplotlib.pyplot as pltnp.random.seed(100)data = np.random.norma(size=(1000,4),loc=0,scale=1) # 4组数据,每组有1000条数据lables=['A','B','C','D']plt.boxplot(data,lables=lables)plt.show()
sym=‘0’,whis=1.5) # sym 异常值点的形状 虚线的长度 默认1.5
plt.show()
同时画几组数据‘
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(100)
data = np.random.norma(size=(1000,4),loc=0,scale=1) # 4组数据,每组有1000条数据
lables=[‘A’,‘B’,‘C’,‘D’]
plt.boxplot(data,lables=lables)
plt.show()