파이썬으로 결합분포를 만드는 방법 알 수 있을까요?

조회수 1312회

파이썬으로 결합분포를 만드는 방법 알 수 있을까요? 단편적으로는 이렇게 하면 될까 싶다가도 조합을 하는 방법에 대해서는 영 감이 잡히지 않아서 말입니다.

예를 들어 raw data가 주어져 있을때 행은 키 (150 이상~160 미만, 160 이상~170 미만, 170 이상~180 이상)이런 식으로 나오고 열은 몸무게 (40 이상~50 미만, 50 이상~60 미만, 60 이상~70 미만) 으로 나누어서 결합분포표를 작성해야 한다면 어떤 방법을 활용해야 할까요? 코드를 알려주시면 정말 감사하겠지만 어려우시다면 사용해야 하는 툴을 제시해주셔도 정말 도움이 될 것 같습니다.

추신: 범위를 나눌때 범주간 간격이 다르면 이를 설정하는 방법을 알고 계신가요? 구글링을 해봤을때 범주간격이 일정한 경우는 나오는데 그렇지 않은 경우 개별적으로 설정하는 방법은 찾지 못했습니다. ex : 키 (150 이상~155 미만, 155~165 미만)

1 답변

  • >>> import random
    >>> random.normalvariate(173, 4)
    169.80165874433067
    >>> 키 = [ random.normalvariate(171, 7) for _ in range(30) ]
    >>> 몸무게 = [ random.normalvariate(68, 10) for _ in range(30) ]
    >>> 키
    [163.56879430116317, 162.22173001725076, 176.00801254009994, 169.5507386679232, 169.39525006222004, 170.88315341736174, 169.09580745969214, 178.68189526927057, 170.09094441473383, 190.50342799606022, 164.05186167935977, 170.12520735368116, 166.92195871597255, 180.8569156017258, 173.048064865071, 171.59817670156855, 174.3197143994516, 158.85336291561825, 164.9219727414754, 164.51300891361328, 162.64808453949905, 161.6232751682463, 173.53714194566567, 175.77100898262185, 171.69845332557077, 163.27962146586515, 166.09477553602366, 170.89070908439362, 176.8148119692912, 159.61334199452318]
    >>> 몸무게
    [66.99290478451694, 82.83895592563472, 60.21868655318631, 67.54483320099003, 63.77046404838144, 74.69508772698411, 54.03291854797147, 74.65317492061382, 70.5834380726465, 71.40588442831626, 66.03558459738376, 83.50826980677327, 80.84686226202994, 68.94690486095789, 58.97192764923703, 66.50390166196242, 51.012037009307235, 61.646362063997664, 62.05592175650585, 58.160756245032445, 53.9787973380094, 68.12608828472912, 68.680553390887, 67.4302957009136, 73.37638329263656, 49.26440845923726, 64.2172223808422, 61.85748349784684, 52.43992689488411, 69.92132323763535]
    >>> import pandas as pd
    >>> 
    >>> data = pd.DataFrame({'키':키, '몸무게':몸무게})
    >>> data
                 키        몸무게
    0   163.568794  66.992905
    1   162.221730  82.838956
    2   176.008013  60.218687
    3   169.550739  67.544833
    4   169.395250  63.770464
    5   170.883153  74.695088
    6   169.095807  54.032919
    7   178.681895  74.653175
    8   170.090944  70.583438
    9   190.503428  71.405884
    10  164.051862  66.035585
    11  170.125207  83.508270
    12  166.921959  80.846862
    13  180.856916  68.946905
    14  173.048065  58.971928
    15  171.598177  66.503902
    16  174.319714  51.012037
    17  158.853363  61.646362
    18  164.921973  62.055922
    19  164.513009  58.160756
    20  162.648085  53.978797
    21  161.623275  68.126088
    22  173.537142  68.680553
    23  175.771009  67.430296
    24  171.698453  73.376383
    25  163.279621  49.264408
    26  166.094776  64.217222
    27  170.890709  61.857483
    28  176.814812  52.439927
    29  159.613342  69.921323
    >>> data['키10'] = data['키']//10*10
    >>> data['몸무게10'] = data['몸무게']//10*10
    >>> data
                 키        몸무게    키10  몸무게10
    0   163.568794  66.992905  160.0   60.0
    1   162.221730  82.838956  160.0   80.0
    2   176.008013  60.218687  170.0   60.0
    3   169.550739  67.544833  160.0   60.0
    4   169.395250  63.770464  160.0   60.0
    5   170.883153  74.695088  170.0   70.0
    6   169.095807  54.032919  160.0   50.0
    7   178.681895  74.653175  170.0   70.0
    8   170.090944  70.583438  170.0   70.0
    9   190.503428  71.405884  190.0   70.0
    10  164.051862  66.035585  160.0   60.0
    11  170.125207  83.508270  170.0   80.0
    12  166.921959  80.846862  160.0   80.0
    13  180.856916  68.946905  180.0   60.0
    14  173.048065  58.971928  170.0   50.0
    15  171.598177  66.503902  170.0   60.0
    16  174.319714  51.012037  170.0   50.0
    17  158.853363  61.646362  150.0   60.0
    18  164.921973  62.055922  160.0   60.0
    19  164.513009  58.160756  160.0   50.0
    20  162.648085  53.978797  160.0   50.0
    21  161.623275  68.126088  160.0   60.0
    22  173.537142  68.680553  170.0   60.0
    23  175.771009  67.430296  170.0   60.0
    24  171.698453  73.376383  170.0   70.0
    25  163.279621  49.264408  160.0   40.0
    26  166.094776  64.217222  160.0   60.0
    27  170.890709  61.857483  170.0   60.0
    28  176.814812  52.439927  170.0   50.0
    29  159.613342  69.921323  150.0   60.0
    >>> data.groupby(['키10', '몸무게10']).size().unstack()
    몸무게10  40.0  50.0  60.0  70.0  80.0
    키10                                
    150.0   NaN   NaN   2.0   NaN   NaN
    160.0   1.0   3.0   7.0   NaN   2.0
    170.0   NaN   3.0   5.0   4.0   1.0
    180.0   NaN   NaN   1.0   NaN   NaN
    190.0   NaN   NaN   NaN   1.0   NaN
    >>> data.groupby(['키10', '몸무게10']).size().unstack().fillna(0)
    몸무게10  40.0  50.0  60.0  70.0  80.0
    키10                                
    150.0   0.0   0.0   2.0   0.0   0.0
    160.0   1.0   3.0   7.0   0.0   2.0
    170.0   0.0   3.0   5.0   4.0   1.0
    180.0   0.0   0.0   1.0   0.0   0.0
    190.0   0.0   0.0   0.0   1.0   0.0
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)