[BoostCamp AI Tech/Day 3] Python data Handling

18327 ワード

基本データ型

  • CSV
  • html(Web)
  • xml
  • json
  • CSV(Comma Separate Value)

  • カンマ(,)で区切られたテキストファイル
  • データフォーマット
  • 、プログラムに関係のないデータ書き込みに適用
  • タグ(TSV)、スペース(SSV)なども作成できます
  • を総称して文字区切り値(CSV)
  • と呼ぶ.

    PythonでCSVファイルを読み込み/書き込み

  • テキストファイル形式でデータ
  • を処理する.
  • は、通常のテキストファイルを処理するようにファイルを読み出し、データ
  • を行毎に処理する.
  • CSVオブジェクトを使用してCSVを処理する場合
  • の文書ファイル形式でデータを処理する場合、文中の"、"等を前処理する必要がある
  • .
  • Pythonは、単純なcsvファイルを処理するために
  • 個のcsvオブジェクトを提供します.
  • ハングルの場合、
  • を処理する必要があります.
    line_counter = 0 #파일의 총 줄수를 count
    data_header = [] #data 필드값을 저장
    Kim_data_list = #data 개별 list를 저장하는 list
    
    with open("data.csv") as data: #data.csv 파일을 data 객체에 저장
        while True: #True or 1
            line = data.readline() #데이터를 한 줄씩 읽어서 line변수에 할당
            if not data: break #데이터가 없으면 loop종료
            if line_counter == 0: #첫 번째 줄은 데이터 필드
                data_header = data.split(",") #","로 데이터를 구분하여 data_header 리스트에 저장
            else:
                line_to_list = line.split(",")
                if "KIM" in line_to_list: #성이 김 인 경우만 저장
                    Kim_data_list.append(line_to_list) #일반 데이터는 "," 기준으로 분리하여 list형태로 list에 저장
            line_counter += 1
    print("header :\t", data_header) #데이터 필드값 출력
    for i in range(10): #샘플 10개만 데이터 출력
        print("Data",i,":\t\t", Kim_data_list[i])
    print(len(Kim_data_list)) #전체 데이터 크기 출력
    
    with open("Kim_data_only.csv", "w") as Kim_data_only_csv:
        for person in Kim_data_only_csv:
            Kim_data_only_csv.write(",".join(person).strip("\n")+"\n")
            # Kim_data_list 객체에 있는 데이터를 Kim_data_only.csv 파일에 쓰기
    
    
    ### csv 객체 활용 ###
    import csv
    reader = csv.reader(f
                delimiter = ",", quotechar = '"',
                quoting = csv.QUOTE_ALL)
    # delimiter : 글자를 나누는 기준
    # lineterminator : 줄 바꾼 기준(\r\n)
    # quotechar : 문자열을 둘러싸는 신호 문자
    # quoting : 데이터를 나누는 기준이 quotechar에 의해 둘러싸인 레벨
    
    data = []
    header = []
    rownum = 0
    import csv
    with open("data.csv","r",encoding = "cp949") as file:
        csv_data = csv.reader(file)
        for row in data:
            if rownum == 0:
                header = row
            else:
                data.append(row)
            rownum += 1
            
    with open("data.csv","w",encoding = "utf8") as file:
        writer = csv.writer(file, delimiter = "\t", quotechar = "'", quoting = csv.QUOTE_ALL)
        writer. writerow(header) #제목 필드 파일 쓰기
        for row in data:
            writer.writerow(row)
            

    Web(Web)


  • グローバルWeb(WWW)、略称Web

  • HTTPプロトコルによるデータの送受信+HTTPフォーマットによるデータの表示

  • Web操作手順
  • 要求:要求サーバ
  • 、URL、フォーム、ヘッダを含む
  • 処理:
  • 要求に応答し、例えばデータベース処理
  • 応答:結果(HTML、XMLなど)
  • を返す(ダウンロード)
  • レンダリング:HTML、XML表示
  • HTML(Hyper Text Markup Language)

  • Web上の構造化情報の言語
  • タグ
  • を使用してタイトル、段落、リンクなどの要素を表示
  • すべての要素がカッコ内にあります
  • Hello,World#タイトル要素,値Hello,World
  • すべてのHTMLはツリーの包含関係
  • です.
  • 一般的に、WebページのHTMLソースファイルは、コンピュータのダウンロード後にWebブラウザによって解析/表示される
  • である.
  • Webについて
  • 多くの情報はWebを通じて共有され、
  • 共有情報からデータを抽出して様々な分析を行う方法を理解する
  • HTML構造
  • # HTML 구조 : <html> - <head> - <title> - <body> - <p>
    # Element, Attribute Value 이루어짐
    # <tag attribute1 = "att_value1" attribute2 = "att_value2"> 보이는 내용(value) </tag>
    <!doctype html>
    <html>
      <head>
        <title>Hello HTML</title>
      </head>
      <body>
        <p>Hello World!</p>
      </body>
    </html>
    

    一般式のHTML解析

  • (正規表現は既知、説明は省略)
  • import re
    import urllib.request
    url = url_link #url 값 입력
    html = urllib.request.urlopen(url) #url 열기
    html_contents = str(html.read().decode("utf8)) #html 파일을 읽고, 문자열로 반환
    result = re.findall(찾을 부분에 대한 정규표현식, html_contents) #출력된 데이터는 Tuple 형태

    XML(eXtensible Markup Language)

  • のデータ構造と意味を記述するタグ言語
  • を使用する
  • TAGとTAGとの間に表示する値は、構造化情報
  • を表すことができる.
  • はHTML構文と似ており、典型的なデータ格納方式
  • である.
  • は最近json形式で大量のデータを共有しているが、2000年代初期にxml形式
  • が使用されただけである.
  • 情報の構造情報、例えばパターンやDTDは、情報(メタ情報)を表すものであり、用途によっては多様な形の
  • に変更することができる.
  • XMLは、コンピュータ(pc<->スマートフォンなど)間で情報を交換するための非常に有用な記憶方法であり、
  • .
  • #XML構造(ツリー構造)
    <?xml version = "1.0">
    <고양이>
      <우리집 고양이>
        <이름>나비</이름>
        <품종></품종>
        <나이>6</나이>
      </우리집 고양이>
      <친구네 고양이>
        <이름>바다</이름>
        <품종>페르시안</품종>
        <나이>5</나이>
      </친구네 고양이>
    </고양이>
                   고양이
                     /\
                    /  \
                   /    \
                  /      \
       우리집 고양이        친구네 고양이
      /     |     \      /     |     \
    이름   품종   나이   이름   품종   나이
     |      |      |    |      |      |
    나비    샴     6    바다 페르시안   5
  • xml parcing

  • XMLはHTMLと同様に構造化タグ言語
  • である.
  • Beatifulsgroup、lxml、html 5 libなどの複数のパラメータは、パケット
  • に使用することができる
  • lxmlを使用すると、css構文を使用して特定の要素を簡単にインポートできます.
    BeautifulsGroupよりも優れたパフォーマンス
    ソース:https://edmundmartin.com/beautiful-soup-vs-lxml-speed/2
  • コード練習colabを用いて
  • を行う

    Json

  • JavaScript Ojbect Notation
  • Java Scriptを使用して元のWeb言語を表すデータオブジェクト
  • 簡潔で分かりやすい
  • データ量が小さく、コード
  • に変換しやすい.
    したがって、
  • はXMLの代替品として大量に使用される
  • Pythonに類似するDictタイプ(キー値ペア)
  • jsonモジュールを使用してグループ化および格納
  • read,write:dump(文付き)
  • データ格納および読み出しはdictタイプと互換性
  • である.
    Jsonは
  • Webで提供されるAPI情報の大部分を利用して交換する
    ほとんどのサイトでjsonが使用されています
  • 練習コード省略