python數(shù)據(jù)分析項目——臺北101門票銷售情況(一)

分析內容

針對臺北101門票的銷售情況數(shù)據(jù),做一些簡單的數(shù)據(jù)分析

  • 每天的銷售量
  • 銷售量最高和最低日期分布
  • 游客購買次數(shù)密度
  • 游客購買次數(shù)百分比
  • 游客復購率
  • 按月份游客平均平分情況
  • 游客生命周期
  • 游客留存率

數(shù)據(jù)分析

import os
import re
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
%matplotlib inline
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False
sns.set_style('ticks', {'font.sans-serif':['simhei','Droid Sans Fallback']})
os.chdir(r'D:\python\test\數(shù)據(jù)分析項目——臺北101門票')
df = pd.read_csv('kelu.csv')
df
1.png

數(shù)據(jù)字段有游客姓名、評分贴唇、購票時間秦陋、年份灾梦、票價野舶、頻次,
然后再看下各個字段的類型巾遭,如果不符合預期肉康,需要先轉換


2.png

可以發(fā)現(xiàn)'time'時間段是字符串格式闯估,不是datetime格式,所以我們需要轉換:

df['time'] = pd.to_datetime(df['time'])

第一個分析內容銷售量:

result = df.groupby('time').size()
def get_values(x):
    return x.index.values, x.values
xindex, vals = get_values(result)

plt.figure(figsize=(20,5))
sns.lineplot(xindex, vals, color=sns.xkcd_rgb['warm blue'])
plt.xlabel('日期', color=sns.xkcd_rgb['reddish'], fontsize=20)
plt.ylabel('門票銷售量', color=sns.xkcd_rgb['reddish'], fontsize=20)
plt.title('2016-2019年每天銷售量', color=sns.xkcd_rgb['reddish'], pad=10, fontsize=20)
plt.savefig('2016-2019年每天銷售量.png')
2016-2019年每天銷售量.png

從圖中可以看到從2016-09開始到2018-01銷售量都是穩(wěn)步提升的吼和,但是在2018-01到2018-05這四個月涨薪,銷售量發(fā)生了較明顯的下滑,在價格不變的前提下炫乓,可能需要從外部因素來探究此次下滑原因刚夺。
然后我們再探索下銷量最好的Top10和最差的Top10的日期,看看能不能找出規(guī)律:

result_max = result.sort_values(ascending=False)
result_min = result.sort_values(ascending=True)

x = pd.PeriodIndex(result_max[:10].index,freq='D')
x2 = pd.PeriodIndex(result_min[:10].index,freq='D')

plt.figure(figsize=(20,5))
plt.subplot(121)
sns.barplot(x, result_max[:10].values, color=sns.xkcd_rgb['warm blue'])
plt.xlabel('日期', fontsize=16)
plt.xticks(rotation=30)
plt.title('每天銷量最多Top10的日期', fontsize=16)
for px, py in zip(range(10), result_max[:10].values):
    plt.text(px, py+0.3, f'{py}')

plt.subplot(122)
sns.barplot(x2, result_min[:10].values, color=sns.xkcd_rgb['reddish'])
plt.xlabel('日期', fontsize=16)
plt.xticks(rotation=30)
plt.title('每天銷量最少Top10的日期', fontsize=16)
for px, py in zip(range(10), result_min[:10].values):
    plt.text(px, py+0.01, f'{py}')
銷量Top10.png

從圖中可以看到銷量最好的日期末捣,集中在2018年年底和2019年年初侠姑,也是度假過年的高峰期,而銷量最少的日期箩做,均集中在3月和11月莽红,無假期,也是旅游淡季卒茬。

下面再來探究下購買次數(shù)的密度船老,看看重復購買門票的游客占比都有多少:

result = df.groupby('author').frequency.count()
bins = []
for x in range(1,result.max()):
    bins.append(x)

plt.figure(figsize=(10,5))
sns.distplot(result, bins=bins, kde=False,rug=True, color=sns.xkcd_rgb['yellow tan'])
plt.title('每個游客購買次數(shù)的密度統(tǒng)計', fontsize=12)
plt.xlabel('購買頻次', fontsize=10)
plt.ylabel('人數(shù)', fontsize=10)
每個游客購買次數(shù)的密度統(tǒng)計.png

