2020 軟工實踐 疫情統計可視化 (實現)


這個作業屬於哪個課程 2020春 W班
這個作業要求在哪里 <結對第二次作業——某次疫情統計可視化的實現>
結對學號 221701120 & 221701122
這個作業的目標 根據原型設計,實現項目
作業正文 ....
其他參考文獻 ...

一.Github倉庫地址及項目背景介紹

Github倉庫地址:InfectStatisticWeb

代碼規范鏈接:https://github.com/FuzeHelium-3/InfectStatisticWeb/blob/master/codestyle.md

ps:本次數據來源丁香醫生網站,由於作業完成后網站進行了修改,本次作業內的疑似數目實為境外輸入

  背景:目前新型冠狀病毒肺炎疫情到了非常關鍵的時期,學校仍然是嚴陣以待。有一家統計網站每天都會提供一個對應的日志文本,記錄國內各省前一天的感染情況,但疫情統計結果只是通過文字來顯示,不夠直觀、具體,對用戶不夠友好,希望可以通過地圖的形式來直觀顯示疫情的大致分布情況,還可以查看具體省份的疫情統計情況。

  當今新冠肺炎疫情嚴重,牽動着每個人的心,共同抗疫無疑是全中國每個人的第一要務。我們的網站致力於提供全國以及各地的疫情情況,用不同顏色表示各地區疫情的程度,以最簡潔、直觀的方式向各位展示疫情情況。在您關注疫情信息的同時,我們平台還提供了疫情相關的新聞供您閱讀,包括實時播報功能與粉碎謠言板塊,讓您掌握第一手的新聞資訊。我們也在此由衷地祝願全國人民早日戰勝疫情,能夠早日出門在陽光下自由地呼吸。武漢加油!中國加油!

二.成品

  我們租用了一個月的阿里雲服務器,如果作業評審的時間較晚打不開頁面,可以在留言,我們會第一時間處理。

直接點擊這里就可以查看成品:雲服務器鏈接————下面有一些描述

  • 通過上面的鏈接,或者手動輸入地址訪問成品

    img
  • 通過輪播圖直接查看重要新聞

    img
  • 在主界面繪制了當前狀況與累計狀況兩份中國地圖

    img
  • 提供了地圖的可視化,按照顏色區間划分嚴重程度

    img
  • 在主界面下可以通過標簽切換圖表瀏覽疫情整體趨勢

    img
  • 點擊詳情可以進入省份頁面查看省份內信息

    img
  • 提供了破除謠言的界面

    img
  • 提供了查看實時新聞的界面

    img

三.結對討論過程

  一開始准備設計實現的時候,其實是比較慌的,因為對於我們二人小白來說,缺少了許多的編程經驗,對自己的水平抱有較大的疑問,不知道能否完成像原型設計階段那樣設計的效果。

  原型設計一周時間,具體實現一周時間,時間比較緊,好在我們大體上完成了我們討論中預期設想的目標,經歷了一些困難,也增長了我們二人小組的溝通交流能力,兩個小白互相幫助、互相鼓勵、互相扶持,互相也有了許多收獲。

最初的原型設計可以移步這里查看:點這里

  我們二人開始討論實現項目的時候想法比較簡單,獲取網上的數據信息,然后用更加直白,更加清晰的方式展現出來,這就是我們最初設計的宗旨——簡潔,並且在項目開始,我們通過分享屏幕的方式,規划了我們每人每日的工作任務,工作時間,按照約定的計划開始進行我們的作業:

avatar

  然后我們運用microsoft todo,將我們所計划的任務具體的進行了分工與分類,同時保持溝通與合作:

avatar

avatar

  很多時候我們都會遇到僵局與困難,但是我們都慢慢的克服了:

avatar

  由於github使用不是很嫻熟,有時候我們也會碰到一些溝通上問題,隊友寫過了的代碼沒有注意到。。。:

avatar

  有些問題我們雙方都沒有任何辦法,只能自己摸索:

avatar

avatar

  通過不斷百度,不斷解決問題,也使得我們的能力獲得了提升

四.設計實現過程

  由於本次實踐的內容數據的需求都是來源於網絡,所以我們合計了一下,並不需要在后端進行數據的業務邏輯處理,所以本次不進行后端程序編寫,只專注前端的數據顯示。

221701120

  • 界面樣式設計
  • 中國地圖模塊
  • 中國圖表模塊
  • 粉碎謠言模塊

221701122

  • 省份地圖模塊
  • 省份圖表模塊
  • 新聞模塊
  • 界面部件設計

作品功能結構圖:

五.代碼說明(關鍵代碼描述)

下部分代碼描述了如何構建中國地圖(學習了算法老師給我們推薦的公開課中使用echart的方法):

