Python可视化图系列(1)-----jupyter notebook

Python可视化-----复杂的散点图

文章目录

  • Python可视化-----复杂的散点图
  • 前言
  • 一、我们的目标是什么?
  • 二、实现目标的知识准备
    • 1.引入库
    • 2.导入数据
    • 3.准备标签的列表和颜色
  • 三、画目标图片(复杂的散点图)
  • 四、解读图像
  • 总结


前言

提示:00 安装库,配置环境
在Python中进行可视化,我们需要的是这些库:

matplotlib:python中自带的,也是最常用的可视化工具包,在Jupyter中甚至可以找到matplotlib的网站。
seaborn:python中可视化的新起之秀,致力于统计数据可视化。
brewer2mpl:brewer2mpl是一个专供python使用的,用于访问colorbrewer2色谱的工具,colorbrewer2是一个专业颜色顾问公司。

matplotlib
通常来说,如果我们是使用anaconda安装的python,那matplotlib是自带的
如果你发现你的python环境中没有matplotlib,那你可以使用以下命令先安装pip,然后从pip中安装matplotlib:
下面展示安装代码

python -m pip install -U pip
python -m pip install -U matplotlib

你可以通过在Jupyter中运行 print(matplotlib.version) 来查看你现有的matplotlib版本。
下面展示运行代码

import matplotlib as mlp
print(mlp.__version__)

seaborn是需要自己安装的。如果不是anaconda自带,建议使用pip安装。

#%%cmd
#pip install seaborn
import seaborn as sns
print(sns.__version__)

seaborn要求必须0.9.0以上,否则代码会报错,不足0.9.0的大家可以使用以下代码进行升级。
下面展示相关代码

#%%cmd
#pip install --upgrade seaborn

brewer2mpl
同样也需要自己安装,使用以下代码:

#%%cmd
#pip install brewer2mpl

不必过于在意版本,通常来说都是直接安装成最新版。


提示:以下是本篇文章正文内容,下面案例可供参考

一、我们的目标是什么?

我们的目标是:绘制出下图,并且利用数据解读图内的信息。
Python可视化图系列(1)-----jupyter notebook_第1张图片

二、实现目标的知识准备

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#如果你在使用Jupyter Notebook,你会需要这样一句命令来让你的图像显示

2.导入数据

代码如下(示例):

#导入数据
midwest = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")
midwest.head()

该处使用的url网络请求的数据。


3.准备标签的列表和颜色

代码如下(示例):

#(1)标签
midwest['category']
#提取标签中的类别
categories = np.unique(midwest['category']) #去掉所有重复的项
categories #这就是我们要使用的标签的类别列表

颜色

接下来要创造和标签的类别一样多的颜色,如果只有三四个类别,或许我们还可以自己写,然而面对十几个,或者二十个分类,我们需要让matplotlib来帮助我们自动生成颜色。

plt.cm.tab10()

用于创建颜色的十号光谱,在matplotlib中,有众多光谱供我们选择:https://matplotlib.org/tutorials/colors/colormaps.html
我们可以在plt.cm.tab10()中输入任意浮点数,来提取出一种颜色。光谱tab10中总共只有十种颜色,如果输入的浮点数比较接近,会返回类似的颜色。这种颜色会以元祖的形式返回,表示为四个浮点数组成的RGBA色彩空间或者三个浮点数组成的RGB色彩空间中的随机色彩。
代码如下(示例):

#(2)颜色
color1 = plt.cm.tab10(5.2)
color1 #四个浮点数组成的一个颜色
np.array(color1).reshape(1,-1) #reshape:增维,输入(1,-1)是让行上的维度为1(-1,1)是让列上的维度为1
x1 = np.random.randn(10)
x2 = x1 + x1**2 - 10
plt.scatter(x1,x2,s=50
            ,c=np.array(color1).reshape(1,-1))
plt.show()

三、画目标图片(复杂的散点图)

至此已经阐述完怎样找数据、标签、颜色,现在开始画图。
代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#如果你在使用Jupyter Notebook,你会需要这样一句命令来让你的图像显示
midwest.head()
categories[13] #0~13,通过索引提取标签类别
midwest.loc[midwest["category"] == categories[0],"poptotal"].head()
#为了标签的名称,我们本来就需要循环和标签的类别数目一样的次数
#所以需要循环的次数 = 需要生成的颜色的次数 = 需要生成的小数的个数
#只需要在循环中不断生成颜色就好了
#所以我们可以利用循环中的i来生成14个不同的小数

plt.figure(figsize=(16,10)) #创建画布

for i in range(len(categories)):
    plt.scatter(midwest.loc[midwest["category"]==categories[i],"area"]
                ,midwest.loc[midwest["category"]==categories[i],"poptotal"]
                ,s=20
                ,c=np.array(plt.cm.tab10(i/len(categories))).reshape(1,-1)    #i除以固定的数,来获得小数
                ,label=categories[i]
               )
plt.legend()
plt.show()

四、解读图像

解析标签的含义:第一个字母是平均教育程度的高低(越高的话,我们的标签就是H)
第二个字母是贫困水平的高低(越穷的话,我们的水平就是H)
第三个字母是城市还是乡村
基于标签含义的解析,我们对于图可以分析出什么呢?
代码如下(示例):

midwest["category"].value_counts()
plt.figure(figsize=(16, 10)   #绘图尺寸
           , dpi=60           #图像分辨率
           , facecolor='w'    #图像的背景颜色,设置为白色,默认也是白色
           , edgecolor='k'    #图像的边框颜色,设置为黑色,默认也是黑色
          )

#进行循环绘图
for i, category in enumerate(categories):
    plt.scatter('area', 'poptotal', 
                data=midwest.loc[midwest.category==category, :],
                s=20, c=np.array(plt.cm.tab10(i/float(len(categories)-1))).reshape(1,-1),label=str(category))

#高学历,低贫困的地方
plt.scatter("area","poptotal",
           data = midwest.loc[midwest.category == "HLU",:],
            s=300,
            facecolors="None",
            edgecolors="red",
            label = "Selected")

#低学历,很贫困的地方
#plt.scatter("area","poptotal",
#           data = midwest.loc[midwest.category == "LHR",:],
#            s=150,
#            facecolors="None", #点的填充颜色,为None的时候,表示点是透明的
#            edgecolors="red", #点的边框现在是红色
#           label = "Selected")

#再试试看,高学历,高贫困的地方?
#学历低,但很富有的地方?

#对图像进行装饰
plt.gca().set(xlim=(0.0, 0.12), ylim=(0, 90000)) #控制横纵坐标的范围
plt.xticks(fontsize=12) #坐标轴上的标尺的字的大小
plt.yticks(fontsize=12)
plt.ylabel('Population',fontsize=22) #坐标轴上的标题和字体大小
plt.xlabel('Area',fontsize=22)
plt.title("Scatterplot of Midwest Area vs Population", fontsize=22) #整个图像的标题和字体的大小
plt.legend(fontsize=12) #图例的字体大小
plt.show()

输出展示:
Python可视化图系列(1)-----jupyter notebook_第2张图片

总结

我们什么时候会需要散点图呢?
数据报告 & 学术研究:
展示趋势:比如产品销量随着时间如何变化,智力水平随着教育程度如何变化等
展现状态:不同年龄的客户的成交率,不同生产成本对应的生产员工技能要求

数据探索 & 数据解读:
探索数据关系,帮助了解事实,推动研究

统计学 & 机器学习:
探索数据关系,指导数据预处理和模型选择

你可能感兴趣的:(python,可视化,数据分析,机器学习,人工智能)