回答編集履歴

3

修正

2020/04/08 06:32

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -59,3 +59,7 @@
59
59
 
60
60
 
61
61
  ![イメージ説明](c00be211325267597a974fd81ef0f083.png)
62
+
63
+
64
+
65
+ 質問欄にデータフレームの値に関する情報がないため、憶測で書きましたが、動かなかったらコメントしてください

2

修正

2020/04/08 06:32

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -1,16 +1,4 @@
1
- ヒストグラムのビンを `bins=np.arange(0, 101, 10)` で明示的に指定します。
2
-
3
- おそらく、列 Age の値が "10歳" のように数値でなく、文字列になっていて、辞書順ソートになっていると思われるので、`plt.hist()` にわたす前に数値に変換しててください。
1
+ おそらく、列 Age の値が "10歳" のように数値でなく、文字列になっていて、辞書順ソートになっていると思われるので、数値に変換してから、ヒストグラムを作成するといいと思います
4
-
5
-
6
-
7
- ```python
8
-
9
- dfs['age'] = dfs['age'].str.replace("歳", "").astype(int) # 数値以外を除く
10
-
11
- # 歳の部分は、数値以外の文字を消すように実際にデータに合わせて質問者さんのほうで変更してください。
12
-
13
- ```
14
2
 
15
3
 
16
4
 
@@ -20,22 +8,54 @@
20
8
 
21
9
  import numpy as np
22
10
 
11
+ import pandas as pd
23
12
 
24
13
 
14
+
15
+ ages = [f"10歳未満" if x < 10 else f"{x}歳" for x in np.random.randint(0, 101, 100)]
16
+
17
+ df = pd.DataFrame({"age": ages})
18
+
19
+
20
+
21
+ # 数値に変換
22
+
25
- dfs['age'] = dfs['age'].str.replace("歳", "").astype(int)
23
+ ages = df["age"].str.replace(r"(未満|歳)", "", regex=True).astype(int)
24
+
25
+ ages[ages == 10] = 0 # ヒストグラムの集計の都合上、10歳未満は0に置き換え
26
+
27
+
28
+
29
+ bins = np.arange(0, 101, 10)
30
+
31
+ labels = [f"10歳未満" if x == 0 else f"{x}代" for x in range(0, 100, 10)]
32
+
33
+
34
+
35
+ freq, bins = np.histogram(ages, bins=bins)
36
+
37
+ x = np.arange(len(bins) - 1)
26
38
 
27
39
 
28
40
 
29
41
  fig, ax = plt.subplots()
30
42
 
43
+ ax.bar(x, freq)
44
+
45
+ ax.set_xticks(x)
46
+
31
- ax.hist(dfs['age'], bins=np.arange(0, 101, 10), rwidth=0.8)
47
+ ax.set_xticklabels(labels)
32
48
 
33
49
  ax.set_xlabel("Age")
34
50
 
35
51
  plt.show()
36
52
 
53
+
54
+
55
+ freq.shape
56
+
37
57
  ```
38
58
 
39
59
 
40
60
 
41
- ![イメージ説明](89837b979dd00681b50a3ff49a04cd66.png)
61
+ ![イメージ説明](c00be211325267597a974fd81ef0f083.png)

1

修正

2020/04/08 06:10

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -22,13 +22,13 @@
22
22
 
23
23
 
24
24
 
25
- ages = np.random.randint(0, 101, 100)
25
+ dfs['age'] = dfs['age'].str.replace("歳", "").astype(int)
26
26
 
27
27
 
28
28
 
29
29
  fig, ax = plt.subplots()
30
30
 
31
- ax.hist(ages, bins=np.arange(0, 101, 10), rwidth=0.8)
31
+ ax.hist(dfs['age'], bins=np.arange(0, 101, 10), rwidth=0.8)
32
32
 
33
33
  ax.set_xlabel("Age")
34
34