<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一小時(shí)開(kāi)發(fā)數(shù)據(jù)分析和機(jī)器學(xué)習(xí)平臺(tái)(手把手,附Python代碼)

          共 5394字,需瀏覽 11分鐘

           ·

          2022-01-23 22:48

          老規(guī)矩,先看效果
          說(shuō)到數(shù)據(jù)分析平臺(tái),可能我們會(huì)想到重量級(jí)AWS和阿里云。他們提供的平臺(tái)和服務(wù)可以進(jìn)行數(shù)據(jù)分析和機(jī)器學(xué)習(xí)。我們今天分享的方法主要是針對(duì)無(wú)前端知識(shí),無(wú)開(kāi)發(fā)團(tuán)隊(duì)的業(yè)務(wù)人員,數(shù)據(jù)分析師和建模師,如何快速搭建數(shù)據(jù)分析和機(jī)器學(xué)習(xí)平臺(tái),讓自己的日常工作更加方便。
          人生苦短,我用python。沒(méi)錯(cuò),我們就是用純python搭建!
          我們初步需要實(shí)現(xiàn)如下功能:
          • 設(shè)計(jì)一個(gè)網(wǎng)頁(yè)版的用戶界面,支持交互

          • 支持從本地選取數(shù)據(jù)集

          • 支持自動(dòng)化可視化分析

          • 支持回歸分析和分類分析,機(jī)器學(xué)習(xí)算法多樣

          • 支持查看訓(xùn)練記錄

          • 支持查看所有訓(xùn)練模型的參數(shù),結(jié)果,甚至繪圖

          • 支持預(yù)測(cè)新數(shù)據(jù)集

          • 支持其他機(jī)器學(xué)習(xí)任務(wù)(比如異常檢測(cè),規(guī)則關(guān)聯(lián),自然語(yǔ)言處理)

          • 其他細(xì)節(jié)

          軟件很輕量,功能很齊全。這么多功能特性,平時(shí)怎么著也得一個(gè)團(tuán)隊(duì)開(kāi)開(kāi)發(fā)。但是有了python,我們可以一個(gè)人一個(gè)小時(shí)搞定,因?yàn)楸窘坛檀a量不到100行?。?!先看效果:

          ??






          核心工具
          Python勝在我們不用重復(fù)造輪子。創(chuàng)建數(shù)據(jù)分析和機(jī)器學(xué)習(xí)平臺(tái),我們自然也要找到神兵利器。streamlit和pycaret 便是其中最核心的工具。
          streamlit的官方鏈接在此:https://docs.streamlit.io/en/stable/
          streamlit工具對(duì)于業(yè)務(wù)人員來(lái)說(shuō),有兩個(gè)優(yōu)點(diǎn):
          • 既有的組件方便快速設(shè)計(jì)網(wǎng)頁(yè):

            該庫(kù)已經(jīng)內(nèi)置很多組件,比如文本輸入,側(cè)邊欄,按鈕,滑塊,圖畫顯示等組件。

            調(diào)用方式也很簡(jiǎn)單,就是單個(gè)函數(shù)即可。


          • 部署和運(yùn)行方便:只需要一個(gè)命令即可--> streamlit run main.py

          pycaret 屬于基于sklearn的更高階的機(jī)器學(xué)習(xí)庫(kù),高階到無(wú)需了解數(shù)據(jù),無(wú)需了解算法,便可完成全自動(dòng)機(jī)器學(xué)習(xí)建模和預(yù)測(cè)。當(dāng)然,對(duì)于我們學(xué)習(xí)來(lái)說(shuō),還是需要了解算法和數(shù)據(jù)。之前的文章我們已經(jīng)介紹了pycaret庫(kù),可以參考Pycaret -- 理想的AUTO ML 平臺(tái)






          準(zhǔn)備環(huán)境
          既然是基于Python的解決方案,就需要基本的python IDE,我一般推薦pycharm,尤其是涉及到網(wǎng)頁(yè)開(kāi)發(fā)或者項(xiàng)目開(kāi)發(fā)。
          安裝以下庫(kù),通過(guò)pip安裝即可。
          pip install streamlitpip install streamlit_pandas_profilingpip install pycaret
          項(xiàng)目文件夾里面包含如下(文末提供源碼)
          • main.py 我們的代碼

          • data 文件夾用于放置示例數(shù)據(jù)集,可不用

          • mlruns 文件夾 ,用于管理訓(xùn)練的機(jī)器學(xué)習(xí)模塊記錄,系統(tǒng)會(huì)自動(dòng)生成

          • logs.log 用于記錄系統(tǒng)日志







          輔助程序
          首先導(dǎo)入需要的庫(kù),具體見(jiàn)代碼。
          import streamlit as st # 用于設(shè)計(jì)網(wǎng)頁(yè)import pandas as pdfrom pandas_profiling import ProfileReport # 用于生成報(bào)表from streamlit_pandas_profiling import st_profile_report # 用于在streamlit中顯示報(bào)表import osimport pycaret.classification as pc_cl # 自動(dòng)機(jī)器學(xué)習(xí)分類import pycaret.regression as pc_rg # 自動(dòng)機(jī)器學(xué)習(xí)回歸import mlflow # 模型管理

          接下來(lái)我們需要準(zhǔn)備幾個(gè)輔助函數(shù),這些函數(shù)主要是用于處理一些用戶交互的細(xì)節(jié)。

          • 逐行讀取logs.log,顯示最末選定行數(shù),用戶可以設(shè)定行數(shù)。

          def get_model_training_logs(n_lines = 10):    file = open('logs.log', 'r')    lines = file.read().splitlines()    file.close()    return lines[-n_lines:]
          • 獲取當(dāng)前路徑下特定類型的文件列表,比如data文件夾的所有csv文件

          def list_files(directory, extension):
          # list certain extension files in the folder
          return [f for f in os.listdir(directory) if f.endswith('.' + extension)]
          • 獲取文件的完整路徑,用于讀取數(shù)據(jù)集

          def concat_file_path(file_folder, file_selected):    # handle the folder path with '/' or 'without './'    # and concat folder path and file path    if str(file_folder)[-1] != '/':        file_selected_path = file_folder + '/' + file_selected    else:        file_selected_path = file_folder + file_selected    return file_selected_path
          • 加載數(shù)據(jù)集,注意這里為了軟件的性能,會(huì)將數(shù)據(jù)集放入緩存,重復(fù)加載同一數(shù)據(jù)集不會(huì)重復(fù)占用系統(tǒng)資源。

          @st.cache(suppress_st_warning=True)def load_csv(file_selected_path, nrows):    # load certain rows    try:        if nrows == -1:            df = pd.read_csv(file_selected_path)        else:            df = pd.read_csv(file_selected_path, nrows=nrows)    except Exception as ex:        df = pd.DataFrame([])        st.exception(ex)    return df






          設(shè)計(jì)主程序

          主程序包含了網(wǎng)頁(yè)相關(guān)的界面設(shè)計(jì)以及用戶操作響應(yīng),主要是選取合適的streamlit組件以及觸發(fā)相應(yīng)的函數(shù)。

          下圖是網(wǎng)頁(yè)側(cè)邊欄(功能欄)設(shè)計(jì)的組件選擇,側(cè)邊欄的設(shè)計(jì)是重中之重,因?yàn)樗婕爸饕δ苣K,需要根據(jù)用戶的操作來(lái)執(zhí)行相應(yīng)的函數(shù)。







          定義數(shù)據(jù)源與探索性分析

          當(dāng)“定義數(shù)據(jù)源”的checkbox被勾選后,相應(yīng)的功能才被激活,用戶才可以執(zhí)行后續(xù)動(dòng)作:

          • 輸入文件夾路徑,這里支持相對(duì)路徑,比如輸入data,表示讀取當(dāng)前路徑下的data文件夾

          • 文件夾路徑輸入后(回車鍵),系統(tǒng)會(huì)自動(dòng)讀取所選文件夾的csv文件,并且將文件名列出到下拉列表。

          • 在輸入行數(shù)中可以選擇需要讀取的行數(shù)。


              if st.sidebar.checkbox('定義數(shù)據(jù)源'):        file_folder = st.sidebar.text_input('文件夾', value="data")        data_file_list = list_files(file_folder, 'csv')        if len(data_file_list) ==0:            st.warning(f'當(dāng)路徑無(wú)可用數(shù)據(jù)集')        else:            file_selected = st.sidebar.selectbox(                '選擇文件', data_file_list)            file_selected_path = concat_file_path(file_folder, file_selected)            nrows = st.sidebar.number_input('行數(shù)', value=-1)            n_rows_str = '全部' if nrows == -1 else str(nrows)            st.info(f'已選擇文件:{file_selected_path},讀取行數(shù)為{n_rows_str}')    else:        file_selected_path = None        nrows = 100        st.warning(f'當(dāng)前選擇文件為空,請(qǐng)選擇。')

          探索性分析相對(duì)簡(jiǎn)單,只需要一個(gè)按鈕即可。之后會(huì)調(diào)用pandas-profiling 來(lái)生成EDA的分析結(jié)果。pandas-profiling 的介紹可以看之前的文章:

          EDA神器pandas-profiling萬(wàn)歲?

              if st.sidebar.checkbox('探索性分析'):        if file_selected_path is not None:            if st.sidebar.button('一鍵生成報(bào)告'):                df = load_csv(file_selected_path, nrows)                pr = ProfileReport(df, explorative=True)                st_profile_report(pr)        else:            st.info(f'沒(méi)有選擇文件,無(wú)法進(jìn)行分析。')






          快速建模與日志

          快速建模部分核心是基于pycaret庫(kù),之前我們介紹過(guò)pycaret 庫(kù),它是很強(qiáng)大的自動(dòng)化機(jī)器學(xué)習(xí)工具,不僅支持回歸分析和分類預(yù)測(cè),而且支持自然語(yǔ)言處理,規(guī)則關(guān)聯(lián),聚類,異常檢測(cè)等學(xué)習(xí)任務(wù),后面這幾個(gè)模塊本demo中并沒(méi)有實(shí)現(xiàn),但是實(shí)施起來(lái)不是很難。

          代碼部分相對(duì)容易,沒(méi)有什么技巧可言,主要是一些細(xì)節(jié)處理,比如需要從讀取的數(shù)據(jù)集Dataframe中獲取所有的列名,讓用戶選擇需要的目標(biāo)列。還有,回歸和分類算法支持的算法列表并不相同,需要根據(jù)所選的任務(wù)來(lái)動(dòng)態(tài)獲取算法列表。

          最后就是用戶信息提醒,這里采用info,success,warning等組件提供給用戶系統(tǒng)的狀態(tài)信息。

          我們通過(guò)配置pycaret,可以使過(guò)程日志保存在log中。

          ?為節(jié)省文章篇幅,代碼見(jiàn)文末源碼






          模型管理與預(yù)測(cè)

          mlflow是一款獨(dú)立的,成熟的模型生命周期管理軟件。其中tracking 模塊可以記錄每一次運(yùn)行的參數(shù),運(yùn)行的結(jié)果,metrics,模型的保存,繪圖的保存等(當(dāng)然記錄哪些內(nèi)容都是需要配置的)。

          pycaret中集成了mlflow 模塊,所以我們只需要在調(diào)用pycaret 創(chuàng)建模型時(shí),允許系統(tǒng)調(diào)用mlflow來(lái)管理我們的運(yùn)行記錄。

          這里我們將mlflow的運(yùn)行日志通過(guò)dataframe顯示出來(lái),當(dāng)然更多的細(xì)節(jié)我們可以通過(guò)mlflow的網(wǎng)頁(yè)來(lái)查看,比如模型信息,繪圖等。

          如果需要查看mlflow 服務(wù)器網(wǎng)頁(yè),需要在命令行中輸入以下代碼來(lái)啟動(dòng):

          mlflow ui


          模型在mlflow中保存為pkl格式,我們需要調(diào)用mlflow中的load_model函數(shù)來(lái)獲取模型的信息。pycaret的模型相比于一般的sklearn的模型,多了pipeline的(管道模型)信息,這個(gè)pipeline可以用于對(duì)數(shù)據(jù)集進(jìn)行預(yù)處理。

          加載的模型支持predict 方法,因此我們只需要輸入數(shù)據(jù)集即可預(yù)測(cè)。這里為了節(jié)省布局控件,我們繼續(xù)采用“定義數(shù)據(jù)源”的數(shù)據(jù)集來(lái)進(jìn)行預(yù)測(cè)。

          ?為節(jié)省文章篇幅,代碼見(jiàn)文末源碼






          整合與運(yùn)行程序

          我們把上面的所有涉及網(wǎng)頁(yè)設(shè)計(jì)的代碼,放置在一個(gè)函數(shù)下,比如:

          def app_main():    #上面的所有涉及網(wǎng)頁(yè)的代碼

          然后設(shè)置程序的入口代碼:

          if __name__ == '__main__':    app_main()

          以上就是所有的代碼。

          運(yùn)行程序我們只需要在當(dāng)前路徑下,在命令行輸入:

          streamlit run main.py

          系統(tǒng)會(huì)在8501 端口下,運(yùn)行app,在瀏覽器中輸入網(wǎng)址即可運(yùn)行。







          總結(jié)


          本文的代碼難度屬于入門級(jí)別,但是達(dá)成的效果卻是很實(shí)用。因?yàn)檫@樣的數(shù)據(jù)分析平臺(tái)在日常中絕對(duì)可用,而且很順手。如果需要擴(kuò)展自動(dòng)機(jī)器學(xué)習(xí)的任務(wù),比如自然語(yǔ)言處理,也很簡(jiǎn)單。只需要參考回歸或者分類的代碼即可,相信工作量不會(huì)超過(guò)10行代碼(多是復(fù)制粘貼),有興趣的朋友可以嘗試。


          上述的源代碼都放在github上:bingblackbean/streamlit_pycaret

          1. 準(zhǔn)備寫本書(shū)
          2. 屬實(shí)逼真,決策樹(shù)可視化!
          3. 21個(gè)深度學(xué)習(xí)開(kāi)源數(shù)據(jù)集匯總!
          4. 耗時(shí)一個(gè)月,做了一個(gè)純粹的機(jī)器學(xué)習(xí)網(wǎng)站
          5. 用 Python 從 0 實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)
          6. 40篇AI論文!附PDF下載,代碼、視頻講解


          三連在看,月入百萬(wàn)??


          瀏覽 116
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕日韩人妻在线 | 亚洲首页欧美美女爱爱首页 | 99re6热在线精品视频播放 | 中文字幕在线观看网 | 狠操欧美|