欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python实现数据分析

程序员文章站 2022-03-19 13:33:56
Matplotlib的概念和简单应用一、Matplotlib的概念Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。它也可以和图形工具包一起使用,如 PyQt 和 wxPython。Matplotlib的特点:1.是专门用于开发2D图标(包括3D图表)2.使用起来极其简单3.以渐进、交互方式实现数据可视化matplotlib架构:上层调用下层后端:实现绘图区域(分配画图资源)美工:fi...

Matplotlib的概念和简单应用

一、Matplotlib的概念

Matplotlib 是 Python 的绘图库。
它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。
它也可以和图形工具包一起使用,如 PyQt 和 wxPython。

Matplotlib的特点:

1.是专门用于开发2D图标(包括3D图表)

2.使用起来极其简单

3.以渐进、交互方式实现数据可视化

  • matplotlib架构:

    • 上层调用下层

    • 后端:实现绘图区域(分配画图资源)

    • 美工:

      • figure、axes、axis
      • xticks,yticks
      • xlabel,ylabel
      • plot(参数)
      • lengend
    • 脚本:pytplot

      • 美工层

        • figure:指整个图形(包括所有元素,比如标题、线等)

        • axes(坐标系):数据的绘图区域

        • axis(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签

          特点

          • 一个figure可以包含多个axes(坐标系)
          • 一个坐标系可以包含多个坐标轴

二、Matplotlib的简单应用

1、折线图

  • 折线图:点的坐标(横坐标,纵坐标)
案例1:实现温度变化(折线图)绘制

步骤:

1.先生成figure

2.准备数据,折线图点,x,y坐标个数一一对应

3.显示调用show()

import matplotlib.pyplot as plt
plt.figure() # 画幕布
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])# 横坐标,纵坐标
plt.savefig("./test.png") # 保存位置
plt.show()# 显示

效果如下:
Python实现数据分析

案例2:显示上海和北京的温度变化(同一张图)
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(20,10),dpi=80) # 画幕布
# 准备数据
x = range(60)
x_ch = ['11点{}分'.format(i) for i in x]
y_shanghai = [random.uniform(15,18) for i in range(60)] # 变化范围15~18
# 准备北京的温度
y_beijing = [random.uniform(1,3) for i in range(60)] # 变化范围1~3
y_ticks = range(40)
plt.plot(x,y_shanghai,label = '上海')
# 显示北京的温度
plt.plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
# 修改刻度值
# 指定显示的x刻度的列表
# 第一个参数:必须是指
# 第二个参数:指定跟第一个参数对应的中文
plt.xticks(x[::5],x_ch[::5])
plt.yticks(y_ticks[::5])
# 增加标题,坐标描述
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('北京和上海:从11点~12点的温度变化情况')
# 增加图例的显示
plt.legend(loc = 'best')
plt.savefig("./test2.png")
plt.show()

效果如下:

Python实现数据分析
Python实现数据分析

案例3:显示北京和上海的温度变化(不同图)
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# plt.figure(figsize=(20,10),dpi=80) # 画幕布
# 当在多个ax里面画图的时候,标签,刻度,在相应的坐标系里指定
fig,ax=plt.subplots(nrows=1,ncols=2,figsize=(20,8))
# 准备数据
x = range(60)
x_ch = ['11点{}分'.format(i) for i in x]
y_shanghai = [random.uniform(15,18) for i in range(60)] # 变化范围15~18
# 准备北京的温度
y_beijing = [random.uniform(1,3) for i in range(60)] # 变化范围1~3
y_ticks = range(40)
# plt.plot(x,y_shanghai,label = '上海')
ax[0].plot(x,y_shanghai,label = '上海')
# 显示北京的温度
# plt.plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
ax[1].plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
# 修改刻度值
# 指定显示的x刻度的列表
# 第一个参数:必须是指
# 第二个参数:指定跟第一个参数对应的中文
# plt是对整理坐标系处理,ax是对每个坐标系处理
# plt.xticks(x[::5],x_ch[::5])
ax[0].set_xticks(x[::5],x_ch[::5])
ax[1].set_xticks(x[::5],x_ch[::5])
# plt.yticks(y_ticks[::5])
ax[0].set_yticks(y_ticks[::5])
ax[1].set_yticks(y_ticks[::5])
# 增加标题,坐标描述
# plt.xlabel('时间')
ax[0].set_xlabel('时间')
ax[1].set_xlabel('时间')
# plt.ylabel('温度')
ax[0].set_ylabel('温度')
ax[1].set_ylabel('温度')
# plt.title('北京和上海:从11点~12点的温度变化情况')
ax[0].set_title('中午从11点~12点的温度变化情况')
ax[1].set_title('中午从11点~12点的温度变化情况')
# 增加图例的显示
# plt.legend(loc = 'best')
ax[0].legend(loc = 'best')
ax[1].legend(loc = 'best')
plt.savefig("./test3.png")
plt.show()

效果如下:

Python实现数据分析

2、条形图

plt.bar(*x**,* *height**,* *width=0.8**,* *bottom=None**, ***,* *align='center'**,* *data=None**, ****kwargs*)

Python实现数据分析

案例1:显示每部电影的票房
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 柱状图
plt.figure(figsize=(20,8))
# 电影名字,每部电影对应的票房
movie_name = ['战狼2','哪吒之魔童降世','流浪地球','复仇者联盟4:终局之战','红海行动']
x = range(len(movie_name))
y = [5639,4934,4618,4205,3622]
# 使用plt.bar显示
# plt.bar 填入的x坐标必须全是数字
plt.bar(x,y,0.2,color = ['b','r','g','y','c','m'])
# 修改刻度,以及电影名字显示
plt.xticks(x,movie_name)
plt.savefig('./test4')
plt.show()

效果如下:

Python实现数据分析

案例2:显示每日票房与每周票房的对比
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 柱状图
plt.figure(figsize=(20,8))
movie_name = ['战狼2','哪吒之魔童降世','流浪地球']
first_day = [10587.6,10062.5,1275.7]
first_weekend = [36224.9,34479.6,11830]
x = range(len(movie_name))
# 使用plt.bar显示
plt.bar(x,first_day,width=0.2,label='首日票房')
plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label='首周票房')
plt.xticks([i+0.1 for i in x],movie_name)
plt.legend(loc='best')
plt.title('首日票房与首周票房对比')
plt.savefig('./test5')
plt.show()

效果如下:

Python实现数据分析

3、直方图

plt.hist

plt.grid
  • 组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数
  • 组距:每一组两个端点的差

步骤:

1.设置组距

2.设置组数:组数=极差/组距

案例1:显示豆瓣电影评分分布直方图
# 组距为1
# 创建figure
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(20,8))
score = [8.7,8.2,8.1,8,8,7.9,7.8,7.8,7.8,7.7,7.6]
bins = 0.05
group = int((max(score)-min(score))/bins)
# 画直方图
plt.hist(score,group,density=True) # density 频率 默认是0
# 指定刻度和步长
plt.xticks(score[::1])
plt.title('电影评分直方图')
plt.xlabel('电影评分')
plt.ylabel('电影数据量')
# 添加网格
plt.grid(True,linestyle = '--',alpha=1) # alpha表示格子清晰度
plt.savefig('./test6')
plt.show()

效果如下:
Python实现数据分析

直方图的场景
  • 用于表示分布情况
  • 通过直方图还可以观察和估计哪些数据比较集中,异常或者孤立的数据分布在何处
  • 利于较小数据的分析
  • 例如:用户年龄分布,商品价格分布
直方图和柱状图对比
  • 直方图:适合x坐标数据:连续的数据,数据量大
  • 柱状图:x坐标,类别。数据量较小。

4、饼图

plt.pie(x,labels=,autopct=,colors)

案例1:显示每个电影的场次占比
# 电影的排片占比显示
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 创建figure
plt.figure(figsize=(20,8))
movie_name = ['战狼2','哪吒之魔童降世','流浪地球','复仇者联盟4:终局之战','红海行动']
# 场次
place_count = [60605,54546,45819,28243,13270]
# 显示饼图
plt.pie(place_count,labels=movie_name,autopct='%1.2f%%',colors=['b','r','y','g','c'])
plt.legend(loc='best')# 添加图例
plt.axis('equal')# 变成圆形
plt.savefig('./test7')
plt.show()

效果如下:
Python实现数据分析

应用场景

分类的占比情况

例如:班级男女分布占比,公司销售额占比

说明:

数据来源:豆瓣网和电影网

5、各类统计图的比较:

  • 条形统计图是用一个单位长度表示一定的数量,根据数量的多少画出长短不同的直条,它能很快的看出各种数量的多少;
  • 折线统计图是用一个单位长度表示一定的数量,根据数量的多少描出各点,然后用线段依次连接起来,它不但可以看出各种数量的多少,而且可以看出数量的增减变化情况;
  • 扇形统计图是用一个圆表示整体,用圆内各个扇形的大小表示各部分占总数的百分比,它可以清楚看出各种数量占整体的百分比。

本文地址:https://blog.csdn.net/weixin_45088667/article/details/109881288