分享

SPSSPRO赛题-B浅谈

 云深无际 2022-04-09

B题看完以后不要轻易的放弃,也不要努力的去把题目去分类试图去寻求一个以往套路化的做法。

你看这个题目,没有什么想法吗?很明确的指出是要使用定量分析的做法。

定性分析与定量分析是人们认识事物时用到的两种分析方式。定性分析的理念早在古希腊时代就得到了很好的展开,那个时候的一批的著名学者,在自己的研究之中都是给自己所研究的自然世界给以物理解释。例如:亚里士多德研究过许多的自然现象,但在他厚厚的著作之中,却发现不了一个数学公式。他对每一个现象的都是描述性质的,对发现的每一个自然定理都是性质定义。虽然这种认识对人们认识感官世界功不可灭,但却缺乏深入思考的基础,因为从事物的一种性质延伸到另一种性质,往往是超出了人类的认识能力。因而,定量分析作为一种古已有之但是没有被准确定位的思维方式,其优势相对于定性分析的是很明显,它把事物定义在了人类能理解的范围,由量而定性。把定量分析法作为一种分析问题的基础思维方式始于伽利略,作为近代科学的奠基者,伽利略第一次把定量分析法全面展开在自己的研究之中,从动力学到天文学,伽利略抛弃了以前人们只对事物原因和结果进行主观臆测成分居多的分析,而代之以实验,数学符号,公式。“伽利略追求描述的决定是关于科学方法论的最深刻最有成效的变革。它的重要性,就在于把科学置于科学的保护之下。”而数学是关于量的科学。可以这样说,一门科学只有在成功的运用了数学的时候,才能称得上是一门科学。从理性的发展过程来看,伽利略提出的以定量代替定性的科学方法是人类认识对象由模糊变得清晰起来,由抽象变得具体,使得人类的理性在定性之上又增加了定量的特征,而且由于这种替代,那些与定量的无关的概念,如本质起源性质等概念在一定的领域内和一定的范围内被空间时间重量速度加速度惯性力能能量等全新的概念替代。

通过以上可知,就是要量化诗句中的字以及词的个数。所以这个问题是一个描述统计的问题。

我们也可以确定,最终题目要求的是给出风格的比较。

在题目中出现了这个话,很多人认为这俩种诗并非只有年代上面的差距。插一句题外话,我觉得文化从来都不孤立。而且个人认为,诗人写什么是和当时大环境相关的,更客观的来讲也是和个人经历有关。所以有必要对两个朝代的历史做一个简单的分析。将诗人按照时间轴的顺序排布。

举例子,如果大环境是打仗,他没有当官,那么这个诗很大概率是比较一种凄凉的氛围。

题中多次出现定量分析,而且注意数据集的量较大。一定会使用到编程处理。已知题中给的数据类型为json。而且考虑到日常的工具,这里推荐使用Python,因为其语法简单,又有众多库做支撑。

而且这题后面有点是自然语言处理的味道,所以也要考虑相关的库。

第一问很明确的指出,使用词频判断。而且数据包是给的json数据。

那什么是JSON?

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式,通常是以键值对的方式呈现,其简洁和清晰的层次结构使得JSON成为理想的数据交换语言,而在Python中处理JSON格式的模块有json和pickle两个

json模块和pickle都提供了四个方法:dumps, dump, loads, load序列化:将python的数据转换为json格式的字符串反序列化:将json格式的字符串转换成python的数据类型

json.dump()进行的是对json文件的读写操作将字典数据写入json的文件中用的就是json.dump,而json.dumps()则是聚焦于数据本身类型的转换,对数据的操作

json.loads():是将json格式的字符串(str)转换为字典类型(dict)的数据json.dumps():返回来,是将字典类型(dict)的数据转换成json格式的字符串json.load():用于读取json格式的文件,将文件中的数据转换为字典类型(dict)json.dump():主要用于存入json格式的文件,将字典类型转换为json形式的字符串

了解这些就好。

https://docs.python.org/zh-cn/3.8/library/json.html

Python自带有json处理库,使用的时候:

import json

就好。

因为json是一种就像字典的类型,json->python,当然也可以互相转换

我呢也推荐使用pandas,更加的对json处理友好。

 pip install pandas

这里我给出可能要使用的一些demo,读取多个json:

以及统计个数:

import jsonimport os

