Python数据分析的过程记录

Python数据分析的过程记录第一次Python接单的过程记录文章目录第一次Python接单的过程记录

大家好,又见面了,我是你们的朋友全栈君。

Python数据分析的过程记录

一、需求介绍

该需求主要是分析某一种数据的历史数据,彩票的名称为:

1、
链接一:https://www.dsn665.com/view/jisuft/pk10kai_history.html

2、
链接二:https://www.dsn665.com/view/jisusaiche/pk10kai.html

客户的需求是根据该数据的前两期的情况,如果存在某个斜着的两个数字相等,那么就买第三期的同一个位置处的彩票,
对于1、,如果相等的数字是:1-5,那就买6-10,如果相等的数字是:6-10,那就买1-5;
对于2、,如果相等的数字是:1-5,那就买1-5,如果相等的数字是:6-10,,那就买6-10。

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

二、以第1、个为例进行数据分析

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

1、获取一天的数据

打开如下图所示的界面可以获取到网址以及请求头:
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)
        # 打印相关信息

运行结果的展示如下图所示:
在这里插入图片描述

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}')

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

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 到现在为止所接的第一单啦,这个需求不得不说确实是比较简单的啦,但是,我在完成这个任务的过程中,的确是学到了以前一些我并不太注意的东西,同时呢,也熟练的掌握了一些编程的技巧,虽然说这种比较简单的活报酬不会太高,但是,我认为在这个过程中我确实学到了不少东西,同时也成长了不少,因此,无论怎么说,其实也都还是挺不错的啦。
最后呢如果想了解我的第一次接单的程序运行实例,可以参见我的资源里面的“第一次接单案例”视频啦。。
最后感谢阅读啦

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146174.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何将int类型转换为char_int类型转换成char类型

    如何将int类型转换为char_int类型转换成char类型近来面试遇到一个问题,通过控制台输入一个12位的数字,然后进行一些计算,然后被困在如何把char类型的数字转换成int类型。通过搜索,找到两个解决办法。1、把char型转换成int类型      for(inti=0;i&lt;str.length();i++) {     chartemp_char=str.charAt(i); //把字符转换…

  • maven 菜鸟教程_runoob菜鸟教程app

    maven 菜鸟教程_runoob菜鸟教程app1.什么是maven?    maven是一个跨平台的项目管理工具。  作为Apache组织中的一个颇为成功的开源项目,Maven只要服务于Java平台的项目构建、依赖管理和项目信息管理。  Maven不涉及编码,但是涉及编码的方式(导入jar方式)2.项目的构建方式  编译————&gt;运行单元——————&gt;生成文档——————&gt;打包和部署  …

  • 最简单的纯js实现点击展开二级菜单功能

    最简单的纯js实现点击展开二级菜单功能虽然,jQuery已经非常好用了,但是实际的开发项目中,还是有很多限制,比如项目组奇葩的要求,不能使用任何插件,当然,也是考虑插件占用资源,毕竟100+KB对与小型项目来说还是非常大的。我最近就遇到做个点击展开二级菜单的要求,当然只能用原生的JS去写来实现,我借鉴了网上的一个案例,补充一下,分享一下:如果,默认打开页面进来时二级菜单是隐藏的,需要点击才能展现二级菜单,再点击就是隐藏二级菜单。这

  • 10.Vuex组件中的mapState、mapGetters、mapMutations、mapActions等辅助函数

    10.Vuex组件中的mapState、mapGetters、mapMutations、mapActions等辅助函数State1.state中的数据,组件中如何获取this.$store.state.xxx属性2.mapState辅助函数1.引入mapStateimport{mapState}from’vuex’2.在computed计算属性中使用exportdefault{computed:mapState(…

  • 前端面试题:vue响应式原理 Vdom diff

    前端面试题:vue响应式原理 Vdom diffvue的响应式原理,也算是面试中再常见不过的题目了,之前遇见这道题目只会说:利用的是Object.defineProperty进行的数据劫持,监听数据的变化,通知watcher进行的数据更新。总的来说这是没错的,但是只要面试官进一步的问,那一定是满脸的问号。昨天一天也是没有面试机会,所以就研究了一天这个东西,算是搞明白了(自我感觉),今天就把他来写成文章,希望大佬看到哪里不对给出指导,本文可能会有点长。上正文。现在最流行的框架非vue,react莫属,他们流行起来的原因,离不开响应式,因为它在做一些.

  • 《前端运维》一、Linux基础–11服务

    首先服务的概念,对于linux服务器来说,其中大多数的软件都算是服务,比如nginx、mysql、Jenkins等等。下面我们就来学习一下linux中有关服务的一些内容。一、服务简介和分类1、运行

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号