iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python数据分析之彩票的历史数据
  • 742
分享到

Python数据分析之彩票的历史数据

2024-04-02 19:04:59 742人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、需求介绍二、数据分析2.1 获取一天的数据2.2 开始一天的数据的分析2.3 循环日期进行多天的数据分析:2.4 将数据写入excel表格中三、完整代码四、运行结果

一、需求介绍

该需求主要是分析彩票的历史数据

客户的需求是根据彩票的前两期的情况,如果存在某个斜着的两个数字相等,那么就买第三期的同一个位置处的彩票

对于1、,如果相等的数字是:1-5,那就买6-10,如果相等的数字是:6-10,那就买1-5;

对于2、,如果相等的数字是:1-5,那就买1-5,如果相等的数字是:6-10,,那就买6-10。

在这里插入图片描述
在这里插入图片描述

然后,根据这个方案,有可能会买中,但是也有可能买不中,于是,客户希望我可以统计出来在100天中,按照这种方法,连续6次以及6次以上的购买彩票才能够命中一次奖的次数以及分别所对应的时间,对于这个案例,我们下面详细分析。

二、数据分析

(在这里,我们先利用 Jupyter Notebook 来进行分析,然后,在得到成果以后,利用 PyCharm 来进行完整的程序设计。)

2.1 获取一天的数据

打开如下图所示的界面可以获取到网址以及请求头:

网址(历史数据的网址)

在这里插入图片描述

请求头

在这里插入图片描述

然后我们在程序中进行代码书写获取数据:

在这里插入图片描述

在这里插入图片描述

然后进行一定的预处理:

在这里插入图片描述

2.2 开始一天的数据的分析

这里我们直接展示代码:


def reverse_list(lst):
    """
    准换列表的先后顺序
    :param lst: 原始列表
    :return: 新的列表
    """
    return [ele for ele in reversed(lst)]



low_list = ["01", "02", "03", "04", "05"]
# 设置比较小的数字的列表
high_list = ["06", "07", "08", "09", "10"]
# 设置比较大的数字的列表
N = 0
# 设置一个数字N来记录一共有多少期可以购买
n = 0
# 设置一个数字n来记录命中了多少期彩票
record_number = 1  
# 设置记录数据的一个判断值
list_data_number = []
# 设置一个空的列表来存储一天之中的连续挂掉的期数
dict_time_record = {}
# 设置一个空的字典来存储连挂掉的期数满足所列条件的时间节点
for k in range(1152):  
    # 循环遍历所有的数据点
    if k < 1150:
        new_result1 = reverse_list(new_response["result"]["data"])[k]  
        # 第一期数据
        new_result2 = reverse_list(new_response["result"]["data"])[k + 1]  
        # 第二期数据
        new_result3 = reverse_list(new_response["result"]["data"])[k + 2]  
        # 第三期数据
        data1 = new_result1['preDrawCode'].split(',')
        # 第一期数据
        data2 = new_result2['preDrawCode'].split(',')
        # 第二期数据
        data3 = new_result3['preDrawCode'].split(',')
        # 第三期数据
        for m in range(10):
            # 通过循环来判断是否满足购买的条件,并且实现一定的功能
            if m == 0:
                if data2[0] == data1[1]:  
                    # 如果相等就要结束循环
                    N += 1
                    # 可以购买的期数应该要自加一
                    if (data2[0] in low_list and data3[0] in low_list) or (data2[0] in high_list and data3[0] in high_list):
                        n += 1
                        # 命中的期数应该要自加一
                        # 如果命中了的话,本轮结束,开启下一轮
                        list_data_number.append(record_number)
                        if f"{record_number}" in dict_time_record.keys():
                            # 如果已经有了这个键,那么值添加时间点
                            dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                        else:
                            # 如果没有这个键,那么添加一个键值对,值为一个列表,而且初始化为当前的时间
                            dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]
                        record_number = 1  
                        # 初始化下一轮的开始
                    else:
                        record_number += 1  
                        # 如果没有命中的话,次数就应该要自加一
                    break  
                    # 如果满足相等的条件就要结束循环
            elif m == 9:  
                # 与上面差不多的算法
                if data2[9] == data1[8]:  
                    # 如果相等
                    N += 1
                    if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list):
                        n += 1
                        list_data_number.append(record_number)
                        if f"{record_number}" in dict_time_record.keys():
                            dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                        else:
                            dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]
                        record_number = 1
                    else:
                        record_number += 1
                    break
            else:  
                # 与上面差不多的算法
                if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:  
                    # 如果相等
                    N += 1
                    if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list):
                        n += 1
                        list_data_number.append(record_number)
                        if f"{record_number}" in dict_time_record.keys():
                            dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                        else:
                            dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]
                        record_number = 1
                    else:
                        record_number += 1
                    break
print(f"日期:{new_response['result']['data'][0]['preDrawTime'][:10]},总的梯子数为{N}个,一共有{n}次命中,一共有{N - n}次挂了")
# 打印时间,以及,可以购买的期数,命中的期数,没有命中的期数
list_data_number.sort()
# 按照大小顺序来进行排序
dict_record = {}
# 设置空字典进行记录
for i in list_data_number:
    if f"{i}" in dict_record.keys():  # 判断是否已经有了这个数字?
        dict_record[f"{i}"] += 1
        # 如果有的话,那么就会自加一
    else:  # 如果没有的话,那么就会创建并且赋值等于 1
        dict_record[f"{i}"] = 1
        # 创建一个新的字典元素,然后进行赋值为 1
for j in dict_record.keys():
    if (int(j) >= 6) and (int(j) < 15):
        # 实际的结果表明,我们需要的是大于等于6期的数据,而没有出现大于15的数据,因此有这样的一个关系式
        print(f"买{j}次才中奖的次数为{dict_record[j]}")
        # 打印相关信息
        print(dict_time_record[j])
        str0 = ""
        for letter in dict_time_record[j]:
            str0 += letter
            str0 += ", "
        print(str0)
        # 打印相关信息

运行结果的展示如下图所示:

在这里插入图片描述

2.3 循环日期进行多天的数据分析:

首先设置一个事件列表来记录需要统计哪些天的数据:

代码:


data_list = []
for h in range(31):
    data_list.append(f'1-{h + 1}')
for h in range(28):
    data_list.append(f'2-{h + 1}')
for h in range(31):
    data_list.append(f'3-{h + 1}')
for h in range(20):
    data_list.append(f'4-{h + 1}')

通过上述的代码,我们即实现了时间列表的设置,然后我们循环遍历这个列表访问不同日期的彩票数据即就是得到了不同时间的数据,然后再利用上述的分析方法来进行数据分析,即就是可以得到了多天的彩票数据分析的结果了。

2.4 将数据写入Excel表格中

这里我们可以采用xlwt 模块来进行excel表格的写入操作啦,具体的写入就不必过多赘述了。

三、完整代码

以下是完整的代码:


import requests
import chardet
import JSON
import xlwt  # excel 表格数据处理的对应模块


def reverse_list(lst):
    """
    准换列表的先后顺序
    :param lst: 原始列表
    :return: 新的列表
    """
    return [ele for ele in reversed(lst)]


data_list = []
for h in range(31):
    data_list.append(f'1-{h + 1}')
for h in range(28):
    data_list.append(f'2-{h + 1}')
for h in range(31):
    data_list.append(f'3-{h + 1}')
for h in range(20):
    data_list.append(f'4-{h + 1}')


wb = xlwt.Workbook()  # 创建 excel 表格
sh = wb.add_sheet('彩票分析数据处理')  # 创建一个 表单
sh.write(0, 0, "日期")
sh.write(0, 1, "梯子数目")
sh.write(0, 2, "命中数目")
sh.write(0, 3, "挂的数目")
sh.write(0, 4, "6次中的数目")
sh.write(0, 5, "6次中的时间")
sh.write(0, 6, "7次中的数目")
sh.write(0, 7, "7次中的时间")
sh.write(0, 8, "8次中的数目")
sh.write(0, 9, "8次中的时间")
sh.write(0, 10, "9次中的数目")
sh.write(0, 11, "9次中的时间")
sh.write(0, 12, "10次中的数目")
sh.write(0, 13, "10次中的时间")
sh.write(0, 14, "11次中的数目")
sh.write(0, 15, "11次中的时间")
sh.write(0, 16, "12次中的数目")
sh.write(0, 17, "12次中的时间")
sh.write(0, 18, "13次中的数目")
sh.write(0, 19, "13次中的时间")
sh.write(0, 20, "14次中的数目")
sh.write(0, 21, "14次中的时间")
# wb.save('test4.xls')


