資料科學淺淺淺探

Share This Post

前言

<aside> 🧐 商業活動會經由紙張會電子媒體記錄下來,而這些紀錄變成為資料,而經過特殊工具與技術的分析與挖掘,便能歸納出模式(pattern)與情報(intelligence),反映出商業活動的運作情形,回饋至企業,進而演化改善,從而能更有效且有效率的滿足客戶的需求。 賺的**$$**也變多了

</aside>

Untitled

資料處理鏈


Untitled

資料 (Data)

任何可被紀錄的事物都是資料,觀察與事實、趣聞軼事、意見等,紀錄方式可以是數字也可以是文字,包含書面報表、電腦紀錄、電話錄音、網路聊天紀錄、電影歌曲等。

  • 名目資料 (nominal data):能區分成不同的組別,例如零售店販賣的各種顏色襯衫,這些顏色之間沒有固定的排序,也無法比較價值高低。
  • 次序資料 (ordinal data):有順序性的資料,編碼後的數字能夠進行排序,但無法進行加減,也可降皆為名目資料。像是大、中、小,或是教育程度。例如襯衫的Size,我們可以清楚知道中比小還要大,大又比中還要大,但其間的差異不一定相等。
  • 區間資料 (Interval data):定義在某一範圍內的不連續數值,並假設個數值間具有同等距離,因為等距。所以能夠加減,但不具絕對原點,所以不能夠乘除。可降階為名目資料與次序資料。例如客戶滿意度分數分為10級來評等、年份。
  • 比值資料 (ratio data):數值資料的最高層級,可以是任何數值,可降階為名目資料、次序資料與區間資料。例如員工的身高與體重、襯衫的價格、精確氣象資料(氣候、氣壓、濕度)等,可形成任何分數的精確數值。
  • 二進位大型物件 (Binary Large Objects, BLOB):本身無法作太多數學上的分析,至少無法直接分析,必須經由組裝才能被分析,包含音訊、圖檔、影片。這類資料是用不同類型的分析與探勘,例如歌曲可以描述為快樂或悲傷、快節奏或慢板等,他們或許包含了感性與意圖,但這些並無法精確的量化。

<aside> 💡 資料化 (Datafication),意旨現在幾乎所有現在都會被觀察與儲存。

</aside>

資料庫 (DB)

