Python数据分析的过程记录

文章目录

  • Python数据分析的过程记录
    • 一、需求介绍
    • 二、以第1、个为例进行数据分析
      • 1、获取一天的数据
      • 2、开始一天的数据的分析
      • 3、循环日期进行多天的数据分析:
      • 4、将数据写入Excel表格中
    • 三、完整的代码展示:
  • 总结

一、需求介绍

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

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 += 1if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list):n += 1list_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 = 1else:record_number += 1breakelse:  # 与上面差不多的算法if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:  # 如果相等N += 1if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list):n += 1list_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 = 1else:record_number += 1break
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:  # 如果没有的话,那么就会创建并且赋值等于 1dict_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 += letterstr0 += ", "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 = 0n = 0url = 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])# 在表格的第一个位置处写入时间,意即:datarecord_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 += 1if (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  # 没中,次数加一# 自加一breakelif m == 9:if data2[9] == data1[8]:N += 1if (data2[9] in low_list and data3[9] in high_list) or (data2[9] in high_list and data3[9] in low_list):n += 1list_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 = 1else:record_number += 1breakelse:if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:N += 1if (data2[m] in low_list and data3[m] in high_list) or (data2[m] in high_list and data3[m] in low_list):n += 1list_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 = 1else:record_number += 1breakprint(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:  # 如果没有的话,那么就会创建并且赋值等于 1dict_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 += letterstr0 += ", "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 += 1if (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  # 没中,次数加一# 自加一breakelif m == 9:if data2[9] == data1[8]:N += 1if (data2[9] in low_list and data3[9] in low_list) or (data2[9] in high_list and data3[9] in high_list):n += 1list_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 = 1else:record_number += 1breakelse:if data2[m] == data1[m + 1] or data2[m] == data1[m - 1]:N += 1if (data2[m] in low_list and data3[m] in low_list) or (data2[m] in high_list and data3[m] in high_list):n += 1list_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 = 1else:record_number += 1break

总结

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

Python数据分析的过程记录相关推荐

  1. python代码执行过程记录_这款神器,能把 Python 代码执行过程看地一清二楚

    原标题:这款神器,能把 Python 代码执行过程看地一清二楚 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 机器之心报道,参与:一鸣.杜伟 Python 是一门 ...

  2. python代码执行过程记录_优雅的记录Python程序日志

    1 本篇概要 logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 2 前言 在使用Python编写程序的过程中,我们经常使用print()函数打印一些信息到控制 ...

  3. python代码执行过程记录_详解python程序中记录日志的方法

    日志可以用来记录应用程序的状态.错误和信息消息,也经常作为调试程序的工具.它的重要性就不多说了,直接进入正题. python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.IN ...

  4. python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程

    题记: 最近知道了有一种方法,可以获取到程序的执行流程,具体做法是先获取程序中每一个函数的地址,在这些地址上设置断点,然后让程序运行起来,hook调试器,断点中断时,不要停下来继续执行,并记录命中的断 ...

  5. 使用python数据分析_如何使用Python提升您的数据分析技能

    使用python数据分析 If you're learning Python, you've likely heard about sci-kit-learn, NumPy and Pandas. A ...

  6. python数据分析第二讲_七月在线 Python数据分析 第二课 Numpy

    本人有一丢丢编程基础,特此学习七月在线课程--Python 数据分析.本文记录了学习第二课Numpy的一些感受和心得. 第二讲的内容包括Numpy, ndarray, ndarray的取值赋值与切片. ...

  7. Python数据分析实战,,美国总统大选数据可视化分析[基于pandas]

    目录 前言 一.任务详情 二.数据集来源 三.实现过程 四.运行代码 前言 在学习Python数据分析的过程中,是离不开实战的. 今天跟大家带来数据分析可视化经典项目,美国总统大选数据可视化分析,希望 ...

  8. python数据分析与挖掘项目实战记录

    python数据挖掘项目实战记录 取自<Python数据分析与挖掘实战>一书,整理各个项目中用到的数据处理方法: 数据预处理方法 建立模型方法 绘制图形 对于分类问题:用模型分类:混淆矩阵 ...

  9. 从Oracle读取数据并用python处理过程记录(构建BARRA因子遇到的问题)

    第一次用pycharm运行python语句,第一次从Oracle读数据,出现了无数的bug..把过程记录一下以提升效率 1.数据读取并处理成dataframe格式:用逐行查询的方式 import cx ...

最新文章

  1. Udacity机器人软件工程师课程笔记(十六)-机械臂仿真控制实例(其一)-Gazebo、RViz和Moveit!
  2. 【ICML2021】学习权衡不完美的示范
  3. Windows Live Windows Phone 7
  4. 团队作业1(陈爽、夏江华、李瑞超、甘彩娈、吕乐乐)
  5. 杭电acm2043密码
  6. III USP Freshmen ContestH. MaratonIME gets candies
  7. Sitecore 个性化 - 近距离和过于个人化?
  8. HashMap中傻傻分不清楚的那些概念
  9. MySQL数据库安全配置
  10. 计算机标准化管理制度,计算机中心标准化管理.doc
  11. 最小环(【CCF】NOI Online能力测试 提高组第三题)
  12. mysql去掉两个最高分_MySQL中查询、删除重复记录的方法大全
  13. python cv.rectangle_Python OpenCV cv2.rectangle()用法及代码示例
  14. Server Transport model
  15. 数据库维护管理和监视新特性
  16. python之使用pyaudio录音和格式转化
  17. 微信小程序后端用python_微信小程序后端开发用python
  18. 《LaTeX入门》刘海洋的杂谈勾股定理的完整源码
  19. 云服务器公网架设传奇,传奇私服服务器端在云服务器架设,全版本通用的传奇游戏架设教程...
  20. MyBatis实战【上】

热门文章

  1. Camunda入门(二) - 启动Camunda管理平台
  2. Flyway对比Liquibase
  3. 李笑来~执行力WWH
  4. MySql的数据文件迁移
  5. keras里predict函数预测速度慢的优化方法
  6. angular中ag-grid实战
  7. 基于微信云开发的微信小程序之搜索功能的实现
  8. 程序员发展职业规划_在职阿里6年,一个29岁女程序员的心声
  9. Java实践(实验一)
  10. python zip函数的运用