sheet_seek_position = 1
# 设置表格的初始位置为 1
for data in data_list:
    low_list = ["01", "02", "03", "04", "05"]
    high_list = ["06", "07", "08", "09", "10"]
    N = 0
    n = 0
    url = f'https://api.api68.com/pks/getPksHistoryList.do?date=2021-{data}&lotCode=10037'
    headers = {
        'User-Agent':
            'Mozilla/5.0 (windows NT 10.0; Win64; x64) '
            'AppleWEBKit/537.36 (Khtml, like Gecko) '
            'Chrome/90.0.4430.72 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    response.encoding = chardet.detect(response.content)['encoding']
    new_response = json.loads(response.text)
    sh.write(sheet_seek_position, 0, new_response['result']['data'][0]['preDrawTime'][:10])
    # 在表格的第一个位置处写入时间,意即:data
    record_number = 1  # 记录数据的一个判断值,设置为第一次,应该是要放在最外面的啦
    list_data_number = []
    # 设置一个空列表来存储一天之中的连续挂的期数
    dict_time_record = {}
    for k in range(1152):
        # record_number = 1,应该要放外面
        # 记录数据的一个判断值,设置为第一次
        if k < 1150:
            new_result1 = reverse_list(new_response["result"]["data"])[k]
            new_result2 = reverse_list(new_response["result"]["data"])[k + 1]
            new_result3 = reverse_list(new_response["result"]["data"])[k + 2]
            data1 = new_result1['preDrawCode'].split(',')
            data2 = new_result2['preDrawCode'].split(',')
            data3 = new_result3['preDrawCode'].split(',')
            for m in range(10):
                if m == 0:
                    if data2[0] == data1[1]:

                        N += 1
                        if (data2[0] in low_list and data3[0] in high_list) or (data2[0] in high_list and data3[0] in low_list):
                            n += 1
                            # 如果命中了的话,本轮结束,开启下一轮
                            list_data_number.append(record_number)

                            if f"{record_number}" in dict_time_record.keys():
                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                            else:
                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]


                            # print(record_number)
                            record_number = 1  # 初始化
                        else:
                            record_number += 1  # 没中,次数加一
                            # 自加一
                        break
                elif m == 9:
                    if data2[9] == data1[8]:
                        N += 1
                        if (data2[9] in low_list and data3[9] in high_list) or (data2[9] in high_list and data3[9] in low_list):
                            n += 1
                            list_data_number.append(record_number)

                            if f"{record_number}" in dict_time_record.keys():
                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                            else:
                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]


                            # print(record_number)
                            record_number = 1
                        else:
                            record_number += 1
                        break
                else:
                    if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:
                        N += 1
                        if (data2[m] in low_list and data3[m] in high_list) or (data2[m] in high_list and data3[m] in low_list):
                            n += 1
                            list_data_number.append(record_number)

                            if f"{record_number}" in dict_time_record.keys():
                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                            else:
                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]


                            # print(record_number)
                            record_number = 1
                        else:
                            record_number += 1
                        break
    print(f"日期:{new_response['result']['data'][0]['preDrawTime'][:10]},总的梯子数为{N}个,一共有{n}次命中,一共有{N - n}次挂了")
    sh.write(sheet_seek_position, 1, N)
    sh.write(sheet_seek_position, 2, n)
    sh.write(sheet_seek_position, 3, N - n)

    # new_list_data_number = list_data_number.sort()
    list_data_number.sort()
    # 进行排序
    dict_record = {}
    # 设置空字典

    for i in list_data_number:
        if f"{i}" in dict_record.keys():  # 判断是否已经有了这个数字?
            dict_record[f"{i}"] += 1
            # 如果有的话,那么就会自加一
        else:  # 如果没有的话,那么就会创建并且赋值等于 1
            dict_record[f"{i}"] = 1
            # 创建一个新的字典元素,然后进行赋值为 1
    # print(dict_record)
    # print(f"买彩票第几次才中奖?")
    # print(f"按照我们的规律买彩票的情况:")
    for j in dict_record.keys():
        if (int(j) >= 6) and (int(j) < 15):
            print(f"买{j}次才中奖的次数为{dict_record[j]}")
            print(dict_time_record[j])
            str0 = ""
            for letter in dict_time_record[j]:
                str0 += letter
                str0 += ", "
            print(str0)
            sh.write(sheet_seek_position, 4 + (int(j) - 6) * 2, dict_record[j])
            # 写入几次
            sh.write(sheet_seek_position, 4 + (int(j) - 6) * 2 + 1, str0[:-2])  
            # 注意这里应该要改为 -2
            # 写入几次对应的时间
            # print(j)
    sheet_seek_position += 1
    # 每次写完了以后,要对位置进行换行,换到下一行,从而方便下一行的写入


