curriculum_design
Created|Updated
|Post View:
经典开场
坚持是光明的前身,光明给予万物生命。光明不灭,生命不息,坚持亦不止。
一、前言
简介
💻 时间稍纵即逝,转眼间大三就来到第二个学期,还有一学年就要毕业了;马上也要开始准备 毕业设计 。
但是很多地方还需要进阶学习。然后这段时间也学习了很多的东西,让我也是收获颇满;但同时也
认识到了自己的不足,下面我将介绍一下做的一些内容。
温馨提示:如果想直接看结果请直接看:实战代码
二、项目简介
Python数据处理、分析与应用的实现过程,以及专业技术人员所使用的基本方法和技巧,
培养自己解决Python数据处理、分析与应用过程中遇到实际问题的能力,
掌握应用Python编写程序的技术,提高学生在Python数据处理、分析与应用方面的综合应用能力。
基本的知识目前就不哆嗦了,直接实战。
三、实战项目
实战1:中文词频统计并利用词云图进行数据可视化
(1)认识jieba库和wordcloud库;
(2)利用jieba库进行中文词频统计,强调字典、列表的应用;
(3)结合词频统计结果利用wordcloud库进行词云图的可视化;
(4)程序代码存为“学号姓名a.py”,词频统计结果存为“学号姓名a.csv”,词云图存为“学号姓名a.png”;
(5)每个步骤需要运行结果截图,截图中需要加上水印,水印为自己的学号姓名。
第一步、安装库
第二步: 分析题目意思
题目需要利用jieba库和wordcloud库
首先认识一下这两个库
Jieba是什么
jieba(“结巴”)是Python中一个重要的第三方中文分词函数库,能够将一段中文文本分割成中文词语的序列。
jieba库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组。 除了分词jieba还提供增加自定义中文单词的功能。
第二步、Jieba常用的方法
精确模式,将句子最精确地切开,适合文本分析;返回结果是列表类型
1 2 3 4
| import jieba a="爱上对方过后就哭了." ls = jieba.lcut(a) print(ls)
|

全模式,把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;将字符串的所有分词可能均列出来,返回结果是列表类型,冗余性最大
1 2 3 4
| import jieba a="爱上对方过后就哭了." ls = jieba.lcut(a,cut_all=True) print(ls)
|

搜索引擎模式,在精确模式基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
1 2 3 4
| import jieba a="爱上对方过后就哭了." ls = jieba.lcut_for_search(a) print(ls)
|

jieba.add_word()函数,用来向jieba词库增加新的单词。
1 2 3 4 5
| import jieba a="爱上对方过后就哭了" jieba.add_word("过后就哭了") ls = jieba.lcut(a) print(ls)
|

