用python做数据分析
程序员文章站
2022-04-18 09:22:29
看到一篇关于 Python办公自动化|一键生成数据分析报告 的文章,感觉文章写得很好,记录下来,方便继续学习。原文链接:https://blog.csdn.net/weixin_38037405/article/details/107142320?fps=1&locationNum=2准备数据采用python中的faker模块实现数据的生成。生成了40个学生的数据,包括学号、姓名、性别、邮箱、语文分数、数学分数、英语分数、理综分数信息。代码如下:from faker import Fa...
看到一篇关于 Python办公自动化|一键生成数据分析报告 的文章,感觉文章写得很好,记录下来,方便继续学习。
原文链接:https://blog.csdn.net/weixin_38037405/article/details/107142320?fps=1&locationNum=2
准备数据
采用python中的faker模块实现数据的生成。生成了40个学生的数据,包括学号、姓名、性别、邮箱、语文分数、数学分数、英语分数、理综分数信息。
代码如下:
from faker import Faker
import pandas as pd
from numpy import random
#生成数据
fake=Faker('zh_CN') #生成中文伪造数据
name=[]
sex=[]
mail=[]
Chinese_score=[]
Math_score=[]
English_score=[]
Comprehensive_score=[]
number=range(2020521,2020561)
for _ in range(40):
name.append(fake.simple_profile(sex=None)['name'])
sex.append(fake.simple_profile(sex=None)['sex'])
mail.append(fake.simple_profile(sex=None)['mail'])
Chinese_score.append(random.randint(40,100))
Math_score.append(random.randint(40,100))
English_score.append(random.randint(40,100))
Comprehensive_score.append(random.randint(200,300))
# 写入Excel
df = pd.DataFrame({
'学号':number,
'姓名':name,
'性别':sex,
'邮箱':mail,
'语文':Chinese_score,
'数学':Math_score,
'英语':English_score,
'理综':Comprehensive_score
})
df = df.set_index('学号')
df.to_excel('学生成绩单.xlsx')
生成的数据存放在Excel表格中,一共40个学生的数据。部分数据展示如下:
生成分析报告
代码如下:
#生成分析报告
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
document=Document()
students=pd.read_excel('学生成绩单.xlsx')
#用reindex添加‘总分’列,用0填充
students=students.reindex(columns=['学号','姓名','性别','邮箱','语文','数学','英语','理综','总分'],fill_value=0)
#计算‘总分’列的值
students['总分']=students['语文']+students['数学']+students['英语']+students['理综']
document=Document()
title = document.add_heading(text=u'成绩分析报告',level=1)
#标题居中
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
p = document.add_paragraph('本次测评,全班共有{}名同学参加考试,其中分数总分排名第一的\
同学是'.format(len(students.姓名)),style='Heading 3')
#找出排名第一的同学的分数和姓名
first_score=0
first_student=''
first_score=max(students.总分)
for i,(index,row) in enumerate(students.iterrows()):
if row['总分']==first_score:
first_student=row['姓名']
p.add_run(str(first_student)).bold=True
p.add_run(',分数为')
p.add_run(str(first_score)).bold=True
p.add_run('.学生考试总体情况如下:')
#将成绩按“总分”从高到低排序
students=students.sort_values(by="总分" , ascending=False)
#添加表格
table=document.add_table(rows=len(students.姓名)+1,cols=6,style='Medium Shading 1 Accent 5')
table.cell(0,0).text='姓名'
table.cell(0,1).text='语文'
table.cell(0,2).text='数学'
table.cell(0,3).text='英语'
table.cell(0,4).text='理综'
table.cell(0,5).text='总分'
#往表格里面添加数据
for i,(index,row) in enumerate(students.iterrows()):
table.cell(i+1,0).text=str(row['姓名'])
table.cell(i+1,1).text=str(row['语文'])
table.cell(i+1,2).text=str(row['数学'])
table.cell(i+1,3).text=str(row['英语'])
table.cell(i+1,4).text=str(row['理综'])
table.cell(i+1,5).text=str(row['总分'])
#保存word文档
document.save('成绩分析报告.docx')
最终生成了一份docx文档,文档展示如下:
学生成绩汇总
代码如下:
#学生成绩汇总
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
students.sort_values(by='总分', inplace=True, ascending=False)
students.reset_index(drop=True, inplace=True)
ax = students.plot.bar(x='姓名', y=['语文','数学','英语','理综'], stacked=True)
plt.title('学生成绩汇总图', fontsize=16) # fontproperties=font
plt.xlabel('姓名', fontsize=10) # fontproperties=font,
plt.xticks(fontsize=9) # fontproperties=font,
ax.spines['top'].set_visible(False) #去掉上面的边框
ax.spines['right'].set_visible(False) #去掉右边的边框
plt.tight_layout()
plt.savefig('Part3_data.jpg')
结果如下:
原文中还有部分代码,自己还无法实现,只做了这部分,有兴趣的读者可以阅读原文,原文链接文章开头给出。
本文地址:https://blog.csdn.net/weixin_45972423/article/details/107571814
上一篇: 到底得交多少电费?酷冷这款电源精确告诉你