[PYTHON] Der einfachste Linienbot der Welt, um Gewicht zu verlieren

Einführung

Dieser Linienbot wurde drei Monate nach Beginn der Programmierung für die Produktpräsentation der Schule hergestellt. Wenn sich jemand fragt, was er nach dem Lernen machen soll, hoffe ich, dass es hilfreich ist. Da dies das erste Produkt ist, das ich hergestellt habe, gibt es einige Teile, in denen der Code grob ist. Was ist, wenn das so ist? Wenn es einen Teil gibt, würde ich mich freuen, wenn Sie mich in den Kommentaren wissen lassen könnten.

Warum ich es geschafft habe

Ich war immer unzufrieden damit, fett zu werden und zu schwierig zu sein, Gewicht zu verlieren. ** Eine Diät wird nur erfolgreich sein, wenn Sie ideal trainieren und die berechneten Kalorien jeder Mahlzeit 3 Monate lang, mindestens 1 Monat lang, weiter konsumieren. ** Um dies zu erreichen, müssen Sie jedoch Versuchungen wie Mara vermeiden. Unerträgliches Ruhebedürfnis am Ende der Arbeit. Ramen und Heißhungerattacken, die als chronisch bezeichnet werden können. Ein Gefühl der Abneigung gegen Bewegung aufgrund mangelnder Bewegung. Der Kampf der modernen Menschen ist immer schwierig. Also ** Wenn Sie essen und fett werden, können Sie Gewicht verlieren, indem Sie einfach essen! ** Dieser Linienbot wurde mit Blick auf einen so einfachen Service erstellt.

Warum Sie Gewicht verlieren

Wissen Sie übrigens, wie viele Kilogramm Sie verbrennen müssen, um ein Kilogramm zu verlieren? ** Eigentlich soll dies 7.000 Kilokcal sein. ** **. In diesem Linienbot wird der Grundstoffwechsel basierend auf der eingegebenen Größe, dem Gewicht, dem Alter und dem Geschlecht, der Zielaufnahme kcal, die 1000 kcal niedriger ist als die berechnete, berechnet, und ein Menü wird zufällig aus den Produkten LAWSON und Seven Eleven sowie auf der Linie erstellt. Es wird es senden. ** Mit anderen Worten, Sie können 7.000 kcal pro Woche sparen und 1 kg verlieren, indem Sie nur die Menüpunkte kaufen und essen, die Sie in der Linie erhalten haben. Eine monatliche Diät von 4 kg ist ein Erfolg! !! Alles, was Sie tun, ist zu essen, wie Ihnen gesagt wird! !! !! ** **.

Ziel

Menschen, die ohne Training abnehmen wollen (insbesondere Frauen, die nicht gut trainieren können) Menschen, die ihre aktuelle Körperform beibehalten möchten (empfohlen am Tag vor und nach einer Party oder Trinkparty!) Menschen, die alleine leben und Probleme haben, jeden Tag darüber nachzudenken, was sie essen sollen

Registriere dich als Freund

Wenn Sie diesen Linienbot ausprobieren möchten, fügen Sie bitte einen Freund aus den folgenden Zeilen hinzu. 646hrric.png

Wie benutzt man

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/0b681596-8685-e688-bf75-4ff3cdc4ac03.jpeg "width=70%>

  1. Fügen Sie zuerst einen Freund hinzu und senden Sie "Einstellungen", um die Nachricht zu erhalten.
  2. Nehmen Sie die Einstellungen für personenbezogene Daten gemäß dem gesendeten Format vor (Eingabebeispiel: ** Registrierung. 178-78-25-1 **)
  3. Danach können Sie das Menü erhalten, indem Sie "Lawson" oder "Seven" senden.

Implementierte Funktion

  1. Speichern Sie die Ergebnisse des Scrapings von Webseiten in einer Liste
  2. Berechnen Sie aus den vom Benutzer empfangenen persönlichen Daten den morgens, tagsüber und nachts einzunehmenden kcal und speichern Sie ihn zusammen mit der erfassten Benutzer-ID in der Datenbank.
  3. Wenn eine Anforderung für ein Menü von einem Benutzer empfangen wird, werden die Daten des Benutzers aus der Datenbank aufgerufen.
  4. Wählen Sie Produkte nach dem Zufallsprinzip aus der Convenience-Store-Produktliste aus und wiederholen Sie den Vorgang, bis sie nahe am Ziel-kcal liegen. Senden Sie das Ergebnis an den Benutzer

Über den Code

Es werden nur der Scraping-Code und der Hauptcode aufgelistet. Wenn Sie den vollständigen Text sehen möchten, besuchen Sie bitte meinen Git Hub. git hub

Scraping-Code

Da es lange dauert, Lawson darauf zu setzen, ist nur Seven aufgeführt.

mk-data.py


import requests
from bs4 import BeautifulSoup as bs
import pickle

Scraping mit BeautifulSoup und Speichern in einer Datei mit pickle.

mk-data.py


#Sieben Kratzfunktion
def seven_scraping(url):
    header = {"User-Agent" : "Mozilla/5.0"}
    s = bs(requests.get(url, headers=header).content, 'html.parser')
    
    #Name
    s_names = []
    for i in s.find_all('div', class_='itemName'):
        s_names.append(i.text)

    #Bild
    s_images = []
    for i in s.find_all('div', class_='image'):
        j = i.a.get("href")
        s_images.append("https://www.sej.co.jp"+j)

    #Kalorie
    s_kcals = []
    for i in s.find_all('div', class_='summary'):
        j = i.find('li', class_ ='n1')
        j = j.text
        j = j.strip("* Kalorien können je nach Region variieren.")
        j = j.split("kcal")[0]
        j = int(j)
        s_kcals.append(j)

    return list(zip(s_kcals, s_names, s_images))

Erstellen Sie kratzende Daten als Liste von Namen, Bildern und Kalorien. Eine Funktion, die sie schließlich zu einer einzigen Liste kombiniert und zurückgibt.

mk-data.py


def main():
    seven_url ="https://www.sej.co.jp/i/products/anshin/calorie/"
    seven_list = seven_scraping(seven_url)
    f = open('seven_list.txt', 'wb')
    list_row02 = seven_list
    pickle.dump(list_row02, f)

if __name__ == '__main__':
    main()

Führen Sie die Funktion aus und speichern Sie sie mit pickle in einer Datei

Haupt code

main.py


from flask import Flask, request, abort
import os
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

import re
import pickle
import random
import sqlite3

main.py


app = Flask(__name__)
LINE_CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"]
LINE_CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"]
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(LINE_CHANNEL_SECRET)
f = open("./lawson_list.txt","rb")
list_row = pickle.load(f)
f02 = open("./seven_list.txt","rb")
list_row02 = pickle.load(f02)

Rufen Sie die zuvor gespeicherten Produktdaten auf.

main.py


#Funktion zur Berechnung des Grundstoffwechsels und zur Rückgabe des Zielwerts
def base_energy(tall, weight, age, sex):
    if sex == 1:
        result = 13.397 * weight + 4.799 * tall - 5.677 * age + 88.362
        return result
    else:
        result = 9.247 * weight + 3.098 * tall - 4.33 * age + 447.593
    
    result = (result * 1.75) -1000
    return round(result)

Die Grundumsatzrate wird unter Verwendung der Harris-Benedict-Gleichung (verbesserte Version) berechnet. Männlich: 13,397 x Gewicht kg + 4,799 x Größe cm-5,677 x Alter +88,362 Weiblich: 9,247 x Gewicht kg + 3,098 x Größe cm-4,33 x Alter +447,593 Referenz: "https://keisan.casio.jp/exec/system/1161228736"

main.py


#Berechnen Sie die Kalorien am Morgen und am Tag / in der Nacht
def create_before(aim_kcal):
    return int(aim_kcal * 0.2)
