3週目整理


Data


Dataset


可視化にはデータが必要です.可視化するデータは、データセットの観点でグローバル個別データの観点で局所的に区分することができる.データの種類は大きく分けられます.
1.数値型
連続:長さ、重量、温度
離散型:サイコロ目盛り、人数
  • カテゴリ
    名目型:血液型、宗教
    順序型:学年、減点、等級
  • 構造化データ


    表形式で提供され、一般的にcsv、tsvファイルです.1つの項目を横にして、featureを縦に表します.

    テーブル列データ


    これは時間が経つにつれて生じたデータです.気温、株価などの定型データや音、ビデオなどの非定型データが存在する.
    時間が経つにつれて、トレンド、季節性、周期性などを見てみましょう.

    地理/地図データ


    距離、経路、分布など

    リレーショナルデータ


    オブジェクトはノードを表し、関係はリンクを表し、サイズ、色、数などはオブジェクトと関係の重みを表します.

    階層データ


    関係には関係が明確なデータが含まれており,Tree,Treemap,Sunburstなどがある.

    Matplotlib


    Pythonが提供するビジュアル化ライブラリは、複数のライブラリと互換性があり、複数のビジュアル化方法を提供しています.

    デフォルトPlot

    fig = plt.figure(figsize=(10,10))
    ax = fig.add_subplot()
    matplotlibでは,可視化はFigureという大きなフレームワークにAxというサブマップを追加する方式である.Figsizeでサイズを調整できます.サブマップを追加する場合は、以下の方法で位置を調整できます.
    fig = plt.figure()
    ax = fig.add_subplot(131) 
    ax = fig.add_subplot(132)
    ax = fig.add_subplot(1,3,3) # 같은 방식이지만 가독성을 위해 
    グラフィックを表現する場合は、次のようにコードを記述できます.
    fig = plt.figure()
    
    x1 = [1,2,3]
    plt.plot(x1, color = 'r',label='red') # 선 그래프로 그림, 색: 빨간색, 범례를 표시하기 위해 label을 red로 선언
    plt.legend() # 범례표현
    ax.set_title('test_graph') # 차트의 이름 정의
    ax.annotate(text='red graph',xy=(1,2)) # 원하는 위치에 text 추가하는 기능
    plt.show()
    上記のコードを実行する画面は次のとおりです.

    Bar Plot


    長方形のバーを使用してデータ値を表すグラフィック.
    これは異なるカテゴリの数値を比較するのに適した方法である.
    方向に垂直なら.bar()でx軸にカテゴリy軸の値をマークします.bottomパラメータを使用してデータ比較を行います.
    水平面barh()でy軸にカテゴリをマークし、x軸に値をマークします.左パラメータを使用してデータ比較を行います.
    x軸の始点は0でなければなりません.
    値でソートされたsortは、情報の正確な伝達を確保します.値()とアルファベット順のsort.index()を使用します.
    fig = plt.figure()
    x = list(['C','Java','Python','JavaScript'])
    y = np.array([1,2,3,4])
    
    plt.bar(x, y, # 세로 bar type
            width=0.7, # 그래프 너비
            edgecolor='black', # 테두리 
            linewidth=2, # 선 두께
            color='red') # 그래프 색
    # plt.barh(x,y) # 가로 bar type
    
    plt.show()
    上記のコードを実行して得られる図形の形状は以下の通りである.

    各種Bar Plotの実践に適用する


    StudentsPerformanceはデータセットを準備します.csvからデータを取得します.
    student = pd.read_csv('./StudentsPerformance.csv')
    student.info() # data의 null 값 유무와 dtype을 확인할 수 있다.
    # 수치와 범주를 data representation을 mapping하는 것이라 중요하다.
    グラフを描くには、グループ情報を可視化する必要があります.
    group = student.groupby('gender')['math score'].value_counts()
    # 성별에 따른 수학점수를 group화 
    これに基づいて、以下のようにグラフィックで表示されます.
    fig, axes = plt.subplots(1, 2, figsize=(15, 7))
    axes[0].bar(group['male'].index, group['male'], color='royalblue') # 남자의 수학점수는 파란색으로 
    axes[1].bar(group['female'].index, group['female'], color='tomato') # 여자의 수학점수는 빨간색으로
    この操作の結果は次のとおりです.

    Stacked Bar Plot


    bottomパラメータを使用して、次の空間を空にして、2つのグラフィックを統合できます.
    fig, axes = plt.subplots(1, 2, figsize=(15, 7))
    
    group_cnt = student['race/ethnicity'].value_counts().sort_index()
    axes[1].bar(group['male'].index, group['male'], color='royalblue')
    axes[1].bar(group['female'].index, group['female'], bottom=group['male'], color='tomato')
    実行結果は次のとおりです.

    Line Plot


    Line Plotは連続的に変化する値を順次点として表し,線として接続する.トレンドを観察するために、時間/順序の変化に特に適しているため、表列分析に特化しています.
    線で表されるので、これらの線を区別する要素を知る必要があります.
    1.カラー(Color)
    2.タグ(marker,markersize)
    3.ラインタイプ(linestyle,linewidth)
    基本的なline plotを描画するコードは以下の通りです.
    fig = plt.figure()
    x = [1,2,3,4]
    y = [1,3,2,4]
    plt.plot(x,y,
            color='green', # 색
            marker='o', # 마커 형태
            linestyle='solid') # 라인 형태
    plt.show()
    このコードを実行して得られるグラフィックの形式は次のとおりです.

    補間


    データにエラーやノイズがあると、データの傾向を特定することが困難になるため、これらの問題を解決しようとします.
    make_interp_spline(x, y) 

    Scatter Plot


    ポイントを使用して、2つのフィーチャーの関係を理解します.色、形、大きさなどで表現できます.
    fig = plt.figure(figsize=(7, 7)) # 전체적인 틀
    ax = fig.add_subplot(111, aspect=1) # aspect는 subplot의 가로축과 세로축의 scale을 맞춰준다.
    
    np.random.seed(970725)
    
    x = np.random.rand(20)
    y = np.random.rand(20)
    
    ax.scatter(x, y, 
               c='red', # 그래프 색상
               marker='o', # 그래프 모양
               linewidth=1, # 너비
               edgecolor='black') # 테두리 색
    ax.set_xlim(0, 1.05)
    ax.set_ylim(0, 1.05)
    
    plt.show()
    上記のコードで得られた散点図の形式は以下の通りである.

    Text


    可視化された資料だけでは十分な説明は難しいので,それを補完するために用いる.テキストのタイプは次のとおりです.
    Title:最大のトピック
    Label:軸のデータについて
    Tick Label:軸にルーラーを使用する
    Legend:凡例
    Annotation:各種説明情報(矢印)

    Title


    set titleは、グラフィックタイトルを決定できる関数です.
    ax.set_title('Ax Title') # 그래프 제목 설정
    ax.set_xlabel('X Label') # X축의 이름 설정
    ax.set_ylabel('Y Label') # Y축의 이름 설정

    Legend


    例の基本的な使い方は次のとおりです.
    ax.plot([1, 3, 2], label='legend') # plot의 label을 통해서 범례를 그려주는 것이 일반적
    ax.legend(
        title='Gender', # 범례의 제목
        shadow=True, # 그림자
        labelspacing=1.2, # 범례 label들간의 공간
        loc='lower right' # 위치 지정
        bbox_to_anchor=[1.2, 0.5] # 외부로 빼는 기능
    )

    Text


    図面に説明を追加するために書かれたテキストは、位置を調整したり、フォントやサイズなどを設定したりすることができます.
    ax.text(x=0.5, y=0.5, s='DataViz is Fun', # x,y 위치
            fontsize=20, # 폰트 크기
            fontweight = 'bold', # 폰트 굵기
            fontfamily = 'serif', # 글꼴
            color = '#0047ab', # 글자 색
            linespacing = 2, # 간격
            backgroundcolor = 'lightgray', # text 배경 색
            alpha = 0.5, # 투명도
            va = 'center', # 수직정렬(top, bottom, center)
            ha = 'center', # 수평정렬(top, bottom, center)
            rotation = 'horizontal', # 회전
            bbox = dict(boxstyle='round',ec = 'red', facecolor = 'gray', alpha = 0.4) # dict 형태로 전달되어야함.
           )
    上記のコードで得られたテキストは次のとおりです.

    Ticks & Text


    滴答の除去または調整方法.
    ax.set(frame_on=False) # frame을 안보이게 설정
    ax.set_yticks([]) # y축의 정보를 삭제
    ax.set_xtickslabels(math_grade.index) # bar 하나당 x축의 범위 설정

    Color


    色は最も有効なチャネルを区別する方法です.色を区別する要素は3つあります.
    中心(色調):r,g,b
    Saturate(彩度):鮮明度
    輝度きど:カラー輝度からーきど

    Facet


    これは,分割し,同じ方法で複数の特徴を同時に表示したり,大きなフレームワークでは見えない部分集合を詳細に表示したりすることを意味する.
    Figureは大きなフレームワークを表し、Axは各plotに含まれる空間を表す.
    Figureは大きなフレームワークなので、常に1つの値であり、plotは複数の値であってもよい.
    最も基本的な分割方法は以下の通りである.
    fig, (ax1, ax2) = plt.subplots(1, 2) # 세로로 1 가로로 2 만큼 쪼개는 뜻

    Squeeze & Flatten


    押し出しを使用すると、常に2 D配列が得られ、可変サイズで重複文を使用するのに役立ちます.
    fig, axes = plt.subplots(n, m, squeeze=False, figsize=(m*2, n*2))
    idx = 0
    for i in range(n):
        for j in range(m):
            axes[i][j].set_title(idx, color = 'white')
            axes[i][j].set_xticks([])
            axes[i][j].set_yticks([])
            idx+=1
    上記の方法を用いるには二重複文で操作する必要があるので,一つの複文のみを用いる場合は扁平化を用いる.
    fig, axes = plt.subplots(n, m, figsize=(m*2, n*2))
    
    for i, ax in enumerate(axes.flatten()):
        ax.set_title(i, color = 'white')
        ax.set_xticks([])
        ax.set_yticks([])

    aspect


    比率を表します.使用方法は次のとおりです.
    fig.add_subplot(122, aspect=0.5) # x축 한칸이 y축 0.5칸

    add_gridspec


    N x Mメッシュでは、スライドを使用してサブブロックを配置できます.使い方は以下の通りです.
    fig.add_gridspec(3, 3) # make 3 by 3 grid (row, col)

    make_axes_locatable


    カラーストライプの実施の一般的な方法
    ax_divider = make_axes_locatable(ax)
    
    ax = ax_divider.append_axes("right", size="7%", pad="2%") # 쪼개기 colorbar쓸때 유용
    実行結果は次のとおりです.

    Grid


    グリッドは、軸と平行線の補助を使用して情報を提供します.グリッドの形態には、次のような形態があります.
    2つの変数の和x+y=c
    比率y=cx
    2つの変数の積xy=c
    特定データを中心に(x-x')^2+(y-y')^2=c
    一般に、グリッドは次のように宣言できます.
    ax.grid()

    Line


    直交座標系に平行線を描画します.
    axvline()
    axhline()
    ax.axvline(0, color='red') # 세로축 빨간선
    ax.axhline(0, color='green') # 가로축 초록선

    Span


    これは特定の面積を表す方法です.
    axvspan()
    axhspan()
    ax.axvspan(0,0.5, color='red') # y축 0~0.5까지 빨간 면적 표시
    ax.axhspan(0,0.5, color='green') # x축 0~0.5까지 초록 면적 표시

    Spines


    代表的な要素は以下の3つです.
    set visible:軸の表示または非表示
    set linewidth:軸の厚さを調整する
    set position:軸の位置を調整する

    Seaborn


    sebornはMatplotlibに基づく統計的可視化ライブラリである.簡潔な文法と簡潔な設計
    import seaborn as sns

    Countplot

    sns.countplot(x : 그래프의 방향(세로)
    			  y : 그래프의 방향(가로)
                  order : 순서 지정
                  hue : 데이터의 구분 기준을 정해서 색을 통해 구분지음
                  palette : 색상변경 
                  color : hue로 지정된 그룹을 gradient 색생 전달 가능
                  hue_order : 색상의 순서를 정할 수 있다.
    )

    Categorical API


    四分位数は、以下に示すように、データを四等分の観測値に分割することができる.
    min
    25%(lower quartile)
    50%(median)
    75%(upper quartile)
    max

    Box Plot


    Box Plotを描く方法は次のとおりです.
    sns.boxplot(x='math score', data = student, ax=ax)
    この操作を行った結果の値は次のとおりです.

    IQR : 25~ 75%
    whrisker:箱の外部範囲を表す線
    outlier : -IQR1.5および+IQR 1.5を超える値
    min : -IQR1.5以上の最小値
    max : +IQR1.5以下の最大値

    Violin Plot


    Box Plotは実際の分布を表現するのが難しいので,補足する.次のコードで記述して表示できます.
    sns.violinplot(x='math score', data=student, ax=ax)
    この操作を行った結果の値は次のとおりです.

    villin plotは,データ不連続もピクチャのように連続的に表現され,データ範囲のないデータさえ表示されるため誤解を生じる.これを減らすには、次のパラメータを使用します.
    bw:分布の詳細度
    Cut:いったいどれくらい切るの?
    内部:内部の表現方法
    再作成に使用すると、次のように記述できます.
    sns.violinplot(x='math score', data=student, ax=ax,
                   bw=0.1, # 분포 표현을 얼마나 자세히 할 것인지 
                   cut=0, # 끝 부분을 얼마나 자를 지
                   inner='quartile' # 내부를 어떻게 표현할 지
                  )
    scaleとsplitパラメータを用いて比較することもできます.
    scale:各バイオリンの種類(幅:幅が等しく、count:実際のデータ量に比例、count:個数に比例)
    split:並列比較

    Distribution


    すべてのカテゴリ/連続タイプの分布を表示

    Univariate Distribution


    ヒーストック
    kdeplot : Kernel Density Estimate
    ecdfflot:累積密度関数
    rugplot:直線の密度関数を使用する
    hisplotの使い方は以下の通りです.
    sns.histplot(x='math score', data=student, ax=ax,
                  binwidth=50, # 막대의 너비 조정
                  bins=100, # 막대의 개수를 조정
                  element = 'ploy', # step, poly (그래프 모양)
                  multiple = 'stack' # layer, dodge, stack, fill(N개의 분포를 표현가능하다)
                )
    kdeplotは連続密度を表す関数である.使い方は以下の通りです.
    sns.kdeplot(x='math score', data=student, ax=ax
    			fill = True, # 내부를 채워서 밀도 표현
                bw_method = 0.05, # 그래프 형태를 좀 더 자세하게 표현
                hue = 'race/ethnicity',
                hue_order=sorted(student['race/ethnicity'].unique()))
                multiple = 'layer',
                cumulative = True, # 0부터 데이터를 쌓아서 표현
                complementary=True, # 데이터를 쌓아서 내려오는것 
    )

    Joint Plot

    sns.jointplot(x='math score', y='reading score',data=student,
    			 hue = 'gender' # hue를 통해 성별같은 column으로 구분이 가능하다.
                 height=7)
    2つの特徴を組み合わせると,結合確率分布はそれぞれの分布を見ることができる.

    Pair Plot


    すべてのfeatureペアを可視化します.
    sns.pairplot(data=iris,
    			 hue='species' # 종에 대해 구분짓는다.
                 corner = True # Corner를 통해 상삼각행렬의 값을 보이지 않게 할 수 있다. 

    Facet Grid


    これはpairplotのようなマルチパネルの可視化を使用することを意味する.全部で4つの関数があります.
    catplot : Categorical
    displot : Distribution
    relplot : Relational
    Implot : Regression
    FacetGridは、行と列のcategoryに基づいてグラフィックの数を調整します.