チーム研究ノートタスク2:論文著者の統計

ミッションステートメント

  • タスクのテーマ:論文の著者の統計、論文の上位10人の著者の名前の統計。
  • タスクの内容:論文の著者の統計、パンダを使用してデータ読み取り、文字列操作を使用します。
  • タスクの結果:パンダの文字列操作を学びます。

@DateWhale
「お腹を空かせて若くして」

1.データの読み取り

1.1関連パッケージのインポート


# 导入所需的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 #画图工具

1.2ファイルの読み取り

次に、ファイルを読み取るための関数を定義します。実際には、task1を定義する必要がありますが、その時点では遅すぎました。予想どおり、関数はその後の変更に役立ちます。

def readFile(path,columns=['id','submitter','authors','title','comments','journal-ref','doi','reeport-no','categories','license','abstract','versions','update_date','author_parsed'],count=None):
    """
    定义本函数用于读取文件,在后续工作中也使用这个函数,比较简便
    参数分别为:
    文件路径、
    读取的列名称(固定值为全部读取)
    读取的行数
    """
    data=[]
    with open(path,'r')as f:
        #enumerate函数将可读取的数据对象转化成有序的各个元祖,储存在一个列表中
        for i,line in enumerate(f):
            if i==count:
                break
            d=json.loads(line)
            #下面这一行操作是为了筛选出需要的那些键值对
            d={
    
    col:d[col]for col in columns}
            data.append(d)
    data=pd.DataFrame(data)#转化为dataframe模式
    return data
path="D:\\arxiv-metadata-oai-snapshot.json"
data=readFile(path,['id', 'authors', 'categories', 'authors_parsed'],100000)#只能读取10万个,否则电脑跑不动- -

2.統計

完了するタスク:

  • すべての著者の名前の出現頻度のトップ10を数えます。
  • すべての著者の姓(名前の最後の単語)の出現頻度をカウントするトップ10。
  • すべての著者の姓の最初の文字の頻度を数えます。

2.1著者をリストとして個別に取り出す

#这里将series中的各个作者加和并和[]求和返回一个列表(好厉害的语法,好想看一下底层实现)
all_authors=sum(data['authors_parsed'],[])
print(all_authors)

これで、すべての作成者がこのリストに保存されたので、名前の頻度の統計が完成しました。
これで、各作成者がリストの形式で保存されます。作成者を取り出してリストに接続するには、次のステートメントを使用して達成します。 :

author_names=[''.join(x) for x in all_authors]
author_names=pd.Series(author_names)

2.2データの表示

次のステップは、matplotlibパッケージを使用して実装される描画リンクです。
コードは次のとおりです。
その中で、value_countsは、各個人の出現頻度を計算し、新しいデータフレームを返すために使用されます。

# 根据作者频率绘制直方图
#定义图的尺寸
plt.figure(figsize=(10, 6))
author_names[0].value_counts().head(10).plot(kind='barh')

# 修改图配置
names = author_names[0].value_counts().index.values[:10]
#上面一行获取了出现前10的行标签对应的值
plt.yticks(range(0, len(names)), names)
#上面一行对y轴的
plt.ylabel('Author')
plt.xlabel('Count')

出力は次のとおりです。
ここに画像の説明を挿入
次に、名前の姓のトップ10をカウントし
ます。コードは次のようになります。

authors_lastnames = [x[0] for x in all_authors]
authors_lastnames = pd.DataFrame(authors_lastnames)

plt.figure(figsize=(10, 6))
authors_lastnames[0].value_counts().head(10).plot(kind='barh')

names = authors_lastnames[0].value_counts().index.values[:10]
plt.yticks(range(0, len(names)), names)
plt.ylabel('Author')
plt.xlabel('Count')

ここに画像の説明を挿入
それらはすべて中国の名前で、強すぎます!
次に、作成者の姓の最初の文字の頻度を数えます。
コードを次の行に変更するだけで済みます。

authors_lastnames = [x[0][0] for x in all_authors]

ここに画像の説明を挿入
これまでのところタスクは完了していますが、このタスクは難しくありません。次回は単独で試してから、公式チュートリアルをご覧ください。

おすすめ

転載: blog.csdn.net/weixin_45717055/article/details/112723273