700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 数据分析_python数据可视化(基于matplotlib+pandas)

数据分析_python数据可视化(基于matplotlib+pandas)

时间:2023-02-24 19:26:29

相关推荐

数据分析_python数据可视化(基于matplotlib+pandas)

文章目录

前言1、数据可视化的基本流程2、图表的基本基本元素3、对比excel进行python可视化3.1.建立画布3.2建立坐标系3.3设置图元素3.4 图可视化

最近学习宋俊红大佬《对比excel,轻松学习python数据分析》一书整理的一些笔记,内容脑图如下:

不足之处,望多多指正。

前言

数据可视化是借助图形来表达信息的一种形式,可以帮助分析师更好的传递信息。

1、数据可视化的基本流程

整理数据明确目的寻找合适的表现方式

2、图表的基本基本元素

画布:图界面;坐标系:如直角坐标、球坐标、极坐标系等;坐标抽 :如x轴、y轴;坐标轴标题:x、y代表 如月份等。图表标题数据表网格线;图例:更好认识图像的指标;误差线

3、对比excel进行python可视化

3.1.建立画布

import matplotlib.pyplot as pltimport numpy as np# 解决中文乱码问题plt.rcParams["font.sans-serif"]='SimHei'# 解决负号无法正常显示问题plt.rcParams['axes.unicode_minus']=False#解决图表不清晰问题%config InlineBackend.figure_format='svg'fig=plt.figure()

#使用figsize编辑画布的宽与高plt.figure(figsize=(9,9)) #建立好后不会直接显示出来,只会输出以画布相关的信息代码

<Figure size 648x648 with 0 Axes><Figure size 648x648 with 0 Axes>

3.2建立坐标系

使用add_subplot函数建立坐标系

fig=plt.figure(figsize=(4,4))ax1=fig.add_subplot(1,1,1)

# 一图编辑多个坐标系fig = plt.figure()ax1=fig.add_subplot(2,2,1)ax2=fig.add_subplot(2,2,2)ax3=fig.add_subplot(2,2,3)ax4=fig.add_subplot(2,2,4)

使用plt.suboplot2grid函数建立坐标系

使用plt.suboplot2grid建立坐标不需要先建立画布,只需直接导plt库即可

plt.subplot2grid((1,1),(0,0))

<matplotlib.axes._subplots.AxesSubplot at 0x114fe2857f0>

plt.subplot2grid((2,2),(0,0))plt.subplot2grid((2,2),(0,1))plt.subplot2grid((2,2),(1,0))plt.subplot2grid((2,2),(1,1))

<matplotlib.axes._subplots.AxesSubplot at 0x114fe65d3c8>

# subplot2grid构建折线图与柱形图import numpy as npx=np.arange(6)y=np.arange(6)ax1=plt.subplot2grid((2,2),(0,0))# 折线图ax1.plot(x,y)ax6=plt.subplot2grid((2,2),(0,1))# 柱状图ax6.bar(x,y)

<BarContainer object of 6 artists>

使用plt.subplot函数构建坐标系

subplot是plt库中的一个函数,subplot的独特之处是一次可以返回多个坐标系

plt.subplot(2,2,1)

<matplotlib.axes._subplots.AxesSubplot at 0x114fe79b9e8>

import numpy as npx=np.arange(6)y=np.arange(6)# 折线图plt.subplot(2,2,1)plt.plot(x,y)# 柱状图plt.subplot(2,2,4)plt.bar(x,y)

<BarContainer object of 6 artists>

plt.subplots函数建立坐标系

fig,axes = plt.subplots(2,2)# 线形图axes[0,0].plot(x,y)# 柱状图axes[1,1].bar(x,y) # 暂时未找到出不来图的原因

<BarContainer object of 6 artists>

小结:4种坐标系的建立方法中,add_subplot属于对象式编程,所有的操作都是针对对象,后三种方式都是函数式编程,所有的画图都是通过plt库的函数进行实现

3.3设置图元素

坐标轴标题

# 数据读取import pandas as pd df = pd.read_excel(r"S:\code\jupyter_notebook\big_date\对比excel学习python\章节13数据.xlsx",sheet_name="公司注册用户数")df#plt.plot(x,y)

# 画数据x=df["月份"]y=df["用户数"]plt.plot(x,y)

[<matplotlib.lines.Line2D at 0x114ff74bd68>]

# 设置坐标轴标题plt.xlabel("月份")plt.ylabel("注册量")plt.plot(x,y)

[<matplotlib.lines.Line2D at 0x114ff840ac8>]

#设置标题到x轴和y轴的距离plt.xlabel("月份",labelpad = 10)plt.ylabel("注册量",labelpad = 10)plt.plot(x,y)

[<matplotlib.lines.Line2D at 0x114ff8a3668>]

# 设置字体plt.xlabel("月份",fontsize='xx-large',color="#70AD47",fontweight='bold')plt.ylabel("注册量")plt.plot(x,y)

[<matplotlib.lines.Line2D at 0x114ff9081d0>]

#设置坐标刻度使用方式,#plt.xticks(ticks,labels)#plt.yticks(ticks,labels)plt.xticks(np.arange(9),["1月份","2月份","3月份","4月份","5月份","6月份","7月份","8月份","9月份"])plt.yticks(np.arange(1000,7000,1000),["1000人","2000人","3000人","4000人","5000人","6000人"])##plt.plot(x,y)

[<matplotlib.lines.Line2D at 0x114ff979a20>]

# 隐藏刻度plt.xticks([])plt.yticks([])plt.plot(x,y)

[<matplotlib.lines.Line2D at 0x114ff995e10>]

# 设置坐标轴的范围plt.xlim(0,10)plt.ylim(0.,8000)plt.plot(x,y)

[<matplotlib.lines.Line2D at 0x114ff9f9390>]

# 关闭轴显示plt.axis("off")plt.plot(x,y)

[<matplotlib.lines.Line2D at 0x114ffa5a828>]

#利用grid开启网格线plt.grid(b="True")plt.plot(x,y)

D:\Program_for_code\Anaconda\lib\site-packages\matplotlib\cbook\deprecation.py:107: MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.warnings.warn(message, mplDeprecation, stacklevel=1)[<matplotlib.lines.Line2D at 0x114ffa1c400>]

# 开x轴线plt.grid(b="True",axis="x")plt.plot(x,y)

D:\Program_for_code\Anaconda\lib\site-packages\matplotlib\cbook\deprecation.py:107: MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.warnings.warn(message, mplDeprecation, stacklevel=1)[<matplotlib.lines.Line2D at 0x114ffb1f400>]

# 开y轴线plt.grid(b="True",axis="y")plt.plot(x,y)

D:\Program_for_code\Anaconda\lib\site-packages\matplotlib\cbook\deprecation.py:107: MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.warnings.warn(message, mplDeprecation, stacklevel=1)[<matplotlib.lines.Line2D at 0x114ffb7e898>]

#设置图例 #具体参数介绍可见书中表格plt.plot(x,y,label="折线图")plt.bar(x,y,label="柱状图")plt.legend()

<matplotlib.legend.Legend at 0x114ffbdff60>

# 图例位置的设置 #具体参数介绍可见书中表格plt.plot(x,y,label="折线图")plt.bar(x,y,label="柱状图")plt.legend(loc="upper left")

<matplotlib.legend.Legend at 0x114ffc74400>

# 设置图表标题plt.plot(x,y)plt.title("1-9月xxx公司注册公司用户数")

Text(0.5,1,'1-9月xxx公司注册公司用户数')

#标题位置放置设置plt.plot(x,y)plt.title("1-9月xxx公司注册公司用户数",loc="left")

Text(0,1,'1-9月xxx公司注册公司用户数')

# 图表注释annotateplt.plot(x,y)plt.annotate("服务器宕机了",xy=(5,1605),arrowprops = dict(facecolor='black',arrowstyle='->'))

Text(5,1605,'服务器宕机了')

# 数据表#数据读取df1 = pd.read_excel(r"S:\code\jupyter_notebook\big_date\对比excel学习python\章节13数据.xlsx",sheet_name='各分区任务完成情况')df1

