Pythonを用いて天猫店の販売を分析した.下
4567 ワード
2か月ぶりに爬虫類の任務が完成した.前回は(Pythonを利用して天猫店舗の販売を分析した.上)と述べ、次の4つの機能を完成させた.毎晩1日採集したデータを分析し、今日の最高の販売量を分析した. 販売量と単価によって毎日の売上高を計算する. 上記の内容を統一してpdfレポートを生成する. レポートをメールボックスに送信します.
前回のタスクが完了した後、タスクの最後はcrontabによって毎日8時、13時、18時、23時に設定され、タイミング的にタスクが収集され、この内容の目的は毎日23時に最後のタスクが完了した後、その日に収集されたデータを処理し、時間は23時30分に設定され、crontabによってタイミング的に開くことである.
これはSQLiteで毎日収集したデータを再抽出すれば、当日の販売データはSCOUNTテーブルに収集され、データの列名は時間に基づいて命名されるため、当日の4つの時点で収集した販売データを得るためには、まず列名を取得する必要があります.SQLiteでは、Pragmaによってすべてのカラム名情報を取得できます.Pragmaには、内部操作の変更とテーブル固有データの取得、table_を介した2つの機能があります.infoは、カラム名情報を取得できます.すべてのカラム名情報を取得した後、list comprehensions(これはどのように翻訳するか分かりません)を通じて、今日新たに生成された4つの販売データ列を取得できます.
そして、取得した販売データは、SKU毎に1日に4回収集され、収集されたSKUがダウンフレームする可能性があるため、SKUリストには各SKUが収集される可能性がないため、収集に必要なデータにはdropnaが必要であり、SKU情報テーブルと販売データテーブルをmerge関数で統合して必要なdataを形成する必要がある.各SKUは、時刻ごとに収集されるデータが変動し、販売データが連続的に増加する過程ではないため、当日の販売量を求めるために、1日の最大数と最小数の差をとることができる.
売上高を生成する方法は似ていますが、ここにはリストされません.
PDFを生成するというのは当時の想定でしたが、後にこのチュートリアルを参考にして作られた(Practical Business Pythonは良いサイトで、お勧め)、原理はDataFrameを通じてHTMLに変換し、HTMLをPDFに変換することです.しかし、メールモジュールを書くときにHTMLが埋め込まれていることに気づき、わざわざPDFを生成して添付ファイルで送る必要はありません.しかし、ここでは、まずプロセス全体を整理します.
Jinja 2でPDFを生成するには、まずテンプレートを生成する必要があります.テンプレートにはHTMLのスタイルを設定する必要があります.これはチュートリアルを参考にして書いたHTMLのスタイルです.
完了後、DataFrameをto_html関数はHTMLに変換され、スタイルに埋め込まれます.
最後にPDFを生成し、1つのモジュールを入れて一言飲むだけでいいです.Weasyprintこのモジュールは、HTMLまたはCSSをPDFに変換するためのものです.
pythonには専用のメールモジュール、emailモジュールがあります.メールのモジュールは2つの部分を含み、一部はメール本文モジュールであり、一部はメール送信モジュールである.
メール本文モジュールは、MIMETextで完了します.メールモジュールには、対応するメール本文タイプを生成するための専用(MIME,Multipurpose Internet Mail Extensions,多用途インターネットメール拡張)モジュールがあります.ここではまずテキストモジュールMIMETextを用いて例を示します.
それからメールを送ります.stmplibモジュールを経由する必要があります.以下で詳しく説明します.メールを送信するには、まずsmtp(Simple Mail Transfer Protocol)のアドレスとポートを設定し、一部のメールボックスでTTS暗号化プロトコルを使用する必要がある場合はstartts()関数を使用する必要があります.次に対応するのはログインしたユーザー名のパスワードで、上に書いたmsgを出して、最後にquitすればいいです.
まとめて、前に設定したタスクはほぼ完了しました.しかし、前にDataFrameを採用したとき、データを可視化していなかったり、HTMLのテンプレートを再美化したりすることができます.また、データ可視化を導入したら、どのように可視化された画像をメールに埋め込むかなど、深化できる内容もたくさんあります.メールはその部分にログインして、一部のメールボックスではこの方法で送信できません(smtp設定を再考する必要があります).
これらの問題は、今後も小さなプロジェクトの形で研究を続けます.プラットフォーム間の販売状況の比較なども後から行うことができ、要するに、このプロジェクトには大きな拡張空間がある.まぁ、今回はとりあえずこれで終わりにしましょう.
前回のタスクが完了した後、タスクの最後はcrontabによって毎日8時、13時、18時、23時に設定され、タイミング的にタスクが収集され、この内容の目的は毎日23時に最後のタスクが完了した後、その日に収集されたデータを処理し、時間は23時30分に設定され、crontabによってタイミング的に開くことである.
ベスト・セールスおよび売上高の計算
これはSQLiteで毎日収集したデータを再抽出すれば、当日の販売データはSCOUNTテーブルに収集され、データの列名は時間に基づいて命名されるため、当日の4つの時点で収集した販売データを得るためには、まず列名を取得する必要があります.SQLiteでは、Pragmaによってすべてのカラム名情報を取得できます.Pragmaには、内部操作の変更とテーブル固有データの取得、table_を介した2つの機能があります.infoは、カラム名情報を取得できます.すべてのカラム名情報を取得した後、list comprehensions(これはどのように翻訳するか分かりません)を通じて、今日新たに生成された4つの販売データ列を取得できます.
def get_today_columns(c, today):
c.execute("PRAGMA table_info(SCOUNT);")
column_list = c.fetchall()
return ["[" + column[1] + "]" for column in column_list if today in column[1]]
そして、取得した販売データは、SKU毎に1日に4回収集され、収集されたSKUがダウンフレームする可能性があるため、SKUリストには各SKUが収集される可能性がないため、収集に必要なデータにはdropnaが必要であり、SKU情報テーブルと販売データテーブルをmerge関数で統合して必要なdataを形成する必要がある.各SKUは、時刻ごとに収集されるデータが変動し、販売データが連続的に増加する過程ではないため、当日の販売量を求めるために、1日の最大数と最小数の差をとることができる.
def today_sells(today_columns, conn):
query_data = "SELECT scountskuid,%s, %s, %s, %s FROM SCOUNT;" % (today_columns[0],today_columns[1],today_columns[2],today_columns[3])
data = pd.read_sql(query_data, conn, index_col="scountskuid")
data.dropna(axis= 0 , how='all', inplace=True)
query_name = "SELECT skuid, name FROM UB"
name = pd.read_sql(query_name, conn, index_col="skuid")
data = pd.merge(name, data, how = 'inner', left_index=True, right_index=True)
data['sells'] = data.max(axis=1, numeric_only=True)-data.min(axis=1, numeric_only=True)
return data[['name', 'sells']]
売上高を生成する方法は似ていますが、ここにはリストされません.
PDFレポートの生成
PDFを生成するというのは当時の想定でしたが、後にこのチュートリアルを参考にして作られた(Practical Business Pythonは良いサイトで、お勧め)、原理はDataFrameを通じてHTMLに変換し、HTMLをPDFに変換することです.しかし、メールモジュールを書くときにHTMLが埋め込まれていることに気づき、わざわざPDFを生成して添付ファイルで送る必要はありません.しかし、ここでは、まずプロセス全体を整理します.
Jinja 2でPDFを生成するには、まずテンプレートを生成する必要があります.テンプレートにはHTMLのスタイルを設定する必要があります.これはチュートリアルを参考にして書いたHTMLのスタイルです.
{{ title }}
{{ table_title }}
{{ data_table }}
完了後、DataFrameをto_html関数はHTMLに変換され、スタイルに埋め込まれます.
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('.'))
template = env.get_template('myreport.html')
template_vars = {'title': today+' ',
'table_title': today,
'data_table': data.to_html()}
html_out = template.render(template_vars)
最後にPDFを生成し、1つのモジュールを入れて一言飲むだけでいいです.Weasyprintこのモジュールは、HTMLまたはCSSをPDFに変換するためのものです.
from weasyprint import HTML
HTML(string = html_out).write_pdf("my_report.pdf")
メールを送信
pythonには専用のメールモジュール、emailモジュールがあります.メールのモジュールは2つの部分を含み、一部はメール本文モジュールであり、一部はメール送信モジュールである.
メール本文モジュールは、MIMETextで完了します.メールモジュールには、対応するメール本文タイプを生成するための専用(MIME,Multipurpose Internet Mail Extensions,多用途インターネットメール拡張)モジュールがあります.ここではまずテキストモジュールMIMETextを用いて例を示します.
from email.mime.text import MIMEText
# me ==
# you ==
msg = MIMEText(html_out, 'html')
msg['Subject'] = " %s " % today
msg['From'] = me
msg['To'] = you
それからメールを送ります.stmplibモジュールを経由する必要があります.以下で詳しく説明します.メールを送信するには、まずsmtp(Simple Mail Transfer Protocol)のアドレスとポートを設定し、一部のメールボックスでTTS暗号化プロトコルを使用する必要がある場合はstartts()関数を使用する必要があります.次に対応するのはログインしたユーザー名のパスワードで、上に書いたmsgを出して、最後にquitすればいいです.
#smtp_address: smtp ;
#smtp_port: smtp , TTS , ;
#login_username: ;
#login_password: ;
import smtplib
try:
s = smtplib.SMTP(smtp_address, smtp_port)
s.starttls()
s.login(login_username, login_password)
s.send_message(msg)
s.quit()
print(today + " !")
except smtplib.SMTPException:
print("Error: ")
締めくくり
まとめて、前に設定したタスクはほぼ完了しました.しかし、前にDataFrameを採用したとき、データを可視化していなかったり、HTMLのテンプレートを再美化したりすることができます.また、データ可視化を導入したら、どのように可視化された画像をメールに埋め込むかなど、深化できる内容もたくさんあります.メールはその部分にログインして、一部のメールボックスではこの方法で送信できません(smtp設定を再考する必要があります).
これらの問題は、今後も小さなプロジェクトの形で研究を続けます.プラットフォーム間の販売状況の比較なども後から行うことができ、要するに、このプロジェクトには大きな拡張空間がある.まぁ、今回はとりあえずこれで終わりにしましょう.