[資料視覺化 Data Visualization]Part9 – 散佈圖

端午佳節愉快~這次的端午佳節,減少移到動在家畫畫圖吧~

這個系列已經進行了九週了,基本圖形都已經介紹也都畫過了,這是倒數第二個圖,下週就會完成最後一個圖,本週就來介紹一下散佈圖,多用於觀測一些資料離群狀況,或是工業可以用在瑕疵檢測…等等.

資料來源 : 因為要說明,所以本次資料來源採用自定義.

0. 目標
散佈圖

散佈圖

1. 先說說六標準差

由於這次想利用常態分佈看出瑕疵狀況,通常單邊連續三點落在管制上下限,就需要注意,若想要更詳細了解可以參考 奇美醫療財團法人 管制圖 也引用文件中的管制圖,藉此等等會畫出類似的圖形作為觀察.

管制圖

管制圖

2. 開始畫圖吧,先引入相關套件
#散佈圖
#載入所需元件
from pyecharts.charts import Scatter,Line #散佈圖是Scatter,另外因為還要畫上下限制線,故也引入Line
from pyecharts import options as opts
3. 定義資料
data = [
    [1, 1],
    [2, 2],
    [3, 1],
    [4, 7],
    [5, 8],
    [6, 8],
    [7, 6],
    [8, 7],
    [9, 5],
    [10, 10],
    [11, 11],
    [12, 11],
]
data.sort(key=lambda x: x[0])
x_data = [d[0] for d in data] #批次
y_data = [d[1] for d in data] #瑕疵數
4. 先畫出管制線
line = (
    Line()
    .add_xaxis(x_data)
    .add_yaxis('UCL',[12,12,12,12,12,12,12,12,12,12,12,12],label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis('CL',[6,6,6,6,6,6,6,6,6,6,6,6,6],label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis('LCL',[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5],label_opts=opts.LabelOpts(is_show=False))
)
line.render_notebook()#先印出來看看
管制線

管制線

5. 開始畫出散佈圖
scatter = (
    Scatter()
    .add_xaxis(
        xaxis_data=x_data,
    )
  
    .add_yaxis(
        series_name="瑕疵數量",
        y_axis=y_data,
        symbol_size=20, #定義圓點大小
        label_opts=opts.LabelOpts(is_show=False),
    )
)
scatter.render_notebook()#先印出來看看
單散佈圖

單散佈圖

6. 讓散佈圖變好看點,並且加上一些X,Y軸資訊
scatter = (
    Scatter()
    .add_xaxis(
        xaxis_data=x_data,
    )
  
    .add_yaxis(
        series_name="瑕疵數量",
        y_axis=y_data,
        symbol_size=20,
        label_opts=opts.LabelOpts(is_show=False),
    )
    .set_global_opts(
        xaxis_opts=opts.AxisOpts(
            type_="value",
            name = '批次',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            min_=0,
            max_=12,
            min_interval=1,
            split_number=12,
        ),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            name = '瑕疵數',
            splitline_opts=opts.SplitLineOpts(is_show=False),
            min_=0,
            max_=12,
        ),
        tooltip_opts=opts.TooltipOpts(is_show=False),
    )
)
scatter.render_notebook()#先印出來看看
優化散佈圖

優化散佈圖

7. 合併線圖與散佈圖,完成管制圖
scatter.overlap(line)
scatter.render_notebook()
散佈圖_管制圖

散佈圖_管制圖

 

按照往例寫在後頭:

身為一個IT與企業人,取之網路用之網路,也想為社會上盡一些力量,做點CSR(企業社會責任 Corporate Social Responsibility),透過我小小的力量,藉此拋磚引玉,我整理了相關視覺化資料簡報(目前約一百多頁)與怎麼畫圖表的程式碼都已經寫成Step by Step的Jupyter Notebook教學文件,有些會陸續在Blog說明,但若各位賢達也想給予鼓勵做些公益,歡迎到任何慈善公益團體捐款(E.g 罕見疾病、脊髓損傷、唐寶寶、愛貓愛狗…etc,比較小型的公益團體),讓愛心可以分散力量發揮出去,並且透過留言聯繫我,提供捐款證明,我將此份文件無償提供給您參考(文件會陸續更新,以當下最新版本提供).

ps 給醫護鼓勵打氣也可以啊~

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *