vim Nodepad 全局重载运算符 https parsing wcf replace unicode timer triggers vue配置 vue引入组件 js获取数组第一个元素 spark文档 js获取body的高度 matlab停止运行 android自定义控件 matlab自然对数 jquery validate 后台管理网站模板 python日期转时间戳 python怎么下载 python处理json文件 java编程 filejava java类与对象 java的包 java访问数据库 java中的队列 java时间类 java数组添加值 java安装教程 java的安装 linux的find windows7loader vbscript程序员参考手册 自制题库答题考试软件 免费脚本 backtrack3 音乐剪辑器下载
当前位置: 首页 > 学习教程  > 编程语言

零基础⼊⻔数据分析-学术前沿趋势分析Task1

2021/1/13 20:07:50 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

Task1:论⽂数据统计(3天)Link 学习主题:论⽂数量统计(数据统计任务),统计2019年全年,计算机各个⽅向论⽂数量; 学习内容:赛题理解、 Pandas 读取数据、数据统…

Task1:论⽂数据统计(3天)Link
学习主题:论⽂数量统计(数据统计任务),统计2019年全年,计算机各个⽅向论⽂数量;
学习内容:赛题理解、 Pandas 读取数据、数据统计 ;
学习成果:学习 Pandas 基础;
任务1 :论⽂数量统计(数据统计任务):统计2019年全年,计算机各个⽅向论⽂数量;

任务1:论⽂数据统计
1.1 任务说明
任务主题:论⽂数量统计,即统计2019年全年计算机各个⽅向论⽂数量;
任务内容:赛题的理解、使⽤ Pandas 读取数据并进⾏统计;
任务成果:学习 Pandas 的基础操作;
可参考的学习资料:开源组织Datawhale joyful-pandas项⽬
1.2 数据集介绍
数据集来源:数据集链接;
数据集的格式如下:
id :arXiv ID,可⽤于访问论⽂;
submitter :论⽂提交者;
authors :论⽂作者;
title :论⽂标题;
comments :论⽂⻚数和图表等其他信息;
journal-ref :论⽂发表的期刊的信息;
doi :数字对象标识符,https://www.doi.org;
report-no :报告编号;
categories :论⽂在 arXiv 系统的所属类别或标签;
license :⽂章的许可证;
abstract :论⽂摘要;
versions :论⽂版本;
authors_parsed :作者的信息。
数据集实例:

"root":{
 "id":string"0704.0001"
 "submitter":string"Pavel Nadolsky"
 "authors":string"C. Bal\'azs, E. L. Berger, P. M. Nadolsky, C.-P. Yuan"
 "title":string"Calculation of prompt diphoton production cross sections at
Tevatron and LHC energies"
 "comments":string"37 pages, 15 figures; published version"
 "journal-ref":string"Phys.Rev.D76:013009,2007"
 "doi":string"10.1103/PhysRevD.76.013009"
 "report-no":string"ANL-HEP-PR-07-12"
 "categories":string"hep-ph"
 "license":NULL
 "abstract":string" A fully differential calculation in perturbative
quantum chromodynamics is presented for the production of massive photon pairs
at hadron colliders. All next-to-leading order perturbative contributions from
quark-antiquark, gluon-(anti)quark, and gluon-gluon subprocesses are included,
as well as all-orders resummation of initial-state gluon radiation valid at
next-to-next-to leading logarithmic accuracy. The region of phase space is
specified in which the calculation is most reliable. Good agreement is
demonstrated with data from the Fermilab Tevatron, and predictions are made for
more detailed tests with CDF and DO data. Predictions are shown for
distributions of diphoton pairs produced at the energy of the Large Hadron
Collider (LHC). Distributions of the diphoton pairs from the decay of a Higgs
boson are contrasted with those produced from QCD processes at the LHC, showing
that enhanced sensitivity to the signal can be obtained with judicious
selection of events."
 "versions":[
 0:{
 "version":string"v1"
 "created":string"Mon, 2 Apr 2007 19:18:42 GMT"
 }
 1:{
 "version":string"v2"
 "created":string"Tue, 24 Jul 2007 20:10:27 GMT"
 }]
 "update_date":string"2008-11-26"
 "authors_parsed":[
 0:[
 0:string"Balázs"
 1:string"C."

1.3 arxiv论⽂类别介绍
我们从arxiv官⽹,查询到论⽂的类别名称以及其解释如下。
链接:https://arxiv.org/help/api/user-manual 的 5.3 ⼩节的 Subject Classifications 的部分,或
https://arxiv.org/category_taxonomy, 具体的153种paper的类别部分如下:
1.4 具体代码实现以及讲解

 2:string""]
 1:[
 0:string"Berger"
 1:string"E. L."
 2:string""]
 2:[
 0:string"Nadolsky"
 1:string"P. M."
 2:string""]
 3:[
 0:string"Yuan"
 1:string"C. -P."
 2:string""]]
}
'astro-ph': 'Astrophysics',
'astro-ph.CO': 'Cosmology and Nongalactic Astrophysics',
'astro-ph.EP': 'Earth and Planetary Astrophysics',
'astro-ph.GA': 'Astrophysics of Galaxies',
'cs.AI': 'Artificial Intelligence',
'cs.AR': 'Hardware Architecture',
'cs.CC': 'Computational Complexity',
'cs.CE': 'Computational Engineering, Finance, and Science',
'cs.CV': 'Computer Vision and Pattern Recognition',
'cs.CY': 'Computers and Society',
'cs.DB': 'Databases',
'cs.DC': 'Distributed, Parallel, and Cluster Computing',
'cs.DL': 'Digital Libraries',
'cs.NA': 'Numerical Analysis',
'cs.NE': 'Neural and Evolutionary Computing',
'cs.NI': 'Networking and Internet Architecture',
'cs.OH': 'Other Computer Science',
'cs.OS': 'Operating Systems',

1.4.1 导⼊package并读取原始数据
这⾥使⽤的package的版本如下(python 3.7.4):
seaborn:0.9.0
BeautifulSoup:4.8.0
requests:2.22.0
json:0.8.5
pandas:0.25.1
matplotlib:3.1.1
其中的1778381表示数据总量,14表示特征数,对应我们1.2节说明的论⽂的14种信息。
1.4.2 数据预处理
⾸先我们先来粗略统计论⽂的种类信息:

导⼊所需的package

import seaborn as sns #⽤于画图
from bs4 import BeautifulSoup #⽤于爬取arxiv的数据
import re #⽤于正则表达式,匹配字符串的模式
import requests #⽤于⽹络连接,发送⽹络请求,使⽤域名获取对应信息
import json #读取数据,我们的数据为json格式的
import pandas as pd #数据处理,数据分析
import matplotlib.pyplot as plt #画图⼯具

读⼊数据

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进⾏分析
data.shape #显示数据⼤⼩
Output: (1778381, 14)
data.head() #显示数据的前五⾏
'''
count:⼀列数据的元素个数;
unique:⼀列数据中元素的种类;
top:⼀列数据中出现频率最⾼的元素;
freq:⼀列数据中出现频率最⾼的元素的个数;
'''
data["categories"].describe()
count 1778381
unique 61371
top astro-ph
freq 86914
Name: categories, dtype: object

以上的结果表明:共有1338381个数据,有61371个⼦类(因为有论⽂的类别是多个,例如⼀篇paper的
类别是CS.AI & CS.MM和⼀篇paper的类别是CS.AI & CS.OS属于不同的⼦类别,这⾥仅仅是粗略统
计),其中最多的种类是astro-ph,即Astrophysics(天体物理学),共出现了86914次。
由于部分论⽂的类别不⽌⼀种,所以下⾯我们判断在本数据集中共出现了多少种独⽴的数据集。

所有的种类(独⽴的)