<script>
        var name;//省份名稱
        //切換全國當前頁面
        function click1() {
            option.series[0].data = currentArray;
            myChart.setOption(option);
        }
        //切換全國累計頁面
        function click2() {
            option.series[0].data = totalArray;
            myChart.setOption(option);
        }

        // 獲取真實的數據
        $.get("http://api.tianapi.com/txapi/ncovcity/index?key=5d4fb67d8bd16c1fd371311e334a4bd0",
            function (data, status) {
                //console.log(data); // data就是獲取到的數據,輸出到控制台查看
                totalArray = [];
                currentArray = [];
                // 處理數據,成地圖需要的數據結構
                data.newslist.forEach(item => {
                    // 循環的過程中,向空數組中加入所需的內容
                    totalArray.push({
                        name: item.provinceShortName, // 省份名字
                        value: item.confirmedCount, // 累計確診
                        current: item.currentConfirmedCount, // 當前確診
                        suspect: item.suspectedCount,//疑似確診
                        cured: item.curedCount,//治愈人數
                        dead: item.deadCount//死亡人數
                    });
                });
                data.newslist.forEach(item => {
                    // 循環的過程中,向空數組中加入所需的內容
                    currentArray.push({
                        name: item.provinceShortName, // 省份名字
                        confirmed: item.confirmedCount, // 累計確診
                        value: item.currentConfirmedCount, // 當前確診
                        suspect: item.suspectedCount,//疑似確診
                        cured: item.curedCount,//治愈人數
                        dead: item.deadCount//死亡人數
                    });
                });
                // 循環結束之后,我們就得到了地圖需要的數據了。數據是arr,但是還稍微有點問題
                // 手動自行添加一個南海諸島的數據
                totalArray.push({
                    name: '南海諸島',
                    confirmed: '未統計',
                    current: '未統計',
                    suspect: '未統計',
                    cured: '未統計',
                    dead: '未統計'
                });
                currentArray.push({
                    name: '南海諸島',
                    confirmed: '未統計',
                    current: '未統計',
                    suspect: '未統計',
                    cured: '未統計',
                    dead: '未統計'
                });

                // 下面開始做地圖
                // 1. 初始化
                myChart = echarts.init(document.getElementById('countryMap'));

                // 2. 配置
                option = {
                    // 標題部分
                    title: {
                        text: '共同戰疫',
                        textStyle: {
                            fontSize: 28
                        },
                        left: 'center',
                        subtextStyle: {
                            fontSize: 14
                        }
                    },
                    // 設置地圖及數據
                    series: [{
                        type: 'map',
                        map: 'china', // 指定是中國地圖
                        data: currentArray, // 設置地圖中的數據
                        label: { // 控制默認顯示省的名字
                            show: true
                        }
                    }],
                    tooltip: { // 懸浮氣泡
                        enterable: true,
                        triggerOn: 'click',
                        position: 'right',
                        formatter: function (params) {
                            name = params.data.name;
                            var result = '確診:' + params.data.value + '<br/>' +
                                '疑似確診:' + params.data.suspect + '<br/>' +
                                '治愈:' + params.data.cured + '<br/>' +
                                '死亡:' + params.data.dead + '<br/>' +
                                '<input style="background: transparent;width: 70px;color:rgb(48, 212, 212);" type="submit" value="詳情" onclick="changePage()">';
                            return result;
                        }
                    },
                    visualMap: {
                        type: 'piecewise',
                        pieces: [
                            { gt: 10000 }, // 大於10000
                            { gt: 5000, lte: 10000 },
                            { gt: 1000, lte: 5000 },
                            { gt: 500, lte: 1000 },  // (900, 1500]
                            { gt: 100, lte: 500 },  // (310, 1000]
                            { gt: 10, lte: 100 },   // (200, 300]
                            { gt: 0, lte: 10 },       // (0, 10]
                        ],
                        inRange: {
                            color: ['#ffcfc3', '#eda595', '#d27b64', '#d5462a', '#a8352e', '#6a211d', '#562a2a']
                        }
                    }
                };
                // 3. 生成地圖
                myChart.setOption(option);
                //console.log(totalArray);
            });

      function changePage() {
            console.log(name);//省份名稱
            param=encodeURI(name);//編碼一下
            window.open("page2.html?param="+param);
        }

    </script>

下面是獲取新聞信息部分的代碼:

    <script>
    var dataUrl = "https://lab.ahusmart.com/nCoV/";
    var dataUrlBackup = "https://lab.ahusmart.com/nCoV/";
    //獲取實時新聞
    $(document).ready(function () {
      initNews();
    });

    var initNews = function () {
      $.ajax({
        url: dataUrl + 'api/news',
        type: 'get',
        success: function (res) {
          if (res.success === true) {
            console.log(res);
            var news = res.results;
            for (var i in news) {
              x=document.getElementById("demo"+i);//將獲取的新聞寫入頁面
              x.innerHTML=news[i].title;
              y=document.getElementById("demoo"+i);
              y.innerHTML=news[i].summary;
              z=document.getElementById("dem"+i).href=news[i].sourceUrl;
            }
            return;
          }
          alert("獲取數據失敗");
        },
        error: function (res) {
          if (res.state() === "rejected" && !this.url.includes(dataUrlBackup)) {
            this.url = this.url.replace(dataUrl, dataUrlBackup);
            $.ajax(this);
          }
        }
      })

    };

  </script>

  代碼比較簡單,其余部分不再過多的在頁面中贅述了。

六.閱讀《構建之法》及對本次結對的心路歷程與收獲

閱讀構建之法四至五章的心得:

在第四章構建之法中提到兩人如何一起合作開發程序,使用了github作為倉庫,建立相應的支線來一起合作完成,對於剛剛進行結對編程的小白來說,感悟到了許多合作方法,在今后的團隊項目中希望能夠得到、學習更多的開發經驗。
第五章介紹了不同的軟件團隊模式與開發流程,對我們啟發很大,掌握了更加科學與高效的團隊協作方法與流程。雖然此次只涉及到兩個人,但相信會對接下來即將到來的團隊編程

有很大的幫助,期待接下來的團隊合作。

221701120

雖然兩個人都沒有什么項目的經驗,但還是跌跌碰碰地完成了,感謝隊友的互幫互助,即使遇到困難也沒有輕易放棄。這次作業也讓我們意識到自身所掌握的知識還是太少,不會的還是太多了。但此次作業給我們帶來的進步還是非常可觀的。百尺竿頭更進一步,希望之后能掌握更多的技術。

221701122

第一次合作,比較具有新鮮感,隊友提供了很多的幫助,也加深我對於python的學習興趣,有時間一定要認真學習一下爬取的方法,不管是對於個人網頁的內容擴展還是及時能夠買到返校車票,都有很大幫助^_^


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM