matplotlib绘图及数据分析的初认识

一、数据分析基础概念

1.什么是数据分析

数据分析是用适当的方法对收集来的大量数据进行统计和整理,得出结论,为后续的决策提供数据支持

2.anaconda

①创建环境:conda create -n python3 python=3

②切换环境:
  windows: activate python3
  linux/macos: source activate python3

3.认识jupyter notebook

 jupyter notebook:一款编程、文档、笔记、展示软件
在这里插入图片描述

简单使用jupyter notebook:
1.爬取百度网页内容
①打开cmd,启动命令jupyter notebook,打开jupyter notebook
②新建文件
在这里插入图片描述
③编写文件内容
在这里插入图片描述
2.利用matplotlib绘图
在这里插入图片描述

二、matplotlib绘图

1.什么是matplotlib

matplotlib:最流行的Python底层绘图库,主要做数据可视化图表

2.matplotlib绘图的功能

1.绘图

# 使用plot绘折线图
p.plot(x,y)  # 传入x,y,通过plot绘制折线图
# 使用scatter绘制散点图
p.scatter(x_3,a,label="3月气温")
p.scatter(x_10,b,label="10月气温")
# 绘制条形图
p.bar(_x,_y,width=0.4,color="red") # bar绘制条形图,只能接受含数字的可迭代对象,width表示长条的宽度,默认0.8
#使用hist绘制直方图
p.hist(a,num_bins,density=1)  # num_bins可以是一个数组,使得组距不全相同
# normed不存在于更新的库中,应使用density,表示显示频率,不使用表示频数

2.设置图片的大小和分辨率(plt.figure)

fig = p.figure(figsize=(15,8),dpi=80) # 而figsize代表图片大小
# 在图像模糊的时候可以传入dpi参数,让图片更加清晰

3.实现图片保存(plt.savefig)

p.savefig("./sip_size.png")  # 保存图片,也可以保存svg这种矢量图格式,放大不会有锯齿

4.设置xy轴上的刻度和字符串(plt.xticks或plt.yticks)
①设置刻度

# 设置x轴刻度
p.xticks(x)
p.xticks(range(2,25))
p.yticks(range(min(y),max(y)+1))

②设置字符串类型刻度

_x = ["{}岁".format(i) for i in x]
p.xticks(x,_x,rotation=45)

5.解决刻度疏密问题(plt.xticks或plt.yticks)

通过步长取值改变刻度疏密

_xtick = [i/2 for i in range(4,49)]
p.xticks(_xtick[::3]) # _xtick[::3]取步长为3

6.设置描述标题、xy轴信息(p.title,p.xlabel,p.ylabel)

# 添加描述信息
p.xlabel("年龄")
p.ylabel("男(女)朋友数量")
p.title("我和同桌从11岁到30岁每年交的男(女)朋友数量")

7.设置字体显示中文(font_manager.fontProperties,matplotlib.rc)
①matplotlib.rc

import matplotlib
font = {'family' : 'MicroSoft YaHei',
         'weight' : 'bold',
          'size'   : 'large'}
# matplotlib.rc('font', **font)
matplotlib.rc("font",family='MicroSoft YaHei',weight='bold',)

②font_manager.fontProperties

使用:要展示中文的地方添加fontproperties=my_font(图例中使用prop=my_font)

from matplotlib import font_manager
my_font = font_manager.FontProperties(size=18,fname="C:\Windows\Fonts\STFANGSO.TTF")  # 实例化字体需要在使用该字体的位置使用其参数,如
p.xlabel("时间",fontproperties=my_font)

8.在一个图上绘制多个图形(plt多次plot)

p.plot(x,a,label="同桌",color='red',linestyle=':',linewidth=5)  # label="同桌"需要在下面添加图例显示
p.plot(x,b,label="自己",color='black',linestyle='--')

9.图形的样式(color,linestyle,linewidth,alpah)

p.plot(x,a,label="同桌",color='red',linestyle=':',linewidth=5,alpah=0.6) 
# 自定义折线风格:color='red'颜色,linestyle=':'线条风格,linewidth=5线条粗细,alpah=0.6透明度(0-1)

10.绘制网格(p.grid)

