計算機與軟件工程 第四次作業


作業要求 (https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10534)
我在這個課程的目標是 提高自己能力\
此作業在哪個具體方面幫我實現目標 接觸新工具
作業正文 https://www.cnblogs.com/dragonD/p/12635628.html
碼雲鏈接 https://gitee.com/gardonD/dl-git1.git

作業一

每個人針對之前兩次作業所寫的代碼,針對要求,並按照代碼規范(風格規范、設計規范)要求評判其他學生的程序,同時進行代碼復審,按照代碼復審核表 (https://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html).要求評價數目不少於8人次,
評價內容直接放在你被評價的作業后面評論中
同時另建立一個博客,將你作的評論的截圖或者鏈接,放在博客中,並在你的博客中談談自己的總體看法

小結

代碼的注釋不必過多,但也不可過少,適當必要即可,幫助理解程序功能。代碼復審是發現自身不足的途徑,通過別人的角度能發現自己的許多不足,代碼應嚴格按照要求來編寫,最好能有測試。

作業二

參考結對編程的方法、過程(https://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html)開展兩人合作完成本項目
實現一個簡單而完整的軟件工具(中文文本文件人物統計程序):針對小說《紅樓夢》要求能分析得出各個人物在每一個章回中各自出現的次數,將這些統計結果能寫入到一個csv格式的文件。
進行單元測試、回歸測試、效能測試,在實現上述程序的過程中使用相關的工具。
進行個人軟件過程(PSP)的實踐,逐步記錄自己在每個軟件工程環節花費的時間。
使用源代碼管理系統 (GitHub, Gitee, Coding.net, 等);
針對上述形成的軟件程序,對於新的文本小說《水滸傳》分析各個章節人物出現次數,來考察代碼。
將上述程序開發結對編程過程記錄到新的博客中,尤其是需要通過各種形式展現結對編程過程,並將程序獲得的《紅樓夢》與《水滸傳》各個章節人物出現次數與全本人物出現總次數,通過柱狀圖、餅圖、表格等形式展現。
《紅樓夢》與《水滸傳》的文本小說將會發到群里。

結對對象:(http://home.cnblogs.com/u/chenyue666/)

運行結果


作業過程

Python下載地址(pan.baidu.com/s/1NW6x_61vDRrUU2y4sPCqGA)提取碼:8i72
安裝安裝jieba、matplotlib的過程參考借鑒

小結

第一次嘗試Python遇到很多入門的困難,和隊友上網反復查詢錯誤原因解決
沒能完全符合要求,能力不足,還需多練習。

代碼

import jieba
from collections import Counter
import matplotlib.pyplot as plt
import numpy as np
import csv


class HlmNameCount():
    # 此函數用於繪制條形圖
    def showNameBar(self,name_list_sort,name_list_count):
        # x代表條形數量
        x = np.arange(len(name_list_sort))
        # 處理中文亂碼
        plt.rcParams['font.sans-serif'] = ['SimHei']
        # 繪制條形圖,bars相當於句柄
        bars = plt.bar(x,name_list_count)
        # 給各條形打上標簽
        plt.xticks(x,name_list_sort)
        # 顯示各條形具體數量
        i = 0
        for bar in bars:
            plt.text((bar.get_x() + bar.get_width() / 2), bar.get_height(), '%d' % name_list_count[i], ha='center', va='bottom')
            i += 1
        # 顯示圖形
        plt.show()

    # 此函數用於繪制餅狀圖
    def showNamePie(self, name_list_sort, name_list_fracs):
        # 處理中文亂碼
        plt.rcParams['font.sans-serif'] = ['SimHei']
        # 繪制餅狀圖
        plt.pie(name_list_fracs, labels=name_list_sort, autopct='%1.2f%%', shadow=True)
        # 顯示圖形
        plt.show()

    def getNameTimesSort(self,name_list,txt_path):
        # 將所有人名臨時添加到jieba所用字典,以使jieba能識別所有人名
        for k in name_list:
            jieba.add_word(k)
        # 打開並讀取txt文件
        file_obj = open(txt_path, 'rb').read()
        # jieba分詞
        jieba_cut = jieba.cut(file_obj)
        # Counter重新組裝以方便讀取
        book_counter = Counter(jieba_cut)
        # 人名列表,因為要處理鳳姐所以不直接用name_list
        name_dict ={}
        # 人名出現的總次數,用於后邊計算百分比
        name_total_count = 0
        for k in name_list:
            if k == '熙鳳':
                # 將熙鳳出現的次數合並到鳳姐
                name_dict['鳳姐'] += book_counter[k]
            else:
                name_dict[k] = book_counter[k]
            name_total_count += book_counter[k]
        # Counter重新組裝以使用most_common排序
        name_counter = Counter(name_dict)
        # 按出現次數排序后的人名列表
        name_list_sort = []
        # 按出現次數排序后的人名百分比列表
        name_list_fracs = []
        # 按出現次數排序后的人名次數列表
        name_list_count = []
        for k,v in name_counter.most_common():
            name_list_sort.append(k)
            name_list_fracs.append(round(v/name_total_count,2)*100)
            name_list_count.append(v)
            # print(k+':'+str(v))
        # 繪制條形圖
        self.showNameBar(name_list_sort, name_list_count)
        # 繪制餅狀圖
        self.showNamePie(name_list_sort,name_list_fracs)
       

if __name__ == '__main__':
    # 參與統計的人名列表,可修改成自己想要的列表
    name_list = ['寶玉', '黛玉', '寶釵', '元春', '探春', '湘雲', '妙玉', '迎春', '惜春', '鳳姐', '熙鳳', '巧姐', '李紈', '可卿', '賈母', '賈珍', '賈蓉', '賈赦', '賈政', '王夫人', '賈璉', '薛蟠', '香菱', '寶琴', '襲人', '晴雯', '平兒', '紫鵑', '鶯兒']
    # 紅樓夢txt文件所在路徑,修改成自己文件所在路徑
    txt_path = 'C:/Users/丁丁小/Desktop/h.txt'
    hnc = HlmNameCount()
    hnc.getNameTimesSort(name_list,txt_path)


免責聲明!

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



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