當前位置:
首頁 > 科技 > 5700億,16227注,一探15年福彩奧秘!

5700億,16227注,一探15年福彩奧秘!

作者| 丁彥軍

責編 | Jane

【導語】之前的一篇文章中,作者為大家用 Python 爬取了近 14 年所有的福彩 3D 信息,有了這些信息,我們要是否可以找到中獎規律,增加中獎概率呢?本期內容,作者就將帶領大家一起探索這些誘人的獎金背後的秘密!

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

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

2005-2018年,雙色球的數據統計

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

視頻來源:飛碟說

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

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

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

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

一、直方圖解讀歷年中獎注數

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

參數含義:

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

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

alpha:透明度

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

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

edgecolor:圖形邊緣顏色

label:解釋每個圖像代表的含義

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

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

詳細代碼:

importnumpyasnp

importmatplotlib.pyplotasplt

importpandasaspd

defDrawHistogram(read_name):

#讀取數據

read_name =r"C:UsersAdministratorDesktopssq.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:UsersAdministratorDesktopssq.csv")

效果圖如下:

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

由上圖可看出,13、14 年是獲獎注數 Top 的一年,同時 13、14 年的銷售額也是最多的,分別高達 549 億、573 億元。這其實與當年中國經濟穩中向好也有關係,2013 年時中國經濟關鍵的一年。這一年,全球經濟風雲變幻,美國經濟增速回落,歐元區繼續萎縮,巴西、俄羅斯、印度物價連續上漲,比特幣升值近百倍……在這個全球經濟一片哀鳴的2013 里,我國採取了多項措施來促進經濟的穩定增長,在「黑天鵝」滿天飛的2013年里,我國又發生了很多割接、牽動人心的改革事件。如上海自貿區掛牌、中國大媽炒金成為熱門辭彙,地王的記錄頻頻被刷新等。

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

氣泡圖主要用到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。

詳細代碼:

importpandasaspd

importnumpyasnp

importseabornassns

importmatplotlib.pyplotasplt

defDrawBubble(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:UsersAdministratorDesktopssq.csv")

效果圖如下:

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

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

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

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

詳細代碼:

importnumpyasnp

importpandasaspd

importmatplotlib.pyplotasplt

importmatplotlib.font_manager

#讀取數據

read_name =r"C:UsersAdministratorDesktopssq.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 1)foriinrange(2*(len(S1) 1))ifi

y1=[180foriinrange(2*(len(S1) 1))ifi

#為了畫出效果比例好看,將二等獎注數縮小5倍來表示

S2=second_prize/5

x2=[(3/2)*np.pi np.pi/(len(S1) 1)*(i 1)foriinrange(2*(len(S1) 1))ifi

y2=[130foriinrange(2*(len(S1) 1))ifi

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.05foriinrange(2*(len(S1) 1))ifi

B=[30foriinrange(2*(len(S1) 1))ifi

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=)

ax.scatter(x=x2,y=y2,s=S2,color="Orange",alpha=0.5,linewidths=)

ax.bar(x=x1, height=H1, width=W1,bottom=B,color="Salmon")

plt.ylim(,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=)

font=matplotlib.font_manager.FontProperties(fname=r"E:projectwordcloudsimfang.ttf")

foriinrange(len(x1)):

ax.text(x=x1[i],y=y1[i],s=S1[i],color="gray",ha="center", va="center",fontsize=12,fontproperties=font)

foriinrange(len(x1)):

ax.text(x=x1[i],y=y2[i],s=S2[i],color="gray",ha="center", va="center",fontsize=12,fontproperties=font)

foriinrange(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)

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

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

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

來源:飛碟說

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

福利彩票其本質是一種轉移支付,目的是促進社會平等。理想狀況下,應該讓富人買彩票來補貼窮人。但由於窮人對一夜暴富的渴望以及對概率認知的偏差,反倒成了窮人買彩票來補貼富人。這真是本末倒置。

最終形成,讓一部分先富起來,另一部分人讓這部分人變得越來越富!

(本文為AI科技大本營轉載文章,轉載請聯繫作者)

-- 【本文完】 --


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI科技大本營 的精彩文章:

驚艷的SiamMask:開源快速同時進行目標跟蹤與分割演算法
70億美金!英偉達欲競購這家以色列晶元公司!

TAG:AI科技大本營 |