Deep Learning 3 数据可视化之EDA

[TOC]

数据可视化–categorical data 离散数据

直方图类型 [单个属性]:

根据不同的种类来区分颜色的【通过利用plotly=>histogram】

import plotly.express as px
fig = px.histogram(data, x='attr', color='attr')
fig.show()

直接画出数量,不用区分种类颜色的【直接利用matplotlib.pyplot=>bar】import matplotlib.pyplot as plt

eg1:

plt.bar(data.attr.value_counts().index, data.attr.value_counts().values)

eg2:

df['Attr'].value_counts().plot.bar()

直方图类型 [单个属性+多个图] :

通过把不同图放在一个图中

# value str length
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5))
# get lens list
tweet_len_1 = tweet[tweet['target'] == 1]['text'].str.len() # get list1
ax1.hist(tweet_len_1, color='green')
tweet_len_0 = tweet[tweet['target'] == 0]['text'].str.len() # get list2
ax2.hist(tweet_len_0, color='red')

直方图类型 [多个属性]:

import plotly.express as px
fig = px.histogram(data, x='attr1', color='attr2')

饼状图 [单个属性]

import plotly.express as px
fig = px.pie(data, name='attr')

数据可视化–numerical data连续数据

数据可视化–Correlation 相关性图[heatmap]

f, (ax1, ax2) = plt.subplots(2, 1, figsize=(24,20))

# Entire DataFrame
corr = df.corr()
sns.heatmap(corr, cmap='coolwarm_r', annot_kws={'size':20}, ax=ax1)
ax1.set_title("Imbalanced Correlation Matrix \n (don't use for reference)", fontsize=14)


sub_sample_corr = new_df.corr()
sns.heatmap(sub_sample_corr, cmap='coolwarm_r', annot_kws={'size':20}, ax=ax2)
ax2.set_title('SubSample Correlation Matrix \n (use for reference)', fontsize=14)
plt.show()

数据可视化–Correlation 相关性图[Box图]

# preparation
colors = ["#0101DF", "#DF0101"]
f, axes = plt.subplots(ncols=4, figsize=(20,4))

sns.boxplot(x="Class", y="V17", data=new_df, palette=colors, ax=axes[0])
axes[0].set_title('V17 vs Class Negative Correlation')

sns.boxplot(x="Class", y="V14", data=new_df, palette=colors, ax=axes[1])
axes[1].set_title('V14 vs Class Negative Correlation')

数据可视化–Boxplot

作用:查看是否有离群的点,如果有离群的点(outlier)的话,就删去,防止在训练的时候受到(outlier)影响

数据可视化 [NLP] –WordCloud

词云:利用matplotlib进行可视化,然后把wordcloud嵌套进去,最后进行plt.show()来可视化出来。

from wordcloud import WordCloud
import matplotlib.pyplot import plt

过程:首先产生一个语料库,然后通过wordcloud来generate语料库。

# generate corpus
corpus_wordcloud = create_corpus(data)
# plot wordcloud
plt.figure(figsize=(12, 8))
word_cloud = WordCloud(
  background_color='black',
  max_font_size=80
).generate(' '.join(corpus_wordcloud))
# first image show (imshow)
plt.imshow(word_cloud)
plt.show()

总结

首先关于plot的显示:

plt.legend()  # 显示图同时显示图例
plt.show()  # 显示图
  • plot method

    • hist – histogram 柱状图 [单个属性attr传入然后绘图即可]
    plt.hist(data['attr'])
    
    • scatter – 散点图 [两个属性传入,然后每个点的横纵坐标代表在两个属性中的区别] => 两个numerical type
    plt.scatter(data['attr1'], data['attr2'])
    
    • catplot – 种类图 [两个属性传入] => 一个numerical type,一个cateogrical type
    sns.catplot(x='attr1', y='attr2', data=data)
    
    • boxplot – 箱型图 [两个属性传入] => 一个numerical,一个cateogrical type ==>
    sns.boxplot(x='attr1', y='attr2', data=data)
    
    • violinplot – 小提琴图
      • 补充作用:用于显示数据分布及其概率密度
      • img
    sns.violinplot(x='attr1', y='attr2', data=data)
    
  • plot image

    one images and some points(which is represent with coordinate in keypoints list)

    def plot_image(image, keypoints, axis=None, title):
      image = image.reshape(96, 96)
      axis.imshow(image)
      axis.scatter(keypoints[0::2], keypoints[1::2], marker='x', s=20)
      plt.title(title)
    
    def plot_image(image, keypoints, axis=None):
      if axis is None:
        fig, axis = plt.subplots()
      axis.scatter(keypoints)
      axis.imshow(keypoints[0::2], keypoints[1::2], s=10)
    

关于一行中画多个图

1、仅用plt做图,然后画在一行中的情况

  • 利用subplot来进行约束位置【是单数,只需要一个】
  • 利用plt来画各种各样的图
plt.figure(figsize=(16, 8))
# 做第一个图
plt.subplot(1, 2, 1)
plt.scatter(data['attr1'], data['attr2'])
# 做第二个图
plt.subplot(1, 2, 2)
plt.hist(data['attr'])

同样原理,如果是一行三个的话

plt.subplot(1, 3, 1) plt.subplot(1, 3, 2) plt.subplot(1, 3, 3)

2、用循环来做图

  • 利用axes来存储做图数组
  • 利用subplots来约束位置【注意,多个的时候是subplots,是定义很多】,并且在sns每一次画图的时候通过ax来进行约束
f, axes = subplot(3, 5, figsize=(24, 18))
for i, e in enumerate([col for col in data.columns]):
  	sns.violinplot(x=e, y='attr', data=data, ax=axes[i // 5][i % 5])
Posted on Jan 28, 2020