15年5700億,雙色球16227注一等獎資料中,我們發現了這些祕密

2019-03-19 18:10:37


導讀:去年,我曾寫過一篇文章用Python爬取了14年所有的福彩3D資訊,彩民們,只能幫你們到這了,得到很多人的反響,很多粉絲留言,快點出一版分析教程,找找其中的規律。說不定哪天頭等獎就是你,從此迎娶白富美,走上人生巔峰!


今天就滿足大家的要求,對2005-2018年期間,14年的雙色球資料進行分析視覺化,看看能否找到一些規律可循(在我看來,彩票規律就是沒有規律)。


作者:丁彥軍

來源:戀習Python(ID:sldata2017)



不過,通過此案例,你可以學習到關於matplotlib如何畫直方圖、氣泡圖以及更好看的氣泡圖,同時也能明白一些道理,如為什麼窮人更愛買彩票。


▲2005-2018年,雙色球的資料統計


在學習matplotlib畫圖前,為大家普及下,關於中國福利彩票的一些中獎規則以及福利彩票用途去向。


▲視訊來源:飛碟說


看完視訊,說說很多網友自作聰明,彩票開獎是抽出現次數最少的組合。這樣的想法是完全錯誤的。


其實,每期的獎金總數是固定的,讓兩個人分,還是十個人分,都是一樣的!如果說每一期一等獎獎金都是一千萬,有作弊的意義,抽個被買的最少的組合!


但為什麼每期雙色球一等獎獎金不是固定的呢!就是因為其獎金機制,雙色球當期銷售額的51%作為當期獎金!它分為當期獎金(49%)和調節基金(2%)兩部分。比如說,某期雙色球銷量為3億元,那麼,就有1.47億元成為當期獎金,600萬元成為調節基金。


接下來,我們通過Python對2005-2018年期間的資料進行分析下,主要是通過此案例學習如何用matplotlib畫直方圖、氣泡圖以及更好看的氣泡圖。



01 直方圖解讀歷年中獎注數


利用matplotlib畫直方圖,主要涉及到兩個函式:


1. matplotlib.pyplot.bar(left, height, alpha=1, width=0.8, color=, edgecolor=, label=, lw=3)


引數含義:


  • left:x軸的位置序列,一般採用arange函式產生一個序列; 

  • height:y軸的數值序列,也就是柱形圖的高度,一般就是我們需要展示的資料; 

  • alpha:透明度 

  • width:為柱形圖的寬度,一般這是為0.8即可; 

  • color或facecolor:柱形圖填充的顏色; 

  • edgecolor:圖形邊緣顏色 

  • label:解釋每個影象代表的含義 

  • linewidth or linewidths or lw:邊緣or線的寬度


2. matplotlib.pyplot.legend()


plt.legend()函式主要的作用就是給圖加上圖例,plt.legend([x,y,z])裡面的引數使用的是list的的形式,預設情況下是將label值賦給它。


詳細程式碼:


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


def DrawHistogram(read_name):

    #讀取資料
    read_name = r"C:\Users\Administrator\Desktop\ssq.csv"
    fp = pd.read_csv(read_name)
    first_prize = fp.first_prize
    second_prize = fp.second_prize

    #配置圖形引數
    ind = np.arange(len(first_prize))
    width = 0.5
    fig, ax = plt.subplots()
    rects1 = ax.bar(ind - width/2, first_prize, width, color='SkyBlue', label='First')
    rects2 = ax.bar(ind + width/2, second_prize, width,color='IndianRed', label='Second')

    ax.set_ylabel('Stakes')
    ax.set_title('Stakes by year and rank')
    plt.xticks(ind,(18,17,16,15,14,13,12,11,10,9,8,7,6,5))
    ax.legend() 
    plt.show()

if __name__=='__main__':

   DrawHistogram(r"C:\Users\Administrator\Desktop\ssq.csv")


效果圖如下:


▲歷年一等獎、二等獎中獎數


由上圖可看出,13、14年是獲獎注數Top的一年,同時13、14年的銷售額也是最多的,分別高達549億、573億元。這其實與當年中國經濟穩中向好也有關係,2013年時中國經濟關鍵的一年。


這一年,全球經濟風雲變幻,美國經濟增速回落,歐元區繼續萎縮,巴西、俄羅斯、印度物價連續上漲,比特幣升值近百倍……


在這個全球經濟一片哀鳴的2013 裡,我國採取了多項措施來促進經濟的穩定增長,在“黑天鵝”滿天飛的2013年裡,我國又發生了很多割接、牽動人心的改革事件。如上海自貿區掛牌、中國大媽炒金成為熱門詞彙,地王的記錄頻頻被重新整理等。



02 氣泡圖解讀銷售額的大小,與一等獎的佔比率並沒有關係


氣泡圖主要用到scatter()函式,具體用法如下:


  • scatter(x,y) 在向量 x 和 y 指定的位置建立一個包含圓形的散點圖。該型別的圖形也稱為氣泡圖。

  • scatter(x,y,sz) 指定圓大小。要繪製大小相等的圓圈,請將 sz 指定為標量。要繪製大小不等的圓,請將 sz 指定為長度等於 x 和 y 的長度的向量。

  • scatter(x,y,sz,c) 指定圓顏色。要以相同的顏色繪製所有圓圈,請將 c 指定為顏色名稱或 RGB 三元數。要使用不同的顏色,請將 c 指定為向量或由 RGB 三元陣列成的三列矩陣。


特別注意的是,s離散化的方法,因為需要通過點的大小來直觀感受其所表示的數值大小,利用當前點的數值減去集合中的最小值後+0.1再*1000。


詳細程式碼:


import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

