[PYTHON] Ich habe versucht, die API von Sakenowa Data Project zu verwenden

Einführung

Vor kurzem lerne ich wieder Python. Im Rahmen meiner Studie habe ich versucht, eine Klasse zu erstellen, die die Verwendung der öffentlichen API vereinfacht.

Den Code finden Sie hier im Repository (https://github.com/ironball1113/sakenowa_wrapper).

Was ist das Sakenowa-Datenprojekt?

Dies ist ein Projekt zur Veröffentlichung der von der App Sakeno gesammelten Daten, die das Konzept hat, "den Sake aufzuzeichnen, den Sie getrunken haben, und Ihren Lieblingssake zu finden". Mit anderen Worten, es handelt sich um Daten über japanischen Sake. Details werden auf der öffentlichen Seite zitiert. https://muro.sakenowa.com/sakenowa-data/

Was sind Sakenowa-Daten?

Dies ist ein Projekt zur Veröffentlichung quantifizierter Daten und beliebter Markeninformationen zu Aromen der Sake-App Sakenowa. Jeder kann es im Rahmen der Nutzungsbedingungen kostenlos nutzen und Daten auf der EC-Website anzeigen, Apps und Dienste erstellen und Daten analysieren.

Datentyp

Bei Sakenowa analysieren wir die Impressionen des Benutzers und quantifizieren den Geschmack. Zusätzlich zu diesen Daten werden wir die folgenden Daten einschließlich Ranking-Informationen veröffentlichen.

  • Die Aromen jeder Marke werden aus den sechs Perspektiven von wunderschön, weich, tief, sanft, leicht und trocken quantifiziert.
  • Tags mit Geschmacksdetails für jede Marke (Geschmacksmarker)
  • Rangfolge der populären Aktien in Sakenowa
  • Andere grundlegende Informationen der Marke

Endpunkt

  • Flächenliste (GET / Gebiete)
  • Liste der Marken (GET / Marken)
  • Liste der Brauereien (GET / Brauereien) --Ranking (GET / Rankings)
  • Geschmackstabelle (GET / Flavour-Charts) --Flavor-Tag-Liste (GET / Flavour-Tags) --Flavour-Tags für jede Marke (GET / Brand-Flavour-Tags)

sakenowa_wrapper Ich habe eine Klasse erstellt, weil ich dachte, es wäre etwas einfacher, sie aufzurufen, wenn ich sie im Pandas-Datenrahmenformat nur mit den Endpunktinformationen verwenden könnte. Dies ist einfach und die API-Antwort wird schließlich an einen Datenrahmen zurückgegeben.

sakenowa_wrapper.py


import ast
import urllib.request

import pandas as pd
from pandas.core.frame import DataFrame


class SakenowaAPI(object):
    urls = {
        "areas": "https://muro.sakenowa.com/sakenowa-data/api/areas",
        "brands": "https://muro.sakenowa.com/sakenowa-data/api/brands",
        "breweries": "https://muro.sakenowa.com/sakenowa-data/api/breweries",
        "rankings": "https://muro.sakenowa.com/sakenowa-data/api/rankings",
        "flavor-charts": "https://muro.sakenowa.com/sakenowa-data/api/flavor-charts",
        "flavor-tags": "https://muro.sakenowa.com/sakenowa-data/api/flavor-tags",
        "brand-flavor-tags": "https://muro.sakenowa.com/sakenowa-data/api/brand-flavor-tags",
    }

    def __init__(self, endpoint: str, ranking_type: str = None) -> None:
        self.endpoint = endpoint
        check_endpoint = self.endpoint in list(self.urls.keys())

        if check_endpoint:
            self.url = self.urls[self.endpoint]
            self.ranking_type = ranking_type

            print(f"\nThe current endpoint is {self.endpoint}")
            if ranking_type is not None:
                print(f"Rankings type is {ranking_type}")
            print("=" * 30)
        else:
            raise ValueError("Das Argument ist falsch. Bitte erneut angeben.")

    def _get_body(self, url: str) -> str:
        req = urllib.request.Request(url)
        with urllib.request.urlopen(req) as res:
            body = res.read()
        return body.decode()

    def _set_key(self) -> str:
        if self.endpoint in ["areas", "brands", "breweries"]:
            return self.endpoint

        if self.endpoint == "flavor-charts":
            return "flavorCharts"

        if self.endpoint == "flavor-tags":
            return "tags"

        if self.endpoint == "brand-flavor-tags":
            return "flavorTags"

        if self.endpoint == "rankings" and self.ranking_type is not None:
            return self.ranking_type
        else:
            return "Failure"

    def set_df(self) -> DataFrame:
        body = self._get_body(self.url)
        dic = ast.literal_eval(body)
        key = self._set_key()
        return pd.DataFrame(dic[key])

Unten ist der Testcode. Grundsätzlich nur Folgendes tun:

  1. Erstellen einer Instanz und Angeben eines Endpunkts
  2. Geben Sie einen Datenrahmen zurück

Folgende Endpunkte können mit der Sakenowa-API angegeben werden. Da das Ranking ein umfassendes Ranking und ein regionales Ranking beliebter Marken aufweist, ist ein zusätzliches Argument erforderlich, um anzugeben, welche Marke aufgerufen werden soll. ex) SakenowaAPI("rankings", "overall") or SakenowaAPI("rankings", "areas")

test_sakenowa.py



from sakenowa_wrapper import SakenowaAPI

#Wenn es ein Argument wie Bereiche gibt
sakenowa_areas = SakenowaAPI("areas")
print(sakenowa_areas.set_df().head())

#Rangliste ist für Gesamtrangliste
sakenowa_rank_overall = SakenowaAPI("rankings", "overall")
print(sakenowa_rank_overall.set_df().head())

#Wenn das Argument falsch ist
# sakenowa_failue = SakenowaAPI("failue")
# print(sakenowa_failue.set_df().head())


# --------------------Ausgabeergebnis--------------------

# The current endpoint is areas
# ==============================
#    id name
#0 1 Hokkaido
#1 2 Präfektur Aomori
#2 3 Präfektur Iwate
#3 4 Präfektur Miyagi
#4 5 Präfektur Akita

# The current endpoint is rankings
# Rankings type is overall
# ==============================
#    rank     score  brandId
# 0     1  4.412219      109
# 1     2  4.100738      792
# 2     3  4.072851      660
# 3     4  4.072180     1033
# 4     5  4.065659       19

# ValueError:Das Argument ist falsch. Bitte erneut angeben.

Der Testcode zum Zeichnen der Geschmackstabelle mit matplotlib lautet wie folgt. Ich habe auf diesen Artikel für den Teil der Erstellung der Radarkarte verwiesen. Zeichnen Sie eine Radarkarte mit Matplotlib (16 Zeilen)

test_radar_chart.py


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sakenowa_wrapper import SakenowaAPI


sakenowa_flavor_charts = SakenowaAPI("flavor-charts")
dic = sakenowa_flavor_charts.make_dic()
df_copy = sakenowa_flavor_charts.set_df(dic).copy()

col_rename = {
    "f1": "Fruity",
    "f2": "Mellow",
    "f3": "Heavy",
    "f4": "Mild",
    "f5": "Dry",
    "f6": "Light",
}

brand_id = 2
renamed_cols = list(df_copy.rename(columns=col_rename).columns)[1:]
flavor_values = df_copy.query("brandId == @brand_id").values.tolist()[0][1:]

def plot_polar(labels, values, imgname):
    angles = np.linspace(0, 2 * np.pi, len(labels) + 1, endpoint=True)
    values = np.concatenate((values, [values[0]]))
    fig = plt.figure()
    ax = fig.add_subplot(111, polar=True)
    ax.plot(angles, values, "o-")
    ax.fill(angles, values, alpha=0.25)
    ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels)
    fig.savefig(imgname)
    plt.close(fig)

plot_polar(renamed_cols, flavor_values, "flavor.png ")

flavor.png

Referenz-URL

Sakenowa Data Project [Statische Typprüfung, die lose mit Python beginnt](https://qiita.com/ocknamo/items/6341d0a7757c668782c8#%E3%81%8A%E3%81%BE%E3%81%91stub%E3%82%92% E8% 87% AA% E5% 8B% 95% E7% 94% 9F% E6% 88% 90% E3% 81% 99% E3% 82% 8B) Zeichnen Sie eine Radarkarte mit Matplotlib (16 Zeilen)

Recommended Posts

Ich habe versucht, die API von Sakenowa Data Project zu verwenden
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, YOUTUBE Data API V3 zu verwenden
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, EKG-Daten mit der K-Shape-Methode zu gruppieren
Ich habe die Naro-Roman-API 2 ausprobiert
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe die neuartige API von Naruro ausprobiert
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
[Für Anfänger] Ich habe versucht, die Tensorflow-Objekterkennungs-API zu verwenden
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Ich habe versucht, die COTOHA-API zu verwenden (es gibt auch Code auf GitHub).
Ich habe mir die Metainformationen von BigQuery angesehen und versucht, sie zu verwenden
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Ich habe versucht, die COTOHA-API zu berühren
Die Python-Projektvorlage, an die ich denke.
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
Ich habe versucht, die Erstellung einer praktischen Umgebung mithilfe der SoftLayer-API der IBM Cloud zu automatisieren
Kenntnis der Verwendung der Aurora Severless Data API
Ich habe versucht, PDF-Daten der medizinischen Online-Versorgung zu verwenden, die auf der Ausbreitung einer neuen Coronavirus-Infektion basieren
Ich habe versucht, das Gesichtsbild mit sparse_image_warp von TensorFlow Addons zu transformieren
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, verschiedene Sätze mit der automatischen Zusammenfassungs-API "summpy" zusammenzufassen.
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, eine Clusteranalyse von Kunden anhand von Kaufdaten durchzuführen
[Kaggle] Ich habe versucht, mithilfe von tsfresh das Feature-Quantity-Engineering mehrdimensionaler Zeitreihendaten durchzuführen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Mit COTOHA habe ich versucht, den emotionalen Verlauf des Laufens von Meros zu verfolgen.
Ich habe die gängige Geschichte der Vorhersage des Nikkei-Durchschnitts mithilfe von Deep Learning (Backtest) ausprobiert.
Ich habe versucht, die Detect Labels-API von AWS Rekognition zu verwenden
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe in der Bibliothek nach der Verwendung der Gracenote-API gesucht
Ich habe versucht, Remote API mit GAE / J zu verwenden
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, PyCaret mit der schnellsten Geschwindigkeit zu verwenden
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe DBM mit Pylearn 2 unter Verwendung künstlicher Daten ausprobiert
Ich habe versucht, die funktionale Programmierbibliothek toolz zu verwenden
Überprüfen Sie den Status der Daten mit pandas_profiling
Scraping der Gewinndaten von Zahlen mit Docker
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden