Этот проект исходит из лабораторного корпуса»Строительство + анализ данных и практика добычи полезных ископаемых》Шестая ученица Miss_candy. «Building + Data Analysis and Mining Practice» — это содержание курса, адаптированное лабораторным зданием для удовлетворения потребностей младших инженеров по анализу данных или интеллектуальному анализу данных. Содержит 35 экспериментов, 20 задач, 5 комплексных проектов и 1 большой проект. 6 недель, чтобы начать работу с анализом и добычей данных.
чтение данных
Данные получены 27 августа 2019 г. Цены на отели с 28.08 до 29.08 будут колебаться в зависимости от туристического непикового сезона.В настоящее время Далянь находится на стыке сезонных изменений, и уровень цен имеет тенденцию к разумно, но все же выше нормы.
import pandas as pd
import jieba
from tqdm import tqdm_notebook
from wordcloud import WordCloud
import numpy as np
from gensim.models import Word2Vec
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv('https://s3.huhuhang.com/temporary/b1vzDs.csv')
df.shape
вывод:
(2475, 7)
Очистка данных
#获取的数据会有重复的情况,首先根据酒店的名字将一项,将名称完全相同的项从数据表中删除
df = df.drop_duplicates(['HotelName'])
df.info()
вывод:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2219 entries, 0 to 2474
Data columns (total 7 columns):
Unnamed: 0 2219 non-null int64
index 2219 non-null int64
HotelName 2219 non-null object
HotelLocation 2219 non-null object
HotelCommentValue 2219 non-null float64
HotelCommentAmount 2219 non-null int64
HotelPrice 2219 non-null float64
dtypes: float64(2), int64(3), object(2)
memory usage: 138.7+ KB
После удаления дубликатов полученная информация об отеле содержит 2219 единиц достоверной информации, из которых 5 столбцов достоверной информации:
- Название отеля "HotelName"
- "HotelLocation" Название района расположения отеля.
- "HotelCommentValue" Отель имеет рейтинг
- Количество отзывов, полученных для отеля "HotelCommentAmount"
- Самая низкая цена в гостиницах "HotelPrice"
Поскольку некоторые отели пока не имеют рейтинга в связи с открытием новых объектов (или другими причинами) (отелям без рейтинга в процессе сбора данных присваивается «0»), мы берем эту часть данных отдельно и используем ее как набор данных new_hotel для последующего анализа и прогнозирования.
df_new_hotel = df[df["HotelCommentValue"]==0].drop(['Unnamed: 0'], axis=1).set_index(['index'])
df_new_hotel.head()
вывод
Для отелей с существующими рейтингами они также отделяются от исходного набора данных для анализа и моделирования.
df_in_ana = df[df["HotelCommentValue"]!=0].drop(["Unnamed: 0", "index"], axis=1)
df_in_ana.shape
вывод:
(1669, 5)
анализ данных
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
sns.distplot(df_in_ana['HotelPrice'].values)
вывод:
<matplotlib.axes._subplots.AxesSubplot at 0x7f7353b9c240>
Визуализируя распределение цен на отели, можно увидеть, что большая часть цен на отели сосредоточена ниже 500 юаней за ночь, из которых 200-300 юаней за ночь являются наиболее концентрированными; отели выше 500 юаней за ночь не очень много. . Поэтому по ценовому распределению и фактическому уровню цен гостиницы делятся на следующие классы в зависимости от ценовой конъюнктуры:
- «Дешёвые» отели с ценами до 100 юаней за ночь
- Гостиница "Эконом", цена за сутки 100-300 юаней.
- "Комфортный" отель, цена за ночь 300-500 юаней.
- Гостиницы "высокого класса", цена за ночь 500-1000 юаней.
- Гостиницы «люкс», цена за ночь более 1000 юаней.
df_in_ana['HotelLabel'] = df_in_ana["HotelPrice"].apply(lambda x: '奢华' if x > 1000 else \
('高端' if x > 500 else \
('舒适' if x > 300 else \
('经济' if x > 100 else '廉价'))))
После деления давайте сначала посмотрим на соотношение количества различных типов отелей:
hotel_label = df_in_ana.groupby('HotelLabel')['HotelName'].count()
plt.pie(hotel_label.values, labels=hotel_label.index, autopct='%.1f%%', explode=[0, 0.1, 0.1, 0.1, 0.1], shadow=True)
вывод:
([<matplotlib.patches.Wedge at 0x7f735196bf28>,
<matplotlib.patches.Wedge at 0x7f7351974978>,
<matplotlib.patches.Wedge at 0x7f735197d358>,
<matplotlib.patches.Wedge at 0x7f735197dcf8>,
<matplotlib.patches.Wedge at 0x7f73519096d8>],
[Text(1.0995615668223722, 0.0310541586125, '奢华'),
Text(0.8817809341165916, 0.813917922292212, '廉价'),
Text(-1.1653378183544278, -0.28633506441395257, '经济'),
Text(0.9862461234793722, -0.6836070391108557, '舒适'),
Text(1.1898928807304072, -0.15541857156431768, '高端')],
[Text(0.5997608546303848, 0.016938631970454542, '0.9%'),
Text(0.5143722115680117, 0.47478545467045696, '21.9%'),
Text(-0.679780394040083, -0.16702878757480563, '62.0%'),
Text(0.5753102386963004, -0.3987707728146658, '11.0%'),
Text(0.6941041804260709, -0.09066083341251863, '4.1%')])
Из результатов круговой диаграммы видно, что более 50 % отелей являются экономичными, 21,9 % отелей — дешевыми, а доля отелей высокого класса и класса люкс относительно невелика, что больше соответствует с общим позиционированием туристических городов.
Давайте посмотрим на географическое распределение отелей:
from pyecharts import Map
map_hotel = Map("大连酒店区域分布图", width=1000, height=600)
hotel_distribution = df_in_ana.groupby('HotelLocation')['HotelName'].count().sort_values(ascending=False)
hotel_distribution = hotel_distribution[:8]
h_values = list(hotel_distribution.values)
district = list(hotel_distribution.index)
map_hotel.add("", district, h_values, maptype='大连', is_visualmap=True,
visual_range=([min(h_values), max(h_values)]),
visual_text_color="#fff", symbol_size=20, is_label_show=True)
map_hotel.render('dalian_hotel.html')
Здесь, когда информация о местоположении получена с веб-сайта, информация о местоположении некоторых отелей сама по себе не стандартизирована, что приводит к определенной разнице в полученной информации, поскольку эта дифференцированная информация неудобна для единого планирования, и ее пропорция не большой, поэтому после сортировки он находится в относительно отсталом положении. Мы перехватываем информацию только о первых 8 основных областях. Видно, что большинство отелей, которые были собраны, расположены в районе Шахэкоу, Цзиньчжоу. Это напрямую связано с распределение основных живописных мест в Даляне, таких как знаменитая площадь Синхай, мост через море расположен в районе Шахекоу, а Цзиньшитань и Королевство открытий расположены в районе Цзиньчжоу. (На самом деле парк высоких технологий не имеет соответствующего содержания на карте, потому что он не относится к административному району, а является зоной развития технологий на стыке районов Ганцзинцзы и Шахэкоу, и его доля равна как Шахэкоу района и района Ганьцзинцзы не влияет и не мешает нам анализировать данные).
Карта распределения отелей Даляня
Далянь — туристический город, разные административные районы (географические положения) должны иметь разное позиционирование и уровень отелей, поэтому интересно понять распределение отелей разного класса в разных регионах:
hotel_distribution = df_in_ana.groupby('HotelLocation')['HotelName'].count().sort_values(ascending=False)
hotel_distribution = hotel_distribution[:8]
hotel_label_distr = df_in_ana.groupby([ 'HotelLocation','HotelLabel'])['HotelName'].count().sort_values(ascending=False).reset_index()
in_use_district = list(hotel_distribution.index)
hotel_label_distr = hotel_label_distr[hotel_label_distr['HotelLocation'].isin(in_use_district)]
fig, axes = plt.subplots(1, 5, figsize=(17,8))
hotel_label_list = ['高端', '舒适', '经济', '奢华', '廉价']
for i in range(len(hotel_label_list)):
current_df = hotel_label_distr[hotel_label_distr['HotelLabel']==hotel_label_list[i]]
axes[i].set_title('{}型酒店的区域分布情况'.format(hotel_label_list[i]))
axes[i].pie(current_df.HotelName, labels=current_df.HotelLocation, autopct='%.1f%%', shadow=True)
В соответствии с распределением различных категорий отелей в разных регионах, различные типы отелей выгодно распределены в районе Шахэкоу, районе Цзиньчжоу и районе Чжуншань.Что более интересно, роскошные отели не распределены в районе Лушунькоу.Помимо того, что они сконцентрированы В районе Шахекоу различные типы отелей также занимают значительную долю в районе Чжуншань, что во многом связано с историческими и географическими причинами.Жители Даляня часто говорят, что район Чжуншань является легендарным «богатым районом». бизнес выберет район Чжуншань в качестве места жительства, что также способствует росту инвестиций в элитные и роскошные отели в этом районе.
Помимо требований к цене отеля (классу), мы также будем учитывать оценку отеля при бронировании отеля.Чем выше балл, тем больше оценок, и мы будем более склонны к бронированию. , давайте разберемся в ситуации из этих отелей в городе Далянь.
Прежде всего, по рейтинговой ситуации и общему познанию потребителями рейтингов отель маркируется следующим образом:
- Оценка 4.6 и выше считается «отличным»
- 4,0-4,6 балла как «довольно хорошо»
- Оценка 3,0-4,0 – «удовлетворительно».
- Оценка ниже 3.0 — это «плохой отзыв».
df_in_ana['HotelCommentLevel'] = df_in_ana["HotelCommentValue"].apply(lambda x: '超棒' if x > 4.6 \
else ('还不错' if x > 4.0 \
else ('一般般' if x > 3.0 else '差评' )))
Мы визуализируем данные в соответствии со шкалой рейтинга и кластеризацией по классам отелей.
hotel_label_level = df_in_ana.groupby(['HotelCommentLevel','HotelLabel'])['HotelName'].count().sort_values(ascending=False).reset_index()
fig, axes = plt.subplots(1, 5, figsize=(17,8))
for i in range(len(hotel_label_list)):
current_df = hotel_label_level[hotel_label_level['HotelLabel'] == hotel_label_list[i]]
axes[i].set_title('{}型酒店的评分情况'.format(hotel_label_list[i]))
axes[i].pie(current_df.HotelName, labels=current_df.HotelCommentLevel, autopct='%.1f%%', shadow=True)
Из распределения оценок различных типов отелей видно, что отрицательные отзывы в основном появляются в дешевых отелях и бюджетных отелях, и среди них наиболее пострадавшие области - дешевые отели. также подтверждает общее представление о том, «куда тратятся деньги». Доля оценок «отлично» не увеличивалась с повышением рейтинга отеля.Для отелей высокого класса доля оценок «превосходно» уменьшалась по сравнению с более дешевыми комфортабельными отелями.Ценность ожидаемого обслуживания, соответствующая цене отеля, выше чем уровень обслуживания, который гостиница может предоставить на самом деле.С одной стороны, потребителям напоминают не думать слепо, что дорого — хорошо.
список отелей
В соответствии с текущим содержанием мы можем составить «Список посадки травы» и «Список против грома»:
«Список посадки травы» в основном собирает список отелей с хорошими отзывами и большим количеством отзывов (осмотрены множественными людьми, удовлетворение требований), а цена соответственно разумная, для друзей с разными путешествиями необходимо выбрать; «анти- Громовый список «в основном он собирает плохие отзывы о отелях, и напоминает всем не иметь смелости« пробным и ошибкам »и« попробовать свою удачу ».
Список посадок
# 廉价酒店
df_pos_cheap = df_in_ana[(df_in_ana['HotelLabel']=='廉价') \
& (df_in_ana['HotelCommentValue']> 4.6) \
& (df_in_ana['HotelCommentAmount']> 500)].sort_values(by=['HotelPrice'], ascending=False)
df_pos_cheap
вывод:
# 经济型酒店
df_pos_economy = df_in_ana[(df_in_ana['HotelLabel']=='经济') \
& (df_in_ana['HotelCommentValue']> 4.6) \
& (df_in_ana['HotelCommentAmount']> 2000)].sort_values(by=['HotelPrice'])
df_pos_economy
вывод:
# 舒适型酒店
df_pos_comfortable = df_in_ana[(df_in_ana['HotelLabel']=='舒适') \
& (df_in_ana['HotelCommentValue']> 4.6) \
& (df_in_ana['HotelCommentAmount']> 1000)].sort_values(by=['HotelPrice'])
df_pos_comfortable
вывод:
# 高端酒店
df_pos_hs = df_in_ana[(df_in_ana['HotelLabel']=='高端') \
& (df_in_ana['HotelCommentValue']> 4.6) \
& (df_in_ana['HotelCommentAmount']> 1000)].sort_values(by=['HotelPrice'])
df_pos_hs
вывод:
# 奢华酒店
df_pos_luxury = df_in_ana[(df_in_ana['HotelLabel']=='奢华') \
& (df_in_ana['HotelCommentValue']> 4.6) \
& (df_in_ana['HotelCommentAmount']> 500)].sort_values(by=['HotelPrice'])
df_pos_luxury
вывод:
Список минных полей
df_neg = df_in_ana[(df_in_ana['HotelCommentValue'] < 3.0) \
& (df_in_ana['HotelCommentAmount'] > 50)].sort_values(by=['HotelPrice'], ascending=False)
df_neg
вывод:
Наука об именах отелей
Для более экстремальных типов отелей, таких как очень дорогие отели высокого класса, они обычно следуют деловому и элегантному стилю, а название звучит «дорого»; в то время как более дешевые отели полагаются на цену для привлечения трафика, ориентируясь на студентов или людей с слабая экономическая основа, название то маленькое и свежее, то простое и грубое, а звучит "рентабельно". Проверим через облако слов, подходит ли эта теория для отелей Даляня.
wget -nc "http://labfile.oss.aliyuncs.com/courses/1176/fonts.zip"
unzip -o fonts.zip
from wordcloud import WordCloud
def get_word_map(hotel_name_list):
word_dict ={}
for hotel_name in tqdm_notebook(hotel_name_list):
hotel_name = hotel_name.replace('(', '')
hotel_name = hotel_name.replace(')', '')
word_list = list(jieba.cut(hotel_name, cut_all=False))
for word in word_list:
if word == '大连' or len(word) < 2:
continue
if word not in word_dict:
word_dict[word] = 0
word_dict[word] += 1
font_path = 'fonts/SourceHanSerifK-Light.otf'
wc = WordCloud(font_path=font_path, background_color='white', max_words=1000,
max_font_size=120, random_state=42, width=800, height=600, margin=2)
wc.generate_from_frequencies(word_dict)
return wc
Чтобы обеспечить достаточное количество данных для рисования облаков слов, данные не отбираются в соответствии с исходным стандартом классификации отелей, а отели с ценами ниже 150 и отели с ценами выше 500 выбираются как два относительно крайних типа. Посмотрите на них. Есть ли типичная разница в именовании.
part1 = df_in_ana[df_in_ana['HotelPrice'] <= 150]['HotelName'].values
part2 = df_in_ana[df_in_ana['HotelPrice'] > 500]['HotelName'].values
fig, axes = plt.subplots(1, 2, figsize=(15, 8))
axes[0].set_title('价格较低酒店的名字词云')
axes[0].imshow(get_word_map(part1), interpolation='bilinear')
axes[1].set_title('价格较高酒店的名字词云')
axes[1].imshow(get_word_map(part2), interpolation='bilinear')
вывод:
<matplotlib.image.AxesImage at 0x7f73515c1908>
Судя по результатам, по-прежнему существуют очевидные различия в облаках существительных магазинов двух типов отелей. Отели с низкими ценами имеют высокую частотность в названии «гостевой дом», «тематический», «молодежный», «экспресс-отель», «гостиница», «гостиница», что соответствует нашему позиционированию и познанию этого типа ; Гостиницы высокого класса, названия которых содержат «Синхай», «Сивью», «Горячий источник» и «Плаза», встречаются чаще. Поскольку известной достопримечательностью Даляня является площадь Синхай в районе end hotels) , мне очень нравится отражать в названии слово "Синхай". Помимо выделения географического положения, кажется, что это слово может еще и придать отелю какой-то стиль. Кроме того, дорогие отели, похоже, не любят называть себя «отель xx», предпочитая называться «гостиница» или «апартаменты с обслуживанием». Сумасшествие в том, что слово «квартира» нравится и более дешевым, и более дорогим отелям. Похоже, это тенденция современного развития гостиничной индустрии.
увидеть знаменитый отель
Как символ людей или вещей, очень важно вызвать первое впечатление, что мы только что проанализировали характеристики экстремального типа отеля на имя. В определенной степени вы можете определить, есть ли отель с точки зрения суждения Определенный сорт, «три года, чтобы увидеть на всю жизнь» оценочные характеристики, в сочетании с этими известными результатами, вероятно, понимают, если эти маленькие белые отели имеют маржу, или достойны ли мы маленьких мышей, возьмите «дорогу». Тем не менее, это еще одна проблема, и недавно открытый отель будет иметь существенное значение в прогнозном отеле в прогнозе прогнозирования отеля. Поэтому здесь мы просто используем изученные методы, сделать интересный эксперимент, результат не будет точным , но процесс очень интересен :)
df_in_ana['HotelPrice'].median()
вывод:
156.0
С помощью предыдущего анализа облака слов и средней цены отелей, которые были оценены, мы установили в качестве порога для деления цену 150. Отели с ценой ниже 150 юаней за ночь отмечены как 1, а отели с ценой выше этой цены помечаются как 0, такой метод деления делает объем данных двух частей в основном сбалансированным, а также в определенной степени отражает разницу в названиях отелей.
df_in_ana['PriceLabel'] = df_in_ana['HotelPrice'].apply(lambda x:1 if x <= 150 else 0)
df_new_hotel['PriceLabel'] = df_new_hotel['HotelPrice'].apply(lambda x:1 if x <= 150 else 0)
# 设定分词方式
def word_cut(x):
x = x.replace('(', '') # 去掉名称中出现的()
x = x.replace(')', '')
return jieba.lcut(x)
#设置训练集和测试集
x_train = df_in_ana['HotelName'].apply(word_cut).values
y_train = df_in_ana['PriceLabel'].values
x_test = df_new_hotel['HotelName'].apply(word_cut).values
y_test = df_new_hotel['PriceLabel'].values
Обучающий набор содержит 1669 единиц информации, 790 единиц данных отмечены цифрой 1. Тестовая выборка содержит 550 единиц информации и 195 единиц данных отмечены цифрой 1.
# 通过Word2Vec方法建立词向量浅层神经网络模型,并对分词之后的酒店名称进行词向量的求和计算
from gensim.models import Word2Vec
import warnings
warnings.filterwarnings('ignore')
w2v_model = Word2Vec(size=200, min_count=10)
w2v_model.build_vocab(x_train)
w2v_model.train(x_train, total_examples=w2v_model.corpus_count, epochs=5)
def sum_vec(text):
vec = np.zeros(200).reshape((1, 200))
for word in text:
try:
vec += w2v_model[word].reshape((1, 200))
except KeyError:
continue
return vec
train_vec = np.concatenate([sum_vec(text) for text in tqdm_notebook(x_train)])
# 构建神经网络分类器模型,并使用training data对模型进行训练
from sklearn.externals import joblib
from sklearn.neural_network import MLPClassifier
from IPython import display
model = MLPClassifier(hidden_layer_sizes=(100, 50, 20), learning_rate='adaptive')
model.fit(train_vec, y_train)
# 绘制损失变化曲线,监控损失函数的变化过程
display.clear_output(wait=True)
plt.plot(model.loss_curve_)
вывод:
[<matplotlib.lines.Line2D at 0x7f73400b8198>]
ps: Поскольку объем данных невелик, а информация, содержащаяся в самих данных, относительно недостаточна, результаты обучения здесь не очень хорошие.
# 之后对测试集进行词向量求和
test_vec = np.concatenate([sum_vec(text) for text in tqdm_notebook(x_test)])
# 用训练好的模型进行预测, 将结果倒入测试用表中
y_pred = model.predict(test_vec)
df_new_hotel['PredLabel'] = pd.Series(y_pred)
# 建模预测的结果
from sklearn.metrics import accuracy_score
accuracy_score(y_pred, y_test)
вывод:
0.6163636363636363
На самом деле точность прогноза составляет всего около 60%, что является довольно неудовлетворительным результатом.Расширяем данные, чтобы выяснить, в чем основная причина.
new_hotel_questionable = df_new_hotel[(df_new_hotel['PriceLabel'] ==0) & (df_new_hotel['PredLabel']==1)]
new_hotel_questionable = new_hotel_questionable.sort_values(by='HotelPrice', ascending=False)
new_hotel_questionable
вывод:
Результаты с явными отличиями показывают, что многие вновь открываемые отели, особенно с высокими ценами, относятся к курортным отелям типа «вилла», этот тип не является очевидным в оцениваемом наборе данных. будет сильно увеличен.
plt.figure(figsize=(15, 7))
plt.imshow(get_word_map(new_hotel_questionable['HotelName'].values), interpolation='bilinear')
вывод:
<matplotlib.image.AxesImage at 0x7f7333b06d68>
Нарисуйте облако слов, чтобы увидеть недавно открытые отели.По сравнению с набором данных, используемым для моделирования, названия недавно открытых отелей добавили некоторые слова, которых раньше не было, такие как «хаодянь», «филиал», «вилла». и т. д., что приводит к падению точности предсказания.
Встречайте новый отель
Помимо знания названий, мы также можем узнать о географическом распределении этих вновь открытых отелей и изменении средней цены.
new_hotel_distri = df_new_hotel.groupby('HotelLocation')['HotelName'].count().sort_values(ascending=False)[:7]
plt.pie(new_hotel_distri.values, labels=new_hotel_distri.index, autopct='%.1f%%', shadow=True)
Вывод;
([<matplotlib.patches.Wedge at 0x7f7333ae1240>,
<matplotlib.patches.Wedge at 0x7f7333ae1c50>,
<matplotlib.patches.Wedge at 0x7f7333ae9630>,
<matplotlib.patches.Wedge at 0x7f7333ae9fd0>,
<matplotlib.patches.Wedge at 0x7f7333af29b0>,
<matplotlib.patches.Wedge at 0x7f7333afd390>,
<matplotlib.patches.Wedge at 0x7f7333afdd30>],
[Text(0.4952241217848982, 0.9822184427113841, '金州区'),
Text(-1.0502523061308453, 0.32706282801144143, '甘井子区'),
Text(-0.7189197652449374, -0.8325589295300148, '沙河口区'),
Text(0.10878704263418966, -1.0946074087794706, '旅顺口区'),
Text(0.6457239222346646, -0.8905282793117135, '中山区'),
Text(0.9702662169179598, -0.5182503915171803, '西岗区'),
Text(1.0890040760087287, -0.1551454879665377, '普兰店区')],
[Text(0.2701222482463081, 0.5357555142062095, '35.1%'),
Text(-0.5728648942531882, 0.17839790618805892, '20.1%'),
Text(-0.39213805376996586, -0.4541230524709171, '16.8%'),
Text(0.059338386891376174, -0.597058586606984, '9.0%'),
Text(0.35221304849163515, -0.4857426978063891, '7.8%'),
Text(0.5292361183188871, -0.2826820317366438, '6.6%'),
Text(0.5940022232774883, -0.08462481161811146, '4.5%')])
Из круговой диаграммы видно, что более 30% новых отелей выбирают район Цзиньчжоу, а район Шахэкоу — это место, где собираются старые отели, и только 16% практикующих выбирают здесь новый магазин.
df_new_hotel['HotelLabel'] = df_new_hotel["HotelPrice"].apply(lambda x: '奢华' if x > 1000 \
else ('高端' if x > 500 \
else ('舒适' if x > 300 \
else('经济' if x > 100 \
else '廉价'))))
new_hotel_label = df_new_hotel.groupby('HotelLabel')['HotelName'].count()
plt.pie(new_hotel_label.values, labels=new_hotel_label.index, autopct='%.1f%%', explode=[0, 0.1, 0.1, 0.1, 0.1], shadow=True)
вывод:
([<matplotlib.patches.Wedge at 0x7f7333abbdd8>,
<matplotlib.patches.Wedge at 0x7f7333a44828>,
<matplotlib.patches.Wedge at 0x7f7333a4d208>,
<matplotlib.patches.Wedge at 0x7f7333a4dba8>,
<matplotlib.patches.Wedge at 0x7f7333a59588>],
[Text(1.0859612910752763, 0.17518011955161772, '奢华'),
Text(0.6137971106588083, 1.0311416522218948, '廉价'),
Text(-1.1999216970224413, 0.01370842860376746, '经济'),
Text(0.46080283077562195, -1.1079985339111122, '舒适'),
Text(1.1494416996723409, -0.3446502271207151, '高端')],
[Text(0.5923425224046961, 0.09555279248270056, '5.1%'),
Text(0.3580483145509714, 0.6014992971294385, '22.7%'),
Text(-0.6999543232630907, 0.007996583352197684, '44.0%'),
Text(0.26880165128577943, -0.6463324781148153, '18.9%'),
Text(0.6705076581421987, -0.20104596582041712, '9.3%')])
В дополнение к доступным недорогим отелям, подходящим для большинства путешественников, коэффициент инвестиций в роскошные отели высокого класса также значительно увеличился во вновь открытых отелях. Специалисты-практики вложили средства в строительство высококлассных отелей, в основном в виде курортных отелей типа вилл, что отражает стремление людей к качеству и более комфортным путешествиям.
С точки зрения цены, есть и более интересные результаты:
df2 = df_new_hotel.groupby('HotelLabel')['HotelPrice'].mean().reset_index()
df1=df_in_ana.groupby('HotelLabel')['HotelPrice'].mean().reset_index()
price_change_percent = (df2['HotelPrice'] - df1['HotelPrice'])/df1['HotelPrice'] * 100
plt.title('新开各档次酒店均价变化')
plt.bar(df1['HotelLabel'] ,price_change_percent, width = 0.35)
plt.ylim(-18, 18)
for x, y in enumerate(price_change_percent):
if y < 0:
plt.text(x, y, '{:.1f}%'.format(y), ha='center', fontsize=12, va='top')
else:
plt.text(x, y, '{:.1f}%'.format(y), ha='center', fontsize=12, va='bottom')
По сравнению со старыми отелями, которые были оценены, изменения средней цены вновь открытых отелей выглядят следующим образом:
- Средние цены на роскошные и бюджетные отели упали
- В отелях среднего размера, в том числе бюджетных, комфортных и элитных, средняя цена выросла.
Оба крайних уровня отелей привлекают внимание, «снижая свою стоимость», чтобы увеличить заполняемость и добиться существенного развития, в то время как промежуточные отели получают капитал для повышения цен, изменяя свою бизнес-философию и соответствуя тенденциям времени. эффект по-прежнему зависит от узнаваемости пассажиров.
Суммировать
В этом эксперименте в качестве данных для анализа используются отели в Даляне, извлекается информация, включая цену, региональное распределение и т. д., и предоставляется «список посадки травы» и «список защиты от поступи» отелей, которые были оценены (у мамы больше нет беспокоиться об этом Друг приехал в Далянь, чтобы побеспокоиться о бронировании отелей!), провел анализ облака слов названий магазинов отелей, изучил корреляцию между названиями магазинов и оценками отелей и создал классификационную модель, чтобы предсказать, будет ли название магазина нового открытый, непроверенный отель связан с его ценообразованием.В то же время были раскопаны региональное распределение и распределение по классам вновь открытых отелей, а также сравнивались средние изменения цен отелей и существующих оценочных отелей, а также некоторые идеи о развитии туристической индустрии Даляня были получены со стороны. Из-за небольшого количества данных и сильной корреляции между методом именования названия отеля и региона, средой эпохи и т. д. эффект от моделирования и прогнозирования не очень хорош, но после изучения этого содержания и его применения в разных аспектах для углубления понимания Его узнавание тоже интересная вещь.
Знайте синхронизацию столбцов:zhuanlan.zhihu.com/p/85909205