金融数据挖掘—科学计算语言—基础篇4
一、Python基础
二、Numpy科学计算包
三、Pandas数据分析包
四、图形绘制
(一)Matplotlib图形绘制
练习1.
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(10,6)) #设置画布大小,figsize以元组形式
plt.rcParams["font.family"]="SimHei" #设置黑体,显示中文标签
plt.rcParams["font.size"]=20 #设置字体大小
x=np.arange(100,201) #左闭右开
y=2*x+1
plt.plot(x,y)
plt.title("y=2x+1图形")
plt.legend(["y"]) #添加图的示例
练习2.
plt.figure(figsize=(10,6))
plt.scatter(np.random.rand(20)*100,np.random.rand(20)*100,c="r",s=100,alpha=0.8) #c代表颜色,s代表大小,alpha代表透明度
plt.scatter(np.random.rand(20)*100,np.random.rand(20)*100,c="g",s=200,alpha=0.5)
plt.scatter(np.random.rand(20)*100,np.random.rand(20)*100,c="b",s=300,alpha=0.2)
plt.savefig("散点图.png",dpi=300) #保存图片,dpi设置像素
练习3.
plt.figure(figsize=(10,6))
L=["北京","上海","香港","深圳","广州"] #添加Lable标签
y2016=[15600,12700,11300,4270,3620]
y2017=[17400,14800,12000,5200,4020]
plt.bar(np.arange(5),y2016,color="blue",width=0.5,alpha=0.8) #x用索引来代替
plt.bar(np.arange(5)+0.5,y2017,tick_label=L,color="green",width=0.5,alpha=0.8) #+0.5进行错位,防止覆盖
plt.xlabel("城市前5名")
plt.ylabel("家庭数")
plt.ylim([2500,20000]) #设置纵轴范围
plt.legend(["2016","2017"]) #添加图的示例
plt.title("千万资产家庭数量条形图") #设置标题
plt.savefig("资产家庭数条形图.png",dpi=300) #保存图片,dpi设置像素
# 为每个柱状图添加标签
for i,j in enumerate(y2016): #y2016是一个列表
print(i,j) #输出,i为索引,j为数值
plt.text(i-0.25,j+200,j) #添加文本,通过i,j确定位置
for i ,j in enumerate(y2017):
plt.text(i+0.25,j+200,j)
练习4.
plt.figure(figsize=(10,6)) #设置绘图画布大小
plt.rcParams["font.family"]="SimHei" #设置黑体,显示中文标签
plt.rcParams["font.size"]=20 #设置字体大小
plt.axes(aspect="equal") #设置轴,使饼图变圆
plt.xlim(0,4) #x轴尺寸
plt.ylim(0,4) #y轴尺寸
x=np.array([25.15,37.24,33.36,3.68,0.57])*0.01
e=[0,0,0,0.1,0]
L=["高中","大专","本科","硕士","其他"]
plt.pie(x,explode=e,labels=L,
autopct="%.1f%%",
pctdistance=0.5,
labeldistance=1,
radius=1.5,
wedgeprops={"linewidth":1.5,"edgecolor":"blue"},
center=(1.8,1.8),
frame=1) #explod为缝隙,labels为标签
plt.legend(loc="upper right",fontsize=10) #设置图例,loc放置位置
plt.title("信用违约客户分析饼图")
plt.savefig("信用违约客户分析饼图.jpg",dpi=300)
练习5.
from mpl_toolkits.mplot3d import Axes3D
plt.figure(figsize=(10,6)) #设置画布大小
ax=plt.subplot(111,projection="3d") #创建三维绘图工程
data=np.random.randint(0,255,(3,6,6)) #随机生成0到255,3层6行6列
x,y,z=data[0],data[1],data[2] #赋值
ax.scatter(x[:2],y[:2],z[:2],c="y",s=100)
ax.scatter(x[2:4],y[2:4],z[2:4],c="m",marker="*",s=100)
ax.scatter(x[4:6],y[4:6],z[4:6],c="k",marker="v",s=100)
ax.set_xlabel("X") #标识x轴名称
ax.set_ylabel("Y")
ax.set_zlabel("Z")
plt.savefig("三维散点图.png",dpi=300)
(二)Seaborn图形绘制
Seaborn是一个基于Matplotlib的Python数据可视化库,可视之为Matplotlib的一层外套。
Seaborn简化了直接使用Matplotlib所需要的繁琐和复杂的参数设置,有助于用户快捷地创建各类复杂图形。
Seaborn的优点主要体现在:仅需进行少量参数设置就能创建赏心悦目的图形;容易创建具有统计意义的图形;能够兼容DataFrame等多种数据类型。
练习1.使用seaborn叠加绘制条形图和折线图
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
plt.figure(figsize=(10,6))
x=list(range(1,20,2)) #横轴范围,步长为2
y_bar=[3,4,6,6,9,10,9,11,7,8] #柱状图高度
y_line=[2,3,5,5,8,9,8,10,6,7] #折线图高度
sns.set(style="whitegrid",font="SimHei") #设置风格、字体
plt.bar(x,y_bar)
plt.plot(x,y_line,"-o",color="y")
练习2.
from scipy import stats
plt.rcParams["axes.unicode_minus"]=False #负号显示
plt.rcParams["font.family"]="SimHei" #中文显示
plt.figure(figsize=(10,6)) #设置画布大小
mean=[0,1] #设置均值
cov=np.mat([[1,0.5],[0.5,1]]) #设置协方差
data=np.random.multivariate_normal(mean,cov,1000) #给DataFrame增加数据,均值、协方差、行数(2列)
df=pd.DataFrame(data,columns=["x","y"]) #以DataFrame形式存储数据
g=sns.jointplot(x="x",y="y",data=df,kind="hex",color="c") #x,y是DataFrame的columns的列标签,数据为DataFrame形式,hex是HexBin图,是直方图的二维模拟
g.annotate(stats.pearsonr,fontsize=15) #annotate()函数作用是添加注释,添加皮尔逊相关系数
g.set_axis_labels("X轴","Y轴",fontsize=15)
plt.savefig("seaborn联合直方图.png",dpi=300)
#构造二维矩阵,mean为均值向量,第一维均值为0,第二维均值为1,cov是协方差
# mean,cov=[0,1],[(1,0.5),(0.5,1)]
# data=np.random.multivariate_normal(mean,cov,1000) #生成多元正态分布N*2数组
# df=pd.DataFrame(data,columns=["X","Y"]) #以DataFrame形式存储数据
# g=sns.jointplot(x="X",y="Y",data=df,kind="hex",color="c")
练习3.
x1=np.arange(100) #设定x范围为0到99
y1=2*x1+1
#给y增加一个扰动
var=np.random.normal(0,50,100) #生成高斯随机分布随机数,均值为0,方差50,100个
y1=y1+var
df=pd.DataFrame({"CorX":x1,"CorY":y1}) #以DataFrame形式存储数据,通过字典键、值
g=sns.jointplot(x="CorX",y="CorY",data=df,kind="reg",color="b") #reg用来拟合回归直线
g.annotate(stats.pearsonr,fontsize=12) #添加相关性
g.set_axis_labels("X轴","Y轴",fontsize=15) #重置x轴y轴名称
plt.savefig("seaborn回归分析.png",dpi=300)
使用sklearn进行上面(练习3)的二维数据之间的回归分析
from sklearn.linear_model import LinearRegression #linear_model线性模型,LinearRegression线性回归
reg=LinearRegression()
X=df[["CorX"]] #X是二维的
Y=df["CorY"]
reg.fit(X,Y)
plt.scatter(X,Y)
plt.plot(X,reg.predict(X),"r")
练习4.
plt.rcParams["font.family"]="SimHei" #设置黑体,显示中文标签
reg=LinearRegression()
diameter=[[6],[8],[10],[14],[18]]
price=[7,9,13,17.5,18]
reg.fit(diameter,price)
plt.plot(diameter,price,"or")
plt.plot([[0],[12],[20],[40],[2]],reg.predict([[0],[12],[20],[40],[2]]),"b")
plt.legend(["原始数据点","回归"])
plt.savefig("sklearn一元回归.png",dpi=300)