Python分析福利彩票!5700亿,16227注!15年来,…
2019-03-12 08:28:19来源:博客园 阅读 ()
得到很多人的反响,很多粉丝留言,快点出一版分析教程,找找其中的规律。说不定哪天头等奖就是你,从此迎娶白富美,走上人生巅峰!
今天,就满足大家的要求,对其2005-2018年期间,14年的双色球数据进行分析可视化,看看能否找到一些规律可循(在我看来,彩票规律就是没有规律)。不过,通过此案例,你可以学习到关于matplotlib如何画直方图、气泡图以及更好看的气泡图,同时也能明白一些道理,如为什么穷人更爱买彩票。
2005-2018年,双色球的数据统计
看完视频,说说很多网友自作聪明,彩票开奖是抽出现次数最少的组合。这样的想法是完全错误的。
其实,每期的奖金总数是固定的,让两个人分,还是十个人分,都是一样的!如果说每一期一等奖奖金都是一千万,有作弊的意义,抽个被买的最少的组合!
但为什么每期双色球一等奖奖金不是固定的呢!就是因为其奖金机制,双色球当期销售额的51%作为当期奖金!它分为当期奖金(49%)和调节基金(2%)两部分。比如说,某期双色球销量为3亿元,那么,就有1.47亿元成为当期奖金,600万元成为调节基金。
接下来,我们通过Python对2005-2018年期间的数据进行分析下,主要是通过此案例学习如何用matplotlib画直方图、气泡图以及更好看的气泡图。
一、直方图解读历年中奖注数
利用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年里,我国又发生了很多割接、牵动人心的改革事件。如上海自贸区挂牌、中国大妈炒金成为热门词汇,地王的记录频频被刷新等。
二、气泡图解读销售额的大小,与一等奖的占比率并没有关系
气泡图主要用到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之间徘徊。
三、用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+1) for 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+1) for 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)
最后,通过软件处理,添加一些文字性的描述,即可获得一张好看的可视化气泡图。觉得好看,大家也可以动手操作一遍!
原文链接:https://www.cnblogs.com/qingdeng6359/p/10517090.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash