iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深入浅析Python数据分析的过程记录
  • 523
分享到

深入浅析Python数据分析的过程记录

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

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

摘要

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

一、需求介绍

该需求主要是分析某一种数据的历史数据。

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

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

--结束END--

本文标题: 深入浅析Python数据分析的过程记录

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

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

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

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

下载Word文档
猜你喜欢
  • 深入浅析Python数据分析的过程记录
    目录一、需求介绍二、以第1、个为例进行数据分析1、获取一天的数据2、开始一天的数据的分析3、循环日期进行多天的数据分析:4、将数据写入Excel表格中三、完整的代码展示:总结一、需求...
    99+
    2024-04-02
  • Python深入浅出分析元类
    目录一、类和对象二、type类三、元类Metaclass四、自定义一个元类一、类和对象 Python属于动态类型的语言,而动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时...
    99+
    2024-04-02
  • 深入浅析JVM中的参数分配
    深入浅析JVM中的参数分配?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、堆参数设置-XX:+PrintGC 使用这个参数,虚拟机启动后,只要遇到GC就会打印日志-XX:...
    99+
    2023-05-31
    jvm
  • Python 数据类型:深入浅出解析数据结构
    列表 (list):存放有序元素的集合 元组 (tuple):存放有序元素的不可变集合 集合 (set):存放无序且不重复元素的集合 字典 (dict):存放键值对的集合 3. 数据结构 数据结构是对数据的组织方式,用于有效存储、检索...
    99+
    2024-04-02
  • 用Python解剖数据:深入数据分析
    深入数据分析: 数据探索 Python提供了一系列库和模块,如NumPy、Pandas和Matplotlib,用于数据探索。这些工具允许您加载、浏览和操作数据,以了解其分布、模式和异常值。例如: import pandas as pd i...
    99+
    2024-02-17
    Python 数据分析 数据探索 数据可视化 机器学习
  • Python深入浅出分析enum枚举类
    目录枚举类Enum总结枚举类Enum 枚举类,在企业开发中用的比较多 当我们需要定义常量时,一个办法是用大写的变量通过整数来定义,例如月份: # 当项目中需要使用12个月份时JAN ...
    99+
    2024-04-02
  • 深入浅析Spring的数据库连接池
    深入浅析Spring的数据库连接池?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据库连接池对一个简单的数据库应用,由于对数据库的访问不是很频繁,这时可以简单地...
    99+
    2023-05-31
    spring 数据库连接池
  • 深入浅析Java中的数组
    深入浅析Java中的数组?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。数组的用处是什么呢?——当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,...
    99+
    2023-05-31
    java ava 数组
  • 深入浅析Java的数据结构中的图
    本篇文章为大家展示了深入浅析Java的数据结构中的图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1,摘要:从数据的表示方法来说,有二种表示图的方式:一种是邻接矩阵,其实是一个二维数组;一种是邻接表...
    99+
    2023-05-31
    java 数据结构
  • 深入浅析Android 项目中SQLite的数据表
    这篇文章给大家介绍深入浅析Android 项目中SQLite的数据表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android SQLite数据库以前写PHP的时候,内置了print_r()和var_dump()两个...
    99+
    2023-05-31
    android sqlite 数据表
  • 深入浅析java中的数据处理机制
    这篇文章给大家介绍深入浅析java中的数据处理机制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MyFile .java:import java.io.BufferedReader;import java.io.Fil...
    99+
    2023-05-31
    java 数据处理机制 ava
  • 深入浅析Node中的util.promisify()函数
    Node.js 内置的 util 包有一个 promisify() 函数,可以将基于回调的函数转换为基于 Promise 的函数。本文就来给大家介绍一下Node.js 中的 util.promisify() 函数,希望对大家有所帮助。让你可...
    99+
    2023-05-14
    JavaScript Node.js
  • 深入浅析java中的维数组
    深入浅析java中的维数组?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。public class test { public static void main(Strin...
    99+
    2023-05-31
    java 维数组 ava
  • Python数据分析过程是怎样的
    这篇文章主要介绍“Python数据分析过程是怎样的”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python数据分析过程是怎样的”文章能帮助大家解决问题。一、需求介绍该需求主要是分析某一种数据的历史...
    99+
    2023-06-26
  • SpringCloud修改Feign日志记录级别过程浅析
    目录前言1. 介绍2. 方式一3. 方式二前言 本次示例代码的文件结构如下图所示。 1. 介绍 Feign 允许我们自定义配置,下面是 Feign 可以修改的配置。 类型作用说明f...
    99+
    2023-02-15
    SpringCloud修改Feign日志级别 SpringCloud Feign日志
  • 深入分析GolangServer源码实现过程
    func (srv *Server) Serve(l net.Listener) error { ...... for { rw, err := l.Accept() i...
    99+
    2023-02-02
    Go Server Go Server源码
  • Python解析JSON对象的全过程记录
    前言 本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象。 json处理模块的主要任务,是将一个JSON对象,转换成Python数据类型数据进行处理,或者...
    99+
    2024-04-02
  • C语言深入浅出分析函数指针
    我们先看一个代码: #include<stdio.h> void test() { printf("haha\n"); } int main() { printf("...
    99+
    2024-04-02
  • Python 数据分析的权威指南:深入探索
    Python 已成为数据分析领域的主流语言,提供了一套强大的工具和库,可用于数据处理、可视化和建模。本指南旨在为数据分析师提供全面概述,涵盖 Python 数据分析的关键方面,帮助他们充分利用此功能强大的语言。 数据处理和操作 NumP...
    99+
    2024-03-12
    简介
  • 深入浅析Java中 class文件的数据类型
    深入浅析Java中 class文件的数据类型?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。CONSTANT_Integer_info一个常量池中的CONSTANT_Intege...
    99+
    2023-05-31
    java class ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作