赞
踩
大家好,给大家分享一下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:]
- # 将地区和颜色对应
- 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('{:.2f}KM'.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')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。