0

0

主流互联网游戏评论情感态势分析

P粉084495128

P粉084495128

发布时间:2025-07-24 11:42:55

|

822人浏览过

|

来源于php中文网

原创

随着游戏市场的崛起,游戏相关从业人员急需了解玩家对游戏的实际体验,以便有针对性地指导游戏运营和开发。因此可基于深度学习模型对玩家评论进行情感分析,做网络游戏舆情态势分析项目。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

主流互联网游戏评论情感态势分析 - php中文网

主流互联网游戏评论情感态势分析项目

应用场景:随着游戏市场的崛起,游戏相关从业人员急需了解玩家对游戏的实际体验,以便有针对性地指导游戏运营和开发。与此同时,在舆情信息监测的实际业务中,也存在着信息处理效率过低以及分析结果过于主观等问题。因此,为了解决游戏评论体量大、更新快、含义不清的问题,可基于深度学习模型对玩家评论进行情感分析,做网络游戏舆情态势分析项目。

项目简介:本次项目利用情感分析预训练模型SKEP完成模型训练与预测,利用爬虫程序爬取3个主流平台(TapTap、bilibili、豆瓣)的三个主流互联网游戏(《原神》、《王者荣耀》、《和平精英》)的用户评论进行数据分析,最后利用pyqt5的qtdeisgner进行ui设计,完成数据可视化。

In [15]
!tree
       
.
├── 4340075.ipynb
├── data
│   └── data109273
│       └── taptap_review_ready.csv
├── __pycache__
│   ├── photo.cpython-38.pyc
│   └── utils.cpython-37.pyc
├── pyqt5
│   ├── 5.ui
│   ├── a1.py
│   ├── a1.spec
│   ├── ciyun
│   │   ├── cb.png
│   │   ├── cd.png
│   │   ├── ct.png
│   │   ├── logo.ico
│   │   ├── wb.png
│   │   ├── wd.png
│   │   ├── wt.png
│   │   ├── yb.png
│   │   ├── yd.png
│   │   ├── yt.png
│   │   ├── 原神.jpg
│   │   ├── 和平精英.jpg
│   │   ├── 新建文本文档.txt
│   │   └── 王者.jpg
│   ├── dist
│   │   └── 游戏平台情感分析.exe
│   ├── photo.py
│   └── photo.qrc
├── skep_ckpt
│   ├── model_0
│   ├── model_100
│   │   ├── model_config.json
│   │   ├── model_state.pdparams
│   │   ├── tokenizer_config.json
│   │   └── vocab.txt
│   └── model_200
│       ├── model_config.json
│       ├── model_state.pdparams
│       ├── tokenizer_config.json
│       └── vocab.txt
├── spider
│   ├── data
│   │   ├── bilibili_chiji.csv
│   │   ├── bilibili_wangzhe.csv
│   │   ├── bilibili_yuanshen.csv
│   │   ├── douban_chiji.csv
│   │   ├── douban_wangzhe.csv
│   │   ├── douban_yuanshen.csv
│   │   ├── TapTap_chiji.csv
│   │   ├── TapTap_wangzhe.csv
│   │   └── TapTap_yuanshen.csv
│   └── work
│       ├── bilibili_spider.py
│       ├── douban_spider.py
│       └── TapTap_spider.py
├── utils.py
├── wordcloud
│   ├── bilibili_chiji.png
│   ├── bilibili_wangzhe.png
│   ├── bilibili_yuanshen.png
│   ├── douban_chiji.png
│   ├── douban_wangzhe.png
│   ├── douban_yuanshen.png
│   ├── TapTap_chiji.png
│   ├── TapTap_wangzhe.png
│   ├── TapTap_yuanshen.png
│   └── wordcloud.py
├── work
└── 情感分析结果.xlsx

15 directories, 56 files
       

项目文件:

主流互联网游戏评论情感态势分析 - php中文网        

In [3]
#引入需要的库import paddlenlp as ppnlpimport paddlefrom paddlenlp.datasets import load_datasetfrom paddlenlp.datasets import MapDatasetfrom paddlenlp.data import Stack, Pad, Tupleimport paddle.nn.functional as Fimport numpy as npimport pandas as pdfrom functools import partialimport os
   

采用数据集为aistdio上“TapTap游戏评论”数据集,链接:https://aistudio.baidu.com/aistudio/datasetdetail/101119

包含TapTap上约300款游戏的标签评论,可用于情感分析的应用,共4888个数据示例

采用该数据集优点:涉及游戏种类较多,训练数据样本较多

缺点:缺乏目前主流互联网游戏相关评论,网络热词较少覆盖,无阴阳怪气评论

In [4]
#读取数据集并划分训练集与验证集df=pd.read_csv('data/data109273/taptap_review_ready.csv')#读取数据集的评论内容review = df.review.tolist()#读取数据集的情感指数sentiment = df.sentiment.tolist()

full_data=[]for i in range(len(review)):    #将每条评论内容与情感指数形成字典并添加到full_data列表
    dic = {'text':review[i],'label':sentiment[i]}
    full_data.append(dic)print(len(full_data))#数据集切分train_ds = MapDataset(full_data[:4400])
dev_ds = MapDataset(full_data[4400:4880])
label_list = ['0', '1']print(len(train_ds))print(train_ds[3])
       
4888
4400
{'text': '对我来说,这种游戏让我感觉很好。刚开始是因为同学推荐我玩,我玩了一下,哇,真的很好,然后,最近没怎么登录游戏,怎么关服了?这就很难受。希望反斗联盟快速上架,我想玩。等待这种事。对我来说度日如年。我就是觉得那个空投好像有点问题。每次那个空投差不多都在对面基地附近。对面英雄又有点难对付。抢又抢不着。这就特别难受了。', 'label': 1}
       
In [5]
from paddlenlp.transformers import SkepForSequenceClassification, SkepTokenizer# 加载skep模型model = SkepForSequenceClassification.from_pretrained(pretrained_model_name_or_path="skep_ernie_1.0_large_ch", num_classes=len(label_list))# 加载模型对应的Tokenizer,用于数据预处理tokenizer = SkepTokenizer.from_pretrained(pretrained_model_name_or_path="skep_ernie_1.0_large_ch")
       
[2022-07-16 15:24:57,173] [    INFO] - Downloading https://paddlenlp.bj.bcebos.com/models/transformers/skep/skep_ernie_1.0_large_ch.pdparams and saved to /home/aistudio/.paddlenlp/models/skep_ernie_1.0_large_ch
[2022-07-16 15:24:57,176] [    INFO] - Downloading skep_ernie_1.0_large_ch.pdparams from https://paddlenlp.bj.bcebos.com/models/transformers/skep/skep_ernie_1.0_large_ch.pdparams
100%|██████████| 1238309/1238309 [00:17<00:00, 71093.85it/s]
W0716 15:25:14.762745   151 device_context.cc:404] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0716 15:25:14.766620   151 device_context.cc:422] device: 0, cuDNN Version: 7.6.
[2022-07-16 15:25:22,647] [    INFO] - Downloading skep_ernie_1.0_large_ch.vocab.txt from https://paddlenlp.bj.bcebos.com/models/transformers/skep/skep_ernie_1.0_large_ch.vocab.txt
100%|██████████| 55/55 [00:00<00:00, 10636.12it/s]
       
In [6]
#数据预处理def convert_example(example,tokenizer,label_list,max_seq_length=128,is_test=False):
    if is_test:
        text = example['text']    else:
        text = example['text']
        label = example['label']    #tokenizer.encode方法实现切分token,映射token ID以及拼接特殊token
    encoded_inputs = tokenizer.encode(text=text, max_seq_len=max_seq_length)

    input_ids = encoded_inputs["input_ids"]
    token_type_ids = encoded_inputs["token_type_ids"]    if not is_test:
        label_map = {}        for (i, l) in enumerate(label_list):
            label_map[l] = i        # label:情感极性类别    
        label = np.array([label], dtype="int64")        return input_ids, token_type_ids, label    else:        return input_ids, token_type_ids#数据迭代器def create_dataloader(dataset, trans_fn=None, mode='train', batch_size=1, use_gpu=False, pad_token_id=0, batchify_fn=None):
    if trans_fn:
        dataset = dataset.map(trans_fn, lazy=True)    if mode == 'train' and use_gpu:
        sampler = paddle.io.DistributedBatchSampler(dataset=dataset, batch_size=batch_size, shuffle=True)    else:
        shuffle = True if mode == 'train' else False 
        sampler = paddle.io.BatchSampler(dataset=dataset, batch_size=batch_size, shuffle=shuffle) #生成一个取样器
    dataloader = paddle.io.DataLoader(dataset, batch_sampler=sampler, return_list=True, collate_fn=batchify_fn)    return dataloader#将数据处理成模型可读入的数据格式trans_fn = partial(convert_example, tokenizer=tokenizer, label_list=label_list, max_seq_length=128, is_test=False)# 将数据组成批量式数据batchify_fn = lambda samples, fn=Tuple(Pad(axis=0,pad_val=tokenizer.pad_token_id), Pad(axis=0, pad_val=tokenizer.pad_token_id), Stack(dtype="int64")):[data for data in fn(samples)]#batch_size批量数据大小batch_size=64#训练集迭代器train_loader = create_dataloader(train_ds, mode='train', batch_size=batch_size, batchify_fn=batchify_fn, trans_fn=trans_fn)#验证集迭代器dev_loader = create_dataloader(dev_ds, mode='dev', batch_size=batch_size, batchify_fn=batchify_fn, trans_fn=trans_fn)
   
In [7]
#设置训练参数import timefrom utils import evaluate# 训练轮次epochs = 3# 训练过程中保存模型参数的文件夹ckpt_dir = "skep_ckpt"# len(train_loader)一轮训练所需要的step数num_training_steps = len(train_loader) * epochs# Adam优化器optimizer = paddle.optimizer.AdamW(
    learning_rate=2e-5,
    parameters=model.parameters())# 交叉熵损失函数criterion = paddle.nn.loss.CrossEntropyLoss()# accuracy评价指标metric = paddle.metric.Accuracy()
   
In [12]
#模型训练global_step = 0tic_train = time.time()for epoch in range(1, epochs + 1):    for step, batch in enumerate(train_loader, start=1):
        input_ids, token_type_ids, labels = batch        # 喂数据给model
        logits = model(input_ids, token_type_ids)        # 计算损失函数值
        loss = criterion(logits, labels)        # 预测分类概率值
        probs = F.softmax(logits, axis=1)        # 计算acc
        correct = metric.compute(probs, labels)
        metric.update(correct)
        acc = metric.accumulate()

        global_step += 1
        if global_step % 10 == 0:            print(                "global step %d, epoch: %d, batch: %d, loss: %.5f, accu: %.5f, speed: %.2f step/s"
                % (global_step, epoch, step, loss, acc,                    10 / (time.time() - tic_train)))
            tic_train = time.time()        
        # 反向梯度回传,更新参数
        loss.backward()
        optimizer.step()
        optimizer.clear_grad()        if global_step % 100 == 0:
            save_dir = os.path.join(ckpt_dir, "model_%d" % global_step)            if not os.path.exists(save_dir):
                os.makedirs(save_dir)            # 评估当前训练的模型
            evaluate(model, criterion, metric, dev_loader)            # 保存当前模型参数等
            model.save_pretrained(save_dir)            # 保存tokenizer的词表等
            tokenizer.save_pretrained(save_dir)
       
WARNING:root:DataLoader reader thread raised an exception.
Exception in thread Thread-5:
Traceback (most recent call last):
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/threading.py", line 926, in _bootstrap_inner
    self.run()
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py", line 192, in _thread_loop
    six.reraise(*sys.exc_info())
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/six.py", line 719, in reraise
    raise value
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py", line 160, in _thread_loop
    batch = self._dataset_fetcher.fetch(indices)
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/fetcher.py", line 106, in fetch
    data = [self.dataset[idx] for idx in batch_indices]
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/fetcher.py", line 106, in 
    data = [self.dataset[idx] for idx in batch_indices]
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddlenlp/datasets/dataset.py", line 181, in __getitem__
    idx]) if self._transform_pipline else self.new_data[idx]
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddlenlp/datasets/dataset.py", line 172, in _transform
    data = fn(data)
  File "/tmp/ipykernel_3624/1567443302.py", line 6, in convert_example
    text = example['text']
TypeError: tuple indices must be integers or slices, not str
       
---------------------------------------------------------------------------SystemError Traceback (most recent call last)/tmp/ipykernel_3624/864604143.py in  2 tic_train = time.time() 3 for epoch in range(1, epochs + 1): ----> 4for step, batch in enumerate(train_loader, start=1): 5 input_ids, token_type_ids, labels = batch 6  # 喂数据给model /opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py in __next__(self) 195  try: 196  if in_dygraph_mode(): --> 197 data = self._reader.read_next_var_list() 198 data = _restore_batch(data, self._structure_infos.pop(0)) 199 else: SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception. [Hint: Expected killed_ != true, but received killed_:1 == true:1.] (at /paddle/paddle/fluid/operators/reader/blocking_queue.h:166)
In [8]
# 加载训练好的模型参数params_path = save_dir+'/model_state.pdparams'if params_path and os.path.isfile(params_path):    # 加载模型参数
    state_dict = paddle.load(params_path)
    model.set_dict(state_dict)    print("Loaded parameters from %s" % params_path)
       
