Python数据分析入门笔记:数据可视化

散点图

散点图(scatter diagram):是以一个变量为横坐标,另一个变量为纵坐标,利用散点(坐标点)的分布形态反映变量关系的一种图形。

散点图绘图函数:

plot(x,y,'.',color=(r,g,b))

plot参数说明:

  • x,y: X轴和Y轴的序列
  • '.','o': 点的形式
  • color: 散点图的颜色,可以用rgb定义,也可以用英文字母定义

RGB颜色设置:(red,green,blue)
python中RGB颜色范围值是[0,1]的,因此在设置的时候,可以取值后除以255,即设置到[0,1]范围内
常用RGB颜色对应表
在这里插入图片描述
举例
原始数据
画出x轴为广告费用,y轴为用户购买数的散点图。代码如下。

import pandas
import matplotlib
import matplotlib.pyplot as plt

data = pandas.read_csv('D://Data Analysis//6.1//data.csv')

# 定义显示颜色,最后一个参数为透明度
mainColor = (42/256, 87/256, 141/256, 1)

# 定义字体
font = {'family':'SimHei','size':15}
matplotlib.rc('font',**font)

# 设置x,y轴的名称
plt.xlabel('广告费用',color=mainColor)
plt.ylabel('购买用户数',color=mainColor)

# 设置x,y轴数字格式
plt.tick_params(axis='x',colors=mainColor)
plt.tick_params(axis='y',colors=mainColor)

plt.plot(data['广告费用'],data['购买用户数'],'.',color=mainColor)

# 大点
plt.xlabel('广告费用',color=mainColor)
plt.ylabel('购买用户数',color=mainColor)
plt.tick_params(axis='x',colors=mainColor)
plt.tick_params(axis='y',colors=mainColor)

plt.plot(data['广告费用'],data['购买用户数'],'o',color=mainColor)

输出:
在这里插入图片描述
在这里插入图片描述

折线图

折线图,也称趋势图,它是用直线段将各数据点连接起来而组成的图形,以折线方式显示数据的变化趋势。折线图不仅能反映数据数量,还能清楚得反映趋势。

折线图绘图函数:

plot(x,y,style,color,linewidth)
title('图的标题')

参数说明:

  • style,画线的样式
  • color,画线的颜色
  • linewidth,线的宽度
  • plot函数的第三个参数style意义表
    在这里插入图片描述
    举例
import pandas
import matplotlib
from matplotlib import pyplot as plt

data = pandas.read_csv(
    'D:\\Data Analysis\\6.2\\data.csv'
)

#对日期格式进行转换
data['购买日期'] = pandas.to_datetime(
    data['日期']
)

# 设置颜色
mainColor = (42/256, 87/256, 141/256, 1);

# 设置字体
font = {
    'size': 20,
    'family': 'SimHei'
}
matplotlib.rc('font', **font)

#%matplotlib qt

plt.xlabel(
    '购买日期', 
    color=mainColor
)
plt.ylabel(
    '购买用户数', 
    color=mainColor
)
plt.tick_params(
    axis='x', 
    colors=mainColor
)
plt.tick_params(
    axis='y', 
    colors=mainColor
)

#'-'	顺滑的曲线
plt.plot(
    data['购买日期'], 
    data['购买用户数'], 
    '-', color=mainColor
)

plt.title('购买用户数')
plt.show()

#设置线条粗细
plt.plot(
    data['购买日期'], 
    data['购买用户数'], 
    '-', color=mainColor, 
    lineWidth=10
)

#'--'	虚线
plt.plot(data['购买日期'], data['购买用户数'], '--');
#'-.'	线加点
plt.plot(data['购买日期'], data['购买用户数'], '-.');
#':'	由点组成的曲线
plt.plot(data['购买日期'], data['购买用户数'], ':');
#'.'	散点图
plt.plot(data['购买日期'], data['购买用户数'], '.');
#','	像素点的散点图
plt.plot(data['购买日期'], data['购买用户数'], ',');
#'o'	大点的散点图
plt.plot(data['购买日期'], data['购买用户数'], 'o');
#'v'	下三角标记的散点图
plt.plot(data['购买日期'], data['购买用户数'], 'v');
#'^'	上上角标记的散点图
plt.plot(data['购买日期'], data['购买用户数'], '^');
#'<'	左角标记的散点图
plt.plot(data['购买日期'], data['购买用户数'], '<');
#'>'	右角标记的散点图
plt.plot(data['购买日期'], data['购买用户数'], '>');
#'1'	伞形下的标记散点图
#'2'	伞形上的标记散点图
#'3'	伞形左的标记散点图
#'4'	伞形右的标记散点图
plt.plot(data['购买日期'], data['购买用户数'], '4');
#'s'	正方形标记的散点图
plt.plot(data['购买日期'], data['购买用户数'], 's');
#'p'	五角形标记的散点图
plt.plot(data['购买日期'], data['购买用户数'], 'p');
#'*'	五角星标记的散点图
plt.plot(data['购买日期'], data['购买用户数'], '*');
#'h'	多边形标记的散点图
#'H'	hexagon2 marker
plt.plot(data['购买日期'], data['购买用户数'], 'h');
#'+'	plus marker
#'x'	x marker
#'D'	diamond marker
#'d'	thin_diamond marker
plt.plot(data['购买日期'], data['购买用户数'], 'D');
#'|'	vline marker
#'_'	hline marker
plt.plot(data['购买日期'], data['购买用户数'], '|');