# 处理嵌套json文件中指定关键字# 处理字典值def get_target_value(key, dic, tmp_list): """ :param key: 目标key值 :param dic: JSON数据 :param tmp_list: 用于存储获取的数据 :return: list """ if not isinstance(dic, dict) or not isinstance(tmp_list, list): # 对传入数据进行格式校验 return 'argv[1] not an dict or argv[-1] not an list '
if key in dic.keys(): tmp_list.append(dic[key]) # 传入数据存在则存入tmp_list
for value in dic.values(): # 传入数据不符合则对其value值进行遍历 if isinstance(value, dict): get_target_value(key, value, tmp_list) # 传入数据的value值是字典,则直接调用自身 elif isinstance(value, (list, tuple)): # 传入数据的value值是列表或者元组,则调用_get_value _get_value(key, value, tmp_list) return tmp_list

# 处理元组或列表值def _get_value(key, val, tmp_list): for val_ in val: if isinstance(val_, dict): # 传入数据的value值是字典,则调用get_target_value get_target_value(key, val_, tmp_list) elif isinstance(val_, (list, tuple)): _get_value(key, val_, tmp_list)

# 处理单个json文件# 修改json文件所在路径def single_file_main(): path = "json_files/self_val_person_day.json" with open(path, 'r') as load_f: json_data = json.load(load_f) # json files to dict:json_data
# json.key(): get all the images of one file(get number of images) number_shape = len(json_data.keys())
# data = list(json_data.keys()) # 可以索引
print(type(json_data)) print("number:", number_shape)
list_shape = get_target_value('shape_attributes', json_data, []) number_count = len(list_shape) print("shape_attributes:", list_shape) print("numbers:", number_count)

# 批量处理指定文件夹下多个json文件# 修改json文件所在的文件夹路径def main(): file_list = os.listdir(r"./json_files") print(file_list)
for filename in file_list: with open(r"./json_files/"+filename, 'r') as load_f: json_data = json.load(load_f) # json files to dict:json_data # 利用json文件中的shape_attributes关键字可对应圈出的框的数量 list_shape = get_target_value('shape_attributes', json_data, []) number_count = len(list_shape) print("file:", filename) print("numbers:", number_count)

if __name__ == '__main__':    main()
import pandas as pd
data = [ { "id": "A001", "name": "菜鸟教程", "url": "www.runoob.com", "likes": 61 }, { "id": "A002", "name": "Google", "url": "www.google.com", "likes": 124 }, { "id": "A003", "name": "淘宝", "url": "www.taobao.com", "likes": 45 }]df = pd.DataFrame(data)
print(df)

输出

嵌套

输出

展平操作

https://pandas.pydata.org/docs/

推荐pandas,自己研究吧。

这是简单的输出,具体的看文档:

https://pandas.pydata.org/docs/user_guide/index.html#user-guide

组委会为了降低难度,没有进行嵌套,就是很正常的格式。

我们在看第一个问题:

这里是一部分内容。

一种办法比较粗暴,总结对诗词进行统计。另一种是对一个朝代中有代表性的人进行统计,虽然工作量较少,但是需要前期分隔作者。

统计出来注意这样描述。作者是什么

https://github.com/liuhuanyong/PoemMining

推荐一个开源的库

可以进行诗词库的挖掘,这个可以作为第二问使用。、、

而且可以使用他的现成脚本。

这是一个挖掘的思路,里面的关键词有具体的算法,可以去寻找。

对于现代汉语的分词,开源/免费的解决方案或工具很多,开源的解决方案如Jieba、HanLp、StanfordNLP和IKAnalyzer等,“傻瓜式”的免费操作工具的也有新浪微舆情的文本挖掘工具。

然而,对于古汉语(文言文),尤其是诗词的分词处理可没有这么简单,因为单字词占古汉语词汇统计信息的80%以上,再加上古汉语微言大义,字字千钧,所以针对现代汉语的分词技术往往不适用于它。鉴于此种情况,笔者采取的是逐字切分的处理方式,同时去掉一些常见的虚词,如“之”、“乎”、“者”、“也”。分词和去停用词处理如下所示:   

https://blog.51cto.com/u_15310860/3202118

推荐这篇文章

https://m.thepaper.cn/baijiahao_882417

以及这篇。

因为本身对NLP研究不多,只能做这些工作了。

https://blog.csdn.net/Wadewhl/article/details/113258824?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-4.pc_relevant_paycolumn_v3&spm=1001.2101.3001.4242.3&utm_relevant_index=7

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多