anaconda 集成了数据分析,科学计算相关的所有常用安装包,比如Numoy、Scipy、Matplotlib、Ipython 等等。
非常好用的python集成开发环境。
Numpy 是 python 的开源的数值计算扩展
可用来存储和处理大型矩阵,比python自身数据结构高效
Numpy 将python 变成一种免费的强大的Matlab系统
相当于一个矩阵,存储了我们所需要的一些数据
从python的基础数据对象转化
import numpy as np
list1 = [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 mdates
converters = {0:mdates.strpdate2num('%m/%d/%Y')} # 转换日期格式的数据 23/2/2021 0是列数
c = np.arange(11)
c+c # 矩阵加法
c-c # 矩阵减法 等等
# 索引和切片
c[0] ----> 0
c[3] ----> 3
c[-1] ----> 10
c[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 变化 并不产生一个新的序列
顾名思义就是由一些散乱的点组成的图表,这些点在哪个位置,是由其X值和Y值确定的。所以 也叫 做XY散点图。
散点图最大作用就是验求两个变量的相关性
相关性: 正相关 、负相关、 不相关
正相关:散点图有明显向右上的趋势
负相关:散点图有明显的右下趋势
不相关 : 散点图没有明显的趋势
实列 :股票价格涨幅
# 散点图实例 列如 身高和体重的散点图
import matplotlib.pyplot as plt
height = [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) # 具体参数使用去官网查看
折线图和带数据标记的折线图 折线图用于显示随时间或有序类别而变化的趋势,可能显示数据点以表示单个数据值,也可能不显示这些数据点。在有很多数据点并且它们的显示顺序很重要时,折线图尤其有用。如果有很多类别或者数值是近似的,则应该使用不带数据标记的折线图。
import matplotlib.pyplot as plt
# 从 -10 到 10 平均分成100份
x = np.linspace(-10,10,100) # linspace 是numpy里的一个函数 用于生成一组等区间的数值
y = x**2
plt.plot(x,y)
plt.show()
# 如果是时间格式需要使用专门提供的函数
plt.plot_date(date,open,'-') # 自动识别date转换为相应的时间
# 外观调整
# 颜色 color='red'
# 点形状 marker='0'
# 线性 linestyle='-' # 虚线 ’--’
#多条直线的话多plt生成多条
条形统计图是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条,然后把这些直条按一定的顺序排列起来。从条形统计图中很容易看出各种数量的多少。条形统计图一般简称条形图,也叫长条图或直条图。
import numpy as np
import matplotlib.pyplot as plt
# 垂直条形图
N = 5
y = [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=index
2. 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_width
plt.show()
# 层叠图的话是两个或多个横坐标一样,只是多出的会堆积在前一个之上
属性加上bottom=sales_BJ
直方图显示图像数据时会以左暗又亮的分布曲线形式呈现出来,而不是显示原图像数据,并且可以通过算法来对图像进行按比例缩小,且具有图像平移、旋转、缩放不变性等众多优点。直方图在进行图像计算处理时代价较小,所以经常用于图像处理!
import numpy as np
import matplotlib.pyplot as plt
mu = 100 # 均值100
sigma = 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的中心在2
y = random.randn(1000) +3 # y的中心在3
plt.hist2d(x,y,bins=40)
plt.show()
双变量直方图 探索双变量的联合分布很有用
饼状图就是在一个圆形上以圆心为轴切割,表示不同的内容在整体中所占比例。看上去像一张饼。
打开我的电脑,在盘符上右键,属性,看到的表示可用空间和已用空间的图形就是一个简单的饼状图
import matplotlib.pyplot as plt
labels = '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()
须图又称为箱形图,其绘制须使用常用的统计量,最适宜提供有关数据的位置和分散的参考,尤其在不同的母体数据时更可表现其差异,常用的统计量 :平均数、中位数、百分位数、四分位数、全距、四分位距、变异数和标准差。
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(100)
data = np.random.norma(size=1000,loc=0,scale=1)
plt.boxplot(data,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()
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()