Loaded parameters from skep_ckpt/model_200/model_state.pdparams
       
In [9]
#定义测试集数据的处理函数def convert_example(example,tokenizer,label_list,max_seq_length=512,is_test=False):
    encoded_inputs = tokenizer(text=example, max_seq_len=max_seq_length)
    input_ids = np.array(encoded_inputs["input_ids"], dtype="int64")
    token_type_ids = np.array(encoded_inputs["token_type_ids"], dtype="int64")    return input_ids, token_type_ids
   
In [10]
#定义预测函数def predict(model, data, tokenizer, label_map, batch_size=1):
    examples = []    for text in data:
        input_ids, token_type_ids = convert_example(text,tokenizer,label_list=label_map.values(),max_seq_length=512,is_test=True)
        examples.append((input_ids, token_type_ids))    #划分数据
    batches = [
        examples[idx:idx + batch_size]        for idx in range(0, len(examples), batch_size)
    ]
    batchify_fn = lambda samples, fn=Tuple(
        Pad(axis=0, pad_val=tokenizer.pad_token_id),  # input ids
        Pad(axis=0, pad_val=tokenizer.pad_token_type_id),  # token type ids
    ): [data for data in fn(samples)]    
    #返回结果集
    results = []

    model.eval()    for batch in batches:
        input_ids, token_type_ids = batchify_fn(batch)
        input_ids = paddle.to_tensor(input_ids)
        token_type_ids = paddle.to_tensor(token_type_ids)
        logits = model(input_ids, token_type_ids)
        probs = F.softmax(logits, axis=1)
        idx = paddle.argmax(probs, axis=1).numpy()
        idx = idx.tolist()
        labels = [label_map[i] for i in idx]
        results.extend(labels)    return results
   

测试集数据:

标小兔AI写标书
标小兔AI写标书

一款专业的标书AI代写平台,提供专业AI标书代写服务,安全、稳定、速度快,可满足各类招投标需求,标小兔,写标书,快如兔。

下载

爬虫程序获取游戏评论,也是本次项目分析数据的来源

爬虫程序放在spider文件夹下:py文件为爬虫源代码,csv文件为平台内游戏评论数据

主流互联网游戏评论情感态势分析 - php中文网        

爬取数据

主流互联网游戏评论情感态势分析 - php中文网        

In [11]
#加载测试集import csvwith open('spider/data/bilibili_yuanshen.csv','r',encoding='gbk',errors='ignore')as f:
    cs =list(csv.reader(f))#定义存储评论列表comments=[]#csv文件含有表头,故i初始化为1#评论文本在csv文件第三列,故选择cs[i][2]for i in range(1,len(cs)):
    comments.append(cs[i][2])print(len(comments))print(comments[1])
       
997
还一起冒险呢?你有本事放??进去啊?不公测又不给内测资格,??梦中去冒险啊?
       
In [12]
#对测试集数据情感分析label_map = {0: '0', 1: '1'}
results = predict(model,comments,tokenizer,label_map,batch_size=1)#统计积极评论数量count = 0for result in results:    if result == '1':
        count =count + 1print(count)#计算积极评论比例positive_ratio = count / len(results)print(positive_ratio)
       
502
0.5035105315947843
       

情感分析结果:

主流互联网游戏评论情感态势分析 - php中文网        

封装为exe文件:

使用pytrhon的pyinstaller直接生成exe文件,需要的相关文件

主流互联网游戏评论情感态势分析 - php中文网        

效果展示:

主流互联网游戏评论情感态势分析 - php中文网        

主流互联网游戏评论情感态势分析 - php中文网        

