Collectez des informations sur les produits et traitez les données à l'aide de l'API de recherche de produits Rakuten [Python]

introduction

Dernière fois a extrait 30 données (1 page) à l'aide de «l'API de recherche de produits Rakuten» et les a enregistrées dans un fichier csv. C'était.

Cette fois, dans le but de collecter des données plus pratiques pour l'analyse et la connexion à la prise de décision, nous avons d'abord développé le script précédent pour augmenter le nombre de données à acquérir, puis utilisé les données produit comme étape préliminaire pour l'agrégation et l'analyse. Nous traitons même les données pour qu'elles puissent être classées par poids (5 kg, 10 kg ...).

politique

(1) Acquérir des informations sur le produit

Le déroulement est le même que la dernière fois, mais cette fois le nombre d'acquisitions et de mots NG est spécifié ici. Ceux-ci sont ajustés en fonction de l'objectif de la collecte des données et de la quantité et du contenu des informations requises.

Dans mon cas, j'ai précisé un mot qui ne correspond pas à mes attentes et est susceptible d'affecter le prix du produit. Ici, «culture biologique / biologique / réduite en pesticides / sans pesticides», «ensemble / assortiment» et «paiement de la taxe locale» sont exclus. Il n'y a pas de sens profond à fixer le nombre d'acquisitions à 300, mais lorsque j'ai recherché des produits utilisant ce mot-clé / mot NG, le nombre de résultats était d'environ 320, j'ai donc choisi un bon nombre.

(2) Procédure de traitement des données

À l'origine, il serait plus précis de diviser la quantité par variété de légumes, mais cette fois j'ai décidé de ne pas le faire. En effet, le nombre de données diminuera s'il est trop subdivisé.

(1) Script pour acquérir des informations sur le produit

1. Importez les bibliothèques requises et préparez les paramètres d'entrée

C'est presque la même chose que la dernière fois, mais seules les parties page et NGKeyword et postageFlag des paramètres d'entrée qui envoient des requêtes avec l'API sont modifiées.

Le nombre maximum de données pouvant être acquises avec une seule demande de l'API Rakuten Product Search est de 30 (la valeur du paramètre d'entrée «hits»). Si vous spécifiez le nombre de pages «2» dans «page», vous pouvez obtenir la 31e et les données suivantes. On suppose que la valeur de cette «page» est retournée par l'instruction «for».

De plus, le paramètre d'entrée postageFlag spécifie si le prix de l'article comprend les frais de port (1 comprend les frais de port ou les frais de port gratuits).

import requests
import numpy as np
import pandas as pd

REQUEST_URL = "https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706"
APP_ID="<Entrez l'ID d'API Rakuten>"

#Paramètres d'entrée
serch_keyword = 'Faire en'
ng_keyword = 'Paiement de la taxe locale Assortiment de kits sans pesticide biologique biologique à faible teneur en pesticides'
page = 1
serch_params={
    "format" : "json",
    "keyword" : serch_keyword,
    "NGKeyword":ng_keyword,
    "applicationId" : [APP_ID],
    "availability" : 0,
    "hits" : 30,
    "page" : page,
    "sort" : "standard",
    "postageFlag" : 1
}

2. Créez un type de dict contenant uniquement les informations nécessaires sur le produit

Utilisez l'instruction for pour obtenir des informations sur le produit pour les pages qui s'étendent sur plusieurs pages.

