Pythonでのスクレイピングとデータ分析のやり方

    目次

    Pythonのインストール

    ネット上には、いろいろな情報が公開されています。プログラムを使うと自 動で集めることをクローリングといいます。さらに収集したデータを解析し て、必要なデータを取り出すことをスクレイピングといいます。

    Pythonはネットへアクセスするライブラリが充実していて、「クローリン グ」や「スクレイピング」をしやすい言語になっています。

    Pythonをインストール

    https://www.python.org/downloads/

    からインストールします。 自動的に自分のOSに合わせたiページが表示されます。

    windowsの方は、「Add Python 3.x to PATH」は必ずチェックを入れる ようにしてください。

    Macの方へPython3.6以降では、インストール後にネットワーク通信に使用 するSSL証明書をインストールする必要があります。Python3.xフォルダを 開き、「install Certificates.command」ファイルをダブルクリックしてく ださい。ターミナルが自動的に起動して、証明書のインストールが実行され ます。[プロセスが完了しました]と表示されたら、表示されたターミナルを 終了してください。

    requestsでアクセスしてみる

    インターネットにアクセスする命令としては、Pythonの標準ライブラリに 「urllib request」があります。しかし、もっと簡単に使える「requests」 という外部ライブラリがあるので、これを使います。

    ライブラリのインストール方法

    Windowsではコマンドプロンプトを起動

    スタートメニューを開いて、[Windowsシステムツール]→コマンドプロンプ トを起動します。そして以下のpip コマンドでインストールします。

    pip install requests

    macOSではターミナルを起動

    [アプリケーション]フォルダの中の[ユーティリティ]フォルダにあるターミナ ルをクリック、起動させます。以下pip3コマンドでインストールします。

    pip3 install requests

    HTMLファイルを読み込むプログラム

    インストールしたrequestsを使って、ネット上のHTMLファイルを読み込ん で表示させてみます。練習用に簡単なWebページを作ったので、このHTML ファイルを読み込むプログラムを作ってみましょう。

    練習用テストページ

    https://creaters-you.com/

    (テスト用ページには以下のコードを書いています)

    <!DOCTYPE html> <html lang="ja"> <head> 
    <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="width=device-width, initial- scale=1.0">
     <title>スクレイピングを学ぶ</title>
     </head>
     <body>
     <h1>寺中晴紀のスクレイピング講座</h1>
     <div id= "chap1">
     <h2>Pythonでデータをダウンロード</h2>
     <ol>
     <li>スクレイピングって何</li>
     <li>Pythonをインストール</li>
     <li>Requestsでアクセスしてみよう</li>
     </ol>
     </div><div id= "chap2">
     <h2>HTMLを解析する</h2>
     <ol>
     <li>HTMLを解析</li>
     <li>ニュースの記事を取得</li>
     <li>画像をダウンロード</li>
     </ol>
     </div>
     <p><img src="pc.png" width="50%" height="50%"></p>
     <p><img src="pc2.png" width="50%" height="50%"></p>
     <p><a href="https://creaters-you.com/index2.html">絶対URLでリンク へとぶ</a></p>
     <p><a href="index3.html">相対URLでリンクへとぶ</a></p>
     </body>
     </html> 

    インターネット上のWebページには、「requests.get(URL)」という命令で 取得できます。ただし、取得したデータにはいろいろな情報が入っているの で、そこから「.text」で文字列データを取り出します。また、日本語が文字 化けしないように、

    requests.encoding=response.apparent_encoding

    と指定しておきます。

    step/step1.py

    import requests
     # Webページを取得する
     url ="https://creaters-you.com/"
     response = requests.get(url)
     # 文字化けしないようにする
     response.encoding = response.apparent_encoding # 取得した文字列データを表示する print(response.text) 

    テキストファイルに書き込む:open、close

    HTMLファイルを読み込めたので、これをファイルに書き込むかたちで保存します。

    step/step2.py

    import requests 
     # Webページを取得する
     url ="https://creaters-you.com/" 
    response = requests.get(url)
     # 文字化けしないようにする
     response.encoding = response.apparent_encoding filename="download.txt"
     f=open(filename,mode="w")
     f.write(response.text)

    f.close() 実行すると、step1フォルダの中に「download.txt」というテキストファイ ルが作られます。この中に、取り出したデータがしるされます。

    openのいろいろなモード

    r  読み込み用

    w  書き込み用

    a. 追加書き込み(書き足す)

    t. テキストモード

    HTMLを解析する

    HTMLって何?という方は下の記事をご参照ください。

    Beautiful Soup をインストール

    HTMLを簡単に解析できるライブラリがあります。それがBeautifil Soupで す。外部ライブライなので、pipコマンドでインストールします。

    windowsの方

    pip install beautifulsoup4

    macOSの方

    pip3 install beaftifulssoup4

    Beautifu Soupは、bs4というパッケージに入っているので、「from bs4 import BeautifulSoup」とします。

    次にそのHTMLデータ(.content)をBeautifulSoup(HTMLデー タ,”html.parser”)に渡します。

    step/step3.py

    import requests
     from bs4 import BeautifulSoup
     import urllib load_url="https://creaters-you.com/index.html" html=requests.get(load_url) 
    soup=BeautifulSoup(html.content,"html.parser") print(soup) 

    実行結果

    <!DOCTYPE html>
    <html lang="ja">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>スクレイピングを学ぶ</title>
    </head>
    <body>
      <h1>寺中晴紀のスクレイピング講座</h1>
      <div id= "chap1">
        <h2>Pythonでデータをダウンロード</h2>
        <ol>
          <li>スクレイピングって何</li>
          <li>Pythonをインストール</li>
          <li>Requestsでアクセスしてみよう</li>
        </ol>
      </div>
      </div>
      <div id= "chap2">
      <h2>HTMLを解析する</h2>
      <ol>
        <li>HTMLを解析</li>
        <li>ニュースの記事を取得</li>
        <li>画像をダウンロード</li>
      </ol>
      </div>
    <p><img src="pc.png" width="50%" height="50%"></p>
    <p><img src="pc2.png" width="50%" height="50%"></p>
    <p><a href="https://creaters-you.com/index2.html">絶対URLでリンクへとぶ</a></p>
    <p><a href="index3.html">相対URLでリンクへとぶ</a></p></body>
    </html>

    読み込んだHTMLがそのまま表示されています。ここからいろいろな要素を 取り出して行きます。

    ここまで達成された方は、データ分析の適正があるかもしれません。この記事を最後まで進めた後は、より楽しく学べる、Pythonと実データで遊んで学ぶデータ分析講座 [ 梅津雄一 ]の書籍がおすすめです。

    タグを探して表示する

    step/3-1.py

    要素が3つ表示されました。ここから文字列だけを表示させます。最後 に.textをつけます。3-1.pyを次のように変えます。

    step/3-1.py

    import requests
     from bs4 import BeautifulSoup
     import urllib 
    load_url="https://creaters-you.com/index.html" html=requests.get(load_url) 
    soup=BeautifulSoup(html.content,"html.parser") 
    print(soup.find("title").text) print(soup.find("h2").text) print(soup.find(“li").text) 

    実行結果

    スクレイピングを学ぶ

    Pythonでデータをダウンロード

    スクレイピングって何

    全てのタグを探して表示する

    .find(タグ名)で取得できるのは1つだけです。全ての要素を取得するに は、.find_all(“タグ名”)を使います。そして、見つかった要素は、for文で取り 出せます。

    step/step3-2.py

    import requests
     from bs4 import BeautifulSoup
     import urllib load_url="https://creaters-you.com/index.html" html=requests.get(load_url) 
     soup=BeautifulSoup(html.content,"html.parser") for element in soup.find_all("li"):
     print(element.text) 

    実行結果

    スクレイピングって何

    Pythonをインストール

    Requestsでアクセスしてみよう

    HTMLを解析

    ニュースの記事を取得

    画像をダウンロード

    idやクラスで検索範囲を絞り込む

    BeutifulSoupでは、id属性やclass属性の名前を使い、範囲を搾り混んで検 索することができます。

    ※classはPythonの予約語(最初から使い方が決められている言葉)で、その まま使えないので、「class_」と書きます。

    もう一度テストWebページの構成を見ておきます。

    <!DOCTYPE html>
     <html lang="ja">
     <head>
     <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metaname="viewport"content="width=device-width, initial- scale=1.0"> 
    <title>スクレイピングを学ぶ</title> </head>
     <body> <h1>寺中晴紀のスクレイピング講座</h1> 
    <div id= "chap1">
     <h2>Pythonでデータをダウンロード</h2>
     <ol> 
    <li>スクレイピングって何</li> <li>Pythonをインストール</li> <li>Requestsでアクセスしてみよう</li> </ol> 
    </div>
    <div id= "chap2">
     <h2>HTMLを解析する</h2>
     <ol>
     <li>HTMLを解析</li> 
    <li>ニュースの記事を取得</li> 
    <li>画像をダウンロード</li> </ol> 
    </div>
     <p><img src="pc.png" width="50%" height="50%"></p>
     <p><img src="pc2.png" width="50%" height="50%"></p>
     <p><a href="https://creaters-you.com/index2.html">絶対URLでリンク へとぶ</a></p>
     <p><a href="index3.html">相対URLでリンクへとぶ</a></p>
     </body>
     </html> 

    この中の<div id=”chap1>の要素を取り出します。

    step/3-3.py

    import requests
     from bs4 import BeautifulSoup
     import urllib load_url="https://creaters-you.com/index.html" html=requests.get(load_url) soup=BeautifulSoup(html.content,"html.parser") chap1=soup.find(id="chap1")
     print(chap1) 
    

    実行結果

    <div id=”chap1″>

    <h2>Pythonでデータをダウンロード</h2>

    <ol>

    <li>スクレイピングって何</li>

    <li>Pythonをインストール</li>

    <li>Requestsでアクセスしてみよう</li>

    </ol>

    </div>

    id=“chap2”の要素が取得できました。

    リストタグのみを表示させる

    step/3-4.py

    import requests 
    from bs4 import BeautifulSoup 
    load_url="https://creaters-you.com/" 
    html=requests.get(load_url) 
    soup=BeautifulSoup(html.content,"html.parser") 
    #IDで検索 中身のliタグを表示 
    chap1=soup.find(id="chap1") 
    for element in chap1.find_all("li"): 
    print(element.text) 
    

    リンク一覧をファイルに書き出す

    リンクのURLは、タグの中に「href=”URL”」と書かれています。これを取 り出すには、「get(属性名)」を使います。また、imgタグの「src=”URL”」 も同じように「.get(属性名)」を使います。

    全てのaタグ(アンカータグといって、リンクさせるためのタグです)は、 for element in soup.find_all(“a”):

    で、1つずつ取り出せます。

    さらにリンクはhref属性なので、

    url=element.get(“href”) と指定すれば取り出せます。

    step/3-5.py

    import requests
    from bs4 import BeautifulSoup
    import urllib load_url="https://creaters-you.com/index.html" html=requests.get(load_url) soup=BeautifulSoup(html.content,"html.parser") 
    for element in soup.find_all("a"): 
    print(element.text) url=element.get("href") print(url) 

    相対URLでリンクへとぶ

    index3.html

    リンクが2つ表示されました。

    絶対URLのhttps://creaters-you.com/index2.htmlと相対URLの index3.htmlです。

    絶対URLはこのまま使えますが、相対URLは、絶対URLに直さないと、使え ません。絶対URLに変換していきましょう。

    ・・・疲れましたね。少し休憩しましょう。作業を進めていくと、目が疲れきませんか?

    PCメガネはつけておいた方がいいですよ。

    《5%OFFクーポン発行中!!》【圧倒的レビュー数3,000件!!楽天89冠】 JIS検査済 ブルーライトカットメガネ メガネ ブルーライトカット 99.9% UV420 紫外線カット PCメガネ PC パソコン 眼鏡 メンズ レディース 度なし 伊達メガネ プレゼント

    相対URLを絶対URLに変換する

    ベースURLはどのページから見たURLなのかのURLです。今回の場合は、 https://creaters-you.com/になります。urllibをimportして、URLの変換 処理を追加します。

    step/3-6.py

    mport requests
    from bs4 import BeautifulSoup
    import urllib 
    load_url="https://creaters-you.com/index.html" html=requests.get(load_url) soup=BeautifulSoup(html.content,"html.parser") 
    for element in soup.find_all("a"): 
    print(element.text) url=element.get("href") link_url=urllib.parse.urljoin(load_url , url) print(link_url)

    絶対URLでリンクへとぶ

    https://creaters-you.com/index2.html

    相対URLでリンクへとぶ

    https://creaters-you.com/index3.html

    どちらも絶対URLで表示させることができました。

    step/step3-7.py

    import requests
    from bs4 import BeautifulSoup
    import urllib load_url="https://creaters-you.com/index.html" html=requests.get(load_url) soup=BeautifulSoup(html.content,"html.parser") filename="linklist.txt"
    with open(filename , "w") as f:
            for element in soup.find_all("a"):
            url=element.get("href") link_url=urllib.parse.urljoin(load_url ,      url) f.write(element.text +"\n")
            f.write(link_url+"\n")

    f.write(“\n”) 実行すると、リンク一覧ファイルの「link.txt」が作られます。

    画像を一括ダウンロードしよう

    画像をダウンロードするには、画像の絶対URLが必要になります。その方法 は後で解説するので、まずは用意したURLで画像をダウンロードしてみてく ださい。

    画像ファイルを1枚だけダウンロード

    https://creaters-you.com/
    

    から、https://creaters- you.com/pc.pngというURLのサンプル画像をダウンロードします。3-8.py というファイルを作ってください。

    ダウンロードの方法は、requestsでインターネットからデータを取得して、 ファイルに書き込むだけです。ただし、画像はバイナリーファイルなので、 開くときは、mode=”wb”を指定します。

    保存する時には、ファイル名が必要なので、URLからファイル名を取り出し ます。

    https://creaters-you.com/pc.png 
    

    「/」で区切っているURLをバラバラにします。バラバラにした1番最後が ファイル名です。後ろから1番目なので、[ -1 ]と表します。

    step/step3-8.py

    import requests imge_url="https://creaters-you.com/pc.png" 
    imgdata=requests.get(imf_url)
     filename=imge_url.split("/")[-1] with open(filename , mode="wb") as f: 
             f.write(img,data.content) 
    

    そうすると pc.pngの画像がstepフォルダに保存されます。
    慣れてきたら、後は、数をこなせば、より早く欲しいデータを収集することができます。
    Python 実践データ分析 100本ノック 第2版 [ 下山輝昌 ]を読んで、数をこなしましょう。

    ダウンロード用のフォルダを作って保存する

    パソコン上にフォルダを作ったり、そのフォルダにいろいろアクセスしたり するには、「Path」を使います。 Pathはpathlibというパッケージに入っているので、

    from pathlib import Path

    と指定するだけで、importできます。

    フォルダ名を指定して、Pathを作ったら、

    .mkdir(exist_ok=True)

    と命令すると、フォルダが作られます。また、その中のファイルにアクセスする ときは、「フォルダ.joinpath(“ファイル名”)」と、フォルダとファイル名を つなぐだけで、アクセスできるパス(道)が作れます。このパスに画像データ を書き出せば、フォルダ内に画像ファイルが作られます。

    フォルダを作る書式

    フォルダ=Path(“フォルダ名”) フォルダ.mkdir(exist_ok=True)

    フォルダ.joinpath(“ファイル名”) 「download」というフォルダを作って、そこに「pc.png」という画像ファ イルを保存してみます。

    step/3-9.py

    import requests
     from pathlib import Path
     #保存フォルダを作る out_folder=Path("download") out_folder.mkdir(exist_ok=True) #画像ファイルを取得する image_url="https://creaters-you.com/pc.png" imgdata=requests.get(image_url) #フォルダ名にファイル名をつける filename=image_url.sprit("/")[-1] out_path=out_folder.joinpath(filename) #画像ファイルをファイルに書き出す
     with open(out_path , mode="wb") as f: 
             f.write(imgdata.content) 

    実行すると、「step」フォルダの中に「dowload」フォルダが作られ、その 中に「pc.ong」という画像ファイルが書き出されます。

    すべてのimgタグの画像ファイルURLを表示する

    srep/3-10.py

    import requests
     from bs4 import BeautifulSoup
     import urllib load_url="https://creaters-you.com" html=requests.get(load_url) soup=BeutifulSoup(html.content,"html.parser") #全てのimgタグを検索し、リンクを取得する
     for element in soup.find_all("img") 
         src=element.get("src") #絶対URLとファイルを表示する       
    image_url=urllib.parse.urljoin(load_url)         
    filename=image_url.split("/")[-1] 
    print(image_url , ">>" , filename) 

    実行結果

    https://creaters-you.com/pc.png >> pc.png

    https://creaters-you.com/pc2.png >> pc2.png

    画像を一括ダウンロードするプログラム

    アクセスし過ぎて相手のサーバーに負担をかけないようにするために「1回 アクセスしたら、1秒待つ」time.sleep(1)というプログラムをを追加してい ます。

    srep/3-11.py

    import requests
    from bs4 import Beautiful Soup from pathlib import Path
     import urllib import time
     load_url="https://creaters-you.com/" html=requests.get(load_url) 
    soup=BeautifulSopup(html.content,"html.parser)" out_folder=Path("download2") out_folder.mkdir(exist_ok=True)
    for element in soup.find_all("img") 
           src=elenent.get("src")                            
    image_url=urllib.parse.urljoin(load_url,src)                                              
    imgdata=requests.get(image_url) 
    filename=image_url.split("/")[-1]
    out_path=out_folder.joinpath(filename) 
      with open(out_path , mode="wb") as f: 
            f.write(imgdata.content) 
            time.sleep(1) 


    実行すると、download2というフォルダが作られ、その中に、pc.pngと pc2.pngという画像ファイルが書き込まれます。

    データ分析の準備

    名前,国語,数学,英語,理科,社会 
    Aさん,75,89,76,97,77 
    Bさん,65,100,75,82,76 
    Cさん,90,84,96,82,94 
    Dさん,70,73,63,56,79 
    Eさん,82,91,84,80,78 
    Fさん,86,92,92,92,95 
    

    padasは、表データを読み込んで、データの追加や抽出、集計、書き出しなどを行える外部ライブラリです。

    windowsにインストールするときはコマンドプロンプト

    pip install pandas

    macOSにインストールするときは、ターミナル

    pip3 install pandas

    表データは、テーブルと呼ばれます。横方向に並んでいる行と、縦方向に並 んでいる列でできています。

    行は、レコードやロウとも呼ばれます。

    列は、カラムや項目とも呼ばれます。

    表データをファイルに保存するときに、CSVファイルがよく使われます。

    CSVファイルとは、カンマで区切られたデータが何行も入ったテキストファイルです。ファイルの一行が1件のデータで、カンマで区切られた1つ1つが 要素です。1番左に数字が並んでいます。これをインデックスといいます。

    pandasで表データの情報を表示

    1-1.py

    import pandas as pd 
    #csvファイルを読み込む 
    df=pd.read_csv("test.csv") 
    #表データの情報を表示 
    print("データの件数=",len(df)) 
    print("項目名=" ,df.columns.values) 
    print(“インデックス”,df.index.values) 

    列データ、行データを表示する

    df[“列名”]と指定すると、その1列のデータを取得できます。複数列のデー タは、df[“列名2” , “列名2”]と、リストで指定して取得します。test.csvの国 語と数学の列データを表示させます。

    1行のデータは、df.loc[行番号]と指定するとその1行のデータを取得できます。複数行のデータは、df.loc[[行番号1,行番号2]]と、リストで指定して取 得できます。また、1つの要素は、df.loc[行番号][“列名”]と、行と列を指定 することで所得できます。

    1-2.py

    import pandas as pd 
    #csvファイルを読み込む 
    df=pd.read_csv("test.csv") 
    #国語のデータを表示 
    print("国語の列データ\n",df["国語"]) 
    #国語と数学のデータを表示 
    print("国語と数学のデータ\n",df[["国語","数学"]]) 
    #Cさんのデータを表示 
    print("Cさんのデータ\n",df.loc[2]) 
    #CさんとDさんのデータ 
    print("CさんとDさんのデータ\n",df.loc[[2,3]]) 
    #指定した行の指定した列データを表示 
    print(“Cさんの国語のデータ\n”,df.loc[2]["国語"]) 

    表データの追加と削除

    df.drop(“列名”,axis=1)

    指定した行を削除するには、

    df.drop(行番号,axis=0)

    と指定します。

    1-3.py

    import pandas as pd 
    #CSVファイルを読み込む 
    df=pd.read_csv("test.csv") 
    #1列のデータ(技術)を追加 
    df["技術"]=[68,73,82,77,94,96] 
    print("列データを追加",df) 
    #1行のデータを追加 
    df.loc[6]=["Gさん",90,89,70,97,77,84] 
    print("行データを追加\n",df) 
    #名前の列を削除 
    print("名前の列を削除\n",df.drop("名前",axis=1)) 
    #インデックス2の行を削除 
    print(“インデックス2の行を削除\n",df.drop(2,axis=0)) 

    条件に合うデータを抽出することができます。例えば、国語の王もくが90点 以上の行データを抽出したいときは、

    df[df[“国語”]>=90]

    と指定します。

    データの加工と抽出

    1-4.py

    import pandas as pd 
    df=pd.read_csv("test.csv") 
    #条件に合うデータを抽出する 
    data_s=df[df["国語"]>=90] 
    print("国語が90点以上\n",data_s) 
    data_c=df[df["数学"]<80] 
    print("数学が80点未満\n",data_c) 

    データを集計する

    表データを集計することができます。最大値はdf[“列名”].max()、最小値は

    df[“列名”].min()、平均値はdf[“列名”].mean()、

    中央値はdf[“列名”].median()、合計値はdf[“列名”].sum()で求めることができます。

    行と列を入れ替える

    表データの行と列を入れ替えることができます。例えば、DataFrameに

    「.T」をつけるだけで入れ替わります。またDataFrameを、Pythonで使う

    リストに変換することもできます。「.values」とつけるだけです。

    1-5.py

    import pandas as pd 
    df=pd.read_csv("test.csv") 
    print("数学の最高点 =",df["数学"].max()) 
    print("数学の最低点 =",df["数学"].min()) 
    print("数学の平均値 =",df["数学"].mean()) 
    print("数学の中央値 =",df["数学"].median()) 
    print("数学の合計 =",df["数学"].sum()) 
    kokugo=df.sort_values("国語",ascending=False) 
    print("国語の点数が高いもの順で並び替え\n",kokugo) 
    #行と列を入れ替える 
    print("行と列を入れ替える\n",df.T) 
    #リスト化 
    print("Pythonのリストデータ化\n",df.values) 

    データを並び替える

    項目を指定して並び替えをすることができます。df.sort_values(“列名”)と命 令します。

    昇順(1、2、3……)

    df=df.sort_values(“列名”)

    降順

    df=df.sort_values(“列名”,ascending=False)

    CSVファイルに出力する

    DataFrame.to_csv(ファイル名.csv”)とします。インデックスやヘッダーを

    削除して出力したいときには、=Falseとします。

    国語の点数で並び替えて、CSVファイルに出力してみます。

    1-6.py

    import pandas as pd 
    df=pd.read_csv("test.csv") 
    #国語の点数が高いもの順 
    kokugo=df.sort_values("国語",ascending=False) 
    #CSVファイルに出力 
    kokugo.to_csv(“export3.csv",index=False,header=False) 
    

    グラフで表示する

    import matplotlib

    pyplot as pltと指定すると「plt」という省略名が使えるようになります。た だしそのままではグラフ内の日本語が文字化けしてしまうのですが、最初に1行 japanize_matplotlib をimportしておくと、これだけで文字化けしない ようになります。

    pandasで読み込んだ表データは、pandasの「plot機能」でグラフ化することができます

    (実際には、pandas内部からmatplotlibの機能を呼び出して利用していま す。このおかげで簡単に連携ができます)。

    Pandasで読み込んだ表データは、DataFrameに「plot()」を追加して、DataFrame.plot()と命令するだけでグラフ化されます。できたグラフは、 plt.show()と命令することで表示されます。

    折れ線グラフを作る

    DataFrame.plot()

    作ったグラフを表示する

    plt.show()

    1-7.py

    mport pandas as pd 
    import matplotlib.pyplot as plt 
    import japanize_matplotlib 
    #CSVを読み込む 
    df=pd.read_csv("test.csv") 
    #グラフを作って表示する 
    df.plot() 
    plt.show() 

    いろいろなグラフの種類の表示させる

    棒グラフ(水平) df.plot.barh()

    積み上げ棒グラフ df.plot.bar(stacker=True)

    箱ひげグラフ df,plot.box()

    麺グラフ df.plot.area()

    円グラフ df.plot.pie(labeldistance=0.6)

    凡例を表示させる場所

    plt.legend(loc=“lower right)

    rightの部分を場所によって変える

    1-8.py

    import pandas as pd 
    import matplotlib.pyplot as plt 
    import japanize_matplotlib 
    #CSVを読み込む(名前の列を表示) 
    df=pd.read_csv("test.csv",index_col=0) 
    #棒グラフを作って表示する 
    df.plot.bar() 
    plt.legend(loc="lower left") 
    plt.show() 
    #水平の棒グラフ 
    df.plot.barh() 
    plt.legend(loc="lower left") 
    plt.show() 
    #積み上げグラフを作って表示する 
    df.plot.bar(stacked=True) 
    plt.legend(loc="lower left") 
    plt.show() 
    #箱ひげグラフ 
    df.plot.box() 
    plt.legend(loc="lower left") 
    plt.show() 
    #面グラフ 
    df.plot.area() 
    plt.legend(loc="lower left") 
    plt.show() 

    個別のデータをグラフで表示する

    1列のデータは、df[“列名”]と指定すれば、1行のデータは、df.loc[行番号]と 指定すれば取得できます。その取得したデータをDataFrameとして指定する だけで、個別のグラフが 作れます。「国語」だけの棒グラフ、「国語と数学」だけの棒グラフ、「C さん」だけの棒グラフ作ります。

    index(行の表示名)の変更

    CSVファイルを読み込むとき、index_col=0と指定すると、一番左の列をインデックスとして読み込むことができます。

    1-9.py

    import pandas as pd 
    import matplotlib.pyplot as plt 
    import japanize_matplotlib 
    #CSVを読み込む(名前の列を表示) 
    df=pd.read_csv("test.csv",index_col=0) 
    #国語の棒グラフを作って表示する 
    df["国語"].plot.bar() 
    plt.legend(loc="lower left") 
    plt.show() 
    #国語と数学の棒グラフ 
    df[["国語","数学"]].plot.barh() 
    plt.legend(loc="lower left") 
    plt.show() 
    #Cさんの棒グラフ 
    df.loc["Cさん"].plot.barh() 
    plt.legend(loc="lower left") 
    plt.show() 
    #Cさんの円グラフ 
    df.loc["Cさん"].plot.pie(labeldistance=0.6) 
    plt.legend(loc="lower left") 
    plt.show() 
    #教科ごとの棒グラフ 
    df.T.plot.bar() 
    plt.legend(loc="lower right") 
    plt.show() 

    グラフを好きな色に変える

    Df.plot.bar(color=色名リスト)

    1-10.py

    import pandas as pd 
    import matplotlib.pyplot as plt 
    import japanize_matplotlib 
    #CSVファイルを読み込む 
    df=pd.read_csv("test.csv",index_col=0) 
    #好きな色のついた棒グラフ 
    colorlist=["skyblue","steelblue","tomato","cadetblue","orange","sienna"] 
    df.T.plot.bar(color=colorlist) 
    plt.legend(loc="lower right") 
    plt.show() 
    

    グラフを画像ファイルに出力する

    plt.savefig(“ファイル名”)と命令します。

    1-11.py

    import pandas as pd 
    import matplotlib.pyplot as plt 
    import japanize_matplotlib 
    #CSVファイルを読み込む 
    df=pd.read_csv("test.csv",index_col=0) 
    #好きな色のついた棒グラフ 
    colorlist=["skyblue","steelblue","tomato","cadetblue","orange","sienna"] 
    df.T.plot.bar(color=colorlist) 
    plt.legend(loc="lower right") 
    plt.savefig(“bargraph.png") 
    

    Excelファイルを読み書きする

    openpyxlをインストール

    openpyxIIは、Excelファイルを扱えるようになる外部ライブラリです。ファイルを読むxlrd、ファイルを書くxIntも一緒にインストールします。

    Windowsにインストールするときは、コマンドプロンプト pip install openpyxl xlrd xlwt macOSにインストールするときは、ターミナル

    pip3 install openpyxl xlrd xlwt

    Excelファイルに出力する

    まず、openpyxlライブラリをimport openpyxlとしてimportします。

    Excelファイルとして出力するには、df.to_excel(“ファイル名.xlsx”)と命令し ます。また、インデックスを削除して書き出すときは、df.to_excel(“ファイ ル名.xlsx”, index=False)と命令します。

    Excel ファイルに出力する

    df.to_excel(“ファイル名.xlsx”)

    Excel ファイルに出力する(インデックスを削除)

    df.to_excel(“ファイル名.xlsx”, index=False)

    「test.csv」を読み込んで、Excelファイル (csv_to_excelt.にxlsx)に出力

    Excelファイルに出力する(シート名を指定)

    df.to_excel(“ファイル名.xlsx”, sheet_name=“シート名”)

    2-1.py

    import pandas as pd 
    import openpyxl 
    df=pd.read_csv("test.csv") 
    kokugo=df.sort_values("国語",ascending=False) 
    #Excelファイルに出力 
    kokugo.to_excel("csv_to_excel.xlsx") 
    

    国語の点数で分類して、出力

    2-2.py

    import pandas as pd 
    import openpyxl 
    df=pd.read_csv("test.csv") 
    kokugo=df.sort_values("国語",ascending=False) 
    #Excelファイルに出力 
    kokugo.to_excel("csv_to_excel2.xlsx",index=False,sheet_name="国語で 分類") 
    

    2つのシートを1つのブックに保存

    2-3.py

    import pandas as pd 
    import openpyxl 
    df=pd.read_csv("test.csv") 
    kokugo=df.sort_values("国語",ascending=False) 
    #1つのExcelファイルに複数のシートで出力 
    with pd.ExcelWriter("csv_to_excel3.xlsx") as writer: 
    df.to_excel(writer,index=False,sheet_name="元のデータ") 
    kokugo.to_excel(writer,index=False,sheet_name="国語で分類") 
    Excelファイルを表データとして読み込む 
    pd.read_Excel(ファイル名)で命令 
    

    2-4.py

    import pandas as pd 
    import openpyxl 
    #Excelファイルを読み込む 
    df=pd.read_excel("csv_to_excel2.xlsx") 
    print(df) 
    

    複数のシートを読み込む場合は、sheet_nameを読み込む

    2-5.py

    import pandas as pd 
    import openpyxl 
    #Excelファイルを読み込む 
    df=pd.read_excel("csv_to_excel3.xlsx") 
    print(df) 
    df=pd.read_excel("csv_to_excel3.xlsx",sheet_name="国語で分類") 
    print(df) 
    

    オープンデータを解析する

    https://www.post.japanpost.jp/zipcode/download.html

    CSVファイルを読み込んで、データの件数と、項目名を表示させます。

    1-1.py

    import pandas as pd 
    df=pd.read_csv("13TOKYO.CSV",header=None,encoding="shift_jis") 
    print(len(df)) 
    print(df.columns.values) 

    郵便番号から住所を抽出させます。

    1-2.py

    import pandas as pd 
    df=pd.read_csv("13TOKYO.CSV",header=None,encoding="shift_jis") 
    #2の列が1600006の住所を抽出して表示 
    results=df[df[2]==1600006] 
    print(results[[2,6,7,8]]) 

    四谷の住所を抽出します。

    1-3.py

    import pandas as pd 
    df=pd.read_csv("13TOKYO.CSV",header=None,encoding="shift_jis") 
    #8の列が四谷の住所を抽出 
    results=df[df[8]=="四谷"] 
    print(results[[2,6,7,8]]) 
    #8の列に四谷の文字が含まれている住所を抽出 
    results=df[df[8].str.contains("四谷")] 
    print(results[[2,6,7,8]]) 
    よかったらシェアしてね!
    • URLをコピーしました!
    目次