由密度圖可以直觀地看到咖熟,購買一次的游客占據(jù)了非常大的比例圃酵,但仍有少部分游客購買次數(shù)達到二次及以上,最高者3年內購買過18次馍管!下面我們換成餅圖來看下比例:

from pyecharts import Pie
result2 = df.groupby('author').count().reset_index()
tmp = result2.groupby('frequency').size()[:6]
labels = [str(x)+'次' for x in tmp.index.values]

pie = Pie('購買次數(shù)百分比', title_pos='left')
pie.add('', labels, tmp.values, radius=[25,70], is_label_show=True, legend_top='bottom')
pie
購買次數(shù)百分比pie.png

由于超過6次的人數(shù)占比實在太少郭赐,我們只取到6次,發(fā)現(xiàn)只購買一次的游客占據(jù)了92%确沸,因此臺北101的賣票銷量是和旅游淡季旺季捌锭,假期的多少和時間息息相關的,也沒必要為了增加復購率去進行過多的市場推廣罗捎。

復購率的分析观谦,雖然從上圖已經(jīng)看出復購率沒有那么重要,但是這項指標在諸多銷售中占有很重要的地位桨菜,因此下面也來看一下:

# 添加一列"month"豁状,作為復購率的周期性指標
df['month'] = pd.DatetimeIndex(df.time).to_period(freq='M')

# 定義復購率函數(shù),只要在一個月中購買超過1次倒得,就統(tǒng)統(tǒng)計算為1,1次計算為0,0次作NAN值處理
def rebuy(x):
    if x > 1:
        return 1
    elif x == 1:
        return 0
    else:
        return np.NAN

# 得到一張可計算復購率的透視表
tmp = df_pivot.applymap(rebuy)
# 作圖的x軸數(shù)據(jù)泻红,需要轉換成“年-月”格式
index2 = pd.Series(tmp.columns.to_timestamp()).apply(lambda x: x.strftime('%Y-%m'))
# 坐標刻度的顯示,避免太過密集霞掺,看不清
xlist = []
for m in range(0, len(index2), 5):
    xlist.append(index2[m])

# 在此圖中谊路,復購率=每月復購的人次/每月購買的人次
plt.figure(figsize=(15,10))
plt.subplots_adjust(hspace=0.3)
plt.subplot(211)
sns.lineplot(index2.values, tmp.sum()/tmp.count())
plt.title('游客復購率曲線圖', fontsize=15, color=sns.xkcd_rgb['reddish'])
plt.xlabel('月份', fontsize=12, color=sns.xkcd_rgb['reddish'])
plt.ylabel('復購率', fontsize=12, color=sns.xkcd_rgb['reddish'])
plt.xticks(xlist)

plt.subplot(212)
sns.lineplot(index2.values, tmp.sum().astype('i'))
plt.title('每月復購人數(shù)', fontsize=15, color=sns.xkcd_rgb['reddish'])
plt.xlabel('月份', fontsize=12, color=sns.xkcd_rgb['reddish'])
plt.ylabel('購買人數(shù)', fontsize=12, color=sns.xkcd_rgb['reddish'])
plt.xticks(xlist)
plt.savefig('復購率lineplot.png')
復購率lineplot.png

還記得我們最開始統(tǒng)計的每天銷售量的圖表嗎?在2018-01到2018-05月發(fā)生了明顯的下滑菩彬,而在復購人數(shù)中也能看到這樣的趨勢缠劝,這五個月間潮梯,總體購買人次降低,復購人次也降低惨恭,外部一定有因素影響著這五個月酷麦,導致數(shù)據(jù)的明顯下滑。

下面我們來分析下每個月的總體評分趨勢:

result = df.groupby('month').rating.agg([('平均評分','mean')]).applymap(lambda x: float('%.1f' % x))
index2 = pd.Series(result.index.to_timestamp()).apply(lambda x: x.strftime('%Y-%m'))

xlist = []
for m in range(0, len(index2), 5):
    xlist.append(index2[m])