def DrawBubble(read_name):

    #讀取資料
    fp = pd.read_csv(read_name)
    x = fp.sales
    y = fp.rate
    z = fp.rate

    #配置引數
    sns.set(style = "whitegrid")
    cm = plt.cm.get_cmap('RdYlBu')
    fig,ax = plt.subplots(figsize = (12,10))
    bubble = ax.scatter(x, y , s = (z - np.min(z) + 0.1) * 3000, c = z, cmap = cm, linewidth = 0.5, alpha = 0.5)

    ax.grid()
    fig.colorbar(bubble) 
    ax.set_xlabel('sales of year', fontsize = 15)
    ax.set_ylabel('rate of something', fontsize = 15)
    plt.show()

if __name__=='__main__':

    DrawBubble(r"C:\Users\Administrator\Desktop\ssq.csv")


效果圖如下:


▲歷年銷售額與一等獎的中獎佔比率之間關係


由上圖可看出,隨著雙色球銷售額的變化,而一等獎佔比率基本沒變化,總是在0.06-0.75之間徘徊。



03 用Python畫一張好看的氣泡圖


前面我們已經講了如何畫直方圖、氣泡圖,接下來我們將直方圖與氣泡圖,通過極座標系將兩者結合在一起展示出來,效果圖如下:



詳細程式碼:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager

#讀取資料
read_name = r"C:\Users\Administrator\Desktop\ssq.csv"
fp = pd.read_csv(read_name)
first_prize = fp.first_prize
second_prize = fp.second_prize
rate = fp.rate

#一等獎中獎注數
S1=first_prize
x1=[(3/2)*np.pi+np.pi/(len(S1)+1)*(i+1for i in range(2*(len(S1)+1)) if i<len(S1)]
y1=[180 for i in range(2*(len(S1)+1)) if i<len(S1) ]

#為了畫出效果比例好看,將二等獎注數縮小5倍來表示
S2=second_prize/5
x2=[(3/2)*np.pi+np.pi/(len(S1)+1)*(i+1for i in range(2*(len(S1)+1)) if i<len(S1)]
y2=[130 for i in range(2*(len(S1)+1)) if i<len(S1) ]

H1=[60/2,69/2,70/2,62/2,67/2,70/2,75/2,67/2,70/2,70/2,64/2,74/2,70/2,72/2]
W1=[0.05 for i in range(2*(len(S1)+1)) if i<len(S1)]
B=[30 for i in range(2*(len(S1)+1)) if i<len(S1)]

fig=plt.figure(figsize=(13.44*2,7.5*2),facecolor='w')

#建立一個座標系,projection='polar'表示極座標
ax = fig.add_subplot(111,projection='polar',facecolor='w')
ax.scatter(x=x1,y=y1,s=S1,color='Gold',alpha=0.5,linewidths=0)
ax.scatter(x=x2,y=y2,s=S2,color='Orange',alpha=0.5,linewidths=0)
ax.bar(x=x1, height=H1, width=W1,bottom=B,color='Salmon')


plt.ylim(0,220)
#去掉座標軸的為外面一層粗的線
ax.spines['polar'].set_visible(False)
plt.grid(color='gray', linestyle=':', linewidth=1,which='major',axis='x',alpha=0.1)
ax.set_yticks([])
ax.tick_params(axis='x',labelsize=0)


font=matplotlib.font_manager.FontProperties(fname=r'E:\project\wordcloud\simfang.ttf')

for i in range(len(x1)):
    ax.text(x=x1[i],y=y1[i],s=S1[i],color='gray',ha='center', va= 'center',fontsize=12,fontproperties=font)
for i in range(len(x1)):
    ax.text(x=x1[i],y=y2[i],s=S2[i],color='gray',ha='center', va= 'center',fontsize=12,fontproperties=font)
for i in range(len(x1)):
    ax.text(x=x1[i],y=H1[i]+40,s="{}‰".format(H1[i]*2) ,color='gray',ha='center', va= 'center',fontsize=12,fontproperties=font)

plt.show()
fig.savefig('D:\\test.png',dpi=400,bbox_inches='tight',transparent=False)


最後,通過軟體處理,新增一些文字性的描述,即可獲得一張好看的視覺化氣泡圖。覺得好看,大家也可以動手操作一遍!


▲雙色球一等獎中獎佔比率一直徘徊在7%左右


關於用Python畫一張好看的氣泡圖,就到此結束!



04 題外話:為什麼窮人更愛買彩票?


▲來源:飛碟說


在我看來,主要是對概率的認知偏差,他們只有一種理念,就是多買少買,多少要買;早中晚中,早晚要中。但富人由於接受了更好的教育和訓練,更容易通過邏輯思考來避開這些概率認知錯誤。對概率的估算越客觀,對這種負回報率的彩票投資就越少。



據統計,99%的大咖都完成了這個神操作



更多精彩


在公眾號後臺對話方塊輸入以下關鍵詞

檢視更多優質內容!


PPT | 報告 | 讀書 | 書單 | 乾貨 

大資料 | 揭祕 | Python | 視覺化

人工智慧 | 機器學習 | 深度學習 | 神經網路

AI | 1024 | 段子 | 區塊鏈 | 數學


猜你想看


  • 什麼樣的資料才有價值?應該怎樣收集和處理?終於有人講明白了

  • 被兩會代表頻繁“點名”,2019的第一波風口要來了?

  • 女神節,來聊聊這幾位神一般的“程式媛”

  • 馬化騰提議加強基礎科學研究,中國“芯痛”能解決嗎?



Q: 你買彩票中過獎嗎?

歡迎留言與大家分享

覺得不錯,請把這篇文章分享給你的朋友

轉載 / 投稿請聯絡:baiyu@hzbook.com

更多精彩,請在後臺點選“歷史文章”檢視

在看



熱點新聞