datawhaleデータ分析タスク1(1)パンダを使用してデータを読み取り、紙のデータをカウントします

統計知識ポイント記録(データクジラデータ分析タスク1(1))

GitHubの
目標:2019年にコンピューターでさまざまな方向
紙の内容をカウントする;パンダの基本操作
データセットソース:紙のデータ

1つのjsonデータ型とその読み取り

1.1jsonデータ型の意味

詳細な説明、xmlとの比較、jsonオンラインツールBeJson
JSONは、htmlに似た言語であり、言語に完全に依存しないテキスト形式を使用しますが、C言語ファミリー(C、C ++、Java、JavaScript、Perlを含む)と同様の習慣も使用します。 、Pythonなど)。これらの機能により、JSONは理想的なデータ交換言語になります。読み取りと書き込みは簡単ですが、マシンの解析と生成も簡単です(通常はネットワークの伝送速度を向上させるために使用されます)。

JSONは2つの構造で構成されています。

  1. 名前と値のペアのコレクション。さまざまな言語では、オブジェクト(オブジェクト)、レコード(レコード)、構造(構造)、辞書(辞書)、ハッシュテーブル(ハッシュテーブル)、キー付きリスト、または連想配列(連想配列)として理解されます。
    {"firstName": "Brett"、 "lastName": "McLaughlin"、 "email": "aaaa"}など
  2. 値の順序付きリスト。ほとんどの言語では、配列として理解されます。

JSONは、Pythonのlistとdictで構成されています。

1.2jsonファイル用のPython読み取りおよび書き込みモジュール

  • json:文字列とpythonのデータ型間の変換に使用され、4つの関数を提供します:ダンプ、ダンプ、ロード、ロード
    jsonダンプはデータ型を文字列に変換しますダンプはデータ型を文字列に変換してファイルに格納しますロード文字列をデータ型に変換しますファイルを文字列からデータ型にロード変換します

  • pickle:python固有の型とpythonデータ型の間の変換に使用され、4つの関数を提供します:dumps、dump、loads、load
    pickle、同じ

  • 違い1:jsonは異なる言語間でデータを交換できますが、pickleはpython間でのみ使用されます。

  • 違い2:jsonは(リスト、辞書、リスト、文字列、数値など)などの最も基本的なデータ型のみをシリアル化できますが、日付形式やクラスオブジェクトはシリアル化できませんが、pickleはクラスや関数を含むすべてのデータ型をシリアル化できますシリアル化できます。

import json
test_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 ...データ読み取り用のステートメントおよびオープン関数として

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( 'path + file name'、 'open mode')を使用し、2番目のパラメーターはファイルを開くモードを決定します:読み取り専用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リストジェネレーターの分割関数とネストされたループ

2.1分割機能

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( );       # 以空格为分隔符,包含 \n
print 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,将此元素赋值给var
3,将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,将遍历得到的元素赋值给var

3,将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)

おすすめ

転載: blog.csdn.net/qq_43720646/article/details/112598481