• 【雜記】2023年度回顧

    又到了年末的回故,今年發生了好多事情,有好的有壞的,來順著時間線回顧今年發生的事情好了!

    四月

    今年四月公司舉辦了年度的回訓,細節的過程現在其實已經沒有那麼清晰的記憶了,不過印象中當時主持的組長人很Nice,而且蠻可惜的,最後我的積分沒有得到獎品的書。

    說到書,今年看到一本不錯的書,叫做Data Science From Scratch,有提到很多統計、資料清洗之類的,英文的原文書的內容也不會艱澀到看不懂,非常不錯。

    這個月還結束了我在台大的工作,非常謝謝窗口的劉先生、王小姐,在我剛起步光環境都架不起來也還是對我相當包容。

    這幾個月從非常生疏到熟練有很大成就感跟自我實現的感覺,雖然至此之後沒有機會再使用到ASP.net或是C#,但是MSSQL倒是也被融入到畢業專題裡頭去使用了。

    五月

    這個月好像沒有什麼特的事情,大概只有在系上做大學推甄的志工?想到幾年前我也是這樣一關一關面試進來的,時間過的真快!

    六月

    這個月可就刺激了,前半個月沒什麼特別的,就是一如既往的上課、考試,到了月中之後暑假開始,嘉文老師團隊的暑訓也就開始了,從這個月開始我才正式開始做我的畢業專題,我負責把合作廠商的React.Js+Go(好像是Gin)的網站修改成React.Js+Python(Flask)的架構,必重新開發了新的Android App來在Temi機器人上執行,我印象很深,我大概花了兩個禮拜,在六月底時才搞定整個前後端,但是後端還沒有連線器人的能力,因為七月還有別的事情可能會耽誤到專題發的時程,所以我當時相當擔心進度會不夠快。

    七月

    這個月初接任了公司開的APCS的暑期營隊,帶了兩個梯次的同學進行APCS考試的練習跟觀念的講解,印象中我好像發過一篇心得,我印象比較深刻的是第一次接任全講述類型的班,所以在時間的掌控上沒有拿捏得很好,在後續的幾次好像有慢慢進步的感覺?未來希望還有機會可以再次接任相關的課程或營隊。

    後半個月回歸團隊繼續進行開發,這次在WebSocket, Socket, SocketIO之間糾纏了很久,很多文獻說WebSocket跟SocketIO可以互通,但我嘗試了好幾次好像都不太行。

    更麻煩的是Flask好像只提供SocketIO,但在Android/Java中好像更容易實現WebSocket,所以又經歷了一番折騰,最後找到一個方法可以讓Flask中的Flask_Socket套件進行WebSocket的連線跟使用,未來有機會再分享如何做到。

    八月

    這個月好像就也是一直在做研究跟專題中度過,這個月還負責了團隊中的教學工作,製作了使用ESP8266的教材,跟團對成員分享這段時間做後端跟終端設備(手機、機器人、ESP8266等有連網功能的開發版)互動的一些研究成果。

    九月

    這個月好像是鐵人賽的樣子,我以研究MOJO為主題報名了,不過最後沒有開賽就結束了,好像是媽媽住院的樣子導致我最後只有寫了兩篇文就沒空再寫了,後來也一直沒有機會補起來,現在發現好像這個話題也慢慢淡掉了,似乎沒有再看到相關的文獻了,不過當時發現了官方部落格的post裡頭有一個很奇怪的比較,官方所說比C快多少倍各位可以當作參考就好。

    十月/十一月

    這兩個月都忙著在研究所的推甄,準備文件、準備面試口試其實都比想像中的還要費時,也好像可以看到這幾年自己的成長軌跡。

    雖然最後放榜時我一直以為自己有意所學校應該會是正取,但可惜所有學校都是備取。

    十二月

    這個月看到自己的備取名額遲遲未下,所以又報名了明年研究所的考試,也因為專題參加完學校資訊展,算是告一個段落了,所以多了一些空閒時間。

    為了不要浪費這些多出來的時間,我決定報名幾個實習的職缺,希望可以縮小一些產學的落差,不知道最後會不會上。

    歐對,我還去考了多益,上次考的時候是高中畢業的暑假,兩次都是沒有讀書進去裸考,這次出來不知道是考題變簡單還是我的英文進步很多,感覺好像蠻簡單的,希望不要只是感覺。

    總結

    好啦,好像也就這樣,今年總體來說有好多新的經驗,學到很多新的酷酷的東西,像是現在正在自學的Django之類的,希望未來一年可以保持一樣的學習熱忱,不管是工作、學習都可以順順利利。

  • 【專案】寶可夢的資料蒐集與處理-1

    前言

    這邊可能看起來有點像寶可夢宅,不想看可以先跳過~

    最近又開始繼續玩寶可夢朱紫了,過去在劍盾時期很認真在打寶可夢雙打,練了不少當時應該算蠻厲害的寶可夢,但很可惜像是堅果啞鈴、鋁鋼龍這些我過去的好虎辦們都沒有申請到簽證沒辦法繼續到朱紫跟我一起奮鬥。

    因為我練努力值的方式都是帶護腕之類的道具去農野生寶可夢(藥劑我覺得太貴了),所以我一隻寶可夢通常都需要快20分鐘才能練完。

    農怪的同時我也在想說有沒有除了當今的meta之外可以使用寶可夢?也想多看看有沒有具有高種族值的冷門寶可夢可以玩玩看,所以就萌生了這個專案:希望可以透過爬蟲建立一隻系統幫我針對HP、攻擊、特攻、防禦、特防、速度去進行排序或依照種族值、屬性去挑選適合或有潛力的寶可夢去看看。

    整體來說,這是一個很好的機會可以讓我去結合興趣跟專長,來做個寶可夢資料爬蟲並使用這些資料去進行一個排序系統吧!

    沒意外的話這個專案會持續一段時間,所以有興趣的朋友可以幫我多留意一下新文章的更新並follow我的IG之類的媒體,後續也會將專案Source Code更新到我的GitHub中!

    環境

    目前因為還在很初期的規劃跟測試,所以是先在Google Colab的環境下進行開發。

    唯一需要另外安裝的是opencc-python-reimplemented,可以透過!pip install opencc-python-reimplemented來進行安裝。

    opencc-python-reimplemented是一個做繁體、簡體轉換的一個套件,因為這次爬取的網站是神奇宝贝百科,網站中會有一些的簡體字,在閱讀上我個人比較不習慣,所以才採用的,如果你對簡體字閱讀完全沒有問題的話也可以不用沒關係!在程式碼中稍做修正即可。

    資料型態

    在現階段我只想先取得所有寶可夢的全國編號、世代、中文名稱、英文名稱,所以先來做一個簡單的類別(Class),這個類別只要負責儲存剛剛提到的幾項資料跟顯示出來即可。

    from opencc import OpenCC
    class Pokemon:
        def __init__(self,id,gen,name_zh,name_eng):
            cc = OpenCC('s2t')
            self.id=id
            self.gen=gen
            self.name_zh=cc.convert(name_zh)
            self.name_eng=name_eng
        def show(self):
            print(f"ID:\t\t #{str(self.id).zfill(4)}")
            print(f"Generation:\t {self.gen}")
            print(f"Name_Zh:\t {(self.name_zh)}")
            print(f"Name_Eng:\t {self.name_eng}")
            print()
    

    完成這個Class之後可以透過以下程式碼來簡單測試一下:

    test_data=[
        {'id':1,'name_zh': '妙蛙种子', 'name_eng': 'Bulbasaur'},
        {'id':2,'name_zh': '妙蛙草', 'name_eng': 'Ivysaur'},
        {'id':3,'name_zh': '妙蛙花', 'name_eng': 'Venusaur'},
        {'id':4,'name_zh': '小火龙', 'name_eng': 'Charmander'},
        {'id':5,'name_zh': '火恐龙', 'name_eng': 'Charmeleon'},
        {'id':6,'name_zh': '喷火龙', 'name_eng': 'Charizard'},
        {'id':7,'name_zh': '杰尼龟', 'name_eng': 'Squirtle'}
    ]
    l=[]
    for i in test_data:
        l.append(Pokemon(i['id'],1,i['name_zh'],i['name_eng']))
    for i in l:
        i.show()
    

    如果可以正常出現下圖這樣的輸出就代表已經能夠順利保存目前我們需要的寶可夢資料了。

    爬蟲

    接著就要開始來爬娶我們需要的資料了,可以觀察寶可夢百科的保夢列表網頁,能夠觀察到所有的寶可夢都被保存在一個很長的表格中。 我們只需要將表格中所有的資料爬下來並做一些整理就可以取得到我們需要的資料,爬取的目標跟步驟如下:

    在爬蟲上我使用lxml, bs4等常見的爬蟲工具,在Colab的環境中都是無須另外下載就可以直接使用的套件,而我主要是以XPath進行元素的搜尋,用過幾次下來我認為是一個非常好用的方法。 想取得一個網站中對應元素的XPath的話可以使用Chrome DevTool(F12 or fn+F12)先在html code中找到你要找的元素,接著右鍵選Copy>>Copy XPath來複製XPath。以下是Source Code:

    from lxml import html
    import requests
    import html as html_converter
    from bs4 import BeautifulSoup
    
    url = str("https://wiki.52poke.com/wiki/%E5%AE%9D%E5%8F%AF%E6%A2%A6%E5%88%97%E8%A1%A8%EF%BC%88%E6%8C%89%E5%85%A8%E5%9B%BD%E5%9B%BE%E9%89%B4%E7%BC%96%E5%8F%B7%EF%BC%89/%E7%AE%80%E5%8D%95%E7%89%88")
    
    response = requests.get(url)
    tree = html.fromstring(response.content)
    
    # 使用Xpath定位到特定的table的tbody中的所有tr元素
    rows = tree.xpath('//*[@id="mw-content-text"]/div[1]/table[2]/tbody/tr')
    
    l=0
    data=[]
    # 在所有tr中個別進行遍歷
    for row in rows:
        element=[]
        if l>3000:
            break
        row_str = html.tostring(row, pretty_print=True).decode("utf-8")
        # 使用html.unescape()將HTML實體轉換回Unicode字符
        unescaped_row_str = html_converter.unescape(row_str)
        soup=BeautifulSoup(unescaped_row_str)
        tds=soup.find_all('td')
        # 讀取該tr中的所有td
        for td in tds:
            element.append(td.text.replace('\n',''))
        l+=1
        # 有一些row中不是我們要的資料 比如第一世代或是標題row 所以要檢查資料的長度是否正確
        if len(element)==4:
            pokemon=Pokemon(int(element[0].replace('#','')),genCheck(int(element[0].replace('#',''))),element[1],element[3])
            data.append(pokemon)
    for i in data:
        i.show()
    

    執行之後會跑一段時間,因為目前有一千出頭個寶可夢的資料需要處理,執行順利的話應該會全部印出來,但礙於Colab的規範,會因為行數過多所以前面的資料會被截到,執行正確的話會出現下圖的結果。

    匯出資料

    一般情況我們不會希望每次搜尋資料都要花那麼多時間在爬蟲上,所以我希望把這些爬到的資料輸出成一個Excel檔案,未來要做其他應用才會比較方便快速。 這邊搭配大家處理資料時最熟悉的Pandas來進行,Code跟從Excel截圖的成品如下:

    import pandas as pd
    # 將data轉換成一個字典列表,以方便轉換成DataFrame
    data_dict = [{
        "id": pokemon.id,
        "gen": pokemon.gen,
        "name_zh": pokemon.name_zh,
        "name_eng": pokemon.name_eng
    } for pokemon in data]
    
    # 轉換成DataFrame
    df = pd.DataFrame(data_dict)
    
    # 將DataFrame寫入Excel文件
    df.to_excel('pokemon_data.xlsx', index=False, engine='openpyxl')
    

    結語

    好啦,到目前為止已經完成了簡要的資料準備,後續我希望可以在取得所有寶可夢的種族值並進行排序,至於該如何進行每一隻寶可夢的個別資料爬取我已經想好步驟了,下篇文章再來詳細說明方法。

    感謝閱讀本篇文章的每一個人,若是對我有任何建議都歡迎與我聯繫。

  • 【程式學習】C語言的筆記01-資料型態、變數與基本運算、輸入輸出

    資料型態(Data Type)

    原則上,C語言中基礎的資料型態有以下幾中(只列出常用的):

    關鍵字 意義 位元組(資料的大小)
    char Character,字元,意旨一個字或符號,使用’‘單引號框住單個字符,如:‘A’、’&’。 1 Byte
    int Integer,整數,就是一般的整數,有數值大小的限制。以4 Bytes的情況下是-2,147,483,648 至 2,147,483,647。 4 Bytes
    float(double) 浮點數,指的是有小數點的數如1.6、180.0。double是雙倍精確度的float,可以當作小數點位數可以容納更多的浮點數。也因此double的資料大小會是float的兩倍大 4 Bytes

    > NOTE: 資料的大小只是通常,在不同系統的電腦中或多或少會有不同。

    變數

    #include 
    
    int main(){
    	char a='a'; 
    	int b=2;
    	float c=1.3;
    	return 0;
    }
    

    變數的概念類似於容器,在定義(宣告)時使用以下語法:

    資料型態 變數名稱 = 資料
    

    輸出

    輸出變數時同樣使用printf(),但必須搭配"格式化字串"來使用:

    變數類型 格式化字串
    char %c
    int %d
    float %f
    double %lf

    從上表來看要印出範例中所有變數的話需要使用如下:

    #include 
    
    int main(){
    	char a='a'; 
    	int b=2;
    	float c=1.3;
    	printf("%c",a);
    	printf("%d",b);
    	printf("%f",c);
    	return 0;
    }
    

    這時候印出來的資料會發現是同一行且沒有間隔,非常不易閱讀。

    a21.300000
    

    所以有一種特殊字元稱作跳脫字元,如下:

    符號 意義
    \n 換行
    \t 間隔一個tab鍵的距離

    > NOTE: 還有非常多種跳脫字元,這邊只列出比較常用的兩種。

    所以把範例程式整理成這樣:

    #include 
    
    int main(){
    	char a='a'; 
    	int b=2;
    	float c=1.3;
    	printf("%c\n",a);
    	printf("%d\n",b);
    	printf("%f\n",c);
    	return 0;
    }
    

    就可以得到:

    a
    2
    1.300000
    

    所以可知,要對印出的資料進行排版時,可以調整printf()中的""內的文字,來達成。例如想印出"數字 數字"的話也可以使用printf("%d %d",數字一,數字二);

    輸入

    輸出使用同樣來自“““的scanf()函式,使用的範例如下:

    #include 
    
    int main(){
    	int a;
    	scanf("%d",&a);
    	printf("a is %d",a);
    	return 0;
    }
    

    其中scanf("%d",&a);是指輸入資料到a記憶體中,在做這個指令之前必須先定義好a是什麼類型的資料,並且搭配取址運算符號"&“,”&"可以取得變數在記憶體中的位址,scanf()也是透過直接將資料填入記憶體中的方式來做輸入。 也可以透過以下方式印出資料a的記憶體位址:

    #include 
    
    int main(){
    	int a;
    	printf("%d\n",&a);
    	return 0;
    }
    

    基礎運算

    C語言中使用的基礎運算符號如下:

    符號 意義 備註
    + 加法
    減法
    * 乘法
    / 除法
    % 相除取餘數 若x=10,y=3,則x%y=1。

    加減乘除支概念與數學相同,但取餘數的運算會很常跟除法運算搭配使用,並且可以做到一些特殊的功能,例如數字位移等: 假設有一數字13582,題目要求計算所有位數的總和即1+3+5+8+2,透過%10運算可以得到最右端的數值:13582%10=2,而13582/10=1358,重複執行並將數值做累加後即可符合題目要求。

    另一個%常用的地方是在計算因數以及做週期計算:

    範例題目:

    判斷a是否為b的因數,若a%b為0,即代表a為b的倍數,b為a的因數。

    範例題目:

    一周有7天,那523天為幾周又幾天?523/7即為週數,523%7即為天數。

  • 【專案】PLG球員資料爬蟲與CSV檔案建立

    前言

    這是第一篇我用md來寫的文章,以往都是直接用WordPress的編輯器撰寫,所以如果排版不好看或是有任何建議都歡迎給我點建議或指教!

    正文

    今天偶然看到PLG的網站,發現網站裡頭有一個表格,儲存著所有球員的資料、數據,看起來就是一臉欠爬的樣子(X。

    檢視了一下他的html結構就開始直接開爬了。 先引入必要的套件。

    import requests
    from bs4 import BeautifulSoup
    import csv
    

    這些套件分別負責

    • requests : 對網站送出請求
    • bs4 : 最常用的爬蟲套件之一
    • csv : 將爬取道的資料寫為csv檔

    寫成csv檔的原因是因為csv的泛用性非常高,如果要畫圖或是做其他處理時使用pandas也可以直接讀取資料,對未來處理會比較輕鬆。

    接著是爬蟲部分的程式:

    url ='https://pleagueofficial.com/stat-player'
    html = requests.get(url)
    html.encoding = 'UTF-8'
    bs = BeautifulSoup(html.text, 'html.parser')
    table=bs.tbody
    row=table.find_all('tr')
    

    先透過requests取得網頁的原始碼(html),接著用美麗湯把HTML的資料解析並找到網頁中的表格<tbody>標籤,接著要再將tbody中的所有列(row)用find_all()抓下來。

    資料處理程式:

    data=[]
    for i in row:
        for j in i:
            if j.text != '\n':
                data.append(j.text)
    

    爬下來的資料會很雜亂而且有很多筆都是換行符號(‘\n’),所以要做一些過濾,把爬下來的所有資料只要不為換行符號就加入到list中,原先有一併檢查’ ‘,’’,None等等的狀態,但後來發現執行幾次下來應該都不會有這些資料出現,所以就刪掉了。

    寫入csv程式:

    with open('player.csv', 'w', newline='',encoding="UTF-8") as file:
        writer = csv.writer(file)
        
        field = ["name", "number","team", "games played","time(min)",
                 "2pt","2pt shot","2pt percentage","3pt","3pt shot",
                 "3pt percentage","free throw","free throw shot",
                 "free throw percentage","pt","offReb","defReb",
                 "tReb","assist","steal","block","turn over","foul"]
        
        writer.writerow(field)
        for i in range(len(data)//23):
            row=[]
            for j in range(23):
                row.append(data[0])
                data.pop(0)
            # print(row)
            writer.writerow(row)
    
    

    在.py檔案目錄中開一個player.csv檔,接著定義csv的標頭,根據網站資料有23個項目,這邊我就使用手動的方式建立標頭。

    接著根據前一段建立的list將資料逐列寫入csv檔案。

    完整程式碼如下:

    import requests
    from bs4 import BeautifulSoup
    import csv
    # web crawler
    url ='https://pleagueofficial.com/stat-player'
    html = requests.get(url)
    html.encoding = 'UTF-8'
    bs = BeautifulSoup(html.text, 'html.parser')
    table=bs.tbody
    row=table.find_all('tr')
    
    # data processing
    data=[]
    for i in row:
        for j in i:
            if j.text != '\n':
                data.append(j.text)
    
    # write into csv
    with open('player.csv', 'w', newline='',encoding="UTF-8") as file:
        writer = csv.writer(file)
        
        field = ["name", "number","team", "Games played","time(min)",
                 "2pt","2pt shot","2pt percentage","3pt","3pt shot",
                 "3pt percentage","free throw","free throw shot",
                 "free throw percentage","pt","offReb","defReb",
                 "tReb","assist","steal","block","turn over","foul"]
        
        writer.writerow(field)
        for i in range(len(data)//23):
            row=[]
            for j in range(23):
                row.append(data[0])
                data.pop(0)
            # print(row)
            writer.writerow(row)
    
        
    

    程式也會一併放在GitHub上,如果程式有任何錯誤或是建議再麻煩告知我!

    請多多指教!!

  • 【專案】薪資數據資料分析實做(一)

    這幾天在逛Kaggle的時候發現了一個關於薪資的資料集

    這個資料集中,根據資料說明,來源包括問卷、徵才網站等等多個來源,而資料的可信度我想也僅供參考。

    說明中提到共有6704筆資料,在我做過刪除空列的資料清理後只剩下3671筆,而資料的形式大概如下:

    原諒我只用VSCode截圖Orz

    是一個CSV檔,欄位有包括年紀、性別、教育程度、職稱、年資、薪資,其中我對幾個議題比較有興趣,比如薪資是否真的隨年紀增長?薪資是否會與性別有正相關?教育程度薪資是否正相關?等等的議題,我想應該可以透過把這些資料會製成圖表(可視化)應該就可以得到解答,所以接下來我開始了一連串pandas、matplotlib操作,甚至將資料中以性別分群、把資料依照年記排序,結果畫出來的圖形長這樣:

    X-Y軸對應年齡-薪資,紅線為女性、藍線為男性

    歐我的天,這圖奇醜無比。

    有很多重疊的垂直線,代表資料中有很多重複的X值,經過檢查之後還真的。

    上為薪資,下為年齡

    年齡雖然經過排序後看起來比較好看一些了(相信我,你不會想看到排序前的圖),但是重複的年紀會讓圖形顯的很詭異,我目前是在考慮把資料中一個年齡的新資取平均作為繪圖的依據,但不曉得是否會有更好的作法?

    沒意外的話應該會有第二篇關於這個資料集的文章,除了練習資料分析和處理,也一起看看薪資的相關數據!!

  • 【專案】線上留言板

    這次暑假因為有營隊課程而公司開發的測驗練習題庫平台需要輸入學生的電子信箱才可以加入班級,在使用上稍微有些不便,也不太可能叫學生自己一個一個跑到前面在我的電腦輸入信箱,所以開發一個線上留言板,讓學生可以留言自己的姓名和信箱,我再直接複製到系統輸入就可以。成品目前還是比較陽春一些,可以點擊這個開啟看看留言板。

    使用時的畫面

    除了使用者的畫面和功能,我也加入管理員介面。大致上跟使用者相差無幾,只多了刪除留言和回覆功能。

    回覆示範

    留言時會顯示留言者所使用的名稱(自行輸入)以及發出的IP,未來也可以加入登入機制以維護安全。

    開發工具使用Firebase進行hosting和realtime database,以React JS作為開發框架,未來若有機會會再分享該如何使用這兩個工具和如何做連接使用。

  • 【補教】五天實體APCS營隊教學心得

    對,我好久沒寫文章了,不管是一些技術相關的文章或是一些其他分享,真是太糟糕了。


    今年的7/3~7/7和7/10~7/14(撰文時僅完成第一梯次教學)我接了公司辦的APCS營隊,主要的教學目的是帶著國高中生一起踏入程式設計和解題的世界,也是我第一次做純講述的課程。

    以往我們公司大多數的課程都是翻轉教室的形式,雖然每堂課最後都會有我做講述教學的機會和時間,但往往時間不會到太長。透過這次五天且每天都做滿6個小時的講述,也才終於有機會練習在教學時如何控制時間和流程,也真的體悟到一間教室的學生不可能全部都跟得上,如果為了少數跟不上的同學而重複講同樣的內容也會讓整體的教學進度受到影響。

    這幾天也有變得更加明白自己所想要的教學方式,也有機會可以好好整理自己以前學習時所碰到的錯誤,希望可以讓孩子省去很多自造輪子的時間和機會。

    最後一天我準備了份匿名表單,想調查一下學生對課程的回饋,本來以為學生會甜得相當殘暴和嗜血,結果孩子們的反饋比想像中的好很多,更有學生來問我未來進階班的課會不會也是我上,對我都是大大的鼓勵。

    整體來說呢,這次的我雖然是以老師的身分參與課堂,但我實際上也同時是教室裡的學生,也學習到很多以往教學時沒想過、沒遇過的問題和狀況,可真是收穫滿滿!

  • 【專案】以ESP8266製作之物聯網系統用於溫室土壤濕度監測

    簡介

    下圖為整體系統架構圖,系統可以分為Web端、Server端、資料庫跟硬體與感測器端。

    使用時,由使用者可以從網頁直接監測感測器獨到的數值。

    硬體功能方塊圖

    硬體的部分相當簡單,只有Esp8266與YL-69相連接,在使用時我使用的是類比腳位(Esp8266的A0到YL-69的AO腳位),這樣接可以讓YL-69有1024個量級作為濕度的數值,會比較精確一些。

    程式流程圖

    程式可以分成三個部分,第一部分為Esp8266中以Arduino IDE開發的C++程式。

    第二部分為進行多個Esp8266管理跟更新資料的Python-Socket伺服器端。

    網頁端使用單純的React JS去讀取Firebase Realtime Database中的資料並更新在網頁中。

    功能展示

    下圖為網頁初始進入的畫面,可以直接觀測各個感測器傳來的數值和來源IP,要使用更新資料名稱或刪除資料的功能則必須先輸入上方密碼。

    對任意資料點擊後可以看到如下圖的詳細資訊。

    結論

    系統仍然有許多可以改進的地方,比如:

    • 更完善的身份驗證機制,讓多個使用者可以登入查看自己的資料。
    • 新增可以選擇感測器的欄位,因為系統可以接收的資料其實非常多,如果可以建立感測器欄位的話就可以有效依照類別分類各個感測器並顯示。

    待未來有更多時間再來加以改善!如果有任何其他想法也歡迎指教!

    參考資料

  • 【筆記】NoSQL資料庫的使用心得

    最近密集的在使用firebase的Realtime Database,跟以往習慣使用的SQL資料庫不一樣,雖然可以用相同的思維模式去想,但使用上NoSQL的壇型感覺卻大很多,資料都以JSON形式存在,方便閱讀。

    在CRUD上也使用簡單的指令就可以達到,只要可以掌握資料的id在做所有處理時都很方便。

    整理以下看到的幾個相當優質的文章和影片作為參考:

    Firebase on Python in 5 minites

    React JS | Firebase – Create, Read, Update, and Delete (CRUD) using Realtime Database

    Day26 前端福音(1/4): Firebase-介紹 & 建立專案

    Day27 前端福音(2/4): Firebase-寫入&刪除資料

    Day28 前端福音(3/4): Firebase-讀取資料

    Day29 前端福音(4/4): Firebase-帳號系統&資料讀寫規則

  • 【筆記】Pandas讀取xlsx檔案只取得空物件

    有兩種xlsx檔案類型,一為Strict Open XML Spreadsheet,第二為Excel Workbook。

    雖然兩種檔案格式都是xlsx檔,但在讀取時會有相當大的差異,如果讀取到前者的狀況可能會出現sheet_names是空list的狀況,所以當你有出現這個問題的話一定要確認一下待讀取檔案的格式是否正確。