BD第7課:分析罩杯銷售

本文會(huì)利用 SQL 語句和 Pandas 對(duì)前面抓取和整理的的胸罩?jǐn)?shù)據(jù)進(jìn)行分析娃殖,本文主要分析了胸罩銷售的比例值戳,以及 A、B炉爆、C堕虹、D 罩杯的銷售比例。

用 SQL 語句分析胸罩(按罩杯尺寸)的銷售比例

既然銷售數(shù)據(jù)都保存在 SQLite 數(shù)據(jù)庫(kù)中芬首,那么我們不妨先用 SQL 語句做一下統(tǒng)計(jì)分析赴捞,本節(jié)將對(duì)胸罩按罩杯的銷售量做一個(gè)銷售比例統(tǒng)計(jì)分析。由于抓取的數(shù)據(jù)沒有超過 D 罩杯的郁稍,所以做數(shù)據(jù)分析時(shí)就不考慮 D 以上罩杯的胸罩銷售數(shù)據(jù)了赦政,這里只考慮 A、B耀怜、C 和 D 罩杯胸罩的銷售數(shù)據(jù)恢着。

本節(jié)要統(tǒng)計(jì)的是某一個(gè)尺寸的胸罩銷售數(shù)量占整個(gè)銷售數(shù)量的百分比,這里需要統(tǒng)計(jì)和計(jì)算如下3類數(shù)據(jù)封寞。

某一個(gè)尺寸的胸罩銷售數(shù)量
胸罩銷售總數(shù)量
第1類數(shù)據(jù)和第2類數(shù)據(jù)的差值(百分比)
這3類數(shù)據(jù)完全可以用一條 SQL 語句搞定然评,為了同時(shí)搞定 A、B狈究、C 和 D 罩杯的銷售比例碗淌,可以用4條類似的 SQL 語句,中間用 union all 連接抖锥。

select 'A' as 罩杯,printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where size1 is not null)))  as 比例 from t_sales where size1='A'
union all
select 'B',printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where size1 is not null)))  from t_sales where size1='B'
union all
select 'C',printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where size1 is not null)))  from t_sales where size1='C'
union all
select 'D',printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where size1 is not null)))  from t_sales where size1='D'

執(zhí)行上面的 SQL 語句亿眠,會(huì)看到如圖1所示的查詢結(jié)果。

enter image description here

圖1 查詢結(jié)果

不過圖1所示的分析結(jié)果有些問題磅废,就是沒有按銷量排序纳像,而且沒有顯示具體的銷量。如果要按銷量排序拯勉,而且加上具體的銷量竟趾,需要使用下面的 SQL 語句憔购。

select 'A' as 罩杯,printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where size1 is not null)))  as 比例, count(*) as 銷量 from t_sales where size1='A'
union all
select 'B',printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where size1 is not null))) , count(*) as c from t_sales where size1='B'
union all
select 'C',printf("%0.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where size1 is not null))) , count(*) as c from t_sales where size1='C'
union all
select 'D',printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where size1 is not null))) , count(*) as c from t_sales where size1='D'
order by 銷量 desc

上面的 SQL 語句不僅加入了銷售比例,還加入了銷售數(shù)量岔帽,并且按銷量降序排列玫鸟。這些 SQL 語句需要考慮 size1 字段空值的情況,因?yàn)樽ト〉纳俨糠咒N售記錄并沒有罩杯尺寸數(shù)據(jù)犀勒。執(zhí)行上面的 SQL 語句后屎飘,會(huì)輸出如圖2所示的查詢結(jié)果。

enter image description here

從圖2的統(tǒng)計(jì)結(jié)果可以看出贾费,B 罩杯占總體的銷售比例最大钦购,其次是 A 罩杯,也就是說中國(guó)女性胸部尺寸主要集中在 A 和 B 罩杯褂萧。

用 Pandas 和 Matplotlib 分析對(duì)胸罩銷售比例進(jìn)行可視化分析

既然 Python 提供了這么好的 Pandas 和 Matplotlib押桃,那么就可以完全不使用 SQL 語句進(jìn)行數(shù)據(jù)分析了,可以 100% 使用 Python 代碼搞定一切导犹。

本節(jié)將使用 Pandas 完成與前面相同的數(shù)據(jù)分析怨规,并使用 Matplotlib 將分析結(jié)果以圖形化方式展現(xiàn)出來。

Pandas 在前面的文章已經(jīng)講過了锡足,這里不再深入介紹。本次分析主要使用了 groupby 方法按罩杯(size1)分組壳坪,然后使用 count 方法統(tǒng)計(jì)組內(nèi)數(shù)量舶得,最后使用 insert 方法添加了一個(gè)“比例”字段。

