查看本案例完整的数据、代码和报告请登录数据酷客(http://cookdata.cn)案例板块。
本案例适合作为大数据专业数据可视化课程的配套教学案例。通过本案例,能够达到以下教学效果:
- 培养学生对真实数据进行可视化分析的能力。案例基于苹果公司2013-2018年的股票数据,进行股票数据涨跌的可视化分析。
- 帮助学生熟悉常用图表的绘制方法。例如:折线图、散点图、柱状图、直方图、核密度图和小提琴图等。
- 提高学生动手实践能力。案例中使用Python中的两个常用可视化工具Matplotlib和Seaborn,提高学生绘制常用图表的实践能力。
可视化分析在数据分析中扮演着相当重要的角色。可视化可以使数据更为清晰得传递信息,使数据分析更为生动具体。Matplotlib是一个Python库,用于2D绘图,而Seaborn是Python基于Matplotlib的数据可视化的库。Seaborn在Matplotlib的基础上进行了更高级的封装,从而使得作图更加简单方便,可以作出信息丰富且美观的图。本案例旨在帮助大家快速熟悉Matplotlib和Seaborn这两个可视化工具的操作。
1.数据载入及预处理
本案例我们将分析一个股票数据集,此数据集包含美国500家上市公司2013-2018年的股票数据,我们选择其中苹果公司的股票作为分析对象,来进行股票涨跌的分析。S&P 500 Index数据集中每一列数据对应的含义如下表所示:
首先,我们导入数据集并采样得到苹果公司股票(AAPL)2013-2018年的数据。为了便于之后的分析,我们从date
列提取年和月的信息并添加year
和month
两列数据。
import pandas as pd
import numpy as np
df = pd.read_csv('./input/all_stocks_5yr.csv')
appl = df.loc[df['Name'] == 'AAPL']
appl = appl.set_index('date')
mon = []
year = []
for item in appl.index:
mon.append(int(item[5:7]))
year.append(int(item[0:4]))
appl['month'] = mon
appl['year'] = year
appl.head()
2.Matplotlib绘图
2.1 折线图
折线图用于绘制连续型数据,展示数据变化的趋势。
我们将数据以年为单位进行分组,以每年收盘价格的平均值绘图。
%matplotlib inline
import matplotlib.pyplot as plt
x = appl.groupby('year').close.mean().index
y = appl.groupby('year').close.mean().values
plt.plot(x,y)
分析:从图中我们可以看出,苹果公司2013-2018年的股票收盘价格变化趋势,总体趋势走高,但是我们注意到2015年,出现下降趋势,但2016股票行情回暖并大幅度走高。
此处我们用到了plot()
函数,其用法很简单,x
为横坐标数据,y
为纵坐标数据。除此之外,Matplotlib还提供了丰富的线形及其颜色,还可以调节线的宽度(linewidth
),数据点的大小(markersize
)及设置坐标轴的名字等。同时,可以利用grid()
函数绘制网格线;默认为False
,利用legend()
函数设置图例,使用其loc
参数设置图例的位置等。另外,Matplotlib允许多条折线绘制在一张图中。
plt.plot(x,y,label='Close Price')
plt.grid(True)
plt.legend(loc = 'upper left')
plt.title('Average Close Price in 2013-2018')
plt.xlabel('Year')
plt.ylabel('Average Close Price')
绘制2013-2018年,每年成交量平均值的折线图。
x1 = appl.groupby('year').volume.mean().index
y1 = appl.groupby('year').volume.mean().values
plt.plot(x1, y1, color='red', marker='o', linestyle='dashed', linewidth=2, markersize=12)
#or
plt.plot(x1, y1, 'r--',label='Close Price', linewidth=2, markersize=12)
plt.legend(loc = 'upper right')
plt.title('Average volume in 2013-2018')
plt.xlabel('Year')
plt.ylabel('Average volume')
plt.grid(True)
分析:此图反映了2013-2018年间,苹果公司股票交易量的变化趋势,我们可以看出其交易量整体呈下降趋势,但2017年开始转变。结合上一个图,我们看出,虽然股票的价格升高,但是股票的成交量降低,所以由这两个图不能很明确的体现股票真正价值的变化,其股票价格的升高,可能是由于货币价值的变化,通货膨胀等,具体原因需要结合更多的数据集进行分析。
我们将数据以年为单位进行分组,把股票最低价格的平均值和最高价格的平均值绘制于同一个画布上。
x1 = appl.groupby('year').low.mean().index
y1 = appl.groupby('year').low.mean().values
y2 = appl.groupby('year').high.mean().values
plt.title('Average Price in 2013-2018')
plt.xlabel('Year')
plt.ylabel('Average Price')
plt.plot(x1,y1, 'go-', label='High', linewidth=2)
plt.plot(x1,y2, 'rs--', label='Low',linewidth=2)
plt.legend(('High', 'Low'),loc='upper left')
plt.grid(True)
分析