Python期末大作业
Posted qq_64692633
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python期末大作业相关的知识,希望对你有一定的参考价值。
先进行一些库的引入和常规操作
# 数据分析三兄弟
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 分别是视频、音频处理的库
import cv2
from moviepy.editor import *
# 中文编码
plt.rcParams['font.sans-serif'] = ['YouYuan']
plt.rcParams['axes.unicode_minus'] = False
# 读取文件,简单处理
data = pd.read_excel('国家地铁里程历程.xlsx')
data = data.rename(columns='Unnamed:0': '年份')
1.每一列最前面的正整数之前全部设为0
2.每一列空格部分都使用前后两个值进行“线性插值”填空,以月为单位进行插值
# 建立一个标题与原表相同的空表
df = pd.DataFrame(columns=data.columns)
# 处理这个空表,插入一行原来data的行,再插入11行空行
for i in range(0, 123):
df = pd.concat([df, data.loc[i:i, :]])
for j in range(0, 11):
df = pd.concat([df, pd.DataFrame(["": np.nan], columns=data.columns)], ignore_index=True)
# 加上最后一行
df = pd.concat([df, data.loc[123:123, :]])
df = df.set_index('Unnamed: 0')
df = df.interpolate()
# 取出1900年后的
df = df.loc[1900:]
df = df.fillna(0)
df = df.reset_index()
# 取出年作为后面要用的标签
nian = df.iloc[:, 0]
nian = nian.fillna(method='ffill')
# 取出数据部分
df = df.iloc[:, 1:]
- 每幅图显示里程数最多的10个国家,当不到10个时,全部绘制。
- 绘图时里程数大的在上放,小的在下方。
- 每个国家对应的颜色自行定义,且保持不变,其中中国须为红色。
- 图中每条bar须列明国名。
- 图中每条bar须标注数值,数值保留小数点后2位有效数字。
# 将地区和颜色对应
area_list = df.columns
color_list = ['#DDDDDD', '#FF44AA', '#FF5511', '#886600', '#FFFF33', '#77FF00', '#77FFEE', '#003C9D', '#D28EFF',
'#770077', '#FF0000']
colors = dict(zip(area_list, color_list))
# 绘制图表
plt.rcParams['axes.facecolor'] = '#FFE4E1'
plt.figure(figsize=(15, 8), dpi=80, facecolor='#FFE4E1')
for i in range(0, len(df)):
# 画表
plt.xlabel("公里数", fontsize=25)
plt.ylabel("国家", fontsize=25)
plt.tick_params(labelsize=25)
plt.title("全球各国铁路里程", fontsize=30)
ax = plt.subplot()
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
# 排序
df = df.sort_values(by=i, axis=1)
# 保留前10个
x = df.columns[1:]
y = df.iloc[i, 1:]
plt.barh(x, y, color=[colors[t] for t in x])
ax = plt.gca()
#添加标签和水印
plt.text(0.8, 0.1, s=int(nian[i]), transform=ax.transAxes, fontsize=50)
plt.text(0.5, 0.5, s='水印', transform=ax.transAxes, fontsize=50, alpha=0.4)
for j in range(0, len(x)):
plt.text(y[j] + 0.5, x[j], s=str(':.2fKM'.format(y[j])), fontsize=20)
# plt.show()
# 保存
plt.savefig(r"img\\t.jpg".format(i))
plt.clf()
将多幅图片组织为mp4格式视频,帧率设置为每秒12帧。
# 读取中文路径
# 前面不能出现中文路径,否则需要加上这段
def cv_imread(filePath):
cv_img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), -1)
return cv_img
# 视频合成
size = (1200, 640)
videowrite = cv2.VideoWriter('test.mp4', -1, 12, size) # 12表示帧率
img_array = []
for filename in [r"img/t.jpg".format(i) for i in range(1453)]:
img = cv_imread(filename)
if img is None:
print(filename + " is not found.")
continue
img_array.append(img)
for i in range(1453):
videowrite.write(img_array[i])
videowrite.release()
print('over')
加一个bgm
# 加bgm
video_clip = VideoFileClip('test.mp4')
audio_clip = AudioFileClip('china—x.mp3')
audio = afx.audio_loop(audio_clip, duration=video_clip.duration)
final_video = video_clip.set_audio(audio)
final_video.write_videofile('china—x.mp4')
以上是关于Python期末大作业的主要内容,如果未能解决你的问题,请参考以下文章
python小游戏_程序设计_期末大作业——小游戏合集(含源代码)
Python实战项目 - Python程序设计(期末大作业课程设计毕业设计)-用Python开发的基于TCP通讯协议的实时通讯和文件共享应用