第三步、Wordcloud常用的方法
在生成词云时,wordcloud默认会以空格或标点为分隔符对目标文本进行分词处理
根据文本中词语出现的频率等参数绘制词云 绘制词云的形状,尺寸和颜色都可以设定
过多的基础知识我这就不多余的讲解,不懂得请看以前的文章,嘿嘿😊
第四步、实战一代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| import matplotlib.pyplot as plt from PIL import Image import wordcloud as wc import jieba import csv import numpy as np
excludes = open("stoplist.txt", 'r+', encoding='utf-8').read() b = [] i = 0 while i < len(excludes) - 1: if excludes[i] not in {',', '、', '.', ' ', '\n', '\\'}: b.append(excludes[i:i + 2]) i += 2 else: i += 1
counts = {} with open('Praxis.txt', mode='r', encoding='utf-8') as fp: content = fp.read() words = jieba.lcut(content) text = " ".join(words)
for word in words: if len(word) == 1: continue else: rword = word counts[rword] = counts.get(rword, 0) + 1
for word in b: print(f'word{word}') if word in counts: del counts[word] print(f'counts{counts}')
items = list(counts.items()) print(f'item{items}')
mask = np.array(Image.open('love.png')) word_cloud = wc.WordCloud( font_path=r'C:\Windows\Fonts\simkai.ttf', background_color="#e6ebf1", mask=mask, max_words=2000, max_font_size=100, width=500, height=500, ) word_cloud.generate(text) fn = '888888小猿.csv' with open(fn, 'w', encoding='gbk', newline='') as csvfile: csvWiter = csv.writer(csvfile) for key in counts: csvWiter.writerow([key, counts[key]]) print("数据加载完毕") plt.imshow(word_cloud) word_cloud.to_file('888888小猿.jpg') plt.show()
|
第四步、结果
(1)认识jieba库和wordcloud库;
(2)利用jieba库进行中文词频统计,强调字典、列表的应用;
(3)结合词频统计结果利用wordcloud库进行词云图的可视化;
(4)程序代码存为“学号姓名a.py”,词频统计结果存为“学号姓名a.csv”,词云图存为“学号姓名a.png”;
(5)每个步骤需要运行结果截图,截图中需要加上水印,水印为自己的学号姓名。
实战2:Numpy数值计算
掌握NumPy数组对象ndarray;
掌握NumPy矩阵与通用函数;
利用NumPy进行统计分析;
平面上有100个点,求任意2点间的欧式距离,并将其保存到矩阵当中。
程序代码存为“学号姓名b.py”,矩阵存为“学号姓名b.csv”;
每个步骤需要运行结果截图,截图中需要加上水印,水印为自己的学号姓名
第一步、安装库
第二步、分析题目意思
主要是生成100个点在平面上,来求两点距离.
这里就需要掌握一些Numpy基本的知识
第三步、Numpy是什么
NumPy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能
比如数据 统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray)
支持大量的维度数组 与矩阵运算,Numpy 支持向量处理 ndarray 对象,提高程序运算速度。
第四步、欧拉距离

从图中可以很清晰的了解到这张图就是一个矩阵
行和列已经标注的很清晰可见
当然,看懂了图就要把题目联想起来
平面上面要求100个随机点的欧拉距离
方法1:d = (x-x1)^2+(y-y1)^2开平方根
方法2:看见途中蓝色笔画出来的抽象直角三角形,知道两个点的X和Y;
以可以使用直角三角形的勾股定理来解这个题目 两种方法任选其一
欧拉距离就是两个点之间的距离。
第五步、Numpy基础
NumPy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能
比如数据 统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray)
支持大量的维度数组 与矩阵运算,Numpy 支持向量处理 ndarray 对象,提高程序运算速度。
部分基础
| 参数 |
描述 |
| shape |
数组形状 |
| dtype |
数据类型,可选 |
| order |
有”C”和”F”两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 |
arange 函数创建数值范围并返回 ndarray 对象
格式:numpy.arange(start, stop, step 步长,默认为1, dtype 数据类型)
1 2
| datal = np.arange(10, 34).astype(int) print(f'arange:{datal}')
|
linspace 函数用于创建一个一维数组,数组是一个等差数列
格式:np.linspace(start, stop, num=50, endpoint=True (默认) endpoint 设为 false,不包含终止值, retstep=False , dtype=None)
1 2
| datal = np.linspace(10, 20, 5, endpoint=False).astype(int) print(f'linspace:{datal}')
|
arange(开始索引,终止索引) ,开始索引为0 可以省略不写。结合reshape()方法定义维数。
创建一个 3x3 并且值从0到8的矩阵。
1 2
| data2 = np.arange(9).reshape(3, 3) print(f'reshape:{data2}')
|
ones((行,列)) 创建一个 3x3 的单位矩阵。
1 2
| datal = np.ones((3, 3)).astype(int) print(f'ones:{datal}')
|
创建一个数组,数组的shape为(5, 0),元素都是0。
矩阵元素值全为0,调用numpy库中zeros(行数,列数)方法
1 2 3
| datal = np.zeros((5, 0)) print(f'zeros:{datal}') print(''.center(30, '*'))
|
创建一个表示国际象棋棋盘的8*8数组,其中,棋盘白格用0填充,棋盘黑格用1填充
此矩阵每隔一行元素值相同,只需对两行的相邻位置进行赋值,用步长对其他元素赋值。
1 2 3 4
| data5 = np.arange(64).reshape(8, 8) data5[::2, ::2] = data5[1::2, 1::2] = 0 data5[::2, 1::2] = data5[1::2, ::2] = 1 print('国际象棋:')
|
第六步、实战二代码
方法一
1 2 3 4 5 6 7 8
| import numpy as np points = np.random.rand(100, 2) distances = np.sqrt(np.sum((points[:, np.newaxis] - points) ** 2, axis=2))
print('正在保存数据') np.savetxt('888888小猿.csv', distances) print('数据保存完毕')
|
方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| import numpy as np import matplotlib.pyplot as plt import xlwt
plt.rcParams["font.sans-serif"] = ["simhei"] plt.rcParams["axes.unicode_minus"]= False
points = np.random.rand(100, 2)
plt.scatter(points[:, 0], points[:, 1], c='b') plt.title('随机图') plt.xlabel('X') plt.ylabel('Y') plt.show()
diff = np.expand_dims(points, axis=1) - np.expand_dims(points, axis=0) dist_matrix = np.sqrt(np.sum(diff ** 2, axis=-1))
filename = '888888小猿b.xls' workbook = xlwt.Workbook() sheet = workbook.add_sheet('Distances')
for i in range(len(dist_matrix)): for j in range(len(dist_matrix)): sheet.write(i, j, dist_matrix[i, j])
workbook.save(filename)
|
方法二会生成一个点图,然后在生成一个xls文件
方法三
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import numpy as np import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["simhei"] plt.rcParams["axes.unicode_minus"]= False
points = np.random.rand(100, 2) plt.scatter(points[:, 0], points[:, 1], c='k') plt.title('随机100点图') plt.xlabel('X') plt.ylabel('Y') plt.savefig('888888小猿b.jpg') plt.show() distances = np.sqrt(np.sum((points[:, np.newaxis] - points) ** 2, axis=2)) print('正在保存数据') np.savetxt('888888小猿b.csv', distances) print('数据保存完毕')
|
方法三主要是通过数组的升维,然后在进行欧拉计算
了解知识
axis翻译过来就是轴的意思
三维数组拥有三个轴:axis=0,axis=1,axis=2。 以此类推
axis=0对应最外层的[],axis=1对应第二外层的[],…,axis=n对应第n外层的[]。
| axis |
[ ] |
| axis = 0 |
[ ] |
| axis = 1 |
[ [ ] ] |
| axis = 2 |
[ [ [ ] ] ] |
[1, 2, 3]是一维数组、[[1, 2, 3], [4, 5, 6]]是二维数组、[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]] 是三维数组
每一行代码的意思:
1.points[:, np.newaxis]将points数组转换为二维数组,并在第二个维度上添加一个新的维度,这样才能与原数组进行减法操作。
2.(points[:, np.newaxis] - points)表示将每个点与其他所有点的坐标相减,得到一个三维数组。
3.(points[:, np.newaxis] - points) ** 2表示对每个坐标差值进行平方运算。
4.np.sum((points[:, np.newaxis] - points) ** 2, axis=2)表示沿着第三个维度(即每个点的两个坐标值)对平方差值进行求和,得到一个二维数组,表示每个点与其他所有点的距离平方。
5.np.sqrt(np.sum((points[:, np.newaxis] - points) ** 2, axis=2))表示对距离平方进行开方运算,得到每个点与其他所有点的距离矩阵。
第七步、结果

实战3:Matplotlib数据可视化
(1)了解绘图基础语法与常用参数;
(2)分析特征间的关系;
(3)分析特征内部数据分布与分散状况;
(4)根据老师提供的“国民经济核算季度数据.npz”,用散点图来展示数据中的两个属性:时间(横坐标)、国内生产总值_当季值(亿元)(纵坐标)。
第一步、安装库
第二步、学习Matplotlib
Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
Matplotlib 可以用来绘制各种静态,动态,交互式的图表。
Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。
Matplotlib 可以绘制折线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
折线图
1 2 3 4 5 6 7 8 9 10
| import numpy as np import matplotlib.pyplot as plt x = np.linspace(0.05, 18, 100) y = np.sin(x) plt.plot(x, y, ls='-', lw=2, label="plot figure") print("曲线") plt.legend() plt.xlabel('x-axis') plt.ylabel('y-axis') plt.show()
|
结果

饼图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import matplotlib.pyplot as plt
sizes = [15, 30, 45, 10]
labels = ['A', 'B', 'C', 'D']
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0, 0.1, 0, 0)
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90)
plt.title("RUNOOB Pie Test")
plt.show()
|
结果

散点图
1 2 3 4 5 6 7 8
| from pylab import * n = 1024 X = np.random.normal(0,1,n) Y = np.random.normal(0,1,n) print("散点图:") scatter() scatter(X,Y) show()
|
结果

条形图
1 2 3 4 5 6 7 8 9 10 11 12
| from pylab import * n = 12 X = np.arange(n) Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n) Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n) bar(X, +Y1, facecolor='#9999ff', edgecolor='white') bar(X, -Y2, facecolor='#ff9999', edgecolor='white') print("条形图:") for x,y in zip(X,Y1): text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom') ylim(-1.25,+1.25) show()
|
结果

第三步、分析题目
两个属性:时间(横坐标)、国内生产总值_当季值(亿元)(纵坐标)
这个是这道题目的重点
拿到这两个数据这道题就可以完美解决
第四步、实战三代码
方法一 保存到XSL文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| import numpy as np import matplotlib.pyplot as plt import xlwt
plt.rcParams["font.sans-serif"] = ["simhei"] plt.rcParams["axes.unicode_minus"]= False
points = np.random.rand(100, 2)
plt.scatter(points[:, 0], points[:, 1], c='b') plt.title('随机图') plt.xlabel('X') plt.ylabel('Y') plt.show()
diff = np.expand_dims(points, axis=1) - np.expand_dims(points, axis=0) dist_matrix = np.sqrt(np.sum(diff ** 2, axis=-1))
filename = '888888小猿b.xls' workbook = xlwt.Workbook() sheet = workbook.add_sheet('Distances')
for i in range(len(dist_matrix)): for j in range(len(dist_matrix)): sheet.write(i, j, dist_matrix[i, j])
workbook.save(filename)
|
方法二 保存到CSV文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import numpy as np import matplotlib.pyplot as plt import csv plt.rcParams["font.sans-serif"] = ["simhei"] plt.rcParams["axes.unicode_minus"]= False data = np.load('国民经济核算季度数据.npz',allow_pickle=True) print(list(data))
columns=data['columns'] values = data['values']
mark = ["o","*","D"] for i in range(3,6): plt.scatter(values[:,1], values[:, i],marker=mark[i-3]) plt.xticks(values[range(0,69,4),1],rotation=45) plt.legend(columns[3:6]) plt.title("2000-2017年各个产业国民生产总值散点图") plt.savefig('888888小猿c.jpg') plt.show() print("正在保存数据") data = np.array([columns[1:3],values[:,[1,2]]]) np.savetxt('888888小猿c.csv', data, delimiter=',', fmt = '%s') print("保存数据成功")
|
方法三 保存到CSV文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import csv import numpy as np import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["simhei"] plt.rcParams["axes.unicode_minus"] = False data = np.load('国民经济核算季度数据.npz', allow_pickle=True) columns = data['columns'] values = data['values'] mark = ["o", "*", "D"] for i in range(3, 6): plt.scatter(values[:, 1], values[:, i], marker=mark[i-3]) plt.xticks(values[range(0, 69, 4), 1],rotation=45) plt.legend(columns[3:6]) plt.title("2000-2017年各个产业国民生产总值散点图") plt.savefig('888888小猿c.jpg') plt.show() data_to_save = np.vstack((columns[1:3], values[:, [1, 2]])) np.savetxt('888888小猿c.csv', data_to_save, delimiter=',', fmt='%s') print("数据保存成功!")
|
第五步、结果

四、总结
通过本次的实战训练,学会了很多的知识点,革命尚未结束,小猿还得努力。
如果对你有帮助,请下方投币,创作不容易,请多多支持小猿✅
完美收官
山前有路,山后也未必有曙光,所以请坚持下去,心中的火不能灭,哪怕别人只能看见烟。