#构建堆积图y1=df1["任务量"]y2=df1["完成量"]y=[[8566,5335,7310,6482.],[4283,2667,3655,3241]]rows=["任务量","完成量"]x=["东区","南区","西区","北区"]plt.bar(x,y1,width=0.3,label="任务量")plt.bar(x,y2,width=0.3,label="完成量")plt.table(cellText = y,cellLoc='center',cellColours = None,rowLabels=rows,rowColours=["red","yellow"],rowLoc='center'colLabels=x,colColours=["red","yellow","red","yellow"],colLoc='left',loc="bottom")plt.show()plt.legend()

File "<ipython-input-29-31fb4cf4d85b>", line 17colLabels=x,^SyntaxError: invalid syntax

# 外嵌图表plt.table()'''table(cellText=None, cellColours=None,cellLoc='right', colWidths=None,rowLabels=None, rowColours=None, rowLoc='left',colLabels=None, colColours=None, colLoc='center',loc='bottom', bbox=None)'''data = [[ 66386, 174296, 75131, 577908, 3],[ 58230, 381139, 78045, 99308, 160454],[ 89135, 80552, 152558, 497981, 603535],[ 78415, 81858, 150656, 193263, 69638],[139361, 331509, 343164, 781380, 52269]]columns=('Freeze', 'Wind', 'Flood', 'Quake', 'Hail')rows = ['%d year'% x for x in (100, 50, 20, 10, 5)]df = pd.DataFrame(data, columns=('Freeze', 'Wind', 'Flood', 'Quake', 'Hail'),index=rows)print(df)df.plot(kind='bar', grid=True, colormap='Blues_r',stacked=True,edgecolor='black',rot=0)#创建堆叠图plt.table(cellText = data,cellLoc = 'center',cellColours = None,rowLabels = rows,rowColours = plt.cm.BuPu(np.linspace(0, 0.5,5))[::-1], # BuPu可替换成其他colormapcolLabels = columns,colColours = plt.cm.Reds(np.linspace(0, 0.5,5))[::-1], rowLoc='right',loc='bottom')# cellText:表格文本# cellLoc:cell内文本对齐位置# rowLabels:行标签# colLabels:列标签# rowLoc:行标签对齐位置# loc:表格位置 → left,right,top,bottomplt.xticks([])

Freeze Wind Flood Quake Hail100 year 66386 174296 75131 577908 350 year 58230 381139 78045 99308 16045420 year 89135 80552 152558 497981 60353510 year 78415 81858 150656 193263 696385 year 139361 331509 343164 781380 52269([], <a list of 0 Text xticklabel objects>)

3.4 图可视化

# 绘制xxx公司1-9月的注册用户量图折线图plt.subplot(1,1,1)# 定义x、y值x=df["月份"]y=df["用户数"]#绘图plt.plot(x,y,color="k",linestyle="dashdot",linewidth=1,marker="o",markersize=5,label="注册用户数")#设置标题plt.title("xxx公司1-9月注册用户量",loc="center")#添加数据标签for a,b in zip(x,y):plt.text(a,b,b,ha="center",va="bottom",fontsize=10)#设置网格线plt.grid(True)#设置图例plt.legend()#保存图表到本地#plt.savefig("C:/Users/2/Desktop/章节_13_plot.jpg")

<matplotlib.legend.Legend at 0x114b2a2f7b8>

# 绘制柱形图x=df1["分区"]y=df1["任务量"]plt.bar(x,y,width=0.5,align="center",label="任务量")#加标题plt.title("全国分区任务量",loc="center")#数据标签for a,b in zip(x,y):plt.text(a,b,b,ha="center",va="bottom",fontsize=12)#设置x轴与y轴的名称plt.xlabel('分区')plt.ylabel('任务量')plt.legend()# 保存图plt.savefig("C:/Users/2/Desktop/章节_13_bar.jpg")

# 簇状柱形图plt.subplot(1,1,1)

<matplotlib.axes._subplots.AxesSubplot at 0x114b1376208>

import numpy as npx = np.array([1,2,3,4])y1 = df1['任务量']y2 = df1['完成量']# 绘图plt.bar(x,y1,width=0.3, label = '任务量')plt.bar(x+0.3,y2,width = 0.3,label = '完成量')#置标题plt.title("全国各分区任务量与完成量",loc="center")# 设置x、y轴plt.xlabel('区域')plt.ylabel('任务情况')#设置x轴刻度值plt.xticks(x+0.15,["东区","南区","西区","北区"])# 加数据标签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)

