Используя Python для анализа волны лунных пирогов, мой вывод такой?

задняя часть Python внешний интерфейс
Используя Python для анализа волны лунных пирогов, мой вывод такой?

В первое предложение текста добавить «Я участвую в творческом конкурсе «Праздник середины осени». Подробнее см.: Творческий конкурс «Праздник середины осени»

Добавить Автора
источник: Используя Python для анализа волны лунных пряников, к какому выводу я пришел?

Нет публики"ИТ-путешествие Джейка"Фоновый ответ"лунный торт», чтобы получить полные данные этой статьи.

Сегодня 15 августа, и снова ежегодный Праздник середины осени. Праздник середины осени возник из поклонения луне в древние времена и имеет долгую историю.

Праздник середины осени уже здесь, и в каждом месте есть свои обычаи. Но в обычаях Праздника середины осени нет ничего общего: приносить жертвы луне, любоваться луной, смотреть на фонари и есть лунные лепешки. На мой взгляд, самый запоминающийся лунный пирог – это вкус «пяти зернышек», любимый старшими в семье. Я до сих пор помню, что когда я был ребенком, я ненавидел есть «красное и зеленое» в «пяти ядрах».

Позже я тоже съел несколько очень вкусных лунных пряников.Сегодня специально поискал в интернете.Увидел много вкусов,которых никогда не пробовал,и обалдел.Так что приходится терпеть свою слюну и использовать Python для анализа лучших вкусов для вас. , чтобы помочь друзьям, которые еще не купили лунные пирожные, в качестве справки для покупки.

Реализация: Python + Pandas (обработка данных) + Matplotlib (визуализация) + boken (связь визуализации)

1. Цель анализа

  • 1) Какой вид лунного пирога продается больше всего?
  • 2) Каков диапазон цен на лунные пряники?
  • 3) 15 лучших брендов с лучшей репутацией?
  • 4) Топ-10 восхитительных вкусов лунного пирога?
  • 5) Топ-10 магазинов с самыми высокими продажами лунных пряников?
  • 6) Сравнение цен на лунные пряники популярных брендов
  • 7) Рекомендация бренда Mooncake с разными вкусами (автоматически)

图片

2. Получение данных

Источник данных: компания Jingdong провела поиск по ключевому слову [лунный пирог], используя программное обеспечение для автоматического сбора данных, чтобы собрать более 2000 данных, включая название лунного пирога, название магазина, бренд, цену, продажи, категорию, происхождение.

# 导入相关库,读取数据
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
import numpy as np
sns.set(font='SimHei',style='darkgrid')

data = pd.read_excel('C:/Users/Cherich/Desktop/月饼数据.xlsx')
data.info()

图片

Название магазина, бренд, категория лунного пирога и происхождение имеют пропущенные значения. Первые два пропущенных значения немногочисленны, а нулевые значения могут быть удалены напрямую; ** Категория лунного пирога очень важна, поэтому ее следует заполнить; ** Последнее место происхождения можно непосредственно проанализировать на основе на существующем месте происхождения, и на конечный результат не будет слишком большого влияния.

3. Очистка данных

3.1 Заполнение категорий

Обычно существует два способа заполнения: один основан на алгоритмах, связанных с машинным обучением, для прогнозирования; второй заключается в поиске закономерностей, таких как категории лунного пирога, включенные в большинство заголовков, поэтомупринимать верные решения, его можно заполнить.

data.head()

图片

categorys = data.groupby('category')
category_list = [i[0][:2] for i in categorys]
category_list[-5] = '卡券'
print(category_list)
# ['京式', '其它', '冰淇', '冰淇', '冰皮', '卡券', '台式', '卡券', '港式', '滇式', '潮式', '苏式']
datas = data[data['category'].isnull()==True]

def add_category(df):
    name = '其它'
    for j in category_list:
        if j in str(df):
            name = str(j)   
    return name
datas['category'] = datas['title'].apply(add_category)
datas1 = data[data['category'].isnull()==False]
datas2 = pd.concat([datas1,datas])
datas2

图片

3.2 Ароматизаторы начинки

Вкусы также появляются в заголовке и заполняются так же, как указано выше. Поскольку нет отдельного поля для вкусов, нам нужно заполнить ключевые слова вкуса.Я должен сказать, что вкусов лунных пряников действительно много!

tastes = ["冰皮","冰淇","蛋黄莲蓉","豆沙","黑芝麻","火腿","椒盐","榴莲","玫瑰","流心","奶酪","牛肉","水果","酥皮","五仁","椰蓉","枣蓉","桃仁"]

def add_taste(df):
    name =''
    for j in tastes:
        if j in str(df):
            name = str(j) 
            break
        else:
            name = '混合口味'

    return name
datas2['taste'] = datas2['title'].apply(add_taste)
datas2.head()

图片

3.3 Удалить данные с пустым именем магазина

datas2.dropna(subset=['shop'],inplace=True)
datas2.info()

图片

3.4 Маркировать ценовой диапазон

def price(df):
    lable = ''
    if 0<df<=50:
        lable= '0~50元'
    elif 50<df<=100:
        lable ='50~100元'
    elif 100 < df <=150:
        lable = '100~150元'
    elif 150 <df <= 200:
        lable = '150~200元'
    else:
        lable = '200元以上'
    return lable

datas2['price_lable'] = datas2['price'].apply(price)
datas2.head()

图片

4. Визуализация данных

4.1 Ценовой диапазон лунных пряников

las = datas2.groupby(datas2['price_lable']).size()
las.sort_values(ascending=True,inplace=True)
plt.figure(figsize=(8,6),dpi=80)
plt.title(label='月饼价格区间分布',fontsize=20)
size = 0.3
patches, l_text, p_text = plt.pie(las.values,labels = las.index, shadow=True,
                                  colors=plt.cm.coolwarm_r(np.linspace(0,1,len(las.index))),wedgeprops=dict(width=size, edgecolor='w'),autopct='%.2f%%',startangle=300)
plt.show()

图片

Среди них 31% лунных тортов стоят меньше 50 юаней. Кажется, что большинство лунных тортов относительно доступны по цене, 24% лунных тортов стоят выше 200 юаней. Неужели лунные торты такие дорогие?

4.2 Сравнение продаж типов Mooncake

big_category = datas2[datas2['category']!='其它'].groupby(datas2['category'])
category = [i for i,j in big_category]
numbers = [j['sales'].sum() for i,j in big_category]


plt.figure(figsize = (5,4),dpi=80)
plt.title(label='不同类别月饼销量对比',fontsize=18)
plt.bar(category,numbers, color=plt.cm.coolwarm_r(np.linspace(0,1,len(numbers))))
plt.xticks(rotation=45)
plt.grid()
plt.show()

图片

Кажется, что категории лунных пряников, которые вошли в тройку лидеров, — это лунные лепешки в кантонском стиле, в стиле Сучжоу и в гонконгском стиле, Движимая любопытством, я специально проверила эти лунные пряники, чтобы увидеть, где они вкуснее!

图片

Лунные лепешки в кантонском стиле: у лунных лепешек в кантонском стиле тонкая кожица, а соотношение начинки обычно составляет 1: 4. Начинки в основном состоят из тертого кокоса, пасты из семян лотоса, яичного желтка и бобовой пасты.

图片

Мункейки в гонконгском стиле относительно близки к кантонскому стилю, потому что они географически близки, но гонконгский стиль был улучшен на основе кантонского стиля.Гонконгский стиль отличается низким содержанием жира и масла. Спешите устроить богиню!

图片

Характеристики лунных лепешек в стиле Сучжоу в районах Цзянсу, Чжэцзян и Шанхая, самая большая особенность - безе, хрустящее снаружи и мягкое внутри, очень многослойное, и чем больше вы жуете, тем ароматнее.

图片

4.3 ТОП-15 брендов с хорошей репутацией

shop = datas2.groupby(datas2['brand'])
shop_dic = {i:j['sales'].sum() for i,j in shop}
shop_dic = sorted(shop_dic.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)
ins = []
val = []
for i, j in shop_dic[:15]:
    ins.append(i.split()[0])
    val.append(j)