# 保存
wb.save('极速飞艇彩票分析结果.xls')

四、运行结果

展示1、

在这里插入图片描述

展示2、

在这里插入图片描述

从而,我们便解决了极速飞艇的彩票的数据分析

然后,我们只需要稍稍改变一点点算法,其他的部分是完全一样的啦,从而即就是可以实现极速赛车的数据分析了啦。
修改的代码在下面列出来了:


  for m in range(10):
                if m == 0:
                    if data2[0] == data1[1]:

                        N += 1
                        if (data2[0] in low_list and data3[0] in low_list) or (data2[0] in high_list and data3[0] in high_list):
                            n += 1
                            # 如果命中了的话,本轮结束,开启下一轮
                            list_data_number.append(record_number)

                            if f"{record_number}" in dict_time_record.keys():
                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                            else:
                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]


                            # print(record_number)
                            record_number = 1  # 初始化
                        else:
                            record_number += 1  # 没中,次数加一
                            # 自加一
                        break
                elif m == 9:
                    if data2[9] == data1[8]:
                        N += 1
                        if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list):
                            n += 1
                            list_data_number.append(record_number)

                            if f"{record_number}" in dict_time_record.keys():
                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                            else:
                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]


                            # print(record_number)
                            record_number = 1
                        else:
                            record_number += 1
                        break
                else:
                    if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:
                        N += 1
                        if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list):
                            n += 1
                            list_data_number.append(record_number)

                            if f"{record_number}" in dict_time_record.keys():
                                dict_time_record[f"{record_number}"].append(new_result3['preDrawTime'][11:])
                            else:
                                dict_time_record[f"{record_number}"] = [new_result3['preDrawTime'][11:]]


                            # print(record_number)
                            record_number = 1
                        else:
                            record_number += 1
                        break

五、总结

总而言之,这个就是我学习 python 到现在为止所接的第一单啦,这个需求不得不说确实是比较简单的啦,但是,我在完成这个任务的过程中,的确是学到了以前一些我并不太注意的东西,同时呢,也熟练的掌握了一些编程的技巧,虽然说这种比较简单的活报酬不会太高,但是,我认为在这个过程中我确实学到了不少东西,同时也成长了不少,因此,无论怎么说,其实也都还是挺不错的啦。

到此这篇关于Python数据分析之彩票的历史数据的文章就介绍到这了,更多相关python分析彩票数据内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python数据分析之彩票的历史数据