# 堆积柱形图x = df1['分区']y1 = df1['任务量']y2 = df1['完成量']# 绘图plt.bar(x,y1,width=0.3, label = '任务量')plt.bar(x,y2,width = 0.3,label = '完成量')#置标题plt.title("全国各分区任务量与完成量",loc="center")# 设置x、y轴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,y2):plt.text(a,b,b,ha="center",va="bottom",fontsize=12)

# 绘制条形图x = df1['分区']y1 = df1['任务量']y2 = df1['完成量']# 绘图plt.barh(x,height=0.5,width=y1,align='center')#置标题plt.title("全国各分区任务量",loc="center")# 设置x、y轴plt.xlabel('区域')plt.ylabel('任务情况')# 加数据标签for a,b in zip(x,y1):plt.text(b,a,b,ha="center",va="bottom",fontsize=12)

# 绘制散点图## 数据读取df2 = pd.read_excel(r"S:\code\jupyter_notebook\big_date\对比excel学习python\章节13数据.xlsx",sheet_name='啤酒')df2

## 设置x,yx=df2['平均气温']y=df2['啤酒销量']##绘制plt.scatter(x,y,marker='o',s=200)## 轴命名plt.xlabel('平均气温')plt.ylabel('啤酒销量')## 标题设置plt.title('1-8月平均气温与啤酒销量关系',loc="center")## 网格线设置plt.grid(True)#plt.legend()

# 绘制气泡图## 设置x,yx=df2['平均气温']y=df2['啤酒销量']#设置颜色colors=y*10area=y*100##绘制plt.scatter(x,y,c=colors,marker='o',s=area)## 轴命名plt.xlabel('平均气温')plt.ylabel('啤酒销量')## 标题设置plt.title('1-8月平均气温与啤酒销量关系',loc="center")## 网格线设置plt.grid(True)#plt.legend()#添加数据标签for a,b in zip(x,y):plt.text(a,b,b,ha="center",va="center",fontsize=10,color= 'white')

# 绘制面积图##导入数据df3 = pd.read_excel(r"S:\code\jupyter_notebook\big_date\对比excel学习python\章节13数据.xlsx",sheet_name='注册与计划人数')df3

plt.subplot(1,1,1)x=df3['月份']x1=np.array([1,2,3,4,5,6,7,8,9])y1=df3['注册人数']y2=df3['激活人数']# 面积图lables=["注册人数","激活人数"]plt.stackplot(x,y1,y2,labels=lables)plt.title("xxx公司1-9月注册人数与激活人数",loc="center")plt.legend()# 设置x轴、y轴plt.xlabel('月份')plt.ylabel('注册与激活人数')

Text(0,0.5,'注册与激活人数')

#绘制树地图import squarify# 拉取数据df4 = pd.read_excel(r"S:\code\jupyter_notebook\big_date\对比excel学习python\章节13数据.xlsx",sheet_name='星座占比')df4

# 设置元素x = df4['星座']y = df4['占比']z = df4['大小']colors =['steelblue','#9999ff','red','indianred','green','yellow','orange']plot = squarify.plot(sizes=z,label=x,color = colors,value = y,edgecolor = 'white',linewidth = 3)

#绘制雷达图#拉取数据df4 = pd.read_excel(r"S:\code\jupyter_notebook\big_date\对比excel学习python\章节13数据.xlsx",sheet_name='综合评级')df4

# 设置x,y值x=df4["能力类"]y=df4["能力值"]# 绘制极坐标plt.subplot(111,polar=True)dataLenth=5angles=np.linspace(0,2*np.pi,dataLenth,endpoint=False)#?闭合data=np.concatenate((y,[y[0]]))angles=np.concatenate((angles,[angles[0]]))plt.polar(angles,data,color="r",marker="o")plt.xticks(angles,x)plt.title("某数据分析师的综合评级")

Text(0.5,1.05,'某数据分析师的综合评级')

