开源包含大量有用的信息。正确收集,存储和分析它会帮助您找到最佳的商机。
一群年轻的企业家正在考虑选择在莫斯科开设自己的照相馆。他们需要找出:
- 照相馆市场的总体状态是:增长,稳定还是下降?
- 市场的季节性是什么?
- 他们能赚多少钱?
- 在哪里开厅更好?
- 在项目上投资多少?
- 市场竞争有多激烈?
本文提供的简单解析器,数据库和分析功能帮助他们回答了这些问题以及许多其他问题。

在第一篇文章中,我们检查了ugoloc.ru摄影工作室聚合器站点的解析,并上载了有关摄影工作室,大厅和预订房间数据的常规信息。
在第二篇文章中,我们考虑了将接收到的数据写入数据库并从数据库中读取数据,并且还根据数据库中的信息进行了解析操作。
在本文中,我们将对收集的数据进行简单分析。
您可以在github中的页面上找到一个完成的项目,其中包含数据库表的示例,中间表,图形以及其他注释。
我们将使用什么分析方向
- 确定开设照相馆的动力;
- 根据开业月份计算照相馆的盈利能力;
- 确定业务的季节性;
- 计算每个大厅的平均收入以及照相馆的最佳大厅数量;
- 调查盈利能力对照相馆位置的依赖性;
- 找出竞争工作室的门厅数量;
- 计算其他参数对收入的影响,例如天花板高度,大厅面积,预订价格;
- 考虑其他可能的分析方向。
从数据库中卸载数据
要卸载,请执行以下操作:
与基地建立联系
directory = './/'
conn = sqlite3.connect(directory + 'photostudios_moscow1.sqlite')
cur = conn.cursor()
通过工作室上传数据
studios = db_to_studios(conn)
studios
通过大厅
halls = db_to_halls(conn)
halls
预订时
booking = db_to_booking(conn)
booking
我们将开放日期留给工作室,并从大厅列表中排除更衣室
studios = studios[[x.year > 0 for x in studios['established_date']]]
halls = halls[halls['is_hall'] == 1]
各年开设照相馆的动态
让我们构建不同年份的照相馆的频率直方图。为此,我们计算周期数(年)并构建直方图。
绘制直方图
num_bins = np.max(studios['established_date']).year - np.min(studios['established_date']).year + 1
plt.hist([x.year for x in studios['established_date']], num_bins)
plt.show()

在直方图上,我们看到新的照相馆每年都有明显的增长。这种模式告诉我们的不是市场实际每年增长2倍,而是告诉聚合器本身的增长。
这个事实告诉我们有必要将照相馆分为两类:在开设照相馆时在聚集器上注册(“新”)和在很长时间后(“旧”)进行注册。这将是我们的下一个任务。
识别新的照相馆
哪个照相馆可以算是新的?刚刚被提升并赢得客户的那一个。从开业之日起对预订日历的视觉分析表明,工作室在几个月内获得了稳定的客户流。
事实证明,为了将新的照相馆与旧的照相馆(没有立即加入聚合商)区分开来,您需要比较从“开业”之日起的前半个月的收入与一年后的同期。新的工作室的收入将在一年中大幅增长,而旧的工作室应保持在大致相同的水平。
首先,让我们合并所有表格,只保留预订时间
# merge all tables
data = (booking
.merge(halls, left_on = 'hall_id', right_on = 'hall_id', how = 'inner')
.merge(studios, left_on ='studio_id', right_on = 'studio_id', how = 'inner')
)
data = data[data['is_working_hour'] == 1]
data['date'] = pd.to_datetime(data['date'])
data
然后我们计算摄影工作室上半年的收入
first_month = (data[data['date'] <= [x + datetime.timedelta(days = 15) for x in data['established_date']]]
.loc[:, ['studio_id', 'price', 'duration']]
)
first_month['income'] = first_month['price'] * first_month['duration']
first_month = first_month.groupby('studio_id').agg(np.sum)
first_month
一年后的半个月内
month_after_year = (data[(data['date'] >= [x + datetime.timedelta(days = 365) for x in data['established_date']])
& (data['date'] <= [x + datetime.timedelta(days = 365 + 15) for x in data['established_date']])
]
.loc[:, ['studio_id', 'price', 'duration']]
)
month_after_year['income'] = month_after_year['price'] * month_after_year['duration']
month_after_year = month_after_year.groupby('studio_id').agg(np.sum)
month_after_year
我们将在开幕时将一年中的指标除以相似的指标
month_diff = (month_after_year.merge(first_month, left_on = 'studio_id', right_on = 'studio_id', how = 'inner')
.merge(halls.groupby('studio_id').count()
, left_on = 'studio_id', right_on = 'studio_id', how = 'inner')
)[['income_x', 'income_y', 'is_hall']]
month_diff['income_diff'] = (month_diff['income_x'] / month_diff['income_y']) ** (1 / month_diff['is_hall'])
month_diff.sort_values('income_diff')
一年后收到收入的增长率。不同工作室的指标从0.75到2.1分布不大。这表明工作室可以在开放后,一周,一个月,一年等之后立即连接到聚合器。
为了确定新的照相馆,我们以收入增长率的条件值为中间值:1.18。那些。如果照相馆这一年的收入增长了18%以上,那么我们将认为该照相馆是新的。有22个这样的工作室。
在哪个月份开设照相馆更好?
我们计算了开放后不久在聚合器上注册的照相馆。因此,根据我们的数据,这些工作室的实际开放日和开放日将被视为相同。
为了进行计算,我们将使用新的照相馆,将收入作为所有预订小时的预订价格的总和,按房间分组(考虑其开放月份),并按开放月份计算平均年收入。
根据营业月份计算当年的平均收入
new = studios['is_new'].reset_index().merge(data, left_on = 'studio_id', right_on = 'studio_id', how = 'inner')
new = new[new['is_new'] == 1]
new = new[new['date'] <= [x + datetime.timedelta(days = 365) for x in new['established_date']]]
new['est_year'] = [x.year for x in new['established_date']]
new['est_month'] = [x.month for x in new['established_date']]
new['income'] = new['price'] * new['is_booked']
mean_income = (new
.groupby(['hall_id', 'est_year', 'est_month']).agg('sum')['income'].reset_index()
.groupby('est_month').agg('mean')['income']
plt.bar(range(1, 12), mean_income)
plt.show()
)

直方图显示出明确的关系:
- 开照相馆的最佳月份是年初(1月至4月)
- 9月至10月也是开放的好月份;
- 最糟糕的月份是五月至六月。
将该数据与市场的季节性进行比较将会很有趣。
确定业务季节性
季节性-订单数量根据期间而变化。让我们分析一下年度季节性。
为了进行计算,让我们以开放至2018年的工作室为例,看看他们对2018-2020年的预订情况。工作室收入定义为预订时间的价格总和。接下来,我们计算所选期间每个月所有工作室的总收入。
季节性计算
season = data[(data['open_date'] < '2018-01-01') & (data['date'] > '2018-01-01')]
season['income'] = season['price'] * season['duration']
season['year'] = [x.year for x in season['date']]
season['month'] = [x.month for x in season['date']]
incomes = season.groupby(['year', 'month']).agg(np.sum)['income']
incomes = incomes[incomes.index]
绘图
incomes = incomes[: -3]
plt.figure(figsize = (20, 10))
plt.plot([str(x[0]) + '-' + str(x[1]) for x in incomes.index], incomes)
plt.xticks(rotation=60)
plt.grid()
plt.show()

该图显示了明显明显的季节性:10月至4月的订单数量最多,5月至9月的订单数量急剧下降。季节性符合业务逻辑。夏季,人们在公园的街道上拍照。在冬季,这是不可能的,您必须在室内安排拍照。季节性与此有关:夏天有很少的客户,冬天有很多客户。订单高峰在12月。这可能是由于要在照片中捕捉的新年和假期的感觉。
打开的最佳月份是季节性的。最好在旺季开始之前的一个月或一个月内开设一个工作室。在5月至8月期间,不应开放工作室,因为 进入淡季。
霍尔盈利能力计算
一个公司开业的一个重要指标是一个房间的收入。
为了进行计算,我们将每个月的收入分组,将2020年排除为由于隔离导致的异常年份,然后使用.describe()函数查看收入选择。
1个展厅的盈利能力的计算
hall_income = season.groupby(['studio_id','hall_id', 'year', 'month']).agg(sum)['income'].reset_index()
hall_income = hall_income[hall_income['year'] < 2020]
hall_income['income'].describe()
count 648.000000
mean 184299.691358
std 114304.925311
min 0.000000
25% 95575.000000
50% 170350.000000
75% 256575.000000
max 617400.000000
Name: income, dtype: float64
每个礼堂收到的卢布收入。
从百分位数的数据可以看出,一半大厅的收入在95,000卢布范围内。高达256,000卢布。中间价为170,000卢布。
从平均值和标准偏差的数据中,我们可以看到,按照1 sigma规则,三分之二的礼堂会带来70,000卢布。高达300,000卢布 从中间的184,000卢布。
事实证明,平均会馆可以指望170,000-180,000卢布的收入。±80,000卢布
如此之大的扩散是由其他因素的影响所解释的,我们将在未来尝试确定这些因素。
照相馆有多少个大厅可开放?
为了进行计算,我们将计算每个大厅的平均每月获利能力,计算每个照相馆的一个大厅的平均获利能力,计算一个照相馆中的大厅数,然后将数据按大厅数进行分组,从而计算每个大厅的平均获利能力。
根据照相馆中大厅的数量计算大厅的盈利能力
(hall_income
.groupby(['studio_id', 'hall_id']).agg('mean').reset_index()
.groupby('studio_id').agg(['count', 'mean'])['income']
.groupby('count').agg('mean')
)
mean
count
1 134847.916667
2 146531.944444
3 300231.944444
4 222202.604167
根据照相馆的厅数,平均每月获利1个厅。让我们注意规律性:大厅越多,盈利能力就越强。拥有3个房间的工作室的最大盈利能力。
这种现象是由于以下事实:客户使用照相馆的一个房间,可以看到另一个房间并立即预订。因此,照相馆的一个房间“促进”了其他房间。
收入对大厅位置的依赖
展馆的位置会极大地影响获利能力:在中心,展馆将更容易被顾客使用,这意味着收入会更高。让我们检查一下假设。
为了进行计算,我们将计算大厅的平均月收入,根据“地铁”将其分组并按升序进行排序。
霍尔获利能力取决于距中心的距离
data['income'] = data['price'] * data['duration']
data['year'] = [x.year for x in data['date']]
data['month'] = [x.month for x in data['date']]
(data
.groupby(['hall_id', 'metro', 'year', 'month']).agg('sum')['income'].reset_index()
.groupby(['hall_id', 'metro']).agg('mean')['income'].reset_index()
.groupby('metro').agg('mean')['income'].sort_values()
)[-59:]
我们得到以下数据:
metro
5016.666667
10485.264378
11925.000000
/ 18116.666667
, 19000.000000
21963.333333
30667.051729
31031.250000
37787.500000
/ 39357.142857
44354.375000
45888.888889
46566.666667
48541.666667
. , 49086.503623
55340.659341
, , 55944.444444
. / . 59771.111111
66780.000000
66847.058824
67692.545788
. 70090.341880
. 70337.676411
, 72974.494949
79987.083333
88800.000000
95550.000000
98326.086957
99216.279070
99925.000000
102835.622784
. , . , . \ 104956.521739
111050.684459
111090.000000
111909.090909
116426.892180
117450.000000
118382.236364
122626.500000
, 123258.518519
- 124557.894737
, 126300.000000
129222.916667
135281.642512
, 138945.454545
152246.883469
, 168484.500000
. 169079.381010
. 172618.798439
173777.659900
178254.545455
181041.818182
187283.444198
189140.857975
250975.000000
, , 252685.714286
, 264164.473684
- 277162.791991
556621.746032
Name: income, dtype: float64
请注意,我保留了地铁数据。为了获得更准确的图片,需要将它们转换为通用格式,例如,“ Baumanskaya,Elektrozavodskaya”,“ Elektrozavodskaya地铁站”和“ Electrozavodskaya”应以一种名称书写。
从数据中我们可以看到,在房地产价格昂贵的地区,例如Maryina Roshcha,Novye Cheryomushki,Krylatskoye,每个大厅的利润率更高。
竞争工作室有多少个大厅
市场上的工作室有几个大厅?为了回答这个问题,让我们将带有大厅的桌子附加到工作室桌子上,按工作室分组,计算大厅的数量,并建立频率直方图。
工作室中大厅数量的计算
hall_num = studios.merge(halls, left_on='studio_id', right_on='studio_id').groupby('studio_id').agg('count')['is_hall']
plt.hist(hall_num, range(np.min(hall_num), np.max(hall_num)+1))
plt.show()
hall_num.describe()

count 105.000000
mean 2.685714
std 2.292606
min 1.000000
25% 1.000000
50% 2.000000
75% 3.000000
max 13.000000
根据获得的数据,我们看到大多数照相馆(超过75%)的影厅不超过3个。通常,在整个市场中,工作室的大厅数不超过5个。
其他参数对工作室收入的影响
天花板的高度
照片需要大量的光线,高天花板的房间中的大窗户可以提供充足的自然光线。此外,天花板越高,散布的光越均匀。因此,天花板的高度会影响照相馆的盈利能力。让我们检查一下这个假设。
让我们计算每个大厅的平均月收入,同时存储有关天花板高度的数据,然后根据天花板的高度计算平均收入并构建一个图形。
大厅收入取决于天花板高度(以米为单位)
halls_sq_ceil = (data
.groupby(['hall_id', 'ceiling', 'square', 'year', 'month']).agg('sum')['income'].reset_index()
.groupby(['hall_id', 'ceiling', 'square']).agg('mean')['income'].reset_index()
)
plt.bar(halls_sq_ceil.groupby('ceiling').agg('mean')['income'].index[:-2],
halls_sq_ceil.groupby('ceiling').agg('mean')['income'][: len(halls_sq_ceil) - 2]
)
plt.show()

在获得的数据中,我们看到长达6米的摄影棚的获利能力直接取决于天花板的高度。最佳高度为5-6米。
展厅面积
假设:大厅的面积越大,大厅带来的收入就越多。
我们检验假设。我们使用之前的计算,根据面积计算平均获利能力,并绘制图表。
大厅收入取决于其面积
square = halls_sq_ceil.groupby('square').agg('mean')['income']
plt.bar(square.index[:-3],
square.iloc[: len(square) - 3]
)
plt.show()

在图形上可以看到清晰的图案:面积越大,大厅带来的越多。
订价
假设:客户可以为几乎所有大厅支付的最佳大厅价格。客户愿意为更高的质量付出更高的代价。
为了检验假设,首先要考虑当前的价格水平。为此,让我们按房间,价格,年,月对总预订表进行分组,并汇总收入。然后,我们将按房间和预订价格分组,计算平均收入。接下来,让我们按价格分组,计算平均收入。根据设定的订价,每个工作室的平均月收入
工作室每月平均获利能力取决于房间预订价格
price = (data
.groupby(['hall_id', 'price', 'year', 'month']).agg('sum')['income'].reset_index()
.groupby(['hall_id', 'price']).agg('mean')['income'].reset_index()
.groupby('price').agg('mean')['income']
)
每小时有多少房间有特定价格的租金
plt.figure(figsize = (20, 10))
plt.hist(price.iloc[: len(price) - 5].index)
plt.show()

从频率直方图可以看出,大多数工作室将租金定在500到2000卢布之间。低于500卢布 -稀有。大厅的最高租金为3500卢布。
每月平均收入对大厅租金的依赖关系图
price = price[price > 10000]
plt.figure(figsize = (20, 10))
plt.scatter(price.index, price)
plt.show()