# 绘制网格
p.grid(alpha=0.3) # alpha= 设置网格线的透明度

11.为不同图形添加图例(p.legend)

p.plot(x,a,label="同桌",color='red',linestyle=':',linewidth=5)  # label="同桌"需要在下面添加图例显示
p.plot(x,b,label="自己",color='black',linestyle='--')
# 添加图例
p.legend(loc='upper left')

3.matplotlib绘制折线图

①.绘制折线图(plt.plot)

# 绘折线图
p.plot(x,y)  # 传入x,y,通过plot绘制折线图

②绘制10点到12点的气温折线图

import random

from matplotlib import pyplot as p
from matplotlib import font_manager
my_font = font_manager.FontProperties(size=18,fname="C:\Windows\Fonts\STFANGSO.TTF")  # 实例化字体需要在使用该字体的位置使用其参数

x = range(0,120)
y = [random.randint(20,35) for i in range(120)]
fig = p.figure(figsize=(15,8),dpi=80)
p.plot(x,y)

# 调整x轴刻度:用字符串表示
_xtick=["10点{}分".format(i) for i in range(60)]
_xtick+=["11点{}分".format(i) for i in range(60)]
p.xticks(list(x)[::3],_xtick[::3],rotation=45,fontproperties=my_font) # rotation=90表示旋转90°

# 添加描述信息
p.xlabel("时间",fontproperties=my_font)
p.ylabel("温度 单位(°C)",fontproperties=my_font)
p.title("10点到12点每分钟的气温变化情况",fontproperties=my_font)

p.show()

在这里插入图片描述

③绘制我和同桌从11岁到30岁每年交的男(女)朋友数量折线图

from matplotlib import pyplot as p
import matplotlib
font = {'family' : 'MicroSoft YaHei',
         'weight' : 'bold',
          'size'   : 'large'}
# matplotlib.rc('font', **font)
matplotlib.rc("font",family='MicroSoft YaHei',weight='bold',)

x = range(11,31)
a=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b=[1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]

p.figure(figsize=(15,8),dpi=80)

p.plot(x,a,label="同桌",color='red',linestyle=':',linewidth=5)  # label="同桌"需要在下面添加图例显示
p.plot(x,b,label="自己",color='black',linestyle='--')
# 自定义折线风格:color='red'颜色,linestyle=':'线条风格,linewidth=5线条粗细

p.yticks(range(8))
_x = ["{}岁".format(i) for i in x]
p.xticks(x,_x,rotation=45)

p.xlabel("年龄")
p.ylabel("男(女)朋友数量")
p.title("我和同桌从11岁到30岁每年交的男(女)朋友数量")

# 绘制网格
p.grid(alpha=0.3) # alpha= 设置网格线的透明度

# 添加图例
p.legend(loc='upper left')
"""若使用显示文字的方法为第二种需要添加参数的方法:p.legend(prop=my_font)
                 只有这里是需要将参数改为prop,其他位置都是fontproperties
    loc='upper left'表示该图例的位置"""

p.show()

在这里插入图片描述

4.matplotlib绘制散点图

①使用scatter绘制散点图:

# 使用scatter绘制散点图
p.scatter(x_3,a,label="3月气温")
p.scatter(x_10,b,label="10月气温")

②绘制2019年3月和10月的温度散点图

from matplotlib import pyplot as p
from matplotlib import font_manager
my_font = font_manager.FontProperties(size=10,fname="C:\Windows\Fonts\STFANGSO.TTF")

x_3 = range(1,32)
x_10 = range(51,82)
a = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,22,15,11,15,5,13,17,10,11,13,12,13,6,16]

# 设置图形大小
p.figure(figsize=(18,8),dpi=80)

# 使用scatter绘制散点图
p.scatter(x_3,a,label="3月气温")
p.scatter(x_10,b,label="10月气温")

# 调整x轴刻度
_x = ["3月{}日".format(i) for i in range(1,32)]
_x+= ["10月{}日".format(i) for i in range(1,32)]
p.xticks((list(x_3)+list(x_10))[::3],_x[::3],rotation=45,fontproperties=my_font)
p.yticks(range(31)[::5])