# 绘制箱线图#设置x,y元素x=df3['月份']y1=df3['注册人数']y2=df3['激活人数']data=[y1,y2]plt.boxplot(data,vert=True,widths=[0.3,0.3],labels=['注册人数','激活人数'])#标题plt.title("xxx公司1-9月注册&激活人数分布")plt.grid(True)

#绘制饼图x = df1['分区']y1 = df1['任务量']y2 = df1['完成量']# 分离其中的一块explodeplt.pie(y1,labels=x,autopct='%.0f%%',explode=[0.05,0,0,0])#添加数值标签

([<matplotlib.patches.Wedge at 0x1f3fdb29eb8>,<matplotlib.patches.Wedge at 0x1f3fc961a20>,<matplotlib.patches.Wedge at 0x1f3fdb17d30>,<matplotlib.patches.Wedge at 0x1f3fdaf3518>],[Text(0.648426,0.94976,'东区'),Text(-0.912283,0.614605,'南区'),Text(-0.732867,-0.820309,'西区'),Text(0.815762,-0.737924,'北区')],[Text(0.366502,0.536821,'31%'),Text(-0.497609,0.335239,'19%'),Text(-0.399745,-0.447441,'26%'),Text(0.444961,-0.402504,'23%')])

#绘制圆环图x = df1['分区']y1 = df1['任务量']y2 = df1['完成量']plt.pie(y1,labels=x,autopct='%.0f%%',radius=1.0,wedgeprops=dict(width=0.3,edgecolor='w'))plt.pie(y2,radius=0.7,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='->'))

Text(1.1,0.2,'任务量')

#绘制热力图#拉取数据df5 = pd.read_excel(r"S:\code\jupyter_notebook\big_date\对比excel学习python\章节13数据.xlsx",sheet_name='相关性')df5

#设置x、y轴x1=df5['负债率']import itertoolsx2=df5['信贷数量']x3=df5['年龄']x4=df5['家属数量']x=[x1,x2,x3,x4]y=df5['类目']#配色cmap=plt.cm.coolplt.imshow(x,cmap=cmap)#显示颜色条plt.colorbar()#加入刻度标签tick_marks = np.arange(len(y))plt.xticks(tick_marks,y)plt.yticks(tick_marks,y)# 添加数值标签# xcm=np.array([[1.0000,0.0820,0.0310,-0.0086],[0.082,1.00,-0.090,0.062],[0.031,-0.090,1.00,0.026],[-0.0086,0.062,0.026,1.00]])for i,j in itertools.product(range(cm.shape[0]),range(cm.shape[1])):plt.text(j,i,cm[i,j],horizontalalignment="center")

#绘制参考线plt.axhline(y=0.2,xmax=0.8,xmin=0.2)plt.axvline(x=0.2,ymax=0.8,ymin=0.2)

<matplotlib.lines.Line2D at 0x1f3ff00e198>

#绘制组合图x=df3['月份']y1=df3['注册人数']y2=df3['激活人数']plt.plot(x,y2,color="k",linestyle="dashdot",linewidth=1,marker="o",markersize=5,label="激活用户数")plt.bar(x,y1,color="k",label="注册用户数")plt.title("xxx公司1-9月注册&激活人数分布")#添加数据标签for a,b in zip(x,y1):plt.text(a,b,b,ha="center",va="bottom",fontsize=12)for a,b in zip(x,y2):plt.text(a,b,b,ha="center",va="bottom",fontsize=12)

#绘制双坐标轴图表#计算激活率:注册人数/激活人数y3=y1/y2 #绘制注册人数plt.plot(x,y1,color="k",linestyle="solid",linewidth=1,marker="o",markersize=5,label="注册人数")plt.xlabel("月份")plt.ylabel("注册人数")#设置图例plt.legend(loc="upper left")#调用twinx方法plt.twinx()#绘制激活人数plt.plot(x,y3,color="k",linestyle="dashdot",linewidth=1,marker="o",markersize=5,label="激活率")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,y3):#plt.text(a,b,b,ha="center",va="bottom",fontsize=12)#图标题plt.legend()plt.title("xxx公司1-9月注册&激活率")

Text(0.5,1,'xxx公司1-9月注册&激活率')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。