本文链接: https://www.lsjlt.com/news/124767.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python数据分析之彩票的历史数据
    目录一、需求介绍二、数据分析2.1 获取一天的数据2.2 开始一天的数据的分析2.3 循环日期进行多天的数据分析:2.4 将数据写入Excel表格中三、完整代码四、运行结果...
    99+
    2024-04-02
  • python如何实现股票历史数据可视化示例
    这篇文章主要介绍python如何实现股票历史数据可视化示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!投资有风险,选择需谨慎。 股票交易数据分析可直观股市走向,对于如何把握股票行情,快速解读股票交易数据有...
    99+
    2023-06-15
  • 用python做股票数据分析
    本文我们一起用python来对某只股票的所有历史日数据,做一个探索性的分析,看看能不能有一些有趣的发现,希望能激起你对金融数据分析的兴趣。主要用到numpy,pandas模块的一些基本用法。本文的所有...
    99+
    2023-10-18
    python 数据分析 开发语言 Python入门 Python爬虫 数据挖掘
  • C/C++中Qt数据库与Chart历史数据展示的示例分析
    这篇文章主要为大家展示了“C/C++中Qt数据库与Chart历史数据展示的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C/C++中Qt数据库与Chart历史数据展示的示例分析”这篇文章...
    99+
    2023-06-25
  • python数据分析之pandas数据选
      Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用。本文主要介绍Pandas的几种数据选取的方法。   Pandas中,数据主要保存为Dataframe和Series是数据结构,这两种数据结构数据...
    99+
    2023-01-30
    数据 python pandas
  • 阿里云数据库历史性盈利分析报告
    简介 阿里云数据库是阿里巴巴集团旗下的云计算服务品牌,提供了一系列的数据库产品和服务。本文将对阿里云数据库的历史性盈利情况进行分析,并探讨其在市场竞争中的优势。阿里云数据库的历史性盈利情况阿里云数据库自成立以来,一直保持着强劲的增长势头。根...
    99+
    2024-01-30
    阿里 历史性 分析报告
  • Python数据分析之分析千万级淘宝数据
    目录1、项目背景与分析说明2、导入相关库3、数据预览、数据预处理4、模型构建1)流量指标的处理2)用户行为指标3)漏斗分析4)客户价值分析(RFM分析)1、项目背景与分析说明 1)项...
    99+
    2024-04-02
  • Netdata是否提供历史数据记录和分析功能
    是的,Netdata提供历史数据记录和分析功能。它可以存储历史数据,以便用户可以查看过去一段时间内系统的性能数据。用户可以通过图表和...
    99+
    2024-04-02
  • Python数据分析之绘制m1-m2数据
    目录前言m0-m1-m2 数据获取ppi-cpi 图形绘制总结前言 前文讲述了ppi-cpi的图形绘制,在本文中继续分享另外一个与经济息息相关的货币数据指标M0-M1-M2,在这里还...
    99+
    2024-04-02
  • Python数据分析之Matplotlib数据可视化
    目录1.前言2.Matplotlib概念3.Matplotlib.pyplot基本使用3.数据展示3.1如何选择展示方式3.2绘制折线图3.3绘制柱状图3.3.1普通柱状图3.3.2...
    99+
    2024-04-02
  • 如何在Prometheus中展示历史数据和趋势分析
    要在Prometheus中展示历史数据和趋势分析,可以通过Prometheus提供的查询语言PromQL来实现。以下是一些步骤可以帮...
    99+
    2024-03-04
    Prometheus
  • python爬虫之你好,李焕英电影票房数据分析
    目录一、前言二、影评爬取并词云分析2.1 网站选取2.2 爬取思路2.2.1 获取网页请求2.2.2解析获取的网页2.2.3提取影评数据2.2.4保存文件2.2.5&nbs...
    99+
    2024-04-02
  • Python数据分析之Pandas Dataframe条件筛选遍历的方法
    这篇文章主要介绍“Python数据分析之Pandas Dataframe条件筛选遍历的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python数据分析之Pandas Dat...
    99+
    2023-06-30
  • C/C++Qt数据库与Chart历史数据展示
    在前面的博文中具体介绍了QChart组件是如何绘制各种通用的二维图形的,本章内容将继续延申一个新的知识点,通过数据库存储某一段时间节点数据的走向,当用户通过编辑框提交查询记录时,程序...
    99+
    2024-04-02
  • Python数据分析之PMI数据图形展示
    目录前言PMI 数据获取pmi 图形绘制总结前言 前文讲述了ppi-cpi和m0-m1-m2的图形绘制,在本文中继续分享一个反映经济活动景气度的指标PMI,在本文中还是采用爬虫的方式...
    99+
    2024-04-02
  • Python数据分析:数据驱动成功之路
    Python 数据分析涉及使用 Python 编程语言从各种数据源中收集、清理、探索、建模和可视化数据。它提供了强大的工具和库,例如 NumPy、Pandas、Scikit-learn 和 Matplotlib,使研究人员和分析师能够高...
    99+
    2024-02-17
    Python 数据分析 数据探索 数据建模 可视化 成功
  • Python数据分析之 Pandas Dataframe条件筛选遍历详情
    目录一、条件筛选二、Dataframe数据遍历for...in...语句iteritems()方法iterrows()方法itertuples()方法一、条件筛选 查询Pandas ...
    99+
    2024-04-02
  • Python数据分析库之pandas,你
    写这个系列背后的故事 咦,面试系列的把基础部分都写完啦,哈哈答,接下来要弄啥嘞~ pandas吧 外国人开发的 翻译成汉语叫 熊猫 厉害厉害,很接地气 一个基于numpy的库 干啥的? 做数据分析用的 而数据分析是python体系下一个...
    99+
    2023-01-31
    数据 Python pandas
  • Python数据分析之pandas函数详解
    目录一、apply和applymap二、排序三、处理缺失数据一、apply和applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df...
    99+
    2024-04-02
  • python清洗疫情历史数据的过程详解
    目录1. 数据获取2. 使用python读取csv3.使用pyhon进行数据清洗4. 将清洗的数据自动导入MySql在我2020年大三的一个实训的大作业中,我整了一个新冠肺炎疫情的数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作