파이썬으로 결합분포를 만드는 방법 알 수 있을까요?
조회수 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
댓글 입력