|
“ 本文对双色球数据进行分析,分别计算红球、蓝球历年中出现的频次。”
双色球数据抓取到已经有一段时间了,今天开始对双色球数据进行分析。本文通过几行代码实现对双色球出现的频率进行计算,并通过柱状图进行展示。
本文用到的工具:
- pandas库
- numpy库
- jupyter notebook
数据:
- 上一篇文章《第一个爬虫程序-爬双色球数据》中爬到的数据。
由于上一篇文章爬到的数据是整个完整的数据,存储格式为json文件,如下图
本文并不需要所有数据,只需要期数、红球、蓝球。需对爬到的数据进行简单的清洗,清洗程序:
def _read_txt_tolist(filename=None):
"""
从filename文件中读取数据
:return: 返回json格式的list
"""
if filename is None:
logger.info("文件名为空,请传入文件名!!!")
return None
try:
with open(filename, 'r', encoding="utf-8") as f:
text = json.load(f)
except Exception as e:
logger.info("文本转换json失败,文本:【{}】".format(text))
logger.info("异常信息:{}".format(str(e)))
text = None
return text
def get_crb(s_file=None, t_file=None):
"""
获取期数、红球、蓝球数据,并保存为crb.csv
:return:
"""
if s_file is None or t_file is None:
logger("源文件和目标文件不能为空!!!")
return None
# 将文件数据读取到一个list中
j_crbb = _read_txt_tolist(s_file)
if j_crbb is None:
return None
# 循环解析每个元素,获取期数、红球、蓝球数据,每个元素一行存入文件
with open(t_file, 'w', encoding="utf-8") as f:
for i in j_crbb:
str = ''
str = i["code"] + "," + i["red"] + "," + i["blue"] + "\n"
f.write(str)清洗后的文件长这样:
其中A列为期数,B-G列为红球,H列为蓝球。
需求1:统计B-G列中出现的所有数据的次数
导入两个库
import pandas as pd
import numpy as np
导入数据到pandas,并设置names
col = ["code","red1","red2","red3","red4","red5","red6","blue"]
data = pd.read_csv("crb.csv", names=col)
data.head()
取红球数据
data_r = data.iloc[:,1:7]
由于pandas只能对某一列计算次数,而我们的需求是统计所有列中各个值出现的次数,需将data_r由二维数组转成一维数组:
data_r_a = np.array(data_r)
data_r_l = data_r_a.flatten()
data_r_s = pd.Series(data_r_l)
接下来就可以计算每个球出现的次数了
count = data_r_s.value_counts().sort_index()
通过柱状图展示
count.plot(kind="bar",figsize=(20,8),color='r')
通过上图可以看出,红球分布相对比较均匀,综合分析数据如下:
蓝球的分析比红球简单一些,只有一列,不用做降维处理,直接上代码和结果:
data_b = data.loc[:,"blue"]
count1 = data_b.value_counts().sort_index()
count1.plot(kind="bar",figsize=(20,8),color='b')
本文通过对2013年至今的双色球数据进行分析,得到红球、蓝球出现的频次,并以柱状图的形式进行展现。 |
|