Extraire uniquement les éléments nécessaires des informations sur le produit et les stocker dans le dict nommé tmp_item et les stocker dans la liste nommée ʻitem_list` est le même flux que la dernière fois.

#Obtenir des informations sur les produits dans une liste
item_list = [] #Informations produit de type dictionnaire acquises par 30 éléments tmp_10 pages d'article
max_page = 10
for page in range(1, max_page+1):
    serch_params['page'] = page
    #Envoyez une demande à l'API et obtenez le résultat des données produit en conséquence
    response = requests.get(REQUEST_URL, serch_params)
    result = response.json()

    #Créez un dict qui extrait les informations nécessaires du résultat
    item_key = ['itemName', 'itemPrice', 'itemCaption', 'shopName', 'shopUrl', 'itemUrl']

    for i in range(0, len(result['Items'])):
        tmp_item = {}
        item = result['Items'][i]['Item']
        for key, value in item.items():
            if key in item_key:
                tmp_item[key] = value
        item_list.append(tmp_item.copy())

Ici, même si j'ai entré un mot-clé qui avait moins de 10 pages de produits, j'ai pu l'obtenir sans erreur particulière. Il semble que le nombre de pages puisse être défini plus grand que le nombre réel de produits (la limite supérieure de «page» est de 100 selon la référence API). Cependant, le traitement prend beaucoup de temps et, dans de rares cas, une erreur se produit dans mon environnement, je pense donc qu'il est préférable de le limiter au minimum nécessaire.

3. Créez un DataFrame

Comme la dernière fois, créez un Pandas DataFrame à partir de la liste qui stocke le dict des informations sur le produit. Je l'ai un peu modifié pour que l'index commence à 1 au lieu de 0.

#Création de trame de données
df = pd.DataFrame(item_list)
df = df.reindex(columns=['itemName', 'itemPrice', 'itemCaption', 'itemUrl', 'shopName', 'shopUrl'])
df.columns = ['Nom du produit', 'Prix du produit', 'Description du produit', 'URL du produit', 'Nom du magasin', 'URL du magasin']
df.index = df.index + 1 #Réindexer à partir de 1

Vérifiez le nombre d'acquisitions avec «df.count ()» et les 5 premières données avec «df.head ()». Cela semble correct s'il contient 300 données comme prévu.

4. sortie csv

Il est gênant d'exécuter ce script à chaque fois pour obtenir les données, donc sortez csv afin que vous puissiez l'utiliser lorsque vous souhaitez l'utiliser.

df.to_csv('20200914_rakuten_mayqueen.csv')

(2) Script de traitement / agrégation de données

1. Lire csv

Maintenant que nous avons augmenté le nombre de données, traitons les données sous une forme adaptée à l'analyse. Vous pouvez procéder tel quel, mais une fois que vous avez chargé le remplissage csv, continuez.

df = pd.read_csv('20200914_rakuten_mayqueen.csv')

2. Extraire uniquement les données requises

Je vais traiter ce DataFrame, mais tout d'abord, lorsque j'ai jeté un coup d'œil rapide au contenu des données avec une feuille de calcul, il était mélangé à des données supplémentaires autres que les légumes qui ne correspondaient pas à l'objectif de cette enquête sur les prix. Puisque nous avons besoin de données de poids cette fois, nous essayerons avec la politique de "ne laisser que les données de produit avec le poids dans le nom du produit".

Dans Pandas, utilisez str.contains () pour extraire (correspondre partiellement) les lignes contenant la chaîne spécifiée et les renvoyer sous forme de valeurs booléennes.

#Ne laissez que les données produit avec "kg" dans le nom du produit
kg_flg = df['Nom du produit'].str.contains('kg')
df = df[kg_flg]

kg_flg est une série de valeurs booléennes, et les lignes qui incluent" kg "sont True, et les lignes qui ne contiennent pas" kg "sont False. La ligne True correspond aux données que vous souhaitez conserver. En utilisant ceci et en le définissant sur df [kg_flg], vous pouvez extraire un DataFrame qui ne contient que des lignes True.

Quand j'ai vérifié le nombre de cas avec df.count (), il a diminué à 116 cas. Si vous souhaitez sécuriser plus de données, il semble que cette zone doit être vérifiée un peu plus.

3. Extrayez le poids du nom du produit pour créer une nouvelle colonne

Cela ne laisse que la ligne avec kg dans le nom du produit, mais je voudrais couper ce poids dans une autre colonne. Le nom du produit doit contenir le poids sous la forme «nombre + kg», alors retirez ce numéro et créez une nouvelle colonne appelée «quantité».

Utilisons une expression régulière ici (je vais omettre l'explication détaillée, mais vous pouvez exprimer "nombre + kg" en utilisant ([0-9] +) kg) Spécifiez cette expression régulière dans l'argument de str.extract () de Pandas. Cette méthode spécifie une expression régulière comme argument et extrait la première chaîne correspondante pour créer une nouvelle colonne. C'est une méthode pratique qui convient parfaitement à ce que vous voulez faire cette fois.

#Découpez le poids du nom du produit dans une autre colonne
df['Quantité'] = df['Nom du produit'].str.extract('([0-9]+)kg')
df =df.reindex(columns=['Nom du produit', 'Quantité', 'Prix du produit', 'Description du produit', 'URL du produit', 'Nom du magasin', 'URL du magasin'])

df.to_csv('20200914_rakuten_mayqueen_2.csv')

Échangez les colonnes pour faciliter la lecture et affichez csv à la fin. J'ai pu créer un DataFrame comme celui-ci.

image

Dans l'image, après avoir converti la quantité en type numérique pour une analyse ultérieure, j'ai également ajouté le prix unitaire en kg, qui est le prix du produit divisé par la quantité. Cependant, les chiffres sont assez différents, je vais donc creuser un peu plus la prochaine fois.

en conclusion

La prochaine fois, essayez de calculer des statistiques telles que la valeur moyenne des prix des produits en agrégeant les données, et essayez la visualisation et l'approximation linéaire du prix unitaire en kg Je vais essayer de faire une analyse simple qui semble conduire à une prise de décision.

Recommended Posts

Collectez des informations sur les produits et traitez les données à l'aide de l'API de recherche de produits Rakuten [Python]
Exportez les informations produit au format CSV à l'aide de l'API de recherche de produits Rakuten [Python]
Regroupez et analysez les prix des produits à l'aide de l'API Rakuten Product Search [Python]
Acquisition de données à l'aide de l'API googlemap de python
Collectons automatiquement les informations de l'entreprise (données XBRL) à l'aide de l'API EDINET (4/10)
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Collectez des données à l'aide de scrapy et remplissez mongoDB
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data
[Python] Obtenez tous les commentaires à l'aide de Youtube Data Api
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Nettoyage des données à l'aide de Python
[Python] Obtenez des données insight à l'aide de l'API Google My Business
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Traiter les données csv avec python (traitement du comptage à l'aide de pandas)
Rechercher sur Twitter avec Python
Procédure de transcription vocale à l'aide de Python et de l'API Google Cloud Speech
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
J'ai essayé de rechercher des vidéos à l'aide de l'API de données Youtube (débutant)
Visualisez l'activité des plantes depuis l'espace à l'aide de données satellites et de Python
Obtenez des données à l'aide de l'API du ministère des Affaires intérieures et des Communications
Collectez un grand nombre d'images à l'aide de l'API de recherche d'images de Bing
Collectez les tweets en utilisant tweepy en Python et enregistrez-les dans MongoDB
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
Graphique des données de séries chronologiques en Python à l'aide de pandas et matplotlib
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
[Go language] Collectez et enregistrez des images Vtuber à l'aide de l'API Twitter
Obtenez le nom du produit et le prix le plus bas à l'aide de l'API Amazon Product Advertising
[Python] Extraction / combinaison de données aléatoires à partir de DataFrame en utilisant random et pandas
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Jouez avec l'API de données YouTube v3 à l'aide du client Python de l'API Google
Algorithme de recherche utilisant word2vec [python]
[Python] Recherche de priorité de profondeur et recherche de priorité de largeur
Analyse de données à l'aide de pandas python
Automatisation d'une recherche sur des informations géographiques telles que le réseau de magasins à l'aide de Python et de l'API Web
Traitez le résultat de l'exécution de Splunk en utilisant Python et enregistrez-le dans un fichier
[Python] Notification LINE des dernières informations à l'aide de la recherche automatique Twitter
Informations sur la carte de base à l'aide de la conversion Geotiff Python des données numériques d'élévation
Exploration avec Python et Twitter API 2-Implémentation de la fonction de recherche d'utilisateurs
[Python] Talk en utilisant OpenJTalk et l'API Talk (jusqu'à la sortie vocale)
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
Vider, restaurer et rechercher des requêtes d'instances de classe Python à l'aide de mongodb
Obtenir des données Salesforce à l'aide de l'API REST
Authentification à l'aide de l'authentification des utilisateurs tweepy et de l'authentification d'application (Python)
[Python3] Google translate google translation sans utiliser l'API
Coopération entre le module python et l'API
Obtenez des données Amazon à l'aide de Keep API # 1 Obtenez des données
Hashing de données en R et Python
Clustering et visualisation à l'aide de Python et CytoScape
Mémo d'acquisition de données à l'aide de l'API Backlog
Puissance totale en Python (en utilisant functools)
Essayez d'utiliser l'API d'action de Python argparse
Exécutez Ansible à partir de Python à l'aide de l'API
Traiter les données Pubmed .xml avec python
Backtrace en utilisant les informations DWARF et pyelftools