饼图

饼图(Pie Graph):又称圆形图,是一个划分为几个扇形的圆形统计图,它能够直观地反映个体与总体的比例。
饼图绘图函数:

pie(x,labels,colors,explode,autopct)

参数说明:

  • x:进行绘图的序列
  • labels:饼图的各部分标签序列
  • colors:饼图的各部分颜色,使用RGB标颜色
  • explode:需要突出的块状序列
  • autopct:饼图占比的显示格式,%.2f:保留两位小数
    举例
    原始数据
# -*- coding: utf-8 -*-

import numpy
import pandas
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager

#%matplotlib qt
#设置不在交互式命令行绘图,在弹出新的窗口进行绘图

data = pandas.read_csv(
    'D:\\Data Analysis\\6.3\\data.csv'
)

result = data.groupby(
    by=['通信品牌'], 
    as_index=False
)['号码'].agg({
    '用户数': numpy.size
})

#设置长宽分辨率,dpi就是分辨率
plt.figure(figsize=(30, 30), dpi=80)

#使用绝对路径获取字体的名称的方法
fontProp = font_manager.FontProperties(
    fname="C:\\Windows\\Fonts\\FZSTK.TTF"
)
#设置字体,使用get_name()获取字体的名称
font = {
    'family': fontProp.get_name(),
    'size': 20
}
matplotlib.rc('font', **font)

#设置为横轴和纵轴等长的饼图
#也就是圆形的饼图,而非椭圆形的饼图
plt.axis('equal')

plt.pie(
    result['用户数'], 
    labels=result['通信品牌'], 
    autopct='%.2f%%'
)

plt.show()

输出结果:
在这里插入图片描述

#设置突出的部分
explode = (0.1, 0.1, 0.1)
plt.axis('equal')
plt.pie(
    result['用户数'], 
    labels=result['通信品牌'], 
    autopct='%.2f%%',
    explode=explode,
    startangle=67 # 调正图输出的角度
)
plt.show()

输出结果:
在这里插入图片描述

柱形图

柱形图:是一种以长方形的单位长度,根据数据大小绘制的统计图,用来比较两个或以上的数据(时间或类别)。

柱形图绘图函数:

# 绘制纵向的柱形图
bar(left,height,width,color)
# 绘制横向的柱形图
barh(bottom,width,height,color)

参数说明:

  • left:x轴的位置序列
  • height:y轴的数值序列
  • width:柱形图的宽度
  • color:柱形图填充颜色

纵向、横向柱形图

举例
原始数据

import numpy
import pandas
import matplotlib
import matplotlib.pyplot as plt

data = pandas.read_csv('D://Data Analysis//6.4//data.csv')

# 设置字体
font = {'family':'SimHei'}
matplotlib.rc('font',**font)

result = data.groupby(by=['手机品牌'],as_index=False)['月消费(元)'].agg({'月消费':numpy.sum})

# 竖向柱形图
# 确定横轴范围
index = numpy.arange(result.月消费.size)
plt.bar(index,result.月消费)
plt.show()

输出:
在这里插入图片描述
当前的柱形图既没有x轴刻度,也没有排序,基本无作用。因此需要进行优化。

# 优化点1,配置颜色
mainColor = (42/256, 87/256, 141/256, 1)
plt.bar(index,result.月消费,color=mainColor)
plt.show()

# 优化点2,配置x轴刻度
plt.bar(index,result.月消费,color=mainColor)
plt.xticks(index,result.手机品牌)
plt.show()

# 优化点3,对数据排序后再绘图
sgb = result.sort_values(
        by='月消费',
        ascending=False)
plt.bar(index,sgb.月消费,color=mainColor)
plt.xticks(index,sgb.手机品牌)
plt.show()

输出结果:
优化点1:配置颜色
优化点2:配置x轴刻度
优化点3:排序

# 横向柱形图
plt.barh(index,sgb.月消费,color=mainColor)
plt.yticks(index,sgb.手机品牌)
plt.show()

输出结果:
横向柱形图

多维条形图

import numpy
import pandas
import matplotlib
import matplotlib.pyplot as plt

data = pandas.read_csv('D://Data Analysis//6.4//data.csv')

# 设置字体
font = {'family':'SimHei'}
matplotlib.rc('font',**font)

