ホームページ  >  記事  >  バックエンド開発  >  Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

PHPz
PHPz転載
2023-04-11 23:49:141801ブラウズ

############こんにちは、みんな!私はタイガー兄弟です。

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。プロジェクトの背景

データ アナリストとして、私たちは頻繁に統計分析グラフを作成する必要があります。しかし、レポートが多すぎると、レポートの作成にほとんどの時間がかかってしまうことがよくあります。このため、データ分析に多くの時間を費やすことができなくなりました。しかし、データアナリストとして、私たちは単に統計表やグラフを作成してレポートを送るのではなく、表やグラフのデータの背後に隠れている関連情報を掘り出すことに最善を尽くす必要があります。

1. レポート自動化の目的

1. 時間を節約し、効率を向上させます

自動化により、常に時間を節約し、作業効率を向上させることができます。プログラミングで各関数実装コードの結合をできる限り減らし、コードをより適切に保守できるようにしましょう。これにより、時間を大幅に節約でき、より貴重で有意義な仕事に取り組むことができるようになります。

2. エラーの削減

コーディング効果が正しければ、永続的に使用できますが、手動で行う場合は、いくつかの間違いが発生する可能性があります。固定プログラムに任せておいたほうが安心で、要件が変わったときにコードの一部を修正するだけで問題を解決できます。

2. レポート自動化の範囲

まず、ビジネス ニーズに応じて必要なレポートを作成する必要があります。すべてのレポートを自動化する必要はありません。一部の複雑な二次開発指標データは、自動プログラミングを実現するには比較的複雑で、さまざまなバグが隠れている可能性があります。したがって、私たちが仕事で使用するレポートの特徴を要約する必要があります。以下は、包括的に考慮する必要があるいくつかの側面です:

1. 頻度

いくつかの分野でよく使用されます。ビジネス 自動化された手順の範囲に含める可能性のあるテーブル。例えば、顧客情報一覧表、売上フロー報告書、事業損失報告書、前月比・前年比報告書などです。

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。#これらの頻繁に使用されるレポートは自動化する必要があります。時々使用する必要があるレポート、二次開発指標、または統計をコピーする必要があるレポートの場合、これらのレポートを自動化する必要はありません。

2. 開発時間Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

これはコストと金利に相当しますが、一部のレポートの自動化が難しく、通常の統計分析に必要な時間を超える場合は、自動化する必要はありません。それ。 。したがって、自動化作業を開始する場合は、スクリプトの開発に費やす時間と手動でテーブルを作成する時間のどちらが短いかを測定する必要があります。もちろん、一連の実装ソリューションを提供しますが、それは一般的に使用されるいくつかの単純なレポートのみです。

3. プロセス

レポートの各プロセスとステップは企業ごとに異なるため、各ステップの機能を実装するにはビジネス シナリオに従ってコーディングする必要があります。したがって、作成するプロセスはビジネス ロジックと一致している必要があり、作成するプログラムも論理的である必要があります。

#3. 実装手順

まず、必要なインジケーターを知る必要があります:

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。インジケーター

全体概要インジケーター

特定のデータ インジケーターの全体的なサイズを反映します

  • 比較インジケーター
モノグラム

    隣接期間内の指標間の直接的な違い
  • YoY

隣接する期間内の共通の時点での指標の比較

  • 中心傾向指標
中央値

モード
  • 平均/加重平均
  • 分散指標
  • 標準偏差
  • 分散
  • 四分位数
  • #全範囲 (範囲)
  • #最大境界値から最小境界値を引いた値
  • #相関指数
  • r
  • 単純なレポートを使用してシミュレーションします。
  • ステップ 1: データ ソース ファイルを読み取る
  • まず、データがどこから来たのかを理解する必要があります。つまり、データソースです。最終的なデータ処理は分析のために DataFrame に変換されるため、データ ソースを DataFrame 形式に変換する必要があります。
import pandas as pd
import json
import pymysql
from sqlalchemy import create_engine
# 打开数据库连接
conn = pymysql.connect(host='localhost',
port=3306,
user='root',
passwd='xxxx',
charset = 'utf8'
)
engine=create_engine('mysql+pymysql://root:xxxx@localhost/mysql?charset=utf8')
def read_excel(file):
 df_excel=pd.read_excel(file)
 return df_excel
def read_json(file):
 with open(file,'r')as json_f:
 df_json=pd.read_json(json_f)
 return df_json
def read_sql(table):
 sql_cmd ='SELECT * FROM %s'%table
 df_sql=pd.read_sql(sql_cmd,engine)
 return df_sql
def read_csv(file):
 df_csv=pd.read_csv(file)
 return df_csv

上記のコードはテストに合格した後は通常どおり使用できますが、pandas の読み取り関数のターゲットは異なります。フォームでのファイル読み取りの場合、読み取り関数パラメータも異なる意味を持ち、テーブルの形式に従って直接調整する必要があります。 Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

他の読み取り関数は、この記事の執筆後に追加されます。read_sql がデータベースに接続する必要があることを除けば、その他の関数は比較的単純です。

2 番目のステップ: DataFrame の計算

ユーザー情報を例として取り上げます:

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

我们需要统计的指标为:

  • #指标说明
  • 单表图:
  • 前十个产品受众最多的地区
#将城市空值的一行删除
df=df[df['city_num'].notna()]
#删除error
df=df.drop(df[df['city_num']=='error'].index)
#统计df = df.city_num.value_counts()

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

我们仅获取前10名的城市就好了,封装为饼图:

def pie_chart(df):
 #将城市空值的一行删除
 df=df[df['city_num'].notna()]
 #删除error
 df=df.drop(df[df['city_num']=='error'].index)
 #统计
 df = df.city_num.value_counts()
 df.head(10).plot.pie(subplots=True,figsize=(5, 6),autopct='%.2f%%',radius = 1.2,startangle = 250,legend=False)
pie_chart(read_csv('user_info.csv'))

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

将图表保存起来:

plt.savefig('fig_cat.png')

要是你觉得matplotlib的图片不太美观的话,你也可以换成echarts的图片,会更加好看一些:

pie = Pie()
pie.add("",words)
pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地区"))
#pie.set_series_opts(label_opts=opts.LabelOpts(user_df))
pie.render_notebook()

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

封装后就可以直接使用了:

def echart_pie(user_df):
 user_df=user_df[user_df['city_num'].notna()]
 user_df=user_df.drop(user_df[user_df['city_num']=='error'].index)
 user_df = user_df.city_num.value_counts()
 name=user_df.head(10).index.tolist()
 value=user_df.head(10).values.tolist()
 words=list(zip(list(name),list(value)))
 pie = Pie()
 pie.add("",words)
 pie.set_global_opts(title_opts=opts.TitleOpts(title="前十地区"))
 #pie.set_series_opts(label_opts=opts.LabelOpts(user_df))
 return pie.render_notebook()
user_df=read_csv('user_info.csv')
echart_pie(user_df)

可以进行保存,可惜不是动图:

from snapshot_selenium import snapshot
make_snapshot(snapshot,echart_pie(user_df).render(),"test.png")

保存为网页的形式就可以自动加载JS进行渲染了:

echart_pie(user_df).render('problem.html')
os.system('problem.html')

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

第三步:自动发送邮件

做出来的一系列报表一般都要发给别人看的,对于一些每天需要发送到指定邮箱或者需要发送多封报表的可以使用Python来自动发送邮箱。

在Python发送邮件主要借助到smtplib和email这个两个模块。

  • smtplib:主要用来建立和断开与服务器连接的工作。
  • email:主要用来设置一些些与邮件本身相关的内容。

不同种类的邮箱服务器连接地址不一样,大家根据自己平常使用的邮箱设置相应的服务器进行连接。这里博主用网易邮箱展示:

首先需要开启POP3/SMTP/IMAP服务:

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

之后便可以根据授权码使用python登入了。

import smtplib
from email import encoders
from email.header import Header
from email.utils import parseaddr,formataddr
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
#发件人邮箱
asender="fanstuck@163.com"
#收件人邮箱
areceiver="1079944650@qq.com"
#抄送人邮箱
acc="fanstuck@163.com"
#邮箱主题
asubject="谢谢关注"
#发件人地址
from_addr="fanstuck@163.com"
#邮箱授权码
password="####"
#邮件设置
msg=MIMEMultipart()
msg['Subject']=asubject
msg['to']=areceiver
msg['Cc']=acc
msg['from']="fanstuck"
#邮件正文
body="你好,欢迎关注fanstuck,您的关注就是我继续创作的动力!"
msg.attach(MIMEText(body,'plain','utf-8'))
#添加附件
htmlFile = 'C:/Users/10799/problem.html'
html = MIMEApplication(open(htmlFile , 'rb').read())
html.add_header('Content-Disposition', 'attachment', filename='html')
msg.attach(html)
#设置邮箱服务器地址和接口
smtp_server="smtp.163.com"
server = smtplib.SMTP(smtp_server,25)
server.set_debuglevel(1)
#登录邮箱
server.login(from_addr,password)
#发生邮箱
server.sendmail(from_addr,areceiver.split(',')+acc.split(','),msg.as_string())
#断开服务器连接
server.quit()

运行测试:  

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

下载文件:

Python 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。

完全没问题!!!

以上がPython 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。