背景
在进行有效的数据处理和分析建模之前,需要事先深入的了解下数据,数据的可视化是非常必要和关键的一步。
目录
1、
pandas
简单绘图2、
seaborn
高级绘图3、时间序列绘图
1、pandas
简单绘图
- 单变量绘图,即只画其中一列数据,横坐标默认为index:
# 柱状图
df.plot.bar()
# 折线图
df.plot.line()
# 直方图
df.plot.hist()
# 面积图
df.plot.area()
- 双变量绘图,即需要输入x,y:
# 散点图,横坐标为df的col1列,纵坐标为df的col2列
df.plot.scatter(x='col1',y='col2')
# 堆积柱状图,df需要事先处理成需要堆积的列
df.plot.bar(stacked=True)
# 折线图,如果不传参数,会画df所有列的堆积起来的折线图
df.plot.line(x='col1',y='col2')
# hexbin图,横坐标为df的col1列,纵坐标为df的col2列
df.plot.hexbin(x='col1',y='col2gridsize=20)
- 简单多图
plt.subplots
# 要用到matplotlib
import matplotlib.pyplot as plt
# 创造2行1列的多图,会得到两个ax组(axarr),便于一一绘制简单小图
fig, axarr = plt.subplots(2, 1, figsize=(12, 8))
# 第一个坐标系(ax0)绘图
df['points'].value_counts().sort_index().plot.bar(ax=axarr[0])
# 第二个坐标系(ax1)绘图
df['province'].value_counts().head(20).plot.bar(ax=axarr[1])
2、seaborn
高级绘图
- 单图模式
import seaborn as sb
# 先计算出df中col列中的值的出现次数,再绘制柱状图
sb.countplot(df['col']
#散点图,注意里面有个参数kind可以选类型,譬如hex
sb.jointplot(x='col1',y='col2',data=df)
# 直方图
sb.distplot(df['col'], bins=10)
# 箱图
sb.boxplot(x='col1',y='col2',data=df)
# 小提琴图,是箱图的高级版,粗厚代表数据出现频率
sb.violinplot(x='col1',y='col2',data=df)
- 多图模式
1) seaborn
中的FacetGrid
和pairplot
可以同时显示多张图供比较与探索:
sb.FacetGrid()
:
import seaborn as sb
# 根据col列中的值分类,每个类画一张相应的小图,col_wrap为每行显示几张
g = sb.FacetGrid(df, col="col", col_wrap=5)
# 然后用map一一绘图,绘图的值基于col_2的值,这里绘制的是distplot直方图,可以看分布
g.map(sb.distplot, "col_2")
输出如下,如图所示,可以看到每个类别的分布情况:
# 类别的组合,col列中的类别和col_1中的类别的组合,然后看分布图
g = sb.FacetGrid(df, row="col", col="col_1")
g.map(sb.distplot, "col_2")
效果如下:
sb.pairplot
:
# 两两作图,默认对角线上的图为直方图,其余为散点图,注意传的参数为一个dataframe
sb.pairplot(df[['col_1', 'col_2', 'col_3']])
输出如下,不同列中数据的相关性,每列的分布都一目了然:
2)多图叠加
一个x多个y:sb.lmplot()
import seaborn as sb
# hue即色彩(要选中的有不同类别的列),data中只筛选ST', 'RW', 'LW'这三个类别
sb.lmplot(x='Value', y='Overall', hue='Position',
data=df.loc[df['Position'].isin(['ST', 'RW', 'LW'])],
fit_reg=False)
输出如下:
# 注意传参即可,用到时再检索不迟
sb.boxplot(x="Overall", y="Aggression", hue='Position', data=df)
输出如下:
# 求变量间的相关性
f = df.loc[:, ['Acceleration', 'Aggression', 'Agility', 'Balance', 'Ball control']].corr()
# 绘制热图
sb.heatmap(f, annot=True)
f
格式如下,类似格式的数据均可以热图显示:
热图:
3、时间序列绘图
对于时间序列的绘图,首先要先将时间设置为index.如下:
# 打开的时候解析下时间
df = pd.read_csv("xx.csv", parse_dates=['date'])
# 将时间设置为index
df = df[df['symbol'] == "GOOG"].set_index('date')
然后可以按照上述的绘图函数进行绘图,但是默认时间间隔为数据中时间间隔,如果要设置自己需要的时间间隔就要结合resample
(注意resample
的index一定要是时间):
# 此时index为时间,resample('Y').mean()代表以year平均,同理,'M'为month..
df['volume'].resample('Y').mean().plot.bar()