plt.figure(figsize=(10,5))
sns.lineplot(index2, result['平均評分'].values/10, color=sns.xkcd_rgb['reddish'])
plt.title('每月的平均評分', fontsize=15, pad=10)
plt.xlabel('月份', fontsize=15, labelpad=7)
plt.ylabel('平均評分喉恋,滿分10', fontsize=15,labelpad=10)
plt.xticks(xlist)
plt.savefig('每月的平均評分lineplot.png')
每月的平均評分lineplot.png

可以看到臺北101的整體評價還是非常好的沃饶,最低的2017-08月份左右,也有8.6轻黑,而大部分時間維持在9.0以上糊肤,那么這個評價和銷售量,是否有一定的相關性呢?

result2 = df.groupby('month').frequency.count().to_frame()
new_r = result.join(result2)

from scipy import statsg = sns.jointplot(x='平均評分', y='frequency', data=new_r)
g.annotate(stats.pearsonr)
g.savefig('平均評分和銷售量的關系.png')
平均評分和銷售量的關系.png

通過上面的散點圖可以發(fā)現(xiàn)氓鄙,皮爾遜相關系數(shù)只有0.36馆揉,呈現(xiàn)弱相關,p<.05抖拦,因此信度較高升酣,可以認為,臺北101的銷售量和評分沒有相關性态罪。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末噩茄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子复颈,更是在濱河造成了極大的恐慌绩聘,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耗啦,死亡現(xiàn)場離奇詭異凿菩,居然都是意外死亡,警方通過查閱死者的電腦和手機帜讲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門衅谷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人似将,你說我怎么就攤上這事获黔。” “怎么了玩郊?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵肢执,是天一觀的道長。 經(jīng)常有香客問我译红,道長预茄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮耻陕,結果婚禮上拙徽,老公的妹妹穿的比我還像新娘。我一直安慰自己诗宣,他們只是感情好膘怕,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著召庞,像睡著了一般岛心。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篮灼,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天忘古,我揣著相機與錄音,去河邊找鬼诅诱。 笑死髓堪,一個胖子當著我的面吹牛,可吹牛的內容都是我干的娘荡。 我是一名探鬼主播干旁,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼炮沐!你這毒婦竟也來了争群?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤央拖,失蹤者是張志新(化名)和其女友劉穎祭阀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲜戒,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年楣责,在試婚紗的時候發(fā)現(xiàn)自己被綠了翔烁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖幸冻,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情洽损,我是刑警寧澤庞溜,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站碑定,受9級特大地震影響流码,放射性物質發(fā)生泄漏。R本人自食惡果不足惜漫试,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驾荣。 院中可真熱鬧外构,春花似錦、人聲如沸播掷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眯亦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妻率,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工宫静, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孤里。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像捌袜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子弄唧,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容

  • 一霍衫、報告背景:2018年8月7日候引,境外[旅游]服務商KLOOK客路旅行已獲D輪融資敦跌,成為全球旅游活動領域融資金額最...
    Hill_GM閱讀 3,054評論 4 12
  • (一丿獼猴桃 祥雲(yún)繚繞舞蹁躚,寶殿靈霄聚上仙。 借問普天何果異息尺?新吳軟棗味奇鮮。 注:軟棗搂誉,獼猴桃品種之一。 (二...
    追風的樹葉閱讀 703評論 0 0
  • 女人是愛浪漫的侮腹。 自打有了孩子稻励,每年特殊的日子父阻。他幾乎就很少記起望抽,因此也就很少祝福。 記憶中煤篙,僅僅只有那麼幾次。而...
    薛靜春閱讀 214評論 2 0
  • 你在蒼穹中 獨守一份潔凈 無人懂得 出污泥而不染的艱辛和傷痛 只是為了不負己心的本性 你有著萬丈柔情 藕可斷辑奈,情絲...
    水墨故事閱讀 375評論 0 1
  • 閱讀及筆記時間:2016年10月26日,20:30-22:30鸠窗;2小時妓羊; 閱讀書本:《狡猾的情感》,作者:【以】埃...
    時空山莊閱讀 628評論 0 1