# 设置描绘信息
p.xlabel("日期",fontproperties=my_font)
p.ylabel("温度  单位(°)",fontproperties=my_font)
p.title("2019年3月和10月的温度统计",fontproperties=my_font)

# 设置图例
p.legend(loc="upper left",prop=my_font)

p.show()

在这里插入图片描述

5.matplotlib绘制条形图

①使用bar绘制条形图

# 绘制条形图
p.bar(_x,_y,width=0.4,color="red") # bar绘制条形图,只能接受含数字的可迭代对象,width表示长条的宽度,默认0.8

②绘制2019年票房前20数据的条形图

from matplotlib import pyplot as p
import matplotlib

font = {'family': 'MicroSoft YaHei',
        'weight': 'bold',
        'size': 'large'}
matplotlib.rc("font", family='MicroSoft YaHei', weight='bold', size=10)

a = ["哪吒之魔童降世", "流浪地球", "复仇者联盟4:终局之战", "我和我的祖国", "中国机长", "疯狂的外星人", "飞驰人生", "烈火英雄", "少年的你", "速度与激情:特别行动",
     "蜘蛛侠:英雄远征", "扫毒2天地对决", "误杀", "叶问4", "大黄蜂", "攀登者", "惊奇队长", "比悲伤更悲伤的故事", "哥斯拉2:怪兽之王", "阿丽塔:战斗天使"]
b = [49.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.62, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88,
     6.86, 6.58, 6.23]

_x = range(len(a))
_y = b

p.figure(figsize=(15, 9), dpi=80)

# 绘制条形图
p.barh(_x, _y, height=0.2, color="red")  # barh绘制横着的条形图,只能接受含数字的可迭代对象,height表示长条的宽度

p.yticks(_x, a)

# 添加网格
p.grid(alpha=0.4)

# 保存图
p.savefig("./movie.png")

p.show()

在这里插入图片描述

6.matplotlib绘制直方图

①hist绘制直方图

p.hist(a,num_bins,density=1)  # num_bins可以是一个数组,使得组距不全相同
# normed不存在于更新的库中,应使用density,表示显示频率,不使用表示频数

②250部电影时长统计

from matplotlib import pyplot as p
# 设置字体显示中文
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname="C:\Windows\Fonts\STFANGSO.TTF")

a =[103,96,121,134,132,131,100,121,133,109,138,127,92,134,104,103,107,77,147,88,129,126,125,84,98,113,83,116,126,86,106,109,103,132,85,127,122,91,123,128,139,86,138,98,113,99,77,110,105,107,132,127,131,122,113,128,86,89,109,96,90,149,130,100,105,107,81,99,146,89,88,127,121,120,84,136,128,106,127,122,142,139,100,125,128,107,89,124,97,86,117,107,95,108,103,82,91,143,100,123,130,79,133,133,79,126,122,151,126,97,101,97,128,116,100,82,155,146,98,112,78,139,144,146,160,86,160,81,114,128,101,99,89,128,121,123,105,89,80,93,117,146,108,152,103,105,79,89,98,141,81,129,91,79,147,130,145,108,102,105,156,102,150,116,96,108,108,125,102,107,112,136,128,108,91,100,130,109,129,83,98,88,132,100,115,123,105,120,83,110,108,92,93,147,96,103,114,153,92,106,116,116,77,128,76,158,156,93,94,153,155,119,106,117,101,97,90,160,114,88,154,108,102,149,108,143,88,123,113,159,122,110,91,76,91,148,135,104,77,79,147,125,149,145,154,89,123,136,97,120,]

# 计算组数
d = 3 # 组距
num_bins = (max(a)-min(a))//d # 组数  极差整除组距才能使x轴刻度与直方图柱不差

p.figure(figsize=(15,8),dpi=80)

p.hist(a,num_bins,density=1)  # num_bins可以是一个数组,使得组距不全相同
# normed不存在于更新的库中,应使用density,表示显示频率,不使用表示频数

# 设置x轴刻度
p.xticks(range(min(a),max(a)+d,d))

p.grid()

p.show()

在这里插入图片描述
注:统计之后数据,不能用直方图,应用条形图。
直方图只能用于描绘未统计的数据信息

7.对比常用统计图

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值