# print(ins)
vals = [round(datas2[datas2['brand']== z]['price'].mean()) for z in ins]
# print(vals)
plt.figure(figsize = (8,4),dpi=80)

plt.title(label='TOP 15 口碑较好的品牌',fontsize=20)
s = plt.barh(ins[::-1],val[::-1],height=0.9, color=plt.cm.coolwarm_r(np.linspace(0,1,len(ins))))
i = 0
plt.grid()
plt.show()

图片

Daoxiangcun в Пекине занимает первое место по продажам среди всех брендов, за ним следуют Huamei, Wufangzhai, Yuen Long...

4.4 ТОП-10 восхитительных вкусов лунного пирога

shop = datas2[datas2['taste']!='混合口味'].groupby(datas2['taste'])
shop_dic = {i:j['sales'].sum() for i,j in shop}
shop_dic = sorted(shop_dic.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)
ins = []
val = []
for i, j in shop_dic[:15]:
    ins.append(i.split()[0])
    val.append(j)

plt.figure(figsize = (8,4),dpi=80)
plt.title(label='TOP 15 热门月饼口味',fontsize=18)
plt.bar(ins,val, color=plt.cm.coolwarm_r(np.linspace(0,1,len(ins))))
plt.xticks(rotation=45)
plt.grid()
plt.show()

图片

Согласно сравнению вкусов продаж, популярными вкусами являются паста из лотоса, яичный желток, жидкое сердце, пять ядер, паста из фасоли, ветчина...

4.5 ТОП-10 магазинов с самыми высокими продажами лунных пряников

shop = datas2.groupby(datas2['shop'])
shop_dic = {i:j['sales'].sum() for i,j in shop}
shop_dic = sorted(shop_dic.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)
ins = []
val = []
for i, j in shop_dic[:10]:
    ins.append(i.split()[0])
    val.append(j)

plt.figure(figsize = (8,4),dpi=80)
plt.title(label='TOP 10 销量最高的店铺',fontsize=18)
plt.barh(ins[::-1],val[::-1],height=0.9, color=plt.cm.coolwarm_r(np.linspace(0,1,len(ins))))

plt.grid()

图片

Кажется, что, хотя бренд Daoxiangcun занимает первое место по продажам, флагманский магазин Huamei занимает первое место по продажам в магазине.

4.6 Облако слов продаж брендов

from wordcloud import WordCloud
from PIL import Image
li = [each for each in datas2['brand'].values]

def func_pd(words):
    count_result = pd.Series(words).value_counts()
    return count_result.to_dict()

frequencies = func_pd(li)
plt.figure(figsize = (10,8),dpi=80)
wordcloud = WordCloud(font_path="STSONG.TTF",background_color='#E6E6FA', width=700,height=350).fit_words(frequencies)
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

图片

4.7 Сравнение цен на лунные пряники популярных брендов

brand = ['华美', '稻香村', '五芳斋', '美心', '杏花楼', '广州酒家', '元朗荣华', '金尊', '元朗', '哈根达斯', '潘祥记', 'YOTIME', '金九', '中大惠农', '功德林']
datas = datas2[datas2['brand'].isin(brand)]

groups = datas2['price'].groupby(datas2['brand'])

plt.figure(figsize = (8,4),dpi=80)
plt.title('热门品牌价格对比',fontsize=18)

box_1, box_2, box_3, box_4,box_5, box_6 = groups.get_group('华美'),groups.get_group('稻香村'),groups.get_group('广州酒家'),groups.get_group('YOTIME'),groups.get_group('金九'),groups.get_group('五芳斋')

labels = '华美', '稻香村', '广州酒家', 'YOTIME', '金九', '五芳斋'

bplot = plt.boxplot([box_1, box_2, box_3, box_4,box_5,box_6],patch_artist = True,showmeans=True,labels=labels)
colors= plt.cm.coolwarm_r(np.linspace(0,1,len(labels)))

for patch, color in zip(bplot['boxes'], colors):
    patch.set_facecolor(color)
plt.grid(False)           
plt.show()

图片

Я выбрал несколько популярных марок, что видно по цене:

У каждого бренда есть определенные высокие выбросы, которые принадлежат пользователям с высокой покупательной способностью и настраивают подарочные коробки;

