teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

8

f

2020/08/27 05:03

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  だとえばdf.columnsに、変なラベルを代入しようとすると例外が出ます。
7
7
 
8
8
 
9
- **プロパティ**とは、かんたんにいえば、pythonにおける、オブジェクトのデータの読み込みや書き込みを制御するためのスマートな仕組みです。
9
+ **プロパティ**とは、かんたんにいえば、pythonにおいては下記のような、オブジェクトのデータの読み込みや書き込みを制御するためのスマートな仕組みです。(JavaやC#など他の主要なプログラミング言語でも大抵似たような仕組みはあります)
10
10
 
11
11
 
12
12
 

7

f

2020/08/27 05:03

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  #プロパティ
2
2
  `df.dtypes`や`df.columns`が()を使わずに用いることができるのは、それらが[プロパティとして](https://github.com/pandas-dev/pandas/blob/master/pandas/core/apply.py#L121)[実装されている](https://github.com/pandas-dev/pandas/blob/master/pandas/core/series.py#L436)からです。
3
3
 
4
- プロパティとして実装されていることによって、コード上、あたかも属性を直接扱うかのように代入や読み取りができる一方、代入や読み取りの際に、値のチェック等付随する処理も行われるよになっています。
4
+ プロパティとして実装されていることによって、コード上、あたかも属性を直接扱うかのように代入や読み取りができる一方、代入や読み取りの際に、関数と同様に、たとえば値のチェック等付随する処理も行うことが可能です。
5
5
 
6
6
  だとえばdf.columnsに、変なラベルを代入しようとすると例外が出ます。
7
7
 
@@ -54,9 +54,9 @@
54
54
  とすると、1,2,6と表示され、最後はValueErrorが発生します。
55
55
 
56
56
  初期状態ではギアが1,
57
- 次はギアを1段階上げので2になります。
57
+ 次はギアを1段階上げので2になります。
58
58
 
59
- (ここまでは、単なる属性変数としてgearを作った場合と変わりません)
59
+ (ここまでは、単なるCarクラスのインスタンス属性としてgearを作った場合と変わりません)
60
60
 
61
61
  次でさらに9段階上げようとしてますが、@setter内でギアの上限がチェックされているため、
62
62
  (安全に)6までしかギアが上がりません。

6

f

2020/08/26 23:46

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -87,9 +87,9 @@
87
87
  しかし、pandasの偉い人たちはそういうアプローチはとっていません。
88
88
 
89
89
  これは、
90
- **dtypes(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから**
90
+ **dtypes(型の一覧)やcolumns(列の一覧)は、処理というよりも、より「属性」に近いものであるから**
91
91
  ではないかと勝手に推測してます。
92
92
 
93
93
  逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
94
94
 
95
- (もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」とか「dtypesは型の一覧を返すから処理ともいえるじゃないか」いう意見もあるかもしれませんが)
95
+ (もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」とか「dtypesは型を列挙して返すから処理ともいえるじゃないか」いう意見もあるかもしれませんが)

5

fソース追加

2020/08/26 16:42

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  #プロパティ
2
- `df.dtype`や`df.columns`が()を使わずに用いることができるのは、それらがプロパティとして実装されているからです。
2
+ `df.dtypes`や`df.columns`が()を使わずに用いることができるのは、それらが[プロパティとして](https://github.com/pandas-dev/pandas/blob/master/pandas/core/apply.py#L121)[実装されている](https://github.com/pandas-dev/pandas/blob/master/pandas/core/series.py#L436)からです。
3
3
 
4
4
  プロパティとして実装されていることによって、コード上、あたかも属性を直接扱うかのように代入や読み取りができる一方、代入や読み取りの際に、値のチェック等の付随する処理も行われるようになっています。
5
5
 
@@ -81,15 +81,15 @@
81
81
  # 使い分けの基準
82
82
 
83
83
  もちろん上記のdtypesやcolumnsも、
84
- df.dtype()
84
+ df.dtypes()
85
85
  df.columns()
86
86
  みたいに関数として定義することも可能なはずです。
87
87
  しかし、pandasの偉い人たちはそういうアプローチはとっていません。
88
88
 
89
89
  これは、
90
- **dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから**
90
+ **dtypes(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから**
91
91
  ではないかと勝手に推測してます。
92
92
 
93
93
  逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
94
94
 
95
- (もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」という意見もあるかもしれませんが)
95
+ (もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」とか「dtypesは型の一覧を返すから処理ともえるじゃないか」いう意見もあるかもしれませんが)

4

f

2020/08/26 16:37

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -78,14 +78,16 @@
78
78
  ・データフレーム内のデータの合計という処理を行って、合計値を返す
79
79
  という純粋な処理なので、関数として定義されているものと思われます。
80
80
 
81
+ # 使い分けの基準
81
82
 
82
83
  もちろん上記のdtypesやcolumnsも、
83
84
  df.dtype()
84
85
  df.columns()
86
+ みたいに関数として定義することも可能なはずです。
85
- みたいに関数とて定義することも可能なはずですが、pandasの偉い人たちはそういうアプローチはとっていません。
87
+ かし、pandasの偉い人たちはそういうアプローチはとっていません。
86
88
 
87
89
  これは、
88
- dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから
90
+ **dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから**
89
91
  ではないかと勝手に推測してます。
90
92
 
91
93
  逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。

3

f

2020/08/26 16:18

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -85,10 +85,9 @@
85
85
  みたいに関数として定義することも可能なはずですが、pandasの偉い人たちはそういうアプローチはとっていません。
86
86
 
87
87
  これは、
88
- dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから
88
+ dtype(型)やcolumns(列の内容)は、処理というよりも、より「属性」に近いものであるから
89
+ ではないかと勝手に推測してます。
89
90
 
90
- じゃないかと勝手に推測してます。
91
-
92
91
  逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
93
92
 
94
- (もちろん「sum()はデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」という意見もあるかもしれませんが)
93
+ (もちろん「sumはデータフレーム内の集合に関するものだからデータフレームの属性っぽいものじゃないか」という意見もあるかもしれませんが)

2

f

2020/08/26 16:16

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -76,18 +76,19 @@
76
76
  `df.isnull()`や`df.sum()`はそれぞれ、
77
77
  ・nullかどうかチェックして真偽値を返す、
78
78
  ・データフレーム内のデータの合計という処理を行って、合計値を返す
79
- だけであり、代入するものではないため、関数として定義されています。
79
+ という純粋な処理なので、関数として定義されているものと思われます。
80
80
 
81
81
 
82
-
83
82
  もちろん上記のdtypesやcolumnsも、
84
83
  df.dtype()
85
84
  df.columns()
86
- みたいに関数として定義すること可能と思いますが、pandasの偉い人たちはそういうアプローチはとっていません。
85
+ みたいに関数として定義すること可能なはずですが、pandasの偉い人たちはそういうアプローチはとっていません。
87
86
 
88
- ただdf.columnsをdf.columns()という関数にすると、何かの列を代入する処理
87
+ これ
89
- df.set_columns(〇〇)というように別関数を用意することなるしょう。
88
+ dtype(型)やcolumns(列の内容)は、処理というよりもより「属性」近いものあるから
90
89
 
91
- そこらへんがスマートじゃないと考えたのせん
90
+ じゃないかと勝手に推測
92
91
 
92
+ 逆に`df.isnull()`や`df.sum()` は「処理」としての色合いが濃いので、関数として定義されているんじゃないでしょうか。
93
+
93
- そもプロパティcolumns代入処理すること自体は推奨されていないかもしれません)
94
+ (もちろん「sum()はデータフレーム内集合するものだからデータフレームの属性っぽものじゃないか」という意見あるかもしれません

1

f

2020/08/26 16:06

投稿

sfdust
sfdust

スコア1137

answer CHANGED
@@ -63,7 +63,7 @@
63
63
 
64
64
  また、文字列をギアに設定しようとすると、@setter内で例外を発生させています。
65
65
 
66
- このようにプロパティを使うことで、あたかもの属性を直接操作するようにコードを書くことでる一方で、代入時のチェックを実現してます。
66
+ このようにプロパティを使うことで、あたかもの属性を直接操作するようにコードを書くことる一方で、代入時のチェックを実現してます。
67
67
 
68
68
  @getterや@ deleterを使うことで読み取り時や削除時の処理も記述できます。
69
69