背景

在进行有效的数据处理和分析建模之前,需要事先深入的了解下数据,数据的可视化是非常必要和关键的一步。

目录

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])

python 绘制实时数据 如何用python画数据图_python 绘制实时数据

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中的FacetGridpairplot可以同时显示多张图供比较与探索:

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")

输出如下,如图所示,可以看到每个类别的分布情况:

python 绘制实时数据 如何用python画数据图_数据_02

# 类别的组合,col列中的类别和col_1中的类别的组合,然后看分布图
g = sb.FacetGrid(df, row="col", col="col_1")
g.map(sb.distplot, "col_2")

效果如下:

python 绘制实时数据 如何用python画数据图_数据_03

sb.pairplot:

# 两两作图,默认对角线上的图为直方图,其余为散点图,注意传的参数为一个dataframe
sb.pairplot(df[['col_1', 'col_2', 'col_3']])

输出如下,不同列中数据的相关性,每列的分布都一目了然:

python 绘制实时数据 如何用python画数据图_python 绘制实时数据_04

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)

输出如下:

python 绘制实时数据 如何用python画数据图_python 绘制实时数据_05

# 注意传参即可,用到时再检索不迟
sb.boxplot(x="Overall", y="Aggression", hue='Position', data=df)

输出如下:

python 绘制实时数据 如何用python画数据图_时间序列_06

# 求变量间的相关性
 f = df.loc[:, ['Acceleration', 'Aggression', 'Agility', 'Balance', 'Ball control']].corr()
 # 绘制热图
sb.heatmap(f, annot=True)

f格式如下,类似格式的数据均可以热图显示:

python 绘制实时数据 如何用python画数据图_python 绘制实时数据_07


热图:

python 绘制实时数据 如何用python画数据图_直方图_08

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()

python 绘制实时数据 如何用python画数据图_时间序列_09