1 緒 論
1.1 課題研究背景
在線教育學習平臺是學生用來進行校內或校外拓展課程學習的平臺,平臺需要具備在線視頻觀看,作業提交,形成性考核等功能。在學生學習的過程中,學校的管理者或負責教師需要了解學生的學習情況和學習狀態,因此必須要通過學生的學習行為數據進行數據分析,將學生的學習情況直觀的展現給用戶,方便教師進行學生管理和評測。
現階段在線教育學習平臺,一般會提供兩種方向,一種是對普通用戶,社會上的各種人員都可以來學習這個課程,學習完以后拿到一些證書認證,另一種是面向是院校,比如說大學里的學生可以在線選一門課,選完這門課以后,通過這個在線教育學習平臺,讓學生去學習這門課,最終得到他的學習成績,那么通過學習他可以拿到他自己的學分,不需要在線下來去進行課程學習,這是整個在線教育學習平臺這里面提供的功能,那么學生在學習這門課程的過程中,那肯定會產生很多的這種學習的數據,就比如說學生觀看視頻觀看了多長時間,什么時候來的這個平臺這些相關的數據,那么基于這些數據,我們就需要進行數據分析。
通過分析的結果,可以了解學生學習情況,學習狀態,根據這些內容,我們好去了解這門課程設置是不是有問題,學生在學習過程中會有哪些習慣和行為,根據這個反饋過來的數據進行靈活的調整,或者讓老師重新去調整這個課程內容,或者去改變這一部分的學生學習方式,這是我們最終做這個數據分析的目的。
1.2 課題研究意義
本次課題主要通過使用ECharts圖形可視化開發技術,從而在項目中反饋自己的學習成果,提升自己技術水平和能力,讓自己在設計方面也能得到更多鍛煉,思維模式得到擴展。通過在線教育平臺的數據,利用所學知識去分析數據,得出學生在學習過程中學習情況,以及利用課程平臺中的健康度和用戶活躍度來反哺提升課程質量。
2相關技術介紹和分析
2.1 JAVA語言
?JAVA是一種跨平臺的程序設計語言,它屬于面向對象型,有著顯著的優點。
2.2 Idea開發環境
?IDEA 全稱IntelliJ IDEA,是java語言開發的集成環境,idea是目前最好的開發工具之一,尤其在代碼只能助手、自動代碼提示等方面是有突出成就的。
2.3?Hadoop生態圈技術
?HDFS: 一種分布式文件系統,提供對應用程序數據的高吞吐量訪問。
MapReduce: 基于YARN的系統,用于并行處理大型數據集。
HBase: 可擴展的分布式數據庫,支持大型表的結構化數據存儲。
Sqoop:?采集RDBMS(關系型數據庫)。
2.4?ECharts
?ECharts,一個功能強大的交互式圖表和瀏覽器可視化庫。
3系統調研
3.1經濟可行性分析
系統使用大數據組件開源技術,組建單節點Hadoop集群,使用MapReduce數據分析,考慮到市面上大屏可視化系統需要收費,所以用ECharts技術實現數據可視化圖表功能。
3.2技術可行性分析
通過servlet和json進行數據交互,以及CAS做單點登錄和注銷,調整好系統結構,可以很好實現頁面數據傳輸和展示的功能
3.3系統性能可行性分析
?????WEB端產品,性能主要基于服務端的響應,此處通過設置虛擬機內存、優化代碼結構等手段,保證正確運行。
4概要設計
4.1功能設計
根據系統的需要,列出所需要的功能,與解決的方法,并以此為參考,設計數據庫等后臺內容。
4.1.1 登陸注冊功能
用戶通過瀏覽器訪問后可以登錄,沒有注冊的用戶可以進行注冊,然后將用戶信息存入數據庫中,通過Spring Security框架做登錄攔截,并可以獲取已登錄用戶登錄名,點擊注銷可以實現用戶退出登錄。
4.1.2?數據預功能
將數據通過Sqoop導入Hadoop中的HDFS,使用MapReduce進行數據處理,并將處理好的數據,保存到HBase中。
4.1.3?每日登陸人數分析
讀取HBase中登錄數據,頁面顯示不同月份的登錄人數比,并可以顯示每月登錄人數,可以切換不同的月份。
4.1.4?平均學習時長和學習行為次數分析
讀取HBase中相關數據,頁面顯示不同日期對應的學習時長和學習次數。
4.1.5?每日活躍情況分析
柱狀圖顯示每日活躍學生人數的統計分析,這里設定每日至少進行3次學習行為的用戶為活躍用戶
4.1.6?分時段學習人數分析
熱力圖展示學生在什么時間段愛學習,橫坐標為小時,縱坐標為星期。
柱狀圖展示在不同時間段中用戶登錄人數。
4.2數據庫表結構設計
表與功能相匹,設計時盡量減少冗余數據的存儲,多考慮多表查詢的可能與簡單程度
4.3后臺結構設計
主要使用servlet接受請求,MVC將代碼分層。
4.4前臺UI設計
JS使用AngularJS的雙向數據綁定方便的操作,展示更多有用的信息,UI使用ECharts自帶的圖形效果顯示。
5 系統運行示例與測試
5.1 系統測試概述
項目完成后,測試時保證系統穩定運行的關鍵所在,不同的點擊事件向后臺請求數據,前端接受數據,避免數據傳輸錯誤引起的界面不顯示或報錯問題以及界面的排版問題。
5.2 運行測試
進入到系統界面,依此進行試用
6 結 論
本章主要對本次設計進行總結,總結系統的優點和存在的不足,并且作出相應的改進等。
參考文獻
致 謝
核心算法代碼分享如下:
package com.sqlimport org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types._
import org.junit.Testimport java.util.Propertiesclass MoocSpark2024_FixBug {val spark = SparkSession.builder().master("local[6]").appName("在線教育課程數據實時計算V1.0").getOrCreate()//課程數倉CSV 模式val ods_courses_Schema = StructType(List(StructField("kw", StringType),StructField("cid", StringType),StructField("url", StringType),StructField("title",StringType),StructField("img", StringType),StructField("tag", StringType),StructField("school",StringType),StructField("teacher", StringType),StructField("mans", IntegerType),StructField("brief", StringType),StructField("status", StringType),StructField("price", StringType),StructField("chapters", StringType),StructField("comments_score", FloatType),StructField("comments", StringType)))val ods_courses_Df = spark.read.option("header", "false").schema(ods_courses_Schema).csv("hdfs://192.168.227.166:9000/mooc2024/ods_courses/edu_course.csv")//網評數倉CSV 模式val ods_comments_Schema = StructType(List(StructField("kw", StringType),StructField("cid", StringType),StructField("title", StringType),StructField("nickname",StringType),StructField("ctime", StringType),StructField("csv_txt", StringType),StructField("ke",IntegerType),StructField("star", IntegerType),StructField("url2", StringType),StructField("sentiments", FloatType),StructField("province", StringType)))val ods_comments_Df = spark.read.option("header", "false").schema(ods_comments_Schema).csv("hdfs://192.168.227.166:9000/mooc2024/ods_comments/edu_comments.csv")@Testdef init(): Unit = {//school_province_score_Df.show()//ods_courses_Df.show()ods_comments_Df.show()//school_special_score_Df.show()//school_Df.show()//ruanke_rank_Df.show()//qs_world_Df.show()}// ----剩余使用spark_sql完成
// ---指標8:課程特色占比@Testdef tables08(): Unit = {ods_courses_Df.createOrReplaceTempView("ods_courses")val df2 = spark.sql("""select tag ,count(1) numfrom ods_coursesgroup by tag""")df2
// .show(50).coalesce(1).write.mode("overwrite").option("driver", "com.mysql.cj.jdbc.Driver").option("user", "root").option("password", "123456").jdbc("jdbc:mysql://bigdata:3306/hive_mooc2024?useSSL=false","table08",new Properties())}// ---指標9:網絡水軍詞云預警(黑名單)@Testdef tables09(): Unit = {ods_comments_Df.createOrReplaceTempView("ods_comments")val df2 = spark.sql("""select nickname,count(1) numfrom ods_commentswhere sentiments <0.5group by nicknameorder by num desclimit 20""")df2// .show(50).coalesce(1).write.mode("overwrite").option("driver", "com.mysql.cj.jdbc.Driver").option("user", "root").option("password", "123456").jdbc("jdbc:mysql://bigdata:3306/hive_mooc2024?useSSL=false","table09",new Properties())}}