Самые низкие средние цены у Huamei, Daoxiangcun и Wufangzhai, кажется, что часть высокого объема продаж связана с ценой.

4.8 Рекомендации бренда Mooncake с разными вкусами (автоматически)

Я хочу автоматически рекомендовать бренды с лучшими продажами, выбирая вкусы, которые мне нравятся. Используя Boken для связи, боке представляет собой интерактивную библиотеку визуализации для браузеров. Он может быстро создавать интерактивные графики, информационные панели и приложения для работы с данными.

import pandas as pd

from bokeh.models.widgets import Panel
from bokeh.models.widgets import Tabs
import warnings
warnings.filterwarnings('ignore')
from bokeh.io import curdoc
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource, Select
from bokeh.layouts import row
import matplotlib as mpl

mpl.rcParams['font.family'] = 'SimHei'
data = pd.read_excel('C:/Users/cherich/Desktop/月饼数据.xlsx')

brand = ['华美', '稻香村', '五芳斋', '美心', '杏花楼', '广州酒家利口福', '元朗荣华', '金尊', '元朗', '哈根达斯', '潘祥记', 'YOTIME', '金九', '中大惠农', '功德林']
data = data[data['brand'].isin(brand)]

# ------------------------------------------------------------------
# 创建下拉小部件: select
types = list(data['taste'].unique())
select1 = Select(options=types, value='莲蓉')
data_qudao = data[data.taste == '莲蓉']
data_qudao_a = data_qudao.groupby('brand').size().sort_values(ascending=False).head(15)
print(data_qudao_a)
data_qudao_b = pd.DataFrame(data=data_qudao_a, columns=['num'])
data_qudao_b['ind'] = data_qudao_b.index
# 创建数据源: source
source1 = ColumnDataSource(data={
    'x': data_qudao_b['ind'],
    'y': data_qudao_b['num']
})
TOOLTIPS = [
    ("口味", "@x"),
    ("销量", " @y")
]
p1 = figure(title='月饼口味店铺推荐', x_range=data_qudao_a.index.to_list(), plot_width=620, plot_height=500,
            x_axis_label='品牌', y_axis_label='销量', tooltips=TOOLTIPS)

p1.vbar('x', width=0.5, bottom=0, top='y', source=source1, color='#BCD2EE')

def update_plot1(attr, old, new):
    yr = select1.value
    data_qudao = data[data.taste == yr]
    data_qudao_a = data_qudao.groupby('brand').size().sort_values(ascending=False).head(15)
    data_qudao_b = pd.DataFrame(data=data_qudao_a, columns=['num'])
    data_qudao_b['ind'] = data_qudao_b.index
    source1.data = {
        'x': data_qudao_b['ind'],
        'y': data_qudao_b['num']
    }
    p1.title.text = '%s类型统计图' % yr


select1.on_change('value', update_plot1)
layout2 = row(select1, p1)

tab1 = Panel(child=layout2, title='口味')
layout = Tabs(tabs=[tab1])
curdoc().add_root(layout)

Запустите службу боке:

bokeh serve --show aa.py

Выберите свой любимый вкус, и на диаграмме автоматически отобразятся самые продаваемые бренды.

V. Заключение

1. Цена большинства лунных тортов составляет менее 50 юаней, что по-прежнему очень доступно;

2. Лунные пряники в кантонском стиле являются самыми популярными, за ними следуют лунные пряники в гонконгском стиле и лунные лепешки в стиле Сучжоу;

3. Бренды с хорошей репутацией: Huamei, Daoxiangcun, Wufangzhai и Maximin;

4. Популярные вкусы: паста из семян лотоса из яичного желтка, плавное сердце, пять ядер, бобовая паста, ветчина, снежная кожа;

Эта статья закончилась.


Оригинальность непростая.Если вы считаете, что эта статья полезна для вас, ставьте лайк, комментируйте или пересылайте эту статью, потому что это будет моей мотивацией выпускать больше качественных статей, спасибо!

Кстати, друзья-копатели, не забудьте дать мне бесплатный подписчик! На случай, если ты заблудишься и не сможешь найти меня в следующий раз.

Увидимся в следующий раз!