def create_after(aim_kcal):    
    return int(aim_kcal * 0.4)

#Funktion zur zufälligen Auswahl eines Menüs
def make_menu(aim_num, conv_list):
    menu = []
    x = 0
    #Schleife, bis die Zielkalorie 100 kcal beträgt
    for i in range(150):
        i = random.choice(conv_list)
        if aim_num -100 <= x <= aim_num + 100:
            return menu
            break
        if i[0] + x <= aim_num + 100:
            x += i[0]
            menu.append(i)
        else:
            continue 

Stellen Sie das tägliche Ziel kcal auf ein Verhältnis von 2: 4: 4 morgens: Tag: Nacht ein. Die Menüerstellungsfunktion ist ein Machtspiel, das nach dem Zufallsprinzip aus der Produktliste aufruft, bis es sich dem Zielwert nähert. ↓ Etwas weggelassen

main.py


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    word = event.message.text
    if word in ["Lawson"]:
        #Rufen Sie morgens, Tag und Nacht die Grundumsatzdaten auf
        profile = line_bot_api.get_profile(event.source.user_id)
        user_id = profile.user_id
        conn = sqlite3.connect('database.sqlite3')
        c = conn.cursor()
        c.execute('SELECT * FROM user WHERE id=?', (user_id,))
        list1 = c.fetchone()
        before_noon = list1[1]
        after_noon = list1[2]
        conn.commit()
        conn.close()
        today_morning = make_menu(before_noon, list_row)
        today_lunch = make_menu(after_noon, list_row)
        today_dinner= make_menu(after_noon, list_row)
        today_menu = []
        for i in today_morning:
            today_menu .append( "\n Frühstück" + str(i))
        for i in today_lunch:
            today_menu.append("\n Mittagessen" + str(i))
        for i in today_dinner:
            today_menu.append("\n Abendessen" + str(i))
        reply = ','.join(today_menu)

        line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=reply))

Wenn Sie eine Anfrage für ein Menü erhalten, rufen Sie user_id ab und rufen Sie die Zielkalorie des Benutzers auf. Senden Sie die Nummer und das aus der Produktliste erstellte Menü an den Benutzer.

main.py


    elif word in ["Aufbau"]:
        setup_text = """Bitte geben Sie das folgende Format ein\
        
Anmeldung. Höhe-Körpergewicht-Alter-Geschlecht (1 Mann oder 2 Frau)
* Bitte verwenden Sie alle Zahlen mit halber Breite
* Beispiel: Registrierung. 168-68-24-1
        """
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=setup_text))

    elif 0 <= word.find('Anmeldung.') :
        #Teilen Sie die empfangenen Daten nach Größe, Gewicht, Alter und Geschlecht
        #Basis es_Auf Energie übergehen
        personal_data = event.message.text
        personal_data = personal_data.replace("Anmeldung.", "")
        personal_data = personal_data.replace("-", ",")
        personal_data = personal_data.split(',')
        tall = int(personal_data[0])
        weight = int(personal_data[1])
        age = int(personal_data[2])
        sex = int(personal_data[3])
        aim_kcal = base_energy(tall, weight, age, sex)
        #Berechnen Sie die Kalorien für jede Mahlzeit
        #In die Datenbank schreiben
        profile = line_bot_api.get_profile(event.source.user_id)
        prof_dict = {}
        prof_dict["id"] = profile.user_id
        prof_dict["before_noon"] = create_before(aim_kcal)
        prof_dict["after_noon"] = create_after(aim_kcal)
        conn = sqlite3.connect('database.sqlite3')
        c = conn.cursor()
        c.execute('insert into user(id, before_noon, after_noon) values(:id, :before_noon, :after_noon);', prof_dict)
        conn.commit()
        conn.close()

        line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text="Die Einstellung ist abgeschlossen"))

    else:
        line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text="Geben Sie Lawson oder Seven oder Settings ein"))

if __name__ == "__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)
    app.run()

