Regroupez et analysez les prix des produits à l'aide de l'API Rakuten Product Search [Python]

introduction

Ceci est une continuation de Dernière fois. Cette fois sera la dernière. Maintenant que nous avons prétraité l'analyse de prix des données produit obtenues auprès de Rakuten Ichiba, nous allons enfin tenter une analyse simple.

―― Quel est le prix du marché des légumes (make-in cette fois) vendus à Rakuten Ichiba? ―― Quelle est la quantité appropriée par kg?

Je voudrais utiliser des compétences d'analyse rudimentaires pour mettre en évidence de telles choses.

politique

Le but est de se réorganiser "pour l'enquête sur les prix lors de la vente de produits agricoles". Le but de cette période était d'obtenir des raisons de savoir "combien de prix il convient de vendre" en totalisant ou en représentant graphiquement les prix des produits agricoles en kg. .. À cette fin, je voudrais l'utiliser comme l'un des motifs en examinant d'abord le prix du marché à Rakuten Ichiba, qui semble facile à étudier.

Suivez les étapes ci-dessous.

(1) Essayez de totaliser

Tout d'abord, résumons les statistiques récapitulatives (valeur moyenne, valeur médiane, etc.) du prix du produit pour chaque quantité et faisons un tableau. En d'autres termes, la première étape de cette analyse est d'appréhender le prix du produit pour chaque poids (1kg, 2kg ...) avec des valeurs numériques spécifiques.

(2) Vérifier la distribution (visualisation)

Trouvons un histogramme ou un diagramme de dispersion en utilisant les données pour chaque quantité, et voyons quel type de distribution sera la relation entre la quantité et le nombre de produits et la relation entre la quantité et le prix du produit. De plus, en se concentrant sur le prix médian du produit et en le visualisant, il conduira à l'analyse de (3) ci-dessous.

(3) Obtenir des paramètres par approximation linéaire

Considérons la relation entre la quantité et le prix médian comme une fonction linéaire (ligne droite) et trouvons les paramètres de la formule. En se concentrant sur le prix médian de chaque quantité et en le visualisant plus tôt, on suppose que la quantité et le prix du produit sont susceptibles d'avoir une relation de fonction linéaire (directement sur le graphique). Si cela est effectivement appliqué, on peut considérer que le prix du produit est déterminé en ajoutant le "montant par kg" au "montant de base des frais d'expédition, des frais de boîte, des frais de travail, etc." En trouvant les paramètres de l'expression relationnelle, calculons le «montant de base» et le «montant par kg».

Agrégation et analyse

Préparez les données avant de démarrer l'agrégation. Lisez les données traitées enregistrées à la fin de Dernière fois à partir du fichier csv et placez-les dans le DataFrame.

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

(1) Essayez de totaliser

Lorsque vous êtes prêt, examinons d'abord les statistiques récapitulatives des prix des produits par quantité. Utilisez la fonction groupby () pour créer une table par quantité. Utilisez également la méthode describe () pour afficher les statistiques.

#Vérifiez les statistiques de chaque quantité par groupe par
df_by_kg = df.groupby('Quantité').describe()['Prix du produit']
df_by_kg

image

Si vous regardez la colonne count de ce tableau, vous pouvez voir qu'il y a des lignes avec seulement une ou deux données et des lignes avec un grand nombre de données. Par exemple, vous pouvez voir que le nombre de caisses de «vente de pommes de terre à 1 kg ou 2 kg» est faible en premier lieu, et le nombre de caisses de «vente de pommes de terre à 5 kg ou 10 kg» est important. Étant donné que le standard de la boîte est presque fixe, il s'agit d'un nombre raisonnable du site réel, mais j'ai pu le confirmer à partir de données comme celle-ci.

Extrayez uniquement les lignes requises de cette table. Cette fois, nous n'utiliserons que les lignes avec un grand nombre de cas. Vous pouvez spécifier directement le nombre de lignes à laisser, mais compte tenu de la possibilité de réutiliser le script plus tard, nous extrayons ici 5 lignes ou plus (3 kg, 5 kg, 10 kg, 20 kg sont applicables). je vais essayer

#Extraire uniquement les lignes nécessaires (ne laisser que celles avec 5 cas ou plus)
df_by_kg = df_by_kg.loc[df_by_weight[('Prix du produit', 'count')]>5, :]
df_by_kg

image

À partir de là, ne laissez que les colonnes dont vous avez besoin. Cette fois, j'ai décidé de laisser "nombre de cas count", "valeur moyenne" moyenne "," valeur minimale "min", "valeur médiane" 50% "" et "valeur maximale" max "".

#Extraire uniquement les lignes requises
df_by_kg = df_by_kg.loc[:,  [ 'count', 'mean', 'min', '50%', 'max']]
df_by_kg

image

Vous avez maintenant une table de tabulation propre. Sur la base de ce tableau, regardons le prix du produit "pomme de terre 10kg" à titre d'exemple. Les statistiques sont

--Valeur minimale (min) 1399 yens --Valeur maximale (max) 7560 yens --Valeur moyenne (`` moyenne '') 3820 yens --Média (50%) 3600 yens

