某无人机航拍服务平台运营情况分析

数据背景

数据来源:某无人机航拍服务平台的订单数据

这份数据是我通过 scrapy 框架爬取该平台网站公开的订单数据得到的。数据仅以分析之用,故在下文中,特意隐藏该平台网站的信息。

分析目的:

  1. 分析该平台的运营情况
  2. 总结如果开展同类型项目可能会出现的问题

爬虫思路:

  1. 根据网站链接 http://www.abc.cn/page/job_xxx.html 中「xxx」,从 xxx=55 作递增处理;
  2. 爬取订单详情页里所有与订单有关的属性,并以 csv 的文件格式保存到本地。

最后共抓取到 138 条带有效数据的链接,在该网站中代表着有 138 个公开的订单。

数据概况

import pandas as pd
import matplotlib
import matplotlib.pyplot as plt

%matplotlib inline

pd.options.display.max_rows = 250

df = pd.read_csv('../scrapy_projects/abc/abc.csv')
df = df[['标题', '任务日期', '任务天数', '地点', '预算', '最终报价', '抢单飞手', '已选飞手', '服务评分', '电池块数', '拍摄内容', '人员配置', '拍摄机型', '飞手飞龄', '飞行环境', '拍摄用途', '任务说明']]
print(df.duplicated().value_counts()) # duplicated() 为 False 的有 138,代表 df 的每条数据都是非重复的。
df

结论

df 是一个 138x18 的不重复的数据集,也代表有着 138 个有效订单数据;
结合网站时间跨度从 2016 年 12 月 24 日,到最新更新的任务订单的日期 2017 年 10 月 23 日,相隔 303 天,跟订单数相除,平均 2.19 天一个订单。

任务日期分布(按月)

df['任务日期'] = df['任务日期'].str.split(" ", expand=True).get(0)
df['任务日期'] = df['任务日期'].str.replace("年|月", "-")
df['任务日期'] = df['任务日期'].apply(lambda x: x[0:7])

print("每月的订单分布如下:\n\n", df.groupby(by='任务日期').size())

每月的订单分布如下:

任务日期
2016-12 10
2017-01 14
2017-02 7
2017-03 16
2017-04 21
2017-05 22
2017-06 25
2017-07 14
2017-08 3
2017-09 4
2017-10 2
dtype: int64

from matplotlib.font_manager import FontProperties
font_zh = FontProperties(fname='/Library/Fonts/Microsoft/SimHei.ttf')

# for style in plt.style.available:
plt.style.use('fivethirtyeight')
ax = df.groupby(by='任务日期').size().plot(kind='line', ylim=(0,30), title="订单日期分布(按月)")
ax.title.set_fontproperties(font_zh)
ax.set_xlabel("月份").set_fontproperties(font_zh)
ax.set_ylabel("订单总数").set_fontproperties(font_zh)

结论

由上面的折线图,2 月份和 8 月份的订单数量有明显的回落,2 月份是农历新年假期,数据回落可以理解。但在 8 月份,订单数量骤降至只有 3 个订单,有几个可能性,一是用户需求量突然下降,二是关闭了用户自行发布需求的入口(改成现在这种由平台的运营进行选择性发布)。不过我不清楚他们之前发布需求的方式,所以现在还只是推测。如果第二种可能性是真的,那很可能他们在 8 月份的时候便开始内部调整了。

省份城市分布

df['省份'] = df['地点'].str.split(" ", expand=True).get(0)
df['城市'] = df['地点'].str.split(" ", expand=True).get(1)

# 对缺少「省」「市」的字段进行填补
df.loc[df['省份'].isin(['广东', '湖南', '山东', '黑龙江']), '省份'] += '省'
df.loc[df['省份'].isin(['北京', '上海']), '省份'] += '市'

plt.rcParams['font.sans-serif']=['SimHei']
plt.style.use('ggplot')
font_zh = FontProperties(fname='/Library/Fonts/Microsoft/SimHei.ttf')
ax = df['省份'].value_counts()[:10].plot(kind='pie', figsize=(6,6))
ax.title.set_fontproperties(font_zh)
# ax.set_fontproperties(font_zh)
ax.set_title('订单省份分布', fontsize=20)
df.loc[df['城市'].str.len()==2, '城市'] += '市'
df.loc[df['城市']=='哈尔滨', '城市'] += '市'

# 对「城市」列上空白字符的值,可以根据「地点」列的值进行提取
df.loc[df['城市']=='', '城市'] = df.loc[df['城市']=="", '地点'].str.split(" ", expand=True).get(3)

ax = df['城市'].value_counts()[:10].plot(kind='bar', title='订单城市分布')
ax.title.set_fontproperties(font_zh)

结论

结合「订单省份分布」及「订单城市分布」的图表,过半数的订单来自广东,同时订单量前十的城市中,有 4 个来自广东的,也符合「发迹于珠三角」的战略路线。

交易数据

df.loc[:, '预算'] = df['预算'].str.replace("¥", "").astype('float32')
df.loc[:, '最终报价'] = df['最终报价'].str.replace("¥", "").astype('float32')
df['差价'] = df['预算'] - df['最终报价']

print("订单成交金额:",df['最终报价'].sum()) 

订单成交金额: 404459.0

bins = [0, 1000, 2000, 3000, 4000, 5000, 10000, 20000]
level = ['1000以下', '1000-2000', '2000-3000', '3000-4000', '4000-5000', '5000-10000', '10000以上']
df['level'] = pd.cut(df['预算'], bins=bins, labels=level)

df_price_pct = pd.DataFrame(df['level'].value_counts())
df_price_pct['pct'] = ((df_price_pct['level']/df_price_pct['level'].sum())*100).round(2)

df_price_pct = df_price_pct.sort_index(axis=0, level=['1000以下', '1000-2000', '2000-3000', '3000-4000', '4000-5000', '5000-10000', '10000以上'])
df_price_pct
plt.style.use('bmh')
df_price_pct['level'].plot(kind='pie', title='订单预算价格', figsize=(6,6))

结论

  1. 订单的预算,即需求方的报价,介于 500 至 19500,平均预算为 3119.93 元,平均接单价(最后报价)2930.86 元,平均下来,比预算节省 189.07 元。
  2. 将最终报价进行汇总处理,可得知所有订单的成交金额为: 404459 元,假设网站抽佣高达 10%,网站将受益 40445.9 元。考虑到统计时间段横跨 10 个月,所以网站靠订单抽佣的方式盈利金额其实并不高。
  3. 由上面的饼图可得知,订单预算金额在 2000 元以下的已经超过一半了。再扩大范围,预算金额在 4000 以下的则高达 78.26%。可见客单价较低会是比较普遍的情况。

抢单数据

print("平均每个订单的抢单数:",df['抢单飞手'].mean().round(2))

平均每个订单的抢单数: 13.22

df['抢单飞手'].describe()

count 138.000000
mean 13.217391
std 11.230004
min 1.000000
25% 6.000000
50% 11.000000
75% 15.750000
max 75.000000
Name: 抢单飞手, dtype: float64

print("中标团队数量:", len(df['已选飞手'].unique()))
df_team = df['已选飞手'].value_counts().reset_index()
df_team[df_team['已选飞手']>1]
print("中标多于 1 单的团队数量:", len(df_team[df_team['已选飞手']>1]))
print("中标团队平均服务评分:", df['服务评分'].mean().round(2))

中标团队数量: 97
中标多于 1 单的团队数量: 19
中标团队平均服务评分: 87.64

结论

  1. 从「抢单飞手」一列的平均数据得知,平均每个订单的抢单数为 13.22,对需求方是个正反馈不错的数值。
  2. 这 138 个订单,实际上只有 97 个团队成果「中标」过,但「中标」数量多于 1 的团队只有 19 个,那就说明还有 78 个团队是只「中标」过一次。还没包括没有出现在这份数据上的,没有成功「中标」过的团队。所以该网站对服务方(飞手团队)的正反馈十分匮乏。

任务说明

df['任务说明'] = df['任务说明'].str.strip()
df['任务说明'] = df['任务说明'].str.replace("\r|\n|\t", "")

import re

# pat = r'【(\s+)([\u4e00-\u9fa5]+)(\s+)】| 【([\u4e00-\u9fa5]+)】'
pat = r'【(.*?)+】| [(.*?)+]'

df.loc[:, '标题'] = df['标题'].str.replace(pat , "")

text = "".join(df['标题'].values.tolist())

import jieba
segments = []

wordlist = jieba.cut(text, cut_all=True)
for seg in wordlist:
    if len(seg)>1:
        segments.append(seg)
        
segmentDF = pd.DataFrame({'segment': segments})

segstat = segmentDF.groupby('segment').size().reset_index()

segstat = segstat.rename(columns = {0:'counts'})
segstat = segstat.sort_values(by='counts', ascending=False)
segstat.head(10)

结论

单从订单的标题里分析拍摄需求,除「航拍」「拍摄」外,「建筑」这个词出现次数最高,证明建筑航拍在航拍需求量里是最高的,但鉴于数据量较小,此处的结论应辅以其他字段的分析进行验证。

小结

月订单数据在 8 月份开始突然骤降,一是可能跟团队内部调整有关,可以研究网站背后运作的公司的其他产品的动态辅以论证。二是可能这种商业模式依然不明朗,虽然平均订单单价 2930.86 元,但订单价在 2000 元以下的依然占超过一半,并且作为网站核心数据的订单量并不高,说明网站还处于低频低客单价的状态。从订单量看,需要结合他们团队的推广手段,来评估核心数据不高是因为推广力度不足,还是因为行业需求量偏低导致的。至于客单价的问题,可以考虑加入附加值更高的航拍服务(如电力航拍、测绘航拍)来提高订单价格。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容