Verarbeiten Sie die vom Benutzer gesendeten Daten entsprechend dem Format, legen Sie den Zielwert fest und teilen Sie ihn in Morgen, Tag und Nacht auf.

$ heroku login
heroku create <Anwendungsname>

Registrieren Sie die Anwendung bei heroku

$ git init
$ git add .
$ git commit -m "new commit"
$ git push heroku master

Schieben und beenden.

Benutzerfreundlichkeit

Ich habe es selbst eine Woche lang benutzt, nachdem es fertig war. Als Eindruck

Vorteile

  1. Überraschenderweise sind viele Salate gesund (kalorienarme Salate können leicht durch eine Schleife ausgewählt werden, die Produkte nach dem Zufallsprinzip aufruft).
  2. Ich esse Dinge, die ich normalerweise nicht kaufe, deshalb stoße ich manchmal auf Produkte, die mich beeindrucken
  3. Es gibt unerwartet ein Gefühl der Fülle 4, ** Ich habe 1 kg verloren! !! ** **. IMG_20200202_112624.jpg Eines Tages Abendessen (unerwartet voluminös)



Nachteile

  1. Nicht zum Sparen geeignet (es kostet 1500-2000 Yen pro Tag) 2, viele ausverkauft
  2. Ich habe es satt, ständig zu verwenden (auch wenn ich es benutze, ohne es zu übertreiben, ist es effektiv)

Gewinnplan (wenn ein großer Supermarkt einen ähnlichen Service einführt)

1. Werbewirkung

** Da die täglichen Anschaffungskosten 1500 Yen oder mehr betragen, wird erwartet, dass der Umsatz mit einem aktiven Benutzer um etwa 45.000 Yen oder mehr pro Monat steigt. Wenn Sie 100 Leute haben, können Sie mehr als 4,5 Millionen Yen erwarten. ** **. Darüber hinaus führt der Werbeeffekt schneller direkt zum Kaufverhalten als andere Medien. Wenn wir beispielsweise im TV cm etwas über ein neues Produkt erfahren, haben wir einige Zeitverzögerung, bevor wir es tatsächlich kaufen. Es kommt selten vor, dass Sie eine Anzeige tatsächlich sehen und sofort kaufen, und der Werbeeffekt wirkt sich auf Ihr Unterbewusstsein aus, was nach einer Weile zu Kaufverhalten führt. In diesem Fall besteht die einzige Möglichkeit zur Messung der Werbewirksamkeit darin, aus der Zunahme oder Abnahme des Umsatzes zu schließen, da dies das Kundenverhalten unwissentlich beeinflusst. Andererseits wird von Benutzern mit diesem Service erwartet, dass sie an dem Tag, an dem das Menü eingeht, einen Kauf tätigen, und es ist für Linienentwickler einfach zu bestimmen, wie viele aktive Benutzer derzeit sind. Darüber hinaus sind die Kosten selbst mit etwa 30.000 Yen pro Monat am höchsten, was billiger ist als bei anderen Medien. ** Mit anderen Worten, es hat eine hohe Werbewirksamkeit, sofortige Wirkung, Greifkraft und kann zu geringen Kosten implementiert werden. ** **.

2. Gute Kompatibilität zwischen Überprüfungsfunktion und Gutscheinen

Wenn Sie mit "ob Sie wieder essen möchten" antworten, können Sie eine Erhöhung der Wiederholungsrate der Benutzer und die Erfassung von Kundenproduktbewertungen erwarten, indem Sie eine Funktion hinzufügen, mit der Rabattgutscheine nur für den nächsten Tag ausgestellt werden. Aus Sicht des Benutzers kann nicht nur der Vorteil des "Ausdünnens", sondern auch der Vorteil des "billigen Kaufens" am nächsten Tag erzielt werden, und der Schwachpunkt dieses Dienstes, "nicht zum Sparen geeignet", kann bis zu einem gewissen Grad abgedeckt werden. Es hilft auch, die Diät fortzusetzen. Aus Sicht der Unternehmen steigt der Umsatz, wenn die Fortführungsrate steigt, und da das Menü zufällig ist, besteht ein großer Vorteil darin, dass Daten zu einer Vielzahl von Produkten abgerufen werden können.

3. Nützlichkeit als Big Data

Convenience-Point-Karten erfassen nur Daten darüber, welches Geschlecht und Alter Personen das Produkt gekauft haben. Mit anderen Worten, es sind nur die Daten bis zum Kauf. Das Geschäft endet jedoch nicht zum Zeitpunkt des Kaufs. Wir denken, dass "dieses Produkt unseren Bedürfnissen entspricht", kaufen, verwenden, ein Gefühl haben und entscheiden, ob es wiederholt werden soll. Es ist wichtig, Daten nach dem Kauf zu sammeln, um einen Mechanismus für die kontinuierliche Kundenakquise zu schaffen. ** Kaufschichtdaten und Produktbewertungsdaten für jede Kundengruppe. ** Der Vorteil der Kombination zweier Daten ist sehr groß.

4, Anwendungsbeispiel

Teilen Sie die Produkte aus den obigen 2 Daten in 4 Gruppen ein. ① Der Umsatz ist hoch, die Bewertung </ font> ist auch hoch </ font> ② Der Umsatz ist hoch, </ font> die Bewertung ist niedrig </ font> ③ Der Umsatz ist niedrig, die Bewertung </ font> ist hoch </ font> ④ Verkäufe sind niedrig, </ font> Bewertung ist auch niedrig </ font> Produkte

無題のプレゼンテーション.jpg

Die Aufteilung in die oben genannten Gruppen wird in Bezug auf die Produktentwicklungsstrategie und das Vertriebsmanagement von großem Nutzen sein. Zunächst wird im Hinblick auf das Vertriebsmanagement erwartet, dass das Produkt von (1) weiterhin einen hohen Umsatz aufweist. In Bezug auf (4) ist es jedoch unwahrscheinlich, dass Kunden es kaufen, und selbst wenn es gekauft wird, sind keine Wiederholungen zu erwarten. ** Durch die Einstellung der Produktion von ④ vorzeitig und die Steigerung der Produktion von ① wird erwartet, dass der Abfall in den Geschäften reduziert und das Betriebsergebnis verbessert wird. ** **. In Bezug auf den Aspekt der Produktentwicklung kann als nächstes ein großer Vorteil durch die Analyse von (2) und (3) erzielt werden. ② ist schädlich. Dies liegt daran, dass es sich um ein Produkt handelt, das die Erwartungen vieler Kunden enttäuscht. Viele Leute finden es attraktiv zu kaufen, aber sie sind enttäuscht, wenn sie nach Hause gehen und essen. Es besteht jedoch kein Zweifel, dass ** ② ein sehr attraktives Produkt ** ist, bis Sie es kaufen, und es gibt etwas, das Kunden bekommen können. ** Mit anderen Worten, das Produktmarketing selbst ist wahrscheinlich erfolgreich. ** ③ verkauft sich derzeit nicht, kann jedoch mit der Zeit mit Falten verkauft werden, oder es wird durch Ändern des Designs oder der Benennung verkauft. Wenn die Analyse von (2) verwendet wird, besteht die Möglichkeit, dass der Umsatz erheblich steigt.

5. Geschäftsausweitung

Convenience Stores sind Unternehmen, die das Potenzial haben, Daten zu den meisten japanischen Einkäufen und Vorlieben zu sammeln. Da wir nicht nur unsere eigenen Produkte, sondern auch die Produkte anderer Unternehmen (große Süßwarenfirmen, Lebensmittelunternehmen usw.) handhaben, können wir möglicherweise mehr Gewinne erzielen, indem wir Big Data und seine Analysen an diese Unternehmen verkaufen. Ich denke auch, dass es interessant wäre, lokale Produkte von lokalen Unternehmen zu produzieren, indem das durch Datenanalyse gepflegte Know-how genutzt wird.

Recommended Posts