20

Pandas绘图功能

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzI1MTE2ODg4MA%3D%3D&%3Bmid=2650075227&%3Bidx=1&%3Bsn=62e63adf377dac16cbaf8994a9abeeaf
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

腾讯课堂 | Python网络爬虫与文本分析(戳一戳)~~

f2mYFrv.png!mobile

可视化是用来探索性数据分析最强大的工具之一。Pandas库包含基本的绘图功能,可以让你创建各种绘图。Pandas中的绘图是在matplotlib之上构建的,如果你很熟悉matplotlib你会惊奇地发现他们的绘图风格是一样的。

本案例用到的数据集是关于钻石的。

import numpy as np
import pandas as pd
import matplotlib

%matplotlib inline
diamonds = pd.read_csv("diamonds.csv")
diamonds = diamonds.drop("Unnamed: 0", axis=1)

print(diamonds.shape)        

diamonds.head(5)
(53940, 10)
n6vEnia.png!mobile

输出结果显示,数据集包含53940个不同钻石的10个特征,其中有数值变量也有分类变量。

柱状图

柱状图是一个单变量图(注意区分柱状图和条形图),它将一个数值变量分组到各个数值单元中,并显示每个单元中的观察值数量。直方图是了解数值变量分布的一种有用工具。所用到的方法是df.hist()

diamonds.hist(column="carat",        # 具体列
              figsize=(8,8),         # 图片大小
              color="blue");         # 绘画颜色
ruAna2.png!mobile

从图上我们可以看到钻石重量的分布是十分倾斜的:大多数钻石大约1克拉及以下,但也有极少量极端值。

为了获得更多细节的数据,我们可以增加分箱的数量来查看更小范围内的钻石重量,通过限制x轴的宽度使整个图形在画布上显得不那么拥挤。

diamonds.hist(column="carat",        
              figsize=(8,8),         
              color="blue",          
              bins=50,               
              range= (0,3.5));       
U3ABVr6.png!mobile

这个直方图让我们更好地了解了分布中的一些细微差别,但我们不能确定它是否包含所有数据。将X轴限制在3.5可能会剔除一些异常值,以至于它们在原始图表中没有显示。接下来看看有没有钻石大于3.5克拉:

diamonds[diamonds["carat"] > 3.5]
zIziIj.png!mobile

哦豁,真的有9颗钻石比3.5克拉大,这些'怪种'钻石我们应该关心吗?出于数据探索的目的,我们完全可以舍弃这些点,但如果是把数据的全貌展示给别人看,我觉得有必要详细说明:范围之外还存在9个离群点。

箱线图

箱线图是另一种单变量图, 方法pd.boxplot()

diamonds.boxplot(column="carat");
yeaQZru.png!mobile

箱线图的中心框代表中间50%的观察值,中心线代表中位数。

boxplot最有用的特性之一是能够生成并排的boxplots。每个分类变量都在一个不同的boxside上绘制一个分类变量。接下来将钻石价格按钻石净度分成两部分来做一个并排的方框图:

diamonds.boxplot(column="price",        
                 by= "clarity",         
                 figsize= (8,8));       
yiAf2y3.png!mobile

上面的箱线图很奇怪:按理说清晰度更好的钻石能卖到更高的价格,然而清晰度最高的钻石(IF)的中间价却比低净度钻石低!这是为什么呢?也许下面这个图可以给我们一些启示:

diamonds.boxplot(column="carat",        
                 by= "clarity",         
                 figsize= (8,8));       
mAJzqu2.png!mobile

上面的图表显示,透明度较低的钻石往往更大,透明度高的钻石更加小巧。由于尺寸重量是决定钻石价值的另一个重要因素,因此低透明度钻石的中间价较高也就不足为奇了。

密度图

密度图以连续曲线显示数值变量的分布。它类似于柱状图,但密度图能更好地显示分布的基本形状。series.plot(kind="density")

diamonds["carat"].plot(kind="density", 
                      figsize=(8,8),    
                      xlim= (0,5));     
VnuquuZ.png!mobile

条形图

条形图是直观显示分类变量计数的图形,df.plot(kind="bar"):

carat_table = pd.crosstab(index=diamonds["clarity"], columns="count")
carat_table
6v6Njuj.png!mobile
carat_table.plot(kind="bar",
                 figsize=(8,8));
fYjIvmv.png!mobile

可以使用二维表格创建堆积条形图。堆积条形图显示每个条形图中另一个变量的分布:

carat_table = pd.crosstab(index=diamonds["clarity"], 
                          columns=diamonds["color"])

carat_table
7NVzuqF.png!mobile
carat_table.plot(kind="bar", 
                 figsize=(8,8),
                 stacked=True);
VvAF3qJ.png!mobile

分组条形图是堆叠条形图的另一种选择,设置stacked=False即可:

carat_table.plot(kind="bar", 
                 figsize=(8,8),
                 stacked=False);
jUrmI3J.png!mobile

散点图

散点图是双变量图,采用两个数值变量,并在x/y平面上绘制数据点。创建单个散点图使用方法df.plot(kind="scatter"):

diamonds.plot(kind="scatter",     # Create a scatterplot
              x="carat",          # Put carat on the x axis
              y="price",          # Put price on the y axis
              figsize=(10,10),
              ylim=(0,20000));
qeyIZfI.png!mobile

尽管上面的散点图有许多重叠点,但它仍然让我们对钻石克拉重量和价格之间的关系有了一些了解:大钻石通常更贵。

折线图

折线图通常用于绘制时间序列数据:

years = [y for y in range(1950,2016)]

readings = [(y+np.random.uniform(0,20)-1900) for y in years]

time_df = pd.DataFrame({"year":years,
                        "readings":readings})


time_df.plot(x="year",
             y="readings",
             figsize=(9,9));
zauQnyZ.png!mobile

保存绘图

如果要保存图片供以后使用,两步就可以轻松解决:首先用plot.get_figure(),然后用figure.savefig("filename")。图片可以保存为多种常见的文件格式,例如png、jpeg和pdf。

my_plot = time_df.plot(x="year",    
             y="readings",
             figsize=(9,9))

my_fig = my_plot.get_figure()            

my_fig.savefig("line_plot_example.png")  
zauQnyZ.png!mobile

总结

Python绘图生态系统有许多不同的库,大部分人可能会很难从中抉择,不知道该如何人下手。Pandas绘图函数使你能够快速地可视化和浏览数据。Pandas绘图函数并没有提供尽善尽美的所有功能,但它们通常足以完成任务。

近期文章

Python网络爬虫与文本数据分析

bsite库 | 采集B站视频信息、评论数据

rpy2库 | 在jupyter中调用R语言代码

tidytext | 耳目一新的R-style文本分析库

reticulate包 | 在Rmarkdown中调用Python代码

plydata库 | 数据操作管道操作符>>

七夕礼物 | 全网最火的钉子绕线图制作教程

读完本文你就了解什么是文本分析

文本分析在经管领域中的应用概述

综述:文本分析在市场营销研究中的应用

plotnine: Python版的ggplot2作图库

小案例: Pandas的apply方法   

stylecloud:简洁易用的词云库  

用Python绘制近20年地方财政收入变迁史视频   

Wow~70G上市公司定期报告数据集

漂亮~pandas可以无缝衔接Bokeh

YelpDaset: 酒店管理类数据集10+G

分享 ”和“ 在看 ”是更好的支持!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK