############こんにちは、みんな!私はタイガー兄弟です。
プロジェクトの背景
データ アナリストとして、私たちは頻繁に統計分析グラフを作成する必要があります。しかし、レポートが多すぎると、レポートの作成にほとんどの時間がかかってしまうことがよくあります。このため、データ分析に多くの時間を費やすことができなくなりました。しかし、データアナリストとして、私たちは単に統計表やグラフを作成してレポートを送るのではなく、表やグラフのデータの背後に隠れている関連情報を掘り出すことに最善を尽くす必要があります。
1. 時間を節約し、効率を向上させます
コーディング効果が正しければ、永続的に使用できますが、手動で行う場合は、いくつかの間違いが発生する可能性があります。固定プログラムに任せておいたほうが安心で、要件が変わったときにコードの一部を修正するだけで問題を解決できます。
まず、ビジネス ニーズに応じて必要なレポートを作成する必要があります。すべてのレポートを自動化する必要はありません。一部の複雑な二次開発指標データは、自動プログラミングを実現するには比較的複雑で、さまざまなバグが隠れている可能性があります。したがって、私たちが仕事で使用するレポートの特徴を要約する必要があります。以下は、包括的に考慮する必要があるいくつかの側面です:
いくつかの分野でよく使用されます。ビジネス 自動化された手順の範囲に含める可能性のあるテーブル。例えば、顧客情報一覧表、売上フロー報告書、事業損失報告書、前月比・前年比報告書などです。
#これらの頻繁に使用されるレポートは自動化する必要があります。時々使用する必要があるレポート、二次開発指標、または統計をコピーする必要があるレポートの場合、これらのレポートを自動化する必要はありません。
2. 開発時間
これはコストと金利に相当しますが、一部のレポートの自動化が難しく、通常の統計分析に必要な時間を超える場合は、自動化する必要はありません。それ。 。したがって、自動化作業を開始する場合は、スクリプトの開発に費やす時間と手動でテーブルを作成する時間のどちらが短いかを測定する必要があります。もちろん、一連の実装ソリューションを提供しますが、それは一般的に使用されるいくつかの単純なレポートのみです。 3. プロセスレポートの各プロセスとステップは企業ごとに異なるため、各ステップの機能を実装するにはビジネス シナリオに従ってコーディングする必要があります。したがって、作成するプロセスはビジネス ロジックと一致している必要があり、作成するプログラムも論理的である必要があります。 #3. 実装手順まず、必要なインジケーターを知る必要があります:インジケーター
全体概要インジケーター特定のデータ インジケーターの全体的なサイズを反映します
隣接する期間内の共通の時点での指標の比較
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 の読み取り関数のターゲットは異なります。フォームでのファイル読み取りの場合、読み取り関数パラメータも異なる意味を持ち、テーブルの形式に従って直接調整する必要があります。
他の読み取り関数は、この記事の執筆後に追加されます。read_sql がデータベースに接続する必要があることを除けば、その他の関数は比較的単純です。 2 番目のステップ: DataFrame の計算ユーザー情報を例として取り上げます:我们需要统计的指标为:
#将城市空值的一行删除 df=df[df['city_num'].notna()] #删除error df=df.drop(df[df['city_num']=='error'].index) #统计df = df.city_num.value_counts()
我们仅获取前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'))
将图表保存起来:
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()
封装后就可以直接使用了:
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发送邮件主要借助到smtplib和email这个两个模块。
不同种类的邮箱服务器连接地址不一样,大家根据自己平常使用的邮箱设置相应的服务器进行连接。这里博主用网易邮箱展示:
首先需要开启POP3/SMTP/IMAP服务:
之后便可以根据授权码使用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 自動オフィス アプレット: レポートの自動化を実現し、宛先メールボックスに自動的に送信します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。