from pandas import *
from matplotlib.pyplot import *
import sqlite3
import sqlalchemy
# 打開bra.sqlite數(shù)據(jù)庫(kù)
engine = sqlalchemy.create_engine('sqlite:///bra.sqlite')
rcParams['font.sans-serif'] = ['SimHei']
# 查詢t_sales表中所有的數(shù)據(jù)
sales = read_sql('select source,size1 from t_sales',engine)
# 對(duì)size1進(jìn)行分組爽蝴,并統(tǒng)計(jì)每一組的記錄數(shù)
size1Count = sales.groupby('size1')['size1'].count()
print(size1Count)
# 計(jì)算總銷售數(shù)量
size1Total = size1Count.sum()
print(size1Total)
print(type(size1Count))
# 將Series轉(zhuǎn)換為DataFrame
size1 = size1Count.to_frame(name='銷量')
print(size1)
# 格式化浮點(diǎn)數(shù)
options.display.float_format = '{:,.2f}%'.format
# 插入新的“比例”列
size1.insert(0,'比例', 100 * size1Count / size1Total)
print(size1)
# 將索引名改為“罩杯”
size1.index.names=['罩杯']
print(size1)

# 數(shù)據(jù)可視化
print(size1['銷量'])
# 餅圖要顯示的文本
labels = ['A罩杯','B罩杯','C罩杯','D罩杯']
# 用餅圖繪制銷售比例
size1['銷量'].plot(kind='pie',labels = labels, autopct='%.2f%%')
# 設(shè)置長(zhǎng)寬相同
axis('equal')
legend()
show()

運(yùn)行程序沐批,會(huì)看到在窗口上繪制了如圖3所示的胸罩銷售比例,用 Pandas 分析得到的數(shù)據(jù)與使用 SQL 分析得到的數(shù)據(jù)完全相同蝎亚。

enter image description here

直接在 Python 腳本中使用復(fù)雜的 SQL 語句

如果讀者不想過多使用 Pandas 的 API 進(jìn)行數(shù)據(jù)分析九孩,也可以直接在 Pandas 中使用復(fù)雜的 SQL 語句,一步到位地獲取分析結(jié)果发框。下面的代碼直接通過 SQL 語句分析出了結(jié)果躺彬,最后只是利用 Matplotlib 將數(shù)據(jù)可視化。

# 直接使用復(fù)雜的SQL語句和視圖
from pandas import *
from matplotlib.pyplot import *
import sqlite3
import sqlalchemy
engine = sqlalchemy.create_engine('sqlite:///bra.sqlite')
rcParams['font.sans-serif'] = ['SimHei']
# 執(zhí)行復(fù)雜的SQL語句
sales = read_sql('''
select 'A' as 罩杯,  printf('%.2f%%',(100.0 * count(*) / (select count(*) from t_sales where size1 is not null))) as 比例,count(*) as 銷量 from t_sales where size1='A'
union all
select 'B' , printf('%.2f%%',(100.0 * count(*) / (select count(*) from t_sales where size1 is not null))) as 比例,count(*) from t_sales where size1='B'
union all
select 'C' , printf('%.2f%%',(100.0 * count(*) / (select count(*) from t_sales where size1 is not null))) as 比例,count(*)from t_sales where size1='C'
union all
select 'D' , printf('%.2f%%',(100.0 * count(*) / (select count(*) from t_sales where size1 is not null))) as 比例,count(*) from t_sales where size1='D'
order by 銷量 desc
''',engine)
print(sales)
# 將前面的SQL語句建成一個(gè)視圖梅惯,然后執(zhí)行宪拥,效果相同
sales1 = read_sql('select * from v_sales', engine)

labels = ['A罩杯','B罩杯','C罩杯','D罩杯']
sales1['銷量'].plot(kind='pie',labels = labels, autopct='%.2f%%')
axis('equal')
legend()
show()

執(zhí)行上面的程序,會(huì)看到如圖4所示的效果铣减。

enter image description here

用 SQL 語句對(duì)天貓商城胸罩銷售數(shù)據(jù)進(jìn)行分析

我們可以利用 SQL 語句分別統(tǒng)計(jì)天貓和京東關(guān)于胸罩銷售的比例她君,下面現(xiàn)以天貓為例進(jìn)行統(tǒng)計(jì)。

select 'A' as 罩杯,printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where source='天貓' and size1 is not null)))  as 比例 from t_sales where size1='A' and source='天貓'
union all
select 'B',printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where source='天貓' and  size1 is not null)))  from t_sales where source='天貓' and  size1='B'
union all
select 'C',printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where source='天貓' and  size1 is not null)))  from t_sales where source='天貓' and size1='C'
union all
select 'D',printf("%.2f%%",(100.0 * count(*)/ (select count(*) from t_sales  where source='天貓' and size1 is not null)))  from t_sales where source='天貓' and size1='D'

上面 SQL 語句的執(zhí)行結(jié)果如圖5所示葫哗。

enter image description here

我們可以看到缔刹,天貓商城胸罩銷售比例與總體銷售比例的趨勢(shì)類似球涛,只是具體的數(shù)值有差異,但仍然是 B 罩杯銷售的最好校镐。