王者荣耀相关攻略
iPhone12pro要不要更新ios17.4.1? 王者荣耀s40赛季段位继承表-王者荣耀s40段位继承规则是什么 王者营地看对局回放方法
王者荣耀甄姬逆浪荇歌什么时候上线 上线时间 iPhone11要不要更新ios17.4.1? iOS17哪个版本最适合长期使用
王者荣耀死神联动什么时候上线 死神联动活动时间 万象物语怎么改名字 改名方法介绍 王者荣耀孙权双形态实战指南:连招套路与印记掌控艺术
iPhone 15升级iOS 17.5后续航怎么样? 王者荣耀单排上分用什么打野 单排最强打野英雄推荐 iPhone15plus要不要更新ios17.4.1?
iPhone13promax要不要更新ios17.4.1? 头部游戏加速上线 鸿蒙如何成为游戏生态“第三极” iPhone13要不要更新ios17.4.1?
王者营地如何解除禁赛 mac系统怎么玩ios版王者荣耀 王者荣耀客服人工电话24小时 王者荣耀客服在哪里入口
联想Win10安装Ubuntu双系统教程 王者荣耀单排上分用什么打野好 单排打野英雄详细推荐 OPPO K13 Turbo 全系外观公布,镜头配备呼吸灯
王者荣耀大司命暗都幽影皮肤特效一览 王者荣耀封号规则详解 使用插件修改图标处罚说明 【文心一言】提示词功能系统学习,Prompt Learning
告别网络卡顿、信号不佳 这几款机型保你信号满满 快手小店助手怎么录屏?快手小店电脑版怎么下载 荣耀手机游戏模式增强功能_荣耀手机延迟优化与性能加速教程
直播必备的助手app推荐 王者荣耀貂蝉皮肤馥梦繁花 登陆时尚芭莎七月纸刊 鸿蒙游戏矩阵登陆ChinaJoy!50+款力作重塑全场景沉浸体验
原神相关攻略
原神神里绫人三大王牌配队:高爆/蒸发/冻结流派全解析 2025原神7月18日兑换码分享 2025原神7月19日兑换码分享
2025原神7月20日兑换码分享 原神玛薇卡培养攻略 玛薇卡全方位养成攻略 原神伊涅芙全方位解析:雷系新核的机制、配队与命座指南
《原神》丝柯克圣遗物终极指南:冰锋之力完美释放方案 原神5.8版本伊涅芙上线时间预测 全新雷系五星角色前瞻 英特尔酷睿Ultra 9 185H测试 Meteor Lake核显性能
2025原神7月21日兑换码分享 原神5.8直播兑换码-原神5.8前瞻兑换码大全 2025原神7月22日兑换码分享
原神芙宁娜毕业面板是多少 芙宁娜毕业面板数据一览 原神5.8前瞻直播兑换码-原神5.8直播兑换码是什么 2025原神7月23日兑换码分享
原神6.0新角色有什么 6.0新角色介绍 原神5.8版本有什么新皮肤 5.8版本新皮肤介绍 2025原神7月24日兑换码分享
原神柯莱值得培养吗 柯莱培养建议 原神纳塔龙众牙齿在哪 纳塔龙众讨伐路线位置分享 原神5.8前瞻直播什么时候-原神5.8前瞻直播时间
2025原神7月25日兑换码分享 2025原神7月26日兑换码分享 2025原神7月27日兑换码分享
2025原神7月28日兑换码分享 原神玛薇卡怎么配队 玛薇卡配队大全攻略 2025原神7月29日兑换码分享
原神水形幻人BOSS位置攻略 枫丹水下洞穴路线指南 原神水形幻人双隐藏成就攻略!连线打断与强化击杀全解析 【赛博魔杖】PaddlePaddle3.0助力36类魔法手势识别

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

741

2023.08.22

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

465

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

725

2023.10.16

数据分析网站推荐
数据分析网站推荐

数据分析网站推荐:1、商业数据分析论坛;2、人大经济论坛-计量经济学与统计区;3、中国统计论坛;4、数据挖掘学习交流论坛;5、数据分析论坛;6、网站数据分析;7、数据分析;8、数据挖掘研究院;9、S-PLUS、R统计论坛。想了解更多数据分析的相关内容,可以阅读本专题下面的文章。

507

2024.03.13

Python 数据分析处理
Python 数据分析处理

本专题聚焦 Python 在数据分析领域的应用,系统讲解 Pandas、NumPy 的数据清洗、处理、分析与统计方法,并结合数据可视化、销售分析、科研数据处理等实战案例,帮助学员掌握使用 Python 高效进行数据分析与决策支持的核心技能。

71

2025.09.08

Python 数据分析与可视化
Python 数据分析与可视化

本专题聚焦 Python 在数据分析与可视化领域的核心应用,系统讲解数据清洗、数据统计、Pandas 数据操作、NumPy 数组处理、Matplotlib 与 Seaborn 可视化技巧等内容。通过实战案例(如销售数据分析、用户行为可视化、趋势图与热力图绘制),帮助学习者掌握 从原始数据到可视化报告的完整分析能力。

55

2025.10.14

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1976

2024.08.16

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

25

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 2.3万人学习

Django 教程
Django 教程

共28课时 | 3.2万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号