博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
datawhale数据分析task1(1)使用pandas读取数据并统计论文数据
阅读量:3949 次
发布时间:2019-05-24

本文共 4098 字,大约阅读时间需要 13 分钟。

使用pandas读取数据并统计论文数据

统计知识点记录(datawhale数据分析task1(1))

目标:统计2019年全年计算机各方向论文
涉及内容;pandas基础操作
数据集来源:

1 json数据类型及其读取

1.1 json数据类型含义

JSON是一种和和html类似的语言, 采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

JSON建构于两种结构:

  1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
    如{ “firstName”: “Brett”, “lastName”:“McLaughlin”, “email”: “aaaa” }
  2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

JSON在python中分别由list和dict组成。

1.2 json文件的python读写模块

  • json: 用于字符串和python数据类型间进行转换,提供了四个功能:dumps、dump、loads、load

    json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中 loads把字符串转换成数据类型 load把文件打开从字符串转换成数据类型

  • pickle:用于python特有的类型和python的数据类型间进行转换,提供了四个功能:dumps、dump、loads、load

    pickle同理

  • 区别1:json是可以在不同语言之间交换数据的,而pickle只在python之间使用。

  • 区别2: json只能序列化最基本的数据类型如(列表、字典、列表、字符串、数字、),但对于日期格式、类对象就不行了,而pickle可以序列化所有的数据类型,包括类,函数都可以序列化。

import jsontest_dict = {
'bigberg': [7600, {
1: [['iPhone', 6300], ['Bike', 800], ['shirt', 300]]}]}print(test_dict)print(type(test_dict))#dumps 将数据转换成字符串json_str = json.dumps(test_dict)print(json_str)print(type(json_str))#loads 将字符串转换成原有数据类型new_dict = json.loads(json_str)print(new_dict)print(type(new_dict))

1.3 witn…as语句及open函数进行数据读取

data  = [] #初始化#使用with语句优势:1.自动关闭文件句柄;2.自动显示(处理)文件读取数据异常with open("arxiv-metadata-oai-snapshot.json", 'r') as f:     for line in f:         data.append(json.loads(line))        data = pd.DataFrame(data) #将list变为dataframe格式,方便使用pandas进行分析

使用python内置的open()函数,open(‘路径+文件名’, ‘打开模式’) ,第二个参数决定了打开文件的模式:只读r,写入w,追加a等。具体参数含义如下表所示:

模式 含义
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
(r/w/a)b 以二进制的形式打开文件用于只读/写入/读写/追加/
(a/r/w/ab/wb/rb)+ 不同指针位置的读写模式
with open('/path/to/file', 'r') as f:    print(f.read())# 调用read()会一次性读取文件的全部内容,如果数据过大,内存会承受不了,可通过f.read(size)读取size个数据    for line in f.readlines():# 按行读取    print(line) #写入数据,注意写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。 #with语句会自动调用close方法with open('file', 'w') as f:    f.write('Hello, world!')

2 split函数及列表生成器嵌套循环

2.1 split函数

unique_categories = set([i for l in [x.split(' ') for x in data["categories"]] for i in l])len(unique_categories)unique_categories

split() 返回列表,通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

str.split(str="", num=string.count(str)).

  • str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
  • num – 分割次数。默认为 -1, 即分隔所有。
str = "Line1-abcdef \nLine2-abc \nLine4-abcd";print str.split( );       # 以空格为分隔符,包含 \nprint str.split(' ', 1 ); # 以空格为分隔符,分隔成两个

[‘Line1-abcdef’, ‘Line2-abc’, ‘Line4-abcd’]

[‘Line1-abcdef’, ‘\nLine2-abc \nLine4-abcd’]

2.2 列表生成器嵌套循环

#列表生成式:用来生成列表,在元列表的基础上生成一个新列表,可以让代码更简洁格式:[exp for var in iterable]exp:表达式var:变量iterable:可迭代对象执行过程:1,先遍历可迭代对象中的元素2,将此元素赋值给var3,将var的值作用到exp这个表达式上4,将表达式的结果生成一个新列表'''# range在python2中返回一个列表 python3中返回的是一个可迭代对象li=[i for i in range(1,11)]  #两个变量i要一致print(li)l1=[1,2,3,4]l2=[i*i for i in l1]print(l1)print(l2)   #[1, 2, 3, 4]            #[1, 4, 9, 16]l1=[1,2,3,4]l2=[]for i in l1:    l2.append(i*i)print(l1)print(l2)#生成一个2n+1的数字,n的取值范围是2-8# l4=[(2*i+1)for i in range(2,9)]l4=[2*i+1 for i in range(2,9)]print(l4)
格式二:[exp for var in iterable if 判断条件]1,遍历得到每一个元素2,将遍历得到的元素赋值给var3,将var的值作用到if语句上4,如果满足条件就将满足条件的值作用到exp表达式上5,将exp表达式的运算结果追加到新的列表#使用列表生成式l5=list(range(1,11))l6=[i for i in l5 if i%2==0]print(l6)
格式三:嵌套循环l10=["a",'b','c','d']l11=['f','j']l12=[]for i in l10:    for j in l11:        l12.append(i+j)print(l12)使用列表生成式:l10=["a",'b','c','d']l11=['f','j']l12=[i+j for i in l10 for j in l11]print(l12)

[‘af’, ‘aj’, ‘bf’, ‘bj’, ‘cf’, ‘cj’, ‘df’, ‘dj’]

格式四:有else语句时使用,注意这个判断条件都放for前面l14=['Abc','DEF',10]l15=[]for i in l14:    if isinstance(i,str):        l15.append(i.lower())    else:        l15.append(i)print(l15)使用列表生成式,大写字母变小写,不是的不变l14=['Abc','DEF',10]l15=[i.lower() if isinstance(i,str) else i for i in l14 ]print(l15)

转载地址:http://yagwi.baihongyu.com/

你可能感兴趣的文章
Android音乐编程的管理音频硬件
查看>>
Android UI控件组合应用之一:建立数据模型
查看>>
避免Andriod平台图片失真的图片形式
查看>>
Android之Gridview图片列表
查看>>
objdump的使用方法
查看>>
编译错误处理noproguard.classes-with-local.dex已杀死
查看>>
LTE - CSFB技术
查看>>
GSM链路层信令协议
查看>>
技术道德
查看>>
“需求为王”才是根本
查看>>
高效率的危害
查看>>
寻找边缘性创新
查看>>
让创意瞄准市场
查看>>
高效经理人应具有的八个重要习惯
查看>>
优秀的领导者能读懂人才
查看>>
大智若愚也是领导力
查看>>
android如何编译MTK的模拟器
查看>>
android如何添加AP中要使用的第三方JAR文件
查看>>
利用sudo命令为Ubuntu分配管理权限
查看>>
Ubuntu下几个重要apt-get命令用法与加速UBUNTU
查看>>