使用 Pandas 分別對(duì)天貓和京東胸罩銷售數(shù)據(jù)進(jìn)行分析

# 分析與可視化天貓和京東胸罩ABCD罩杯的銷售比例
from pandas import *
from matplotlib.pyplot import *
import sqlite3
import sqlalchemy
# 打開數(shù)據(jù)庫(kù)
engine = sqlalchemy.create_engine('sqlite:///bra.sqlite')
rcParams['font.sans-serif'] = ['SimHei']
options.display.float_format = '{:,.2f}%'.format

# 只選取source和size1亿扁,source表示數(shù)據(jù)來源(天貓或京東)
sales = read_sql('select source,size1 from t_sales',engine)
# 過濾天貓胸罩銷售數(shù)據(jù),并按罩杯分組(size1字段)灭翔,統(tǒng)計(jì)出每個(gè)罩杯的具體銷量
tmallSize1GroupCount = sales[sales['source'] == '天貓'].groupby('size1')['size1'].count()
# 計(jì)算出總銷量
tmallSize1Total = tmallSize1GroupCount.sum()
print(tmallSize1Total)
# 將Series轉(zhuǎn)換為DataFrame
tmallSize1 = tmallSize1GroupCount.to_frame(name='銷量')
# 插入一個(gè)“比例”字段魏烫,用于顯示銷售比例
tmallSize1.insert(0,'比例',100 * tmallSize1GroupCount / tmallSize1Total)
# 將索引名改成“罩杯”
tmallSize1.index.names=['罩杯']
print(tmallSize1)

# 京東的分析方式與天貓類似
jdSize1GroupCount = sales[sales['source'] == '京東'].groupby('size1')['size1'].count()
jdSize1Total = jdSize1GroupCount.sum()
print(jdSize1GroupCount)
# 將Series轉(zhuǎn)換為DataFrame
jdSize1 = jdSize1GroupCount.to_frame(name='銷量')

jdSize1.insert(0,'比例',100 * jdSize1GroupCount / jdSize1Total)
jdSize1.index.names=['罩杯']
print(jdSize1)

labels1 = []
labels2 = []
labels1 = tmallSize1.index.tolist()
labels2= jdSize1.index.tolist()
for i in range(len(labels1)):
    labels1[i] = labels1[i] + '罩杯'
for i in range(len(labels2)):
    labels2[i] = labels2[i] + '罩杯'
# 下面的代碼會(huì)將天貓和京東的胸罩銷售數(shù)據(jù)餅圖放到同一個(gè)窗口顯示
fig,(ax1,ax2) = subplots(1,2,figsize=(12,6))
ax1.pie(tmallSize1['銷量'],labels = labels1, autopct='%.2f%%')
ax2.pie(jdSize1['銷量'],labels = labels2, autopct='%.2f%%')
ax1.legend()
ax2.legend()
ax1.axis('equal')
ax2.axis('equal')
show()

執(zhí)行上面的代碼,會(huì)顯示如圖6所示的胸罩銷售比例統(tǒng)計(jì)圖肝箱。

enter image description here

從圖6的分析結(jié)果可以看出哄褒,天貓和京東的 B 罩杯銷售比例都很大,不過京東 B 罩杯銷售比例特別大煌张,不知道是什么原因?qū)е碌哪派模们艺J(rèn)為到京東買胸罩的大多都是 B 罩杯吧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骏融,一起剝皮案震驚了整個(gè)濱河市链嘀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌档玻,老刑警劉巖怀泊,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異误趴,居然都是意外死亡霹琼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門凉当,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枣申,“玉大人,你說我怎么就攤上這事看杭≈姨伲” “怎么了模孩?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵瓜贾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我携悯,道長(zhǎng)祭芦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任憔鬼,我火速辦了婚禮龟劲,結(jié)果婚禮上胃夏,老公的妹妹穿的比我還像新娘。我一直安慰自己仰禀,他們只是感情好蚕愤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布答恶。 她就那樣靜靜地躺著,像睡著了一般萍诱。 火紅的嫁衣襯著肌膚如雪悬嗓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天籍凝,我揣著相機(jī)與錄音周瞎,去河邊找鬼。 笑死饵蒂,一個(gè)胖子當(dāng)著我的面吹牛声诸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播退盯,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼双絮,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了得问?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤软免,失蹤者是張志新(化名)和其女友劉穎宫纬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膏萧,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漓骚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榛泛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝌蹂。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖曹锨,靈堂內(nèi)的尸體忽然破棺而出孤个,到底是詐尸還是另有隱情,我是刑警寧澤沛简,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布齐鲤,位于F島的核電站斥废,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏给郊。R本人自食惡果不足惜牡肉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淆九。 院中可真熱鬧统锤,春花似錦、人聲如沸炭庙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煤搜。三九已至免绿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間擦盾,已是汗流浹背嘲驾。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留迹卢,地道東北人辽故。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腐碱,于是被迫代替她去往敵國(guó)和親誊垢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容