模型化的資料集合,可運用多種方式進行存取。(大家應該都懂,跳過

資料倉儲 (DW)

從整個組織而來、經過整理的資料儲存,特別設計用來協助制訂管理決策。資料可以從作業資料庫中取出以回答一組特定的查詢,此資料再結合其他資料一同向上彙整至一致的詳盡度。因此,是作業資料庫的簡化版本,目的只為了製作報表與制定決策所需。1990年由倉儲之父 W.H. Inmon 所創造的新名詞。他將資料倉儲定義為『支援管理層級輔助決策程序的資料集合,並具有**主題導向( Subject-Oriented )、整合(Integrated)、不易變動(Nonvolatile)隨時間變化(Time-Variant)**之資料特性』(W. H.Inmon, 2005)。

層面資料庫資料倉儲
目的可用於許多用途,包含日常作業。單一應用,無跨平台作業能力淨化過的資料,適用與報表與分析。資料分析主題,具跨平台作業能力
詳盡程度高詳盡度資料,包含所有活動與交易細節,且維持資料持續性的更動低詳盡度,向上彙整至特定重點興趣層面,且持續擴充新增資料
複雜度高度複雜,存在數十或數百個以共同的資料欄位互相連結的資料檔案,要求及時與穩定通常組織成一個大型事實資料表,以及許多查找表,要求分析的方便性與正確性
大小資料隨著活動與交易量的成長而增加,通常舊的完成交易會被刪除以降低大小隨著每日從作業資料庫而來的資料向上彙整並附加進來成長,資料會保留下來供長期趨勢分析
架構選擇關聯式、物件導向資料庫星型架構 (Star schema)、雪花型架構 (Snowflake schema)
資料存取機制SQL,傳統城市存去DB是透過開放資料庫互聯 (ODBC)介面透過SQL存取,SQL輸出會傳送至報表工具以及資料視覺化工具
資料分析僅提供短期的交易資料查詢提供多維度的長期趨勢分析

資料探勘 (Data Mining)

從資料中發掘有用創新模式的一門技術,應該用於解決高優先、高價值的問題。在收集、整理並組織資料、資料探勘與分析,以期找出正確見解的過程需耗費許多資源,因此應該選擇正確的資料,將他整理成良好且可想像的架構,再進行資料探勘。

  • 決策樹 (Decision tree):協助將母體 (population) 依據特徵分類為不同類別 (class)。決策樹模型會依據訓練資料找出合適的規則,最終生成一個規則樹來決策所有事情,其目的使每一個決策能夠使訊息增益最大化。 Untitled
  • 迴歸 (Regression):透過許多資料點找出最符合的曲線,產出的迴歸模型用來估計、推斷與預測未來。 Untitled
  • 類神經網路 (Artificial Neural Networks, ANN):源自於人工智慧與機器學習領域,也稱為模擬神經網路 (SNN),其名稱和結構靈感來自人腦,模仿生物神經元彼此之間發送訊號的方式。包含一個輸入層、一個或多個隱藏層,以及一個輸出層,神經網路依賴訓練資料來學習並隨著時間的推移提高其精確度。 Untitled
  • 集群分析 (Cluster analysis):一種精簡資料的方法,用來分割與擊破大型資料集的重要資料探勘技術,依據樣本之間的共同屬性,將比較相似的樣本聚集在一起,形成集群。目標是將樣本分為不同的數個組,以使各組內的同質性最大化,以及各組之間的異質性最大化。最常用於市場區隔
  • 關聯規則探勘 (Association Rule Mining) :運用在零售業時也稱為購物籃分析 (Market Basket Analysis),用來尋求資料值間的關聯性,例如分析同一個購物籃中經常一起出現的項目,有助於產品交叉銷售並創造搭售產品。

<aside> 💡 雖然不是真的,但非常有名的「啤酒尿布」故事。 還有你常常看得 Youtube, Netfilx 是不是常常被推薦很多影片。

</aside>

演算法非常多種,我自己都還不是很了解,自我學習自我學習。

MuaKissGIF.gif

資料視覺化


常見的Python繪圖套件有Matplotlib, Pandas, Seaborn等,Matplotlib的繪圖機制十分複雜,Pandas則較為容易,Pandas會自動化大部分的過程,但相對來說可以產生的圖表就只有Matplotlib中的一小部分。而Seaborn是Matplotlib的封裝函示庫 (wrapper),較為上層,可以實現美觀的視覺化效果。

Pandas可以幫助創建和操作結構化的資料 (Structure data),如 CSV 檔案、Excel 試算表、資料庫中的表格資料。也可以用它來畫圖

繪製基本圖形 – Pandas

Google Colaboratory

import pandas as pd
import numpy as np

# 建立一個小的DataFrame
df = pd.DataFrame(
	index=['Mei', 'Tilda', 'Peter', 'Luca', 'Kyle'],
	data={'Monitor':[2, 3, 2, 1, 10],
				'Keyboard':[1, 3, 6, 5, 20]
				})

# 顯示物件
df
ax = df.plot()  # 預設為折線圖
  • 使用Pandas繪製長條圖 ax = df.plot.bar(figsize=(16,4)) # figsize決定整個圖形長寬
  • 使用Pandas繪製KDE圖 ax = df.plot.kde(figsize=(28,6))
  • 使用Pandas繪製箱型圖 ax = df.plot.box(figsize=(28,6))
  • 使用Pandas繪製面積圖 ax = df.plot.box(figsize=(28,6))
  • 使用Pandas繪製圓餅圖 ax = df.plot.pie(y='Monitor') ax = df.plot.pie(y='Keyboard', autopct="%1.0f%%") ax = df.plot.pie(subplots=True, figsize=(11, 6))

決策樹 (Decision Tree)

今天我們來做一個喝飲料的決策樹~

決策樹.png

產生一個假資料集,為之後訓練和預測用。

import random
from collections import defaultdict
human_beings = defaultdict(lambda: [])
def checkType(age, temp, male, sleepy, hungry):
    if age >= 25: return '咖啡'
    if age < 25:
      if temp>33.00:
        if male=='male':
          return '快樂肥宅水'
        else:
          if hungry==True: return '果汁'
          return '原萃'
      elif temp>23.00: return '原萃'
      else:
        if sleepy==True: return'咖啡'
        return '原萃'

for i in range(1000):
    age = random.randint(20, 30)
    temp = random.uniform(10.00,40.00)
    male = random.choice([True, False])
    sleepy = random.choice([True, False])
    hungry = random.choice([True, False])
    
    human_beings['type'].append(checkType(age, temp, male, sleepy, hungry))
    human_beings['age'].append(age)
    human_beings['temp'].append(temp)
    human_beings['male'].append(male)
    human_beings['sleepy'].append(sleepy)
    human_beings['hungry'].append(hungry)

再來我們通過Pandas這個套件處理資料,將資料變成一個DataFrame

import pandas as pd
data = pd.DataFrame.from_dict(human_beings)
data  # 印出來看看

接下來進行資料分離,讓資料分成可以被訓練的資料 (training modal)跟要測試的資料 (test modal)。

y = data['type']                   # 變出 y 資料
y
X = data.drop(['type'], axis=1)    # 變出 X 資料,將 type 丟棄
X

透過 sklearn 這個套件可以簡單地將資料作分割,用比例簡單地分成 8:2 (test_size=0.2)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
~~# 可以印出來看看XD~~

開始訓練決策樹 → DecisionTreeClassifier().fit()

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)

可以看看他訓練完後的分數

from sklearn.metrics import accuracy_score
y_predict = model.predict(X_test)
accuracy_score(y_test, y_predict)

透過sklearn本身有的功能將決策樹視覺化

from sklearn.tree import export_graphviz
from sklearn import tree
dot_data = export_graphviz(model, out_file=None,
            feature_names=['age', 'temp', 'male', 'sleepy', 'hungry'],
            class_names=model.classes_,
            filled=True, rounded=True, leaves_parallel=True)

tree.plot_tree(model)

或是透過另外的套件 Graphviz,畫出來會更漂亮😆

import graphviz
graphviz.Source(dot_data)

參考文章


資料視覺化之 Decision tree (決策樹)範例與 Machine Learning (機器學習) 概念簡單教學(入門)

以數據為師,用決策樹模型判斷今天能不能打羽球

訂閱研究文章

Get updates and learn from the best

More To Explore

Scroll to Top

hurry up !

軟體工程師培訓

限時免費報名中

藉由與「真實世界軟體專案」相同的技術、工具與開發流程,化簡成與商業機密無關、門檻較低更容易上手的「模擬專案」,讓你有機會在職場前輩的陪伴下,完成真槍實彈的練習,動手解決真實的問題,快速累積個人的經驗與作品,而不只是「學習技術」而已。