データ分析(pandas)

22300 ワード

データ分析ワークフロー(DA Workflow)=データ分析プロセス(DA Pipeline)
データ収集
#1. 판다스 넘파이 import
import pandas as pd
import numpy as np

#2. 판다스의 read_html 메소드를 이용해서 특정 웹사이트 페이지를 읽어서 가져오자.  <<단일테이블>>
#<<주의>> read_html의 웹페이지의 테이블만 읽어온다.
타자수_선수기록표 = pd.read_html('https://www.koreabaseball.com/Record/Player/HitterBasic/BasicOld.aspx')
투수_선수기록표 = pd.read_html('https://www.koreabaseball.com/Record/Player/PitcherBasic/BasicOld.aspx')
수비_선수기록표 = pd.read_html('https://www.koreabaseball.com/Record/Player/Defense/Basic.aspx')

#3. 다중 테이블도 읽어오자.
역대구단성적_2010 = pd.read_html('https://www.koreabaseball.com/Record/History/Team/Record.aspx?startYear=2010&halfSc=T')
pandaのread html()メソッドを使用して、Webページを読み取ります.(テーブル形式のみを読み込みます).
特定のテーブルの抽出

역대구단성적_2010[2].head(5)

pandasのhead()メソッドで入力した値をDataFrame形式で抽出
読み込んだテーブルをhtml形式で保存してみます.
print(역대구단성적_2010[2].to_html())
to html():html形式で保存
to csv()、to json()など
「選手記録表」という変数htmlを入力し、最初の表の3行を出力します.
주루수_선수기록표 = pd.read_html('https://www.koreabaseball.com/Record/Player/Runner/Basic.aspx')
주루수_선수기록표[0].head(3)

走者記録表[0].head(3)=選手記録表の0番目のインデックス、0から3番目のhead(表)を出力します.
print(type(타자수_선수기록표))
# 리스트의 첫번째 요소만 가져와서 독립적인 데이터프레임을 만들어서 사용한다.
타자수_df = 타자수_선수기록표[0]
타자수_df
타자수_선수기록표の0番目のテーブルを타자수_df変数に簡単に入れるだけです.
データ加工선수기록표_요약という変数に타자수_dfの順位、チーム名、AVG、選手名を加えて加工します.
선수기록표_요약 = pd.DataFrame(타자수_df,columns=['순위','팀명','AVG','선수명']) 
선수기록표_요약.head()

columns=[]データ入れ順に出力します.(データのカラム名と同じでなければなりません)
データ・ナビゲーション:探索的データ分析
選手記録:ダイジェストのデータを利用して、チーム、打率別にソートして出力します.
선수기록표_요약_정렬 = 선수기록표_요약.sort_values(by=['팀명','AVG'], ascending=True)
선수기록표_요약_정렬
ascending=True:昇順ascending=False:降順
MVPを印刷しましょう
MVP = 선수기록표_요약.loc[선수기록표_요약['AVG'].idxmax()]
print(type(MVP)) #series타입
pd.DataFrame(MVP)
idxmax:最大値idxmin:最小値
データ解析

  • ≪データ・ナビゲーション|Data Navigation|Oraolap≫:≪データの表示|View Data|Oraolap≫

  • データ解析でーたかいせき:情報を抽出じょうほうをきだし
  • 打率3割の優れた打者の打率を分析する.
    #평균 타율이 3할때인 우수한 타자들을 알아내자.
    우수한타자 = 타자수_df.loc[타자수_df['AVG'] > 0.3]
    print(type(우수한타자))
    우수한타자
    #pd.DataFrame(우수한타자) DataFrame타입이 아닐시 DataFrame타입으로 변환하여 출력
    loc[]を用いてAVG万回の分析を行った後、出力はAVGに達した.
    優秀な打者の統計値をそれぞれ印刷してみます.
    print('----------------------------------------------------------')
    print(f"우수한 타자들의 타율  평균 =  \t{np.average(우수한타자['AVG'])}")
    print(f"우수한 타자들의 타율  분산 = \t{np.var(우수한타자['AVG'])} ")
    print(f"우수한 타자들의 타율  표준편차 = \t{np.std(우수한타자['AVG'])} ")
    print('-----------------------------------------------------------')
    print(f"우수한 타자들의 타율  최소타율 = \t{np.min(우수한타자['AVG'])} ")
    print(f"우수한 타자들의 타율  1분위수 = \t{np.percentile(우수한타자['AVG'],25)} ")
    print(f"우수한 타자들의 타율  2분위수 = \t{np.percentile(우수한타자['AVG'],50)} ")
    print(f"우수한 타자들의 타율  3분위수 = \t{np.percentile(우수한타자['AVG'],75)} ")
    print(f"우수한 타자들의 타율  최대타율 = \t{np.max(우수한타자['AVG'])} ")

    最優秀選手グループ(打率3点以上の選手)を選出した後
    優秀打者の本塁打数の平均値を確認する.
    print(f"우수한 타자들의 홈런 개수 평균 = \t {np.average(우수한타자['HR'])}")
    優秀打者の本塁打数平均=0.25
    選抜最優秀選手グループ(打率3点以上の選手)
    삼분위_타율 = np.percentile(우수한타자['AVG'],75)
    최우수_타자수 = 우수한타자.loc[우수한타자['AVG'] >= 삼분위_타율]
    최우수_타자수

    当時シーズンが始まって間もなく、まるで詐欺級だった・・・
    視覚化の練習をします.
    Pandasでcsvを読みます.
    df = pd.read_csv('/content/sample_data/california_housing_train.csv')
    df.head()
    
    import matplotlib.pyplot as plt
    Google colabが所有するサンプルデータを使用しました.
    拡散プラット:拡散は変数間の相関を可視化し、データ値の可変性と範囲を可視化します.
    まず、水平軸と垂直軸に、/列データと列データの分布平面を描画します.
    # 정규분포 = 평균, 표준 편차를 이용해서 분포
    plt.scatter(df['median_income'], df['median_house_value'])

    ヒストグラム:データ内の各値の表示頻度を決定します.
    meddian house valueを使用して周波数を知る
    plt.hist(df['median_house_value'])     # (데이터,, 매개인자)
    # 히스토그램은 인수값(매개인자)을 이용해서 값 범위를 지정해야 한다.
    # 범위의 값을 지정하고 각 범위의 샘플 수를 그려낸다.
    # 만약 인수를 지정하지 않는다면 자동으로 저장소가 결정된다.
    # 매개인자 인수에 정수를 부여하면 값 범위에 대한 빈을 균등한 간격으로 만들어준다.
    # bins

    ヒストグラムのスペースを使用して平均値を決定
    plt.hist(df['housing_median_age'], bins=50)

    ボックス印刷:分かりやすい変形値[統計可視化]の5つの統計結果の要約を表示します.
    plt.boxplot(df['median_house_value'])

    2つのデータ印刷ボックスの使用
    plt.boxplot( (df['total_bedrooms'],df['population']))
    

    線図:クロック列(時間、日付データ)など、時間軸に適用されるデータを表示します.
    
    # ex) plot(y) : 하나의 인수가 있는 경우 요소는 세로 축(y) 값에 해당하며 가로 축(x)은 요소의 인덱스 값이 지정된다.
    import numpy as np
    x = np.linspace(0,10,100)
    x
    y = x+ np.random.randn(100)
    y
    
    plt.plot(y)
    plt.plot(x,y) # 가로축(x), 세로축(y)

    x値はyで決まるので、上記の値と同じです.
    統計グラフの作成を容易にするには、Matplotlib->sebornがあります.
    import seaborn as sns
    #데이터 분포 : distplot()을 사용
    sns.distplot(df['housing_median_age'])

    指定したデータフレームオブジェクトのすべての列を分散プラットメッシュとして表示することにより、様々な変数間の相関pairplot()を直感的に決定する
    sns.pairplot(df)