某無人機航拍服務平臺運營情況分析

數據背景

數據來源:某無人機航拍服務平臺的訂單數據

這份數據是我通過 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[['標題', '任務日期', '任務天數', '地點', '預算', '最終報價', '搶單飛手', '已選飛手', '服務評分', '電池塊數', '拍攝內容', '人員配置', '拍攝機型', '飛手飛齡', '飛行環(huán)境', '拍攝用途', '任務說明']]
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 個訂單,有幾個可能性,一是用戶需求量突然下降,二是關閉了用戶自行發(fā)布需求的入口(改成現在這種由平臺的運營進行選擇性發(fā)布)。不過我不清楚他們之前發(fā)布需求的方式,所以現在還只是推測。如果第二種可能性是真的,那很可能他們在 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 個來自廣東的,也符合「發(fā)跡于珠三角」的戰(zhàn)略路線。

交易數據

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 元,平均下來,比預算節(jié)省 189.07 元。
  2. 將最終報價進行匯總處理,可得知所有訂單的成交金額為: 404459 元,假設網站抽傭高達 10%,網站將受益 40445.9 元??紤]到統(tǒng)計時間段橫跨 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 月份開始突然驟降,一是可能跟團隊內部調整有關,可以研究網站背后運作的公司的其他產品的動態(tài)輔以論證。二是可能這種商業(yè)模式依然不明朗,雖然平均訂單單價 2930.86 元,但訂單價在 2000 元以下的依然占超過一半,并且作為網站核心數據的訂單量并不高,說明網站還處于低頻低客單價的狀態(tài)。從訂單量看,需要結合他們團隊的推廣手段,來評估核心數據不高是因為推廣力度不足,還是因為行業(yè)需求量偏低導致的。至于客單價的問題,可以考慮加入附加值更高的航拍服務(如電力航拍、測繪航拍)來提高訂單價格。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容