从零开始学Python(4) -----用Jupyter绘制各种图形

在上一次学习中,我们介绍了如何加载CSV文件,并在Jupyter笔记本上绘制条形图。这次,我们将介绍如何从CSV文件中提取任意数据并绘制各种图形。

让我们看看股票是涨还是跌

之前,我们已经体验了用Pandas库来读取读取CSV数据并绘制图表。可以说,Pandas是一个非常强大的数据分析库。正如我们上次看到的那样,大家只需要简单的几行代码就能实现CSV文件的读取和表示。

现在,让我们进一步体验一下Pandas的强大功能吧。

import pandas as pd
df = pd.read_csv("stock.csv", encoding="GB2312")
df['成交笔数']
只显示成交笔数栏的数据

从程序中我们可以看到,使用pdf.read_csv方法来读取CSV文件时,可以获得DataFrame type类型的表格对象,然后通过df [“ column name”]的方式可以取得任意列的数据。

并且我们还可以对取得的各列的数据进行四则运算。接下来,让我们计算一下收盘价格和开盘价格之间的差吧(股票涨跌)。

 import pandas as pd
 df = pd.read_csv("stock.csv", encoding="GB2312")
 df["收盘价"] - df["开盘价"]
计算每天股价的涨跌

像这样,两个列之间通过运算符减号(-)连接,就可以计算出每一天的股价涨跌情况。

不过,仅仅用上面的方法的话,输出的结果比较难以理解。在这里我们可以给输出结果的每一列加上一个标题。另外,从上图可以看出,如果把所有记录都显示出来的话,输出结果会比较长,在这里我们可以指定要输出的记录条数。

%matplotlib inline
import pandas as pd
df = pd.read_csv("stock.csv", encoding="GB2312")
# 计算涨跌 --- (*1)
df['涨跌'] = df["收盘价"] - df["开盘价"]
# 排序 --- (*2)
df = df.sort_values(by=["涨跌"], ascending=False)
# 取得前10条 --- (*3)
top5 = df[0:5]
# 输出计算结果 --- (*4)
top5.plot.bar(y=["涨跌"], x="日期")
top5
显示涨幅最大的5天的数据

从上图可以看出,12/09和12/16两天的差价最大。言归正传,让我们来看看具体的代码。

在(* 1)部分,计算了收盘价和开盘价之间的差价。如前所述,使用Pandas,我们可以对指定的列进行数学计算,并且把计算的结果放到“涨跌”中,最后“涨跌”这一列会被添加到原始数据中。从上面的表格中我们可以看到,原始数据中的最后一列后面增加了“涨跌”列。

然后在(* 2)部分,我们以涨跌的幅度对数据进行了排列。

接下来在(* 3)部分中,把数据的前5条记录取出来赋给了变量top5。在Pandas检索指定范围的记录,请使用df [0:5]。这个表达式的意思是把第0行到第5行-1(即第4行)的记录取出来。

最后,在(* 4)部分,我们把取出的数据用表格和条形图的方式显示了出来。通过plot.bar方法,并指定x和y轴的数据序列就可以绘制出直观的条形图来了。

顺便问一下,如果先知道涨跌最小的记录,应该怎么办了?如果大家有兴趣的话,可以自己尝试修改一下代码。

提示:只需要在上面的代码中修改一个地方就可以实现!

以更易于理解的方式处理条形图

上面的图中,涨跌都是正的,如果有负的情况,怎么更好的通过图表显示出来呢?让我们编写一个图表,清楚地显示正增长和负增长之间的边界。

 %matplotlib inline
 import pandas as pd

 df = pd.read_csv("stock.csv", encoding="GB2312")
 # 计算涨跌
 df['涨跌'] = df["收盘价"] - df["开盘价"]
 df = df.sort_values(by=["涨跌"], ascending=False)
 # 取出涨幅正和负的数据 --- (*1)
 mid = df[10:20]

 # 设置条状图的格式为“ggplot” --- (*2)
 import matplotlib
 matplotlib.style.use('ggplot')
 # 显示条状图
 plt = mid.plot.bar(y=["涨跌"], x="日期")
 # 突出显示0界线 --- (*3)
 plt.axhline(0, color='k')

以一种易于理解的方式绘制正负边界

和上次的例子相比,这个例子的代码并没有太多的不同。让我们关注一下有差异的部分吧。

在(* 1)部分,我们取出了第10至20行的数据(从0开始计数)。

再让我们重点看一下(* 2)和(* 3)部分。用(* 2)部分就可以绘制出ggplot样式的漂亮图形。并且(* 3)部分,我们设置了Y轴的0轴边界线的格式。

试试用饼图来显示涨幅数据

接下来,让我们用饼图来看看涨幅前五的数据吧。

 %matplotlib inline
 import pandas as pd
 import matplotlib
 matplotlib.style.use('ggplot')

 df = pd.read_csv("stock.csv", encoding="GB2312")
 # 计算涨跌,并进行排序
 df['涨跌'] = df["收盘价"] - df["开盘价"]
 df = df.sort_values(by=["涨跌"], ascending=False)
 # 取出前5条数据
 top = df[0:5]
 # 绘制饼图 --- (*1)
 top["涨跌"].plot.pie(labels=top["日期"], autopct='%.0f')
用饼图显示涨跌前五的数据

这表明东京的增长率惊人。并与爱知县和Sa玉县继续。

(* 1)部分的代码是绘制饼图的代码。到目前为止,把之前绘制条状图的plot.bar修改为plot.pie。此外,通过参数labels可以给饼图添加标签,并且通过参数autopct就可以显示百分比了。

同理,我们也可以绘制出line/barh/hist/box/kde/area/scatter/hexbin等各种图。有关详细信息,请查阅

Pandas手册

总结

在上一次学习的的基础上,我们运用了各种图表来显示股价相关数据。

这次学习的例子中,不管哪个例子,我们都只用了10行左右的代码就可以用表格或图形来显示我们想知道的数据。并且运用Pandas库,我们还可以简单的进行四则运算。

通过这两次的学习,想必大家已经体会到使用Pandas和Jupyter笔记本,您可以绘制出很多更有意义的图形。所以大家可以参考这两次学习的例子,尝试对自己工作中的数据进行数据分析和可视化吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值