提示: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
不必过于在意版本,通常来说都是直接安装成最新版。
提示:以下是本篇文章正文内容,下面案例可供参考
代码如下(示例):
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 = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")
midwest.head()
该处使用的url网络请求的数据。
代码如下(示例):
#(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()
我们什么时候会需要散点图呢?
数据报告 & 学术研究:
展示趋势:比如产品销量随着时间如何变化,智力水平随着教育程度如何变化等
展现状态:不同年龄的客户的成交率,不同生产成本对应的生产员工技能要求
数据探索 & 数据解读:
探索数据关系,帮助了解事实,推动研究
统计学 & 机器学习:
探索数据关系,指导数据预处理和模型选择