import matplotlib.pyplot as plt
import numpy as np
#没有以下两句,就不会显示中文,识别不出来
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y=np.array([886,2335,5710,6482,6120,1605,3813,4428,4361])
plt.plot(x,y,color='k',linestyle='dashdot',linewidth=1,marker='o',markersize=5,label='1-9月注册用户数') #绘图
plt.title('1-9月用户注册量',loc='center')#设置标题,标题名及标题的位置
plt.grid(True)#设置网格线
plt.legend()#设置图例,调用显示出plot中的lable值
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='bottom',fontsize=10)
#添加数据标签,数据标签的位置,文字大小,注意第二个b表示显示y值
plt.savefig(r'D:\Users\ctrip\Desktop\plot.jpg') #保存图表至桌面
#柱状图
#plt.bar(x,y,height,width=0.8,bottom=None,align='center',color,edgecolor)
#height:表示每根柱子的高度
#width:表示每根柱子的宽度,可以一样 也可以不一样
#bottom:表示每根柱子的底部位置,每根柱子的底部位置可以都一样,也可以不同
#align:表示柱子的位置与x值的关系,有center,edge两个参数可选;
#color:柱子颜色
#edgecolor:柱子边缘的颜色
import matplotlib.pyplot as plt
import numpy as np
#没有以下两句,就不会显示中文,识别不出来
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(1,1,1)
x=np.array(['东区','西区','南区','北区'])
y=np.array([8566,6482,5335,7310])
plt.bar(x,y,width=0.5,align='center',label='任务量555',color='m')#柱状图
plt.title('全国各分区任务量',loc='center')#标题
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#数据标签
plt.xlabel('分区')#轴名称
plt.ylabel('任务量222')
plt.legend()#图例
plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar.jpg')#保存图片
#制作簇状条形图:注意第二个y的x在做条形图以及添加数据标签时,都需要增加1个y的宽度
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(1,1,1)
x=np.array([1,2,3,4])
y1=np.array([8566,5335,7310,6482])
y2=np.array([4283,2667,3655,3241])
plt.bar(x,y1,width=0.3,label='任务量5555') #y1正常
plt.bar(x+0.3,y2,width=0.3,label='完成量5555')#y2的x在原来基础上+y1的宽度
plt.title("完成情况",loc='center')
plt.xlabel('区域')
plt.ylabel('任务情况')
for a,b in zip(x,y1):
plt.text(a,b,b,ha='center',va='bottom',fontsize=12)
for a,b in zip(x+0.3,y2):
plt.text(a,b,b,ha='center',va='bottom',fontsize=12) #y2的x在原来基础上+y1的宽度
plt.xticks(x+0.15,['东区','西区','南区','北区']) #重新编辑x轴的刻度,注意每相隔了3个y的宽度
plt.grid(False)
plt.legend()
plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar2.jpg')
#制作堆积柱形图
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(1,1,1)
x=np.array(['东区','西区','南区','北区'])
y1=np.array(['8856,6584,5335,7310'])
y2=np.array(['4283,3241,2667,3555'])
plt.bar(x,y1,width=0.5,label='任务量',align="center")
plt.bar(x,y2,width=0.5,label='完成量',bottom=y1,align="center")
for a,b in zip(x,y1):
plt.text(a,b,b,ha='center',va='bottom',fontsize=13)
for a,b in zip(x,y2):
plt.text(a,b,b,ha='center',va='bottom',fontsize=13)
plt.title("完成情况",loc='center')
plt.xlabel("区域")
plt.ylabel("任务情况")
plt.grid(False)
plt.legend(loc='upper center',ncol=2)
plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar堆积图.jpg')
#堆积图
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = [1, 2, 3, 4, 5]
y = [6, 10, 4, 5, 1]
y1 = [2, 6, 3, 8, 5]
plt.bar(x, y, align="center", color="#66c2a5", tick_label=["A", "B", "C", "D", "E"], label="班级A")
plt.bar(x, y1, align="center", bottom=y, color="#8da0cb", label="班级B")
plt.xlabel("测试难度")
plt.ylabel("试卷份数")
plt.legend()
plt.show()
#制作堆积柱形图
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(1,1,1)
x=np.array(['东区','西区','南区','北区'])
y3=np.array([8856,6584,5335,7310])
y4=np.array([4283,3241,2667,3555])
plt.bar(x,y3,width=0.5,label='任务量',align="center")
plt.bar(x,y4,width=0.5,label='完成量',bottom=y3,align="center") #堆积图增加bottom=y的代码
for a,b in zip(x,y3):
plt.text(a,b,b,ha='center',va='bottom',fontsize=13) #ha可选(center.left,right)
for a,b in zip(x,y4):
plt.text(a,b,b,ha='center',va='top',fontsize=13) #va可选(center,top,bottom)
plt.title("完成情况",loc='center')
plt.xlabel("区域")
plt.ylabel("任务情况")
plt.grid(False)
plt.legend(loc='upper center',ncol=2) #legend图例位置有很多可以选,可以是“best”
plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar堆积图.jpg')
#绘制条形图
#plt.barh(y,width,height,align,color,edgecolor)
import matplotlib.pyplot as plt
import numpy as np
x=np.array(['东区','西区','南区','北区'])
y=np.array([8856,6584,5335,7310])
plt.barh(x,width=y,height=0.5,align='edge') #注意是height,align表示柱子的对齐方式,有center和edge两个值可以选
#选择edge之后可以看到轴的刻度值没有在柱子的中间位置
plt.title("各区域任务量",loc='center')
plt.ylabel("区域")
plt.xlabel("任务量22")
for a,b in zip(x,y):
plt.text(b,a,b,ha='right',va='center',fontsize=13) #注意是bab,最后一个字母是显示值的轴
plt.grid(False)
plt.savefig(r'D:\Users\ctrip\Desktop\图表\bar堆积图.jpg')
#散点图
#plt.scatter(x,y,s,c,marker,linewidth,edgecolors)
#s:表示每个点的面积,即散点的大小。如果只有一个具体值,则所有点的大小都一样。
#s也可以是动态值,每个点的大小不一样 就成了气泡图
#c:表示每个点的颜色,如果只有一种颜色,则所有点的颜色都相同
#c也可以是动态颜色值,让不同点的颜色不同
#marker:标记类型
#linewidths:表示每个散点的线宽
#edgecolors:表示每个散点外轮廓的颜色
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(1,1,1)
x=[5.5,6.1,8.1,15.8,19.5,22.4,28.3,29.8]
y=[2.68,3.85,4.41,5.67,5.44,6.03,8.15,6.87]
plt.scatter(x,y,marker='o',s=200) #标记类型以及标记大小
plt.title("1-8月平均气温与啤酒销量关系图",loc="center")
plt.xlabel("平均气温")
plt.ylabel("啤酒销量")
plt.grid(False)#网格线
plt.savefig(r'D:\Users\ctrip\Desktop\图表\scatter散点图.jpg')
#绘制气泡图.气泡图与散点图类似。
#气泡图的大小不一样;散点图的大小是一样的。
#注意:气泡图是三维的还是二维的? 我个人认为可以画三维。但以下例子是二维的
import matplotlib.pyplot as plt
import numpy as np
plt.subplot(1,1,1)
x=np.array([5.5,6.1,8.1,15.8,19.5,22.4,28.3,29.8])
y=np.array([2.68,3.85,4.41,5.67,5.44,6.03,8.15,6.87])
area=y*100
color=y*100
plt.scatter(x,y,s=area,c=color)
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='bottom',fontsize=8,color="white")
plt.xlabel("平均气温")
plt.ylabel("啤酒销量")
plt.title("销量关系图",loc='center')
plt.savefig(r'D:\Users\ctrip\Desktop\图表\scatter散点图.jpg')
#绘制面积图。面积图与折线图的对比是类似的。
# plt.stackplot(x,y,labels,colors)
#labels:不同系列图表的图例名 因为面积图是两个图例所以用复数
#colors:不同系列图表的颜色
import numpy as np
import matplotlib.pyplot as plt
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2241,2315])
labels=["注册人数","激活人数"]
plt.stackplot(x,y1,y2,labels=labels,colors=["yellow","blue"])
#如果labels写成单数会报错;colors写成单数只显示一个图
plt.xlabel("月份")
plt.ylabel("注册与激活人数")
plt.title("销量关系图",loc='center')
plt.savefig(r'D:\Users\ctrip\Desktop\图表\stackplot.jpg')
#绘制树地图 树地图常用来表示统一等级中不同类别的占比关系,使用squarify库。先pip install squarify
#squarify.plot(sizes,label,color,value,edgecolor,linewidth)
#sizes:待绘图数据 label:不同类别的图例标签 color:不同类别的颜色 value:不同类别的数据标签
#edgecolor:不同类别之间边框的颜色 linewidth:边框线宽
import squarify
size=np.array([0.34,0.693,0.585,0.57,0.562,0.531,0.530,0.524,0.501,0.478,0.468,0.4361])
xingzuo=np.array(["未知",'摩羯座','天秤座','双鱼座','天蝎座','金牛座','处女座','双子座','射手座','水瓶座','白羊座'])
rate=np.array([0.34,0.693,0.585,0.57,0.562,0.531,0.530,0.524,0.501,0.478,0.468,0.4361])
colors=['steelblue','#9999ff','red','indianred','green','yellow','orange']
plot=squarify.plot(sizes=size,label=xingzuo,color=colors,value=rate,edgecolor='white',linewidth=3)
#plt.title("星座分布",loc='center')
plt.title("星座分布",fontdict={'fontsize':12})
plt.axis('off') #去除坐标轴
#plt.tick_params(top=True,right=True)
plt.tick_params(top=False,right=False) #去除上边框和右边框的刻度
plt.savefig(r'D:\Users\ctrip\Desktop\图表\squarifyplot.jpg')
#绘制雷达图 这个需要调试一下
#用来综合评价某一事物,直观看出事物的优势与不足。使用plt库中的polar方法,polar是用来建立极坐标系的
#雷达图就是将各个点展示在极坐标系中,然后用线将各点连接起来。
#plt.polar(theta,r,color,marker,linewidth)
#theta:每一点在极坐标系中的角度
#r:每一点在极坐标系中的半径
#color:连接个点之间线的颜色
#marker:每点的标记物
#linewidth:连接物的宽度
plt.subplot(111,polar=True) #参数polar等于true表示建立一个极坐标系
datalenth=5 #把圆均分成5份
angles=np.linspace(0.2*np.pi,datalenth,endpoint=False)
#np.linspace表示在制定的间隔内返回均匀间隔的数字
labels=['沟通能力','业务理解能力','逻辑思维能力','快速学习能力','工具使用能力']
data=[2,3.5,4,4.5,5]
data=np.concatenate((data,[data[0]]))#闭合
angels=np.concatenate((angles,[angles[0]]))#闭合
#绘图
plt.polar(angles,data,color='r',marker='o')
#设置x轴刻度
plt.xticks(angles,labels)
plt.title(s="某数据分析师的综合评级")
plt.savefig(r'D:\Users\ctrip\Desktop\图表\polarplot.jpg')
#绘制箱型图 反映一组数据的离散情况
#plt.boxplot(x,vert,widths,labels)
#vert:箱型图方向。true为纵向 false为横向。默认true
#widths:箱型图宽度
#labels:箱型图标签
plt.subplot(1,1,1)
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3606,820,1906,2214,2315])
x=[y1,y2]
labels=["注册人数","激活人数"]
plt.boxplot(x,labels=labels,vert=True,widths=[0.3,0.2])
plt.title("1-9月注册与激活人数",loc="right")
plt.grid(False)
plt.savefig(r'D:\Users\ctrip\Desktop\图表\boxplot.jpg')
#绘制饼图 表示同一等级中不同类别的占比情况
#plt.pie(x,explode,labels,colors,autopct,pctdistance,shadow,
#labeldistance,starangle,radius,counterclock,wedgeprops,textprops,center,frame)
#待绘图数据,饼图中每一块离圆心距离,每一块标签,颜色,百分比格式,数据标签距中心的距离,是否有阴影
#每一块索引距离中心的距离 饼图的初始角度 饼图的半径 是否让饼图逆时针显示 饼图外边界属性 饼图中文本相关属性 饼图中心位置 是否显示饼图背后的的图框
plt.subplot(1,1,1)
x=np.array([8566,5335,7310,6482])
labels=["东区","北区","南区","西区"]
colors='lightgreen','gold','lightskyblue','lightcoral'
explode=[0.05,0,0,0] #让第一块离圆心远一点
labeldistance=1 #每一块索引离中心的距离
plt.pie(x,labels=labels,colors=colors,autopct='%.0f%%',shadow=True,explode=explode,radius=0.5,labeldistance=labeldistance,startangle=-50)
#保留0位小数,3个%;有阴影;半径;初始角度
plt.axis('equal')
plt.title("全国各区域任务量占比",loc="center")
plt.savefig(r'D:\Users\ctrip\Desktop\图表\pie.jpg')
import matplotlib.pyplot as plt
labels='a','b','c','d'
sizes=5,6,7,8
explode=0,0,0,0
plt.pie(sizes,explode=explode,labels=labels,
colors=colors,autopct='%1.1f%%',shadow=True,startangle=50)
plt.axis('equal')
plt.show()
#绘制环形图 参数与饼图完全一致
plt.subplot(1,1,1)
x1=np.array([8566,5335,7310,6485])
x2=4283,2667,3655,3241
labels="东区","北区","南区","西区"
plt.pie(x1,labels=labels,radius=1.0,wedgeprops=dict(width=0.5,edgecolor='w'))
plt.pie(x2,labels=labels,radius=0.5,wedgeprops=dict(width=0.3,edgecolor='w'))
#添加注释(完成量 任务量)
plt.annotate("完成量",xy=(0.35,0.35),xytext=(0.7,0.45),arrowprops=dict(facecolor="black",arrowstyle="->"))
plt.annotate("任务量",xy=(0.75,0.20),xytext=(1.1,0.2),arrowprops=dict(facecolor="black",arrowstyle="->"))
plt.title("全国各区域任务量与完成量占比",loc="center")
plt.savefig(r'D:\Users\ctrip\Desktop\图表\pie2.jpg')
#绘制热力图
#绘制水平线和垂直线
#plt.axhline(y,xmin,xmax) y=2 时x的最大和最小值XXXXXXXXX 错错错 min max指的是比例,而不是实际像素值
#plt.axvline(x,ymin.ymax)
plt.subplot(1,2,1)
plt.xlim(0,5) #???????????????
#python横坐标轴已经设置了0-5的范围,x在0.2-0.5的直线的位置为啥显示错了,下一行是答案
#
plt.axhline(y=2,xmin=0.2,xmax=0.3)
plt.subplot(1,2,2)
plt.ylim(0,5)
plt.axvline(x=2,ymin=0,ymax=1)
plt.subplot(2,2,1)
plt.axhline(y=0.5,c='r',ls='--',lw=2)
#绘制组合图表---折线图+折线图
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
plt.plot(x,y2,label="激活人数",linestyle="dashdot",linewidth=1,marker="o",markersize=3)
plt.title("1-9月注册与激活人数")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
plt.xlabel("月份")
plt.ylabel("注册量")
plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
plt.legend()
plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot双折线.jpg')
#折线图+柱形图
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
plt.bar(x,y2,label="激活人数")
plt.title("1-9月注册与激活人数")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
plt.xlabel("月份")
plt.ylabel("注册量")
plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
plt.legend()
plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
#绘制双y轴图表 是一个坐标系中有两条y轴,使用的是plt库的twinx方法。
#先建立坐标系,然后绘制主坐标轴上的图表,再调用plt.twinx方法。最后绘制次坐标轴上的图表。
#折线图+柱形图
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
plt.xlabel("月份")
plt.ylabel("注册量")
plt.legend(loc="upper left")
plt.twinx() #调用twinx方法
plt.plot(x,y2,color="k",linestyle="dashdot",linewidth=1,marker="o",markersize=3,label="激活人数")
plt.xlabel("月份")
plt.ylabel("注册量")
plt.legend()
plt.title("1-9月注册与激活人数")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
plt.xlabel("月份")
plt.ylabel("注册量")
plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
plt.legend()
plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
#绘制双y轴图表
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
plt.twinx() #调用twinx方法
plt.bar(x,y2,label="激活人数")
plt.title("1-9月注册与激活人数")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
plt.xlabel("月份")
plt.ylabel("注册量")
plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
plt.legend()
plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
#绘制双x轴图表 一个坐标系中有两条x轴,使用plt库的twiny方法,具体流程和双y轴完全一样。但是在业务中使用较少
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
plt.twiny() #调用twinx方法
plt.bar(x,y2,label="激活人数")
plt.title("1-9月注册与激活人数")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
plt.xlabel("月份")
plt.ylabel("注册量")
plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
plt.legend()
plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
#matplotlib库默认的样式看起来不好看,但是可以调用其他格式。以下是matplotlib支持的所有样式
plt.style.available
#如果使用以上样式,只要在程序开头加上以下代码
#只要在程序开头指明了哪些样式,那么该程序接下来的所有图表都会使用这种样式
plt.style.use(样式名)
以下都是样式的举例
plt.style.use('bmh')
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
plt.plot(x,y1,label="注册人数",linestyle="solid",linewidth=1,marker="o",markersize=3)
plt.twiny() #调用twinx方法
plt.bar(x,y2,label="激活人数")
plt.title("1-9月注册与激活人数")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va="bottom",fontsize=11)
plt.xlabel("月份")
plt.ylabel("注册量")
plt.xticks(np.arange(1,10,1),["1月","2月","3月","4月","5月","6月","7月","8月","9月"])
plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人","7000人","8000人","9000人"])
plt.legend()
plt.savefig(r'D:\Users\ctrip\Desktop\图表\plot+bar.jpg')
–以上图表代码参考了张俊红书籍
《对比excel,学习python数据分析》
受益匪浅。