作業要求 | (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)