当前位置: 移动技术网 > IT编程>脚本编程>Python > 用python做数据分析

用python做数据分析

2020年07月26日  | 移动技术网IT编程  | 我要评论

看到一篇关于 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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网