该图显示高达2000卢布。两者之间存在明显的直接关系:订价越高,工作室赚的越多。价格超过2000卢布。房间收入可以低也可以高。显然,超过2000卢布。客户只愿意为所提供的高质量服务付费:无论是在便利的位置,在设备上,在大面积上还是在高质量的室内装饰等。
市场分析的其他领域
设备分析
ugoloc.ru网站包含有关照相馆设备的信息:彩色背景的存在,闪光灯的品牌等。照相馆的设备也会影响盈利能力,因此,为确保分析的完整性,也应考虑此因素。
并非所有工作室都可能指示存在其他设备。因此,此因素的影响的评估可能不准确。
几个参数对收入的影响分析
这些参数不会相互隔离地影响收入。例如,空间和预订价格是联系在一起的,它们共同影响工作室的整体盈利能力。因此,更合理地考虑它们的影响。应根据客户请求的具体情况来考虑几个参数的影响。
增强数据收集
就数量而言,ugoloc.ru上的照相馆不到市场的三分之一。无法通过收入和市场细分来估计来自该聚合器站点的工作室的份额。为了获得更准确的图片,值得从AppEvent,Google日历以及可能从定制预订应用程序收集数据。
会计费用
您可能已经注意到,通常没有足够的费用来完成图片。例如,大厅的面积越大,从中获得的收入就越多。结论当然是不错的,但是随着面积的增加,租用大厅的成本也会增加。因此,在时间表上标出租金成本的增加肯定是有用的。在特定参数的最佳收支比率中,隐藏了项目的盈利能力。
维修成本还取决于面积:面积越大,维修费用就越高。
随着大厅数量的增加,每个大厅的人事费用减少了,因为 1个管理员可以同时服务1个礼堂和3个礼堂。
距地铁的距离分析
在评估工作室位置对大厅收入的影响时,一个重要的不确定因素是与地铁的距离。您将必须手动将其放下,否则熟悉Google API的人可以尝试自动执行此操作。
与竞争对手的距离
工作室通常彼此靠近。仅在Elektrozavod就有大约40个这样的假设,有一个假设是靠近其他照相馆会增加盈利能力。该地点(建筑物/商务中心)可能是客户熟悉的,并且他们可以信任它,这将对该地点的所有照相馆产生积极影响。
摄影工作室的工作量
另外,您可以调查照相馆的工作量:
- 大厅开放时间的多少是预定;
- 预订与星期几的关系如何(更糟:周末预订更多);
- 是否有未预订的日子(管理员可能无法上班);
- 什么时候最常预订(特别是在工作日看到的时间)
- 等等
淡季的照相馆状况
在没有订单的夏季,影城更常关闭。同时,一些照相馆的订单数量没有减少太多。受欢迎的淡季工作室有哪些优势?这是一个需要考虑的单独区域。
竞争对手盈利能力分析
有了有关照相馆房租成本和员工平均工资的信息,就可以评估竞争对手的财务状况。事实证明,一些工作室濒临倒闭。因此,您可以识别它们的错误并尝试避免它们。
同样,您可以探索利润丰厚的照相馆的经验,并在照相馆中加以利用。
分析阶段
上述分析是大致了解市场情况的第一步。为了进行进一步的分析,客户需要确定他想开设哪个工作室,哪个价格段,什么可能的地点,什么是租赁价格,什么设备等。
理想选择:确定多个租赁选项。然后将确定面积,天花板高度,大致的门厅数量,成本以及最接近的竞争对手。
在这种情况下,可以更实质性和准确地执行分析。
结果
在一系列文章中,我们研究了如何从开源收集数据,将其保存到数据库中并进行分析。工作的结果是对照相馆服务市场的总体了解。
可以应用以上计算:
- 在收入部分中创建业务计划。并且这将是统计确认的数据;
- 在评估项目的可行性和获利能力时,比较不同开业选项的收入和支出;
- 经营照相馆。许多照相馆闲置无单,或亏损经营。这意味着他们在做错事。上面的分析可以帮助工作室确定其病因。
我喜欢做这个项目。
我决定分享可能对您有用的经验。
这三篇文章中的信息有多有用?
分享您的意见。
您可以在我的github页面上找到完成的项目。