# 交叉分析
result = data.pivot_table(
        values='月消费(元)',
        index='手机品牌',
        columns='通信品牌',
        aggfunc=numpy.sum)

# 设置x轴长度和颜色
index = numpy.arange(len(result))
minColor = (42/256, 87/256, 141/256, 1/3)
midColor = (42/256, 87/256, 141/256, 2/3)
maxColor = (42/256, 87/256, 141/256, 3/3)

# 使用排列的方式,将数据排列好,形成多维条形图
plt.bar(index,result['全球通'],color=minColor,width=1/4)
plt.bar(index+1/4,result['动感地带'],color=midColor,width=1/4)
plt.bar(index+2/4, result['神州行'], color=maxColor, width=1/4)
plt.xticks(index+1/3,result.index)

# 添加图例
plt.legend(['全球通','动感地带','神州行'])
plt.show()

# 对数据进行排序优化
result = result.sort_values(by='神州行',ascending=False)
plt.bar(index,result['全球通'],color=minColor,width=1/4)
plt.bar(index+1/4,result['动感地带'],color=midColor,width=1/4)
plt.bar(index+2/4, result['神州行'], color=maxColor, width=1/4)
plt.xticks(index+1/3,result.index)

# 添加图例
plt.legend(['全球通','动感地带','神州行'])
plt.show()

输出结果:
在这里插入图片描述

import numpy
import pandas
import matplotlib
from matplotlib import pyplot as plt

font = {
    'family' : 'SimHei'
}
matplotlib.rc('font', **font)

data = pandas.read_csv(
    'D:\\Data Analysis\\6.4\\data.csv'
)

result = data.pivot_table(
    values='月消费(元)', 
    index='手机品牌', 
    columns='通信品牌', 
    aggfunc=numpy.sum
)

index = numpy.arange(len(result))
minColor = (42/256, 87/256, 141/256, 1/3)
midColor = (42/256, 87/256, 141/256, 2/3)
maxColor = (42/256, 87/256, 141/256, 3/3)

result = result.sort_values(
    by="神州行", ascending=False
)

#使用排列的方式,把数据堆叠放好,即为多维条形图
plt.bar(index,result['神州行'],color=maxColor)
plt.bar(index,result['动感地带'],bottom=result['神州行'],color=midColor)
plt.bar(index,result['全球通'],bottom=result['神州行']+result['动感地带'],color=minColor)
plt.xticks(index,result.index)
plt.legend(['神州行', '动感地带', '全球通'])
plt.show()

输出结果:
在这里插入图片描述

# -*- coding: utf-8 -*-

# -*- coding: utf-8 -*-
import numpy
import pandas
import matplotlib
from matplotlib import pyplot as plt

font = {
    'family' : 'SimHei'
}
matplotlib.rc('font', **font)

#解决负号是一个矩形的问题
matplotlib.rcParams['axes.unicode_minus'] = False  

data = pandas.read_csv(
    'D:\\Data Analysis\\6.4\\data.csv'
)

result = data.pivot_table(
    values='月消费(元)', 
    index='手机品牌', 
    columns='通信品牌', 
    aggfunc=numpy.sum
)

index = numpy.arange(len(result))
minColor = (42/256, 87/256, 141/256, 1/3)
midColor = (42/256, 87/256, 141/256, 2/3)
maxColor = (42/256, 87/256, 141/256, 3/3)

result = result.sort_values(
    by="神州行", 
    ascending=False
)

#使用排列的方式,把数据堆叠放好,即为多维条形图
plt.barh(
    index, 
    result['动感地带'], 
    color = minColor
)
plt.barh(
    index, 
    -result['神州行'], 
    color = maxColor
)
plt.yticks(index, result.index)
plt.legend(['动感地带', '神州行'])
plt.show()

输出结果:
在这里插入图片描述

直方图

直方图(Histogram):是用一系列等宽不等高的长方形来绘制,宽度表示数据范围的间隔,高度表示在给定间隔内数据出现的频数,变化的高度形态表示数据的分布情况。
直方图绘图函数:

hist(x,color,bins,cumulative=False)

参数说明:

  • x:需要进行绘制的向量
  • color:直方图的填充颜色
  • bins:设置直方图的分组个数
  • cumulative:设置是否累计计数,默认是False

举例

import pandas
import matplotlib
from matplotlib import pyplot as plt

font = {
    'family' : 'SimHei'
}
matplotlib.rc('font', **font)

data = pandas.read_csv(
    'D:\\Data Analysis\\6.5\\data.csv'
)

mainColor = (42/256, 87/256, 141/256, 1)

plt.hist(data['购买用户数'], color=mainColor)
plt.show()

plt.hist(data['购买用户数'], bins=20, color=mainColor)
plt.show()

plt.hist(
    data['购买用户数'], bins=20, 
    cumulative=True, color=mainColor
)
plt.show()

输出结果:
在这里插入图片描述

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页