02仕上げデータの可視化ノート

第二週のノート---「タイミングデータ」と「データの割合が」見える化[TOC]

週のテーマ:アイコンを選択します。学習目標:

  1. 時系列データ、データのタイプごとにマスタータイミングチャートの異なるタイプの特徴を理解します。
  2. 割合データの可視化の目的を知るために、特徴データは、目的のテーブルを選択することを学ぶために設定します。
  3. 練習:指定されたデータセットから4は、2つを選択し、チャートは適切な視覚的レンダリングを選択します。

1.概要

上のグラフを選択 東素人木材より転載

2.タイミングの可視化

一連のデータは、日などの時間にわたる経時任意のデータの変更、温度変化を指します。時間特性を理解することの前提を(時系列分析を使用することができます):

  • 注文した:時間は、イベントの順序を命じています。
  • 巡回:多くの自然現象は、季節などの循環やビジネスサイクルの周期的な性質、あります。
  • 構造:時間スケールは、カットに年、四半期、月、週、日、時、分、秒に従うことができます。

:時間データが連続するかどうかに応じて分割することができ、離散時間および連続時間

2.1離散時間可視化

以下のデータが適切であることが分かっていないようなので、何の遊びがありません。

定義:離散時間:時間または時間の期間の特定の点からのデータ、および時刻データの値を制限することができます。該当するグラフィックス:バー、積み重ね棒グラフ、散布図。(1)単一のヒストグラム該当シーン

  • 適当な離散時間データは傾向を示し、データの数は、一般的に12バール以下です。
  • しかし、時間のトレンドは、データ表現、単一のデータ系列の値、すなわちのカテゴリに適用されます。

フォトギャラリー; シングルサンプルヒストグラム

コード・ショー:

# 单一柱状图
plt.rcParams['font.sans-serif']=['SimHei']#设置字体以便支持中文


x = np.arange(4)#柱状图在横坐标上的位置
#列出你要显示的数据,数据的列表长度与x长度相同
y = age_num.values()

bar_width=0.3#设置柱状图的宽度
tick_label=age_num.keys()

# 记上标签,贴上数值
for a,b in zip(x,y):
    plt.text(a,b,'%.0f'%b,ha = 'center',va = 'bottom',fontsize=14)  # fontsize是字体

#绘制单一柱状图
plt.bar(x,y,bar_width,color='salmon',label='类别A')

plt.legend()#显示图例,即label
plt.xticks(x,tick_label)#显示x坐标轴的标签,即tick_label,调整位置,使其落在直方图中间位置
plt.savefig('squares.png') # 保存为squares.png
plt.show()

該当なしシーン:

  • トレンド連続時間。
  • ストライプ過剰離散時間トレンド表示(アップグレードされた寸法、大きなクラス分割することができます)

ヒストグラムの横の比較による(2)側は、離散時間例いくつかのシリーズに同意並列棒グラフの使用を検討するために、注意がそれ以外の場合は無効、通常つ以上ではないヒストグラム。

アイコン: タイドヒストグラム例

コード:

# 并列柱状图
# 考虑将性别和年龄进行对比
x=np.arange(4)#柱状图在横坐标上的位置
#列出你要显示的数据,数据的列表长度与x长度相同
y1= [i[1] for i in ageSexCount.items() if i[0][1] == "FEMALE"]
y2= [i[1] for i in ageSexCount.items() if i[0][1] == "MALE"]

bar_width=0.3#设置柱状图的宽度
tick_label=age_num.keys()

#绘制并列柱状图
plt.title("并列柱状图demo")
plt.bar(x,y1,bar_width,color='salmon',label='女性')
plt.bar(x+bar_width,y2,bar_width,color='orchid',label='男性')

# 记上标签,贴上数值
for a,b in zip(x,y1):
    plt.text(a,b,'%.0f'%b,ha = 'center',va = 'bottom',fontsize=14)  # fontsize是字体大小
for a,b in zip(x,y2):
    plt.text(a+0.2,b,'%.0f'%b,ha = 'left',va = 'bottom',fontsize=14)  # fontsize是字体大小,通过不断调整a和b的大小调整标签位置