unique_categories = set([i for l in [x.split(’ ') for x in data[“categories”]]
for i in l])
len(unique_categories)
unique_categories
这⾥使⽤了 split 函数将多类别使⽤ “ ”(空格)分开,组成list,并使⽤ for 循环将独⽴出现的类别找出
来,并使⽤ set 类别,将重复项去除得到最终所有的独⽴paper种类。
176

{'acc-phys', 'adap-org', 'alg-geom', 'ao-sci', 'astro-ph', 'astro-ph.CO',
'astro-ph.EP', 'astro-ph.GA', 'astro-ph.HE', 'astro-ph.IM', 'astro-ph.SR',
'atom-ph', 'bayes-an', 'chao-dyn', 'chem-ph', 'cmp-lg', 'comp-gas', 'cond-mat',
'cond-mat.dis-nn', 'cond-mat.mes-hall', 'cond-mat.mtrl-sci', 'cond-mat.other',
'cond-mat.quant-gas', 'cond-mat.soft', 'cond-mat.stat-mech', 'cond-mat.str-el',
'cond-mat.supr-con', 'cs.AI', 'cs.AR', 'cs.CC', 'cs.CE', 'cs.CG', 'cs.CL',
'cs.CR', 'cs.CV', 'cs.CY', 'cs.DB', 'cs.DC', 'cs.DL', 'cs.DM', 'cs.DS',
'cs.ET', 'cs.FL', 'cs.GL', 'cs.GR', 'cs.GT', 'cs.HC', 'cs.IR', 'cs.IT',
'cs.LG', 'cs.LO', 'cs.MA', 'cs.MM', 'cs.MS', 'cs.NA', 'cs.NE', 'cs.NI',
'cs.OH', 'cs.OS', 'cs.PF', 'cs.PL', 'cs.RO', 'cs.SC', 'cs.SD', 'cs.SE',
'cs.SI', 'cs.SY', 'dg-ga', 'econ.EM', 'econ.GN','econ.TH', 'eess.AS',
'eess.IV', 'eess.SP', 'eess.SY', 'funct-an', 'gr-qc', 'hep-ex', 'hep-lat',
'hep-ph', 'hep-th', 'math-ph', 'math.AC', 'math.AG', 'math.AP', 'math.AT',
'math.CA', 'math.CO', 'math.CT', 'math.CV', 'math.DG', 'math.DS', 'math.FA',
'math.GM', 'math.GN', 'math.GR', 'math.GT', 'math.HO', 'math.IT', 'math.KT',
'math.LO', 'math.MG', 'math.MP', 'math.NA', 'math.NT', 'math.OA', 'math.OC',
'math.PR', 'math.QA', 'math.RA', 'math.RT', 'math.SG', 'math.SP', 'math.ST',
'mtrl-th', 'nlin.AO', 'nlin.CD', 'nlin.CG', 'nlin.PS', 'nlin.SI', 'nucl-ex',
'nucl-th', 'patt-sol', 'physics.acc-ph', 'physics.ao-ph', 'physics.app-ph',
'physics.atm-clus', 'physics.atom-ph', 'physics.bio-ph', 'physics.chem-ph',
'physics.class-ph', 'physics.comp-ph', 'physics.data-an', 'physics.ed-ph',
'physics.flu-dyn', 'physics.gen-ph', 'physics.geo-ph', 'physics.hist-ph',
'physics.ins-det', 'physics.med-ph', 'physics.optics', 'physics.plasm-ph',
'physics.pop-ph', 'physics.soc-ph', 'physics.space-ph', 'plasm-ph', 'q-alg',
'q-bio', 'q-bio.BM', 'q-bio.CB', 'q-bio.GN', 'q-bio.MN', 'q-bio.NC', 'qbio.OT', 'q-bio.PE', 'q-bio.QM', 'q-bio.SC', 'q-bio.TO', 'q-fin.CP', 'qfin.EC', 'q-fin.GN', 'q-fin.MF', 'q-fin.PM', 'q-fin.PR', 'q-fin.RM', 'qfin.ST', 'q-fin.TR', 'quant-ph', 'solv-int', 'stat.AP', 'stat.CO', 'stat.ME',
'stat.ML', 'stat.OT', 'stat.TH', 'supr-con'}

从以上结果发现,共有176种论⽂种类,⽐我们直接从 https://arxiv.org/help/api/user-manual 的 5.3
⼩节的 Subject Classifications 的部分或 https://arxiv.org/category_taxonomy中的到的类别少,这说
明存在⼀些官⽹上没有的类别,这是⼀个⼩细节。不过对于我们的计算机⽅向的论⽂没有影响,依然是
以下的40个类别,我们从原数据中提取的和从官⽹的到的种类是可以⼀⼀对应的。

'cs.AI': 'Artificial Intelligence',
'cs.AR': 'Hardware Architecture',
'cs.CC': 'Computational Complexity',
'cs.CE': 'Computational Engineering, Finance, and Science',
'cs.CG': 'Computational Geometry',
'cs.CL': 'Computation and Language',
'cs.CR': 'Cryptography and Security',
'cs.CV': 'Computer Vision and Pattern Recognition',
'cs.CY': 'Computers and Society',
'cs.DB': 'Databases',
'cs.DC': 'Distributed, Parallel, and Cluster Computing',
'cs.DL': 'Digital Libraries',
'cs.DM': 'Discrete Mathematics',
'cs.DS': 'Data Structures and Algorithms',
'cs.ET': 'Emerging Technologies',
'cs.FL': 'Formal Languages and Automata Theory',
'cs.GL': 'General Literature',
'cs.GR': 'Graphics',
'cs.GT': 'Computer Science and Game Theory',
'cs.HC': 'Human-Computer Interaction',
'cs.IR': 'Information Retrieval',
'cs.IT': 'Information Theory',
'cs.LG': 'Machine Learning',
'cs.LO': 'Logic in Computer Science',
'cs.MA': 'Multiagent Systems',
'cs.MM': 'Multimedia',
'cs.MS': 'Mathematical Software',
'cs.NA': 'Numerical Analysis',
'cs.NE': 'Neural and Evolutionary Computing',
'cs.NI': 'Networking and Internet Architecture',
'cs.OH': 'Other Computer Science',
'cs.OS': 'Operating Systems',
'cs.PF': 'Performance',
'cs.PL': 'Programming Languages',
'cs.RO': 'Robotics',
'cs.SC': 'Symbolic Computation',
'cs.SD': 'Sound',
'cs.SE': 'Software Engineering',
'cs.SI': 'Social and Information Networks',
'cs.SY': 'Systems and Control',

我们的任务要求对于2019年以后的paper进⾏分析,所以⾸先对于时间特征进⾏预处理,从⽽得到2019
年以后的所有种类的论⽂:
data[“year”] = pd.to_datetime(data[“update_date”]).dt.year #将update_date从例如
2019-02-20的str变为datetime格式,并提取处year
del data[“update_date”] #删除 update_date特征,其使命已完成
data = data[data[“year”] >= 2019] #找出 year 中2019年以后的数据,并将其他数据删除

data.groupby([‘categories’,‘year’]) #以 categories 进⾏排序,如果同⼀个categories

相同则使⽤ year 特征进⾏排序
data.reset_index(drop=True, inplace=True) #重新编号
data #查看结果
这⾥我们就已经得到了所有2019年以后的论⽂,下⾯我们挑选出计算机领域内的所有⽂章:
#爬取所有的类别
website_url = requests.get(‘https://arxiv.org/category_taxonomy’).text #获取⽹⻚
的⽂本数据
soup = BeautifulSoup(website_url,‘lxml’) #爬取数据,这⾥使⽤lxml的解析器,加速
root = soup.find(‘div’,{‘id’:‘category_taxonomy_list’}) #找出 BeautifulSoup 对应
的标签⼊⼝
tags = root.find_all([“h2”,“h3”,“h4”,“p”], recursive=True) #读取 tags
#初始化 str 和 list 变量
level_1_name = “”
level_2_name = “”
level_2_code = “”
level_1_names = []
level_2_codes = []
level_2_names = []
level_3_codes = []
level_3_names = []
level_3_notes = []
#进⾏
for t in tags:
if t.name == “h2”:
level_1_name = t.text
level_2_code = t.text
level_2_name = t.text
elif t.name == “h3”:
raw = t.text
level_2_code = re.sub(r"(.)((.))",r"\2",raw) #正则表达式:模式字符串:
(.)((.));被替换字符串"\2";被处理字符串:raw
level_2_name = re.sub(r"(.)((.))",r"\1",raw)
elif t.name == “h4”:
raw = t.text
level_3_code = re.sub(r"(.) ((.))",r"\1",raw)
level_3_name = re.sub(r"(.) ((.))",r"\2",raw)
elif t.name == “p”:
notes = t.text
level_1_names.append(level_1_name)
level_2_names.append(level_2_name)
level_2_codes.append(level_2_code)
level_3_names.append(level_3_name)
level_3_codes.append(level_3_code)
level_3_notes.append(notes) #根据以上信息⽣成dataframe格式的数据
df_taxonomy = pd.DataFrame({
‘group_name’ : level_1_names,
‘archive_name’ : level_2_names,
‘archive_id’ : level_2_codes,
‘category_name’ : level_3_names,
‘categories’ : level_3_codes,
‘category_description’: level_3_notes

})
#按照 “group_name” 进⾏分组,在组内使⽤ “archive_name” 进⾏排序
df_taxonomy.groupby([“group_name”,“archive_name”])
df_taxonomy
这⾥主要说明⼀下上⾯代码中的正则操作,这⾥我们使⽤re.sub来⽤于替换字符串中的匹配项
‘’’
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为⼀个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最⼤次数,默认 0 表示替换所有的匹配。
flags : 编译时⽤的匹配模式,数字形式。
其中pattern、repl、string为必选参数
‘’’
re.sub(pattern, repl, string, count=0, flags=0)
实例如下:
import re
phone = “2004-959-559 # 这是⼀个电话号码”

删除注释

num = re.sub(r’#.*$’, “”, phone)
print ("电话号码 : ", num)

移除⾮数字的内容

num = re.sub(r’\D’, “”, phone)
print ("电话号码 : ", num)
执⾏结果:
详细了解可以参考:https://www.runoob.com/python3/python3-reg-expressions.html
对于我们的代码来说:
对应的参数
正则中的模式字符串 pattern 的格式为 “任意字符” + “(” + “任意字符” + “)”。
替换的字符串 repl 为第2个分组的内容。
要被查找替换的原始字符串 string 为原始的爬取的数据。

作为一个数据分析刚入门的小白,这几天先学了一下pandas,又下载了一些需要用到的环境。对于数据分析,目前只是初步了解了下步骤,跟着文档一步一步执行还是有难度的,时间精力有限,没有完成既定任务,尤其是爬虫和可视化这两大部分还需要好好理解,动手操作,接下来的这几天要好好努力。


本文链接: http://www.dtmao.cc/news_show_600251.shtml

附件下载

上一篇:xuperchain

下一篇:渗透测试完整流程

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?