C'était un tel montant (frais de port et taxes inclus). Il semble qu'il faille se référer à la valeur moyenne ou à la valeur médiane pour avoir une idée du prix du marché, mais comme la fourchette entre la valeur minimale et la valeur maximale est grande, on pense que la variation globale est importante. Par conséquent, je voudrais regarder la ** valeur médiane ** au lieu de la valeur moyenne comme valeur de référence (cette variation sera visualisée dans l'élément suivant).

Au fait, le moins cher est inhabituellement bon marché, alors quand j'étais curieux, il me semblait que des balles ultra-petites étaient vendues comme des «produits traduits». Au contraire, au prix le plus élevé, il ne s'agissait pas d'un produit de marque de luxe spécial, mais d'un produit dans un domaine, mais de juin à début août 2020, le prix du marché des pommes de terre était anormalement élevé dans tout le pays. Par conséquent, je me suis demandé s'il était listé à un tel prix (juste une supposition).

(2) Vérifier la distribution (visualisation)

Ensuite, j'aimerais approfondir les données en dessinant un graphique basé sur les données et en les visualisant.

Commençons par afficher le "diaphragme". Ici, le nombre d'entrées (kg) et la fréquence (combien de données sont disponibles) sont illustrés.

Pour afficher l'histogramme, utilisez la fonction hist () de la bibliothèque matplotlib. Spécifiez DataFram (df) avant l'agrégation en tant que données. En spécifiant bins comme option, la largeur de la bande de l'histogramme est modifiée. Ici, le nombre de cas est affiché par incréments de 1 de 1 à 30.

import matplotlib.pyplot as plt

#Histogramme (relation entre le nombre d'entrées et le nombre d'observations)
plt.hist(df['Quantité'], bins=np.arange(1, 30))
plt.xlabel('Quantity(kg)')
plt.ylabel('Count')
plt.grid(True)
plt.show()

image

Comme vous pouvez le voir à partir des valeurs numériques précédentes, il existe une différence dans le nombre de cas en fonction du nombre de kg. Vous pouvez voir qu'il existe de nombreux produits par 5kg et 10kg, et 3kg et 20kg sont relativement disponibles.

Ensuite, affichons le "diagramme de dispersion". Pour afficher le diagramme de dispersion, utilisez la fonction scatter () de matplotlib. Encore une fois, essayez de spécifier le DataFram (df) avant l'agrégation.

#Diagramme de dispersion (relation entre la quantité et le prix du produit)
plt.scatter(df['Quantité'], df['Prix du produit'])
plt.xlabel('Quantity(kg)')
plt.ylabel('Pirce(yen)')
plt.grid(True)
plt.show()

image

Les points indiquent le nombre de kg de produits vendus, mais vous pouvez clairement voir que la «variation de prix» mentionnée précédemment lors du total est importante. Dans cet état, il y a beaucoup de variation et il semble qu'il ne puisse pas être utilisé comme base pour déterminer le prix.

Donc, cette fois, je vais dessiner un diagramme en se concentrant sur la «valeur médiane» du prix du produit. Contrairement au diagramme de dispersion ci-dessus, un point, qui est la valeur médiane du prix du produit correspondant pour chaque quantité, est tracé sur le graphique. Ici, la figure est affichée en utilisant le DataFrame agrégé (df_by_kg).

#Points de tracé (relation entre la quantité et le prix du produit (médiane))
plt.plot(df_by_kg.index, df_by_kg['50%'], 'o')
plt.xlabel('Quantity(kg)')
plt.ylabel('Pirce(yen)')
plt.grid(True)
plt.show()

image

Les points tracés semblent s'aligner sur une belle ligne droite. Il semble que l'on puisse saisir la relation entre le nombre de pièces et le prix du produit.

Les valeurs numériques (c'est-à-dire les valeurs médianes) à chaque point sont les suivantes.

image

Lors de la définition du montant des ventes de légumes, il semble qu'en définissant ce montant, il soit possible de fixer un prix raisonnable avec peu d'écart par rapport au prix du marché dans les ventes en ligne.     De cette façon, il est plus facile de comprendre intuitivement si vous visualisez les valeurs numériques ainsi que les voir. De plus, même si elle est visualisée, il existe de nombreuses variations lorsqu'on regarde l'ensemble de manière vague, et je ne savais pas trop comment le regarder, mais quand je me concentre sur une statistique appelée «valeur médiane», je vois la régularité. J'étais capable de.

(3) Obtenir des paramètres par approximation linéaire

Examinons un peu plus les résultats. On considère que la valeur médiane du prix du produit pour le nombre de kg tracé précédemment est proche de la relation de la fonction linéaire (les points sont alignés presque en ligne droite sur le graphique). Par conséquent, essayons "l'approximation linéaire". En trouvant les paramètres (inclinaison et section) de l'équation approximative de la ligne droite, il semble que le prix du produit puisse être vu en détail. En d'autres termes, le «montant au kg» correspond à la valeur de la pente de cette droite, et le «montant de base des frais de port, frais de boîte, frais de travail, etc.» correspond à la section de cette droite.

Utilisez la fonction numpy pour une approximation linéaire.

#Approximation linéaire
linear = np.polyfit(df_by_kg.index, df_by_kg['50%'], 1) #Approximation linéaire pour trouver la section et la pente
func = np.poly1d(linear) #Faire une équation linéaire à partir de la section et de la pente
x = df_by_kg.index
y = func(x)

#Affichage graphique approximatif linéaire
plt.plot(x, y)

#Afficher le diagramme de dispersion ensemble
plt.plot(df_by_kg.index, df_by_kg['50%'], 'o')
plt.xlabel('kg')
plt.ylabel('yen')

image

De cette façon, vous pouvez voir que les points tracés sont à peu près sur une ligne droite. Et cette variable «linéaire» contient les paramètres de cette expression linéaire.

print('Paramètres linéaires[Inclinaison,Section] = ', linear)
# ->Paramètres linéaires[Inclinaison,Section] =  [ 142.94797688 2071.99421965]

En d'autres termes

En utilisant ce nombre, par exemple, si vous souhaitez fabriquer un produit de 4 kg, vous pouvez calculer qu'il serait préférable de le fixer à environ 2072 yens + 4 kg @ 143 yens = 2644 yens.

Il était intéressant de noter que le prix médian du produit pouvait être si joliment approché à l'équation de la fonction linéaire. Je pense que le nombre de données utilisées cette fois était trop petit pour être analysé, mais j'ai quand même pu obtenir une valeur numérique intuitivement convaincante.

en conclusion

Même avec une analyse de base comme celle-ci, nous avons pu obtenir des chiffres bien fondés qui pourraient être utilisés. Je pense que prendre des décisions basées sur de tels résultats d'analyse est la clé pour utiliser l'analyse des données au travail. Et je pense qu'il est important de ne pas le terminer une fois, mais de passer par un cycle d'analyse et de prise de décision plus précis et convaincants en répétant les essais et les erreurs.

Un point important est que la validité des résultats de l'analyse doit être vérifiée un peu plus. Par exemple, il est nécessaire d'augmenter le nombre de données ou de scruter le contenu des données. Dans cet exemple, je pensais que si nous subdivisions par variété, nous pourrions produire plus de données personnelles.

Après avoir analysé les données, nous entrerons dans la phase décisionnelle de la tarification réelle, mais cela nécessite une perspective différente. Au moins les choses suivantes doivent être solidifiées en moi.

――Comment définissez-vous la valeur du produit? Que ce soit pour le fixer moins cher ou plus haut que le prix du marché. ――Qui est la cible? Cette fois, nous avons analysé avec les données de Rakuten Ichiba, mais il peut être nécessaire d'analyser dans un marché plus proche de la cible.

Ce serait bien si je pouvais prendre des décisions avec un peu plus de rapidité, mais c'est difficile.

Pour le moment, j'aimerais utiliser ce nombre pour produire une sortie dans un proche avenir!

Eh bien, j'ai écrit trois fois sur l'analyse des données, mais cette fois je vais m'arrêter ici. Puisqu'il s'agissait d'une analyse exploratoire basée sur les connaissances acquises, il peut y avoir une mauvaise façon de penser ou une manière plus intelligente d'écrire. Je serais très heureux si vous lisez jusqu'ici et commentez si vous avez des inquiétudes!

Recommended Posts

Regroupez et analysez les prix des produits à l'aide de l'API Rakuten Product Search [Python]
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]
Agréger les journaux Git à l'aide de Git Python et analyser les associations à l'aide d'Orange
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Rechercher sur Twitter avec Python
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
[Python] Recherche de priorité de profondeur et recherche de priorité de largeur
Obtenez le nom du produit et le prix le plus bas à l'aide de l'API Amazon Product Advertising
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
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)
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
Acquisition de données à l'aide de l'API googlemap de python
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
Essayez d'utiliser l'API de Pleasant (python / FastAPI)
Coopération entre le module python et l'API
Clustering et visualisation à l'aide de Python et CytoScape
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
Recherche de priorité de profondeur à l'aide de la pile en Python
Recherche de 2 minutes Python et ses dérivés
Développement et déploiement de l'API REST en Python à l'aide de Falcon Web Framework
Fonctionnement de la souris à l'aide de l'API Windows en Python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Collecte automatique des cours boursiers à l'aide de python
Homebrew Python Partie 3 - Programme de recherche de produits d'Amazon
Essayez d'utiliser l'API Wunderlist en Python
De Python à l'utilisation de MeCab (et CaboCha)
Achetez et vendez de la monnaie virtuelle à l'aide de l'API Zaif
Essayez d'utiliser l'API Kraken avec Python
Utilisation de Python et MeCab avec Azure Databricks
Rechercher et lire des vidéos YouTube avec Python
Tweet à l'aide de l'API Twitter en Python
Vérifiez les cours des actions avec Slackbot en utilisant Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
peu de recherche complète et ensemble de produits direct
Collection d'images à l'aide de l'API Google Custom Search
J'utilise tox et Python 3.3 avec Travis-CI
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data