plt.legend()#显示图例,即label
plt.xticks(x+bar_width/2,tick_label)#显示x坐标轴的标签,即tick_label,调整位置,使其落在两个直方图中间位置
plt.savefig("demo2.png")
plt.show()

(3)積層列

シングルバーグラフ表示は、各離散ポイントの時間に、私たちは、全体の組成は、積み上げ棒グラフを導入する必要があります時に知ってほしいです。

  • 実際の体重を示す通常の棒グラフ。
  • 相対体重を示す%積み上げ棒グラフ。

1)通常の積み上げ列

通常積み重ね棒グラフ、全体的な構成部品、好ましくは5以下です。実際の時間は、5つの以上の項目を構成する場合は、チャートを確保し、集中するために、適切な分類をする必要があります。

アイコン: 積み上げ縦棒例

コード:

# 堆叠柱状图
# 这里不能用dict_keys,只能转化成list
name_list = [i for i in age_num.keys()]
num_list1 = [i[1] for i in ageSexCount.items() if i[0][1] == "FEMALE"]
num_list2 = [i[1] for i in ageSexCount.items() if i[0][1] == "MALE"]
z1 = plt.bar(range(len(num_list)), num_list1, label='女性', fc='b')
z2 = plt.bar(range(len(num_list)), num_list2, bottom=num_list, label='男性', tick_label=name_list, fc='g')
plt.ylabel("单位:人", # 坐标轴文本标签
          fontproperties="stkaiti", # 中文字体
           rotation="horizontal", # 文本方向,还可以为vertical(默认)
           fontsize = 14, # 字号
           verticalalignment = "bottom", # 设置垂直对齐,还可以为top或center
           horizontalalignment = "center" # 还可以为left或者right
          )
# 显示高度
for a,b in zip(x,y1):
    plt.text(a,b,'%.0f'%b,
             ha = 'center',
             va = 'bottom',# va可以为bottom,center,top
             fontsize=14)  # fontsize是字号
plt.legend()
plt.savefig("demo3.png")
plt.show()
# 堆叠不太熟悉,似乎有点问题

にくく行うには、列をスタック2)パーセンテージ割合パイソン、唯一の他の誰かのが示す例によって処理Excelやタブローことができます..: パーセンテージの典型的な積み上げ列

コード:

import numpy as np
import matplotlib.pyplot as plt


category_names = ['Strongly disagree', 'Disagree',
                  'Neither agree nor disagree', 'Agree', 'Strongly agree']
results = {
    'Question 1': [10, 15, 17, 32, 26],
    'Question 2': [26, 22, 29, 10, 13],
    'Question 3': [35, 37, 7, 2, 19],
    'Question 4': [32, 11, 9, 15, 33],
    'Question 5': [21, 29, 5, 5, 40],
    'Question 6': [8, 19, 5, 30, 38]
}


def survey(results, category_names):
    labels = list(results.keys())
    # 获取标签
    data = np.array(list(results.values()))
    # 获取具体数值
    data_cum = data.cumsum(axis=1)
    # 逐项加和
    category_colors = plt.get_cmap('RdYlGn')(np.linspace(0.15, 0.85, data.shape[1]))

    """
    在cmmap中取出五组颜色
    category_colors:
        [[0.89888504 0.30549789 0.20676663 1.        ]
         [0.99315648 0.73233372 0.42237601 1.        ]
         [0.99707805 0.9987697  0.74502115 1.        ]
         [0.70196078 0.87297193 0.44867359 1.        ]
         [0.24805844 0.66720492 0.3502499  1.        ]]
    
    """

    print(category_colors)
    # 常见颜色序列, 在cmap中取色

    fig, ax = plt.subplots(figsize=(5, 9))
    # 绘图
    # ax.invert_xaxis()
    # 使其更符合视觉习惯,index本身从下到上
    ax.yaxis.set_visible(False)
    ax.set_xticklabels(labels=labels, rotation=90)
    # 不需要可见
    ax.set_ylim(0, np.sum(data, axis=1).max())

    for i, (colname, color) in enumerate(zip(category_names, category_colors)):
        heights = data[:, i]
        # 取第一列数值
        starts = data_cum[:, i] - heights
        # 取每段的起始点
        ax.bar(labels, heights, bottom=starts, width=0.5,
                label=colname, color=color)
        xcenters = starts + heights / 2
        r, g, b, _ = color
        text_color = 'white' if r * g * b < 0.5 else 'darkgrey'
        for y, (x, c) in enumerate(zip(xcenters, heights)):
            ax.text(y, x, str(int(c)), ha='center', va='center',
                    color=text_color, rotation = 90)
    ax.legend()
    return fig, ax


survey(results, category_names)
plt.show()

(3)散布

スキャッタグラムは、2つの変数間の一般的な関係を示す。時間データは離散時間を表し、その発現は、変数が時間と共に変化している。高さヒストグラムは、マップ値として使用され、散乱プロットでありますビジュアルチャネルの値として位置。

アイコン 散布

コード

#产生测试数据  
x = np.arange(1,10)  
y = x  
fig = plt.figure()  
ax1 = fig.add_subplot(111)  
#设置标题  
ax1.set_title('Scatter Plot')  
#设置X轴标签  
plt.xlabel('X')  
#设置Y轴标签  
plt.ylabel('Y')  
#画散点图  
sValue = x*10  
ax1.scatter(x,y,s=sValue,c='r',marker='x')  
#设置图标  
plt.legend('x1')  
#显示所画的图  
plt.savefig("demo5.png")
plt.show()  

2.2連続時間

連続時間:長期的なトレンド、季節的な傾向、景気循環:連続時間の可視化とデータの類似した離散時間データの可視化にも連続したデータならば、我々は最も離散有限を収集したデータは、4つの傾向を見ることができるので、トレンド、不規則変動(1)行線グラフで連続時間間隔または期間の表示データの変更のための線グラフ、ほぼ水平軸(X軸)は時間の経過を表し、そして同じ間隔縦軸(Y軸)が異なる時間にデータのサイズを表します。

折れ線グラフであって、点線チャート、折れ線グラフ、グラフ。

  • 図は、線を点線:ときにデータ項目の限られたデータセットではなく、12時間以上、適当な図においてこのような点線で。
  • 折れ線グラフ:データは複数の項目を設定し、図中の点線12よりも大きいが、全体の行は折れ線グラフを使用して、トレンドデータに非常に密な、影響を指します。
  • グラフ:比較折れ線グラフ、滑らかな隣接ノードを接続グラフ。

図の点線は示しています。例は、図1の線を点在しました。

コード:

# 点线图
# coding:utf8
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
x = [i for i in age.keys()]
y = [i for i in age.values()]
ax1.plot(x,y,'c*-', label='number of age', linewidth=2)

# 坐标轴标记

ax1.set_title("relationship between age and number")
ax1.set_xlabel("danwei:ren")
ax1.set_ylabel("danwei:nianling")

ax1.legend()
plt.savefig("demo6.png")
plt.show()

折れ線グラフには示しています。図の例でポリライン

コード:

# 点线图
# coding:utf8
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
x = [i for i in age.keys()]
y = [i for i in age.values()]
ax1.plot(x,y)

# 坐标轴标记

ax1.set_title("relationship between age and number")
ax1.set_xlabel("danwei:ren")
ax1.set_ylabel("danwei:nianling")

ax1.legend()


plt.savefig("demo7.png")
plt.show()

グラフ(補間)(通過点補間定数はグラフであり、曲線は必ずしも点をフィットされていません)

アイコン 補間の例 補間例二

コード

#coding:utf8
# 实现平滑曲线图
# 两种方式:插值法或者拟合(机器学习生成的我认为可以归为拟合)

# 插值法
from scipy import interpolate

x = [i for i in age.keys() if i != "age"]
x.sort()
y = list(age.values())[1:]
func = interpolate.interp1d(x, y, kind='cubic')


# 插值法之后的x轴值,表示从0到9的若干个数
xnew = np.linspace(x[1], x[-1], 10000)
# 利用xnew和func函数生成ynew,xnew的数量等于ynew数量
ynew = func(xnew)

# 画图部分
# 原图
# plt.plot(x, y, 'ro-')
# 拟合之后的平滑曲线图
plt.plot(xnew, ynew)
# plt.savefig("demo8.png")
plt.savefig("demo9.png")
plt.show()


# 注意可能会出现如下错误:
# TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
# 原因是元素个数不一致导致。
# 参见链接:https://www.cnblogs.com/Yanjy-OnlyOne/p/11189547.html

(2)ステップラダー図は二つの隣接ノードにデータを表現するために一般的に商品価格の変化、株価の変化、速度変化に使用される前のデータノードの相対的な動きの変化後のノードを使用します。

2)現在のノードの時刻値; 3)ノードの前の現在のノードとの間の差1)前回ノード値:図ラダーは、3つのキーを有しています。

アイコン: ラダーダイアグラム

コード:

# 阶梯图(原来准备的数据用不了不清楚为什么)
import matplotlib.pyplot as plt
import numpy as np

x = [1,2,3,4,5,6,7,8,9,10]
y = [i/2 for i in x]

plt.step(x, y, color="#8dd3c7", where="pre", lw=2)

plt.xlim(0, 11)
plt.xticks(np.arange(1, 11, 1))
plt.ylim(0, 6)

plt.savefig("demo10.png")
plt.show()

(3)関与して補間されたときのような伝統的な回帰または曲線をフィッティングする前に拡張されていない人気の機械学習を行います。

3.データの可視化比

1.パイのパイは、角度に対応する各カテゴリ値をマッピングすることです。以下のデータ項目が整数を構成した場合、円グラフは良い選択です。しかし、失う美しさに多くのディメンション属性の下で、焦点の合っていない、散らかっ。したがって、円グラフのために、それは5〜7の間のセクタの推奨最大数です。データ項目が一定量を超えた場合に、ランキングは、最後のいくつかのホーミング、に従って会計処理することができる「その他」。

  • データ項目N <= 6の場合、元の名前の各セクタは、直接カテゴリを表示します。
  • データ項目N> 6は、直接ランキングTOP5セクタとして分類され、残りの項目を占めカテゴリの元の名前が表示されたら「その他」を アイコン:パイ例

コード:

# coding:utf8
# 饼图
x = age_rangeCount.keys()
y = age_rangeCount.values()
# -*- coding: utf-8 -*-
import numpy as np  
import matplotlib.mlab as mlab  
import matplotlib.pyplot as plt  
labels=x
Y=y
 
fig = plt.figure()
plt.pie(Y,labels=labels,autopct='%1.2f%%') #画饼图(数据,数据对应的标签,百分数保留两位小数点)
plt.title("Pie chart")
  
plt.savefig("demo11.png")
plt.show()  

# 无法显示中文怎么办?

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

図2環状

図環状の中央部が空で、ラベルは、全体的な値、平均値、または他のコンテンツを配置することができます。図リングではなく、繰り返しで同様の分類とパイデータ項目、。アイコン:図環状例

コード:

import matplotlib as mpl
import matplotlib.pyplot as plt

# 设置图片大小
plt.figure(figsize = (10, 8))

# 生成数据
X = x
Y = y
colors = ['c', 'r', 'y', 'g']



# 内环
wedges2, texts2, autotexts2 = plt.pie(Y,
    autopct = '%3.1f%%',
    radius = 0.7, # 控制半径
    pctdistance = 0.75, # 控制文字位置
    colors = colors,
    startangle = 180,
    textprops = {'color': 'w'},
    wedgeprops = {'width': 0.3, 'edgecolor': 'w'}
)

# 图例
plt.legend(wedges1,
          X,
          fontsize = 12,
          title = '年龄划分',
          loc = 'center right',
          bbox_to_anchor = (1, 0.6))

# 设置文本样式
plt.setp(autotexts1, size=15, weight='bold')
plt.setp(texts1, size=15)

# 标题
plt.title('年龄与人数关系', fontsize=20)

plt.savefig('demo12.png')
plt.show()

図二重環状 高度図環(スーパー同様の効果にコピー図を、保持します)

from matplotlib import pyplot as plt

import numpy as np 

fig = plt.figure(figsize=[13.44,7.5],facecolor=(235/255,235/255,235/255))
ax1=fig.add_subplot(1,1,1,facecolor=(235/255,235/255,235/255),projection='polar')
ax1.axis('off')


ax1.barh(height=0.005,width=-0.4*3,y=0.4,color=(243/255,133/255,36/255))
ax1.scatter(-0.4*3,0.4,color=(243/255,133/255,36/255))

ax1.barh(height=0.005,width=-0.5*3,y=0.5,color=(243/255,10/255,36/255))
ax1.scatter(-0.5*3,0.5,color=(243/255,10/255,36/255))

ax1.barh(height=0.005,width=-2*2,y=0.6,color=(243/255,133/255,36/255))
ax1.scatter(-2*2,0.6,color=(243/255,133/255,36/255))

ax1.barh(height=0.005,width=-0.5*np.pi*2,y=0.7,color=(243/255,133/255,36/255))
ax1.scatter(-0.5*np.pi*2,y=0.7,color=(243/255,133/255,36/255))

3.積層列はパーセンテージ親の複数のデータ系列の比率、及び各親が直列サブクラスの複数から構成されている場合に存在し、同じシリーズの各サブクラス、このときの表示データの割合は、パーセンテージスタックカラムを使用することができます。

  • 各シリーズの高さに対応するバーは、スケールの上部は100%で、同じです。
  • 一連の比例代表のバーのそれぞれの子の円筒高さの内側にバー。
  • 多数、それは非表示に推奨されている場合、一連のサブクラスの少数は、それらが矩形内部の直接の割合を示すことができる場合。
  • 場合は、サブカテゴリー、円グラフを基準とした分類方法を分類する必要が集中し、視覚効果を確実にするために、サブカテゴリ、多くのシリーズがあります。

上記の描画方法を参照します。

図4は、面積百分率を重ね

親のデータ系列の複数の存在割合、及び時系列データの親型は、この時点で時間をかけて親系列トレンドの要素の割合、積み上げ面チャートを分析する場合には、比例関係の変化で表すことができます。特定の点からの垂直スライスの積み重ね面グラフ場合、それは時間の配分比に得ることができます。しかし、(Excelが非常に詳細に書かれて、あなたが直接選択することができ、何の良いデータがないので、それは非常に悪いので、表示されません)。Excelで実現ここでは、Pythonのチュートリアルで書かれました

5.長方形の木

長方形の木は、視覚野に基づく方法です。外側の長方形は、親クラスを表し、内側の長方形は、サブカテゴリーを表します。比によって表されるデータの他のタイプと比較して、矩形状の表示はツリーデータ構造を有するツリーに適しています。ツリー、理解するための簡単で、各成分の割合を観察する分類によって最初に、次いで二次分級することにより構成されている特定の分類、下に見えるなど、及び葉ができるようになるまで次第に洗練されノード。

これは、長方形の木で作られたタブローによって推奨されています。

4.まとめ

時系列データを、主な目的は、経時的なデータの変更を検討することで、このような変化は、合計の変化が変化の一部を構成し、傾向およびパターンの変化が挙げられます。比データ、他のそれは全体の各構成部品に求めているデータの種類、およびそれらの関係からキー異なります。

5.質問答え

ヒストグラムは、ゼロからの軸の動向は行うことはできませんか?理由を説明?

あなたができるもちろん、また、警告または効果を誤解を務めていました。Fluctuationalは非常に穏やかな、あなたが人々を誤解、ボラティリティーの28個の言葉を見て開始した場合、この場合の例、30、32、0の場合はある程度。

おすすめ

転載: www.cnblogs.com/smithpath/p/11929235.html