質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

Q&A

解決済

1回答

978閲覧

度数分布表の正しいコードをわかりません

samankoar

総合スコア7

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

統計

統計は、集団現象を数量で把握することです。また、調査で得られた性質や傾向を数量的に表したデータのことをいいます。

0グッド

0クリップ

投稿2020/10/08 05:49

編集2020/10/08 11:34

あるデータの解析をしています。人々の興味のある職業です。一つだけを得らぶ人が進路を決めていると仮定し、複数選んでいる人がまだ自分が何をしたいか迷っていると判断したい。

mport pandas as pd df=pd.read_csv('https://raw.githubusercontent.com/freeCodeCamp/2017-new-coder-survey/master/clean-data/2017-fCC-New-Coders-Survey-Data.csv') freq_table=df['JobRoleInterest'].value_counts().reset_index().reset_index(drop=True) freq_table['# index'] = freq_table['index'].apply(lambda x: len(x.split(',')))

何%の人が一つだけ、何%の人が五つ以上の仕事に興味があるをみてみるために以下のコードを試したが、全部違う答えになる。正解をわかりませんしまだ統計の勉強中で正しのがどれかもわからない。

number_with_morethan_5_interests=freq_table['# index'].loc[5:].sum()/sum(freq_table['# index']) number_with_morethan_5_interests

答えは:99.96811224489796

from scipy.stats import percentileofscore percentileofscore(freq_table['# index'],5,kind='weak')

答えは: 68.90756302521008

percentage_morethan5_interest=100*len(freq_table[freq_table['# index'] >= 5])/len(freq_table) percentage_morethan5_interest

答えは:55.55555555555556

教えてください。ただし方法はどれでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、データを正しく把握するところから始めましょう。
データの全体像を見られましたでしょうか。
件数は?
1.8万件くらいなので表計算ソフトで開いてみてみることも有用です。

何%の人が一つだけ、何%の人が五つ以上の仕事に興味がある

となるのであれば全員の人数が分母となる必要がありますが、何人か確認しましたか?

Python

1len(df)
18175

で18175件(人)のデータです。

最初の計算は

Python

1sum(freq_table['# index'])

ですがこれは15680となっています。これは何を目的に計算しましたか?全員の人数を計算しようとされたと思いますが、確認しましたか?

freq_tableの1行目は

Full-Stack Web Developer 823 1

となっておりこの # index は1です。
この行は Full-Stack Web Developer のみを志望している人が823人いる ということを指名しているので、この # index を合計しても意味がありません。

2つ目の計算は # index を並べてパーセンタイルを計算していますが、同様に # index のパーセンタイルを調べても目的とはぜんぜん違うので意味がありません。

3つ目の計算はfreq_tableの行数を分母にしていますが、これは全体の人数でありませんので目的とは全然違います。

意味もわからず闇雲に関数を用いれば一致しない値が次々に出てくるのは当然です。まず目的を整理しましょう。

まず、人数はあなたが集計された

Python

1freq_table=df['JobRoleInterest'].value_counts().reset_index().reset_index(drop=True)

の通りfreq_table['JobRoleInterest']に入っています。
ここで注意すべきは、この集計だとJobRoleInterestがNA(欠損値)は集計していません。ですので、
sum(freq_table['JobRoleInterest']) = 6992です
あとはどうなっているかというと
sum(df['JobRoleInterest'].isnull()) = 11183
でJobRoleInterestに回答なしのNAの人がいます。
足して18175が len(df) の18175と一致します。

いくつの仕事に興味を持っているかは

Python

1freq_table['# index'] = freq_table['index'].apply(lambda x: len(x.split(',')))

に入っています。

得たい値は

「何%の人が五つ以上の仕事に興味があるか」であれば

五つ以上の仕事に興味がある人の人数 ÷ 全体の人数 です。

五つ以上の仕事に興味がある人とは # index >=5 の人ですね
その人数は

Python

1sum(freq_table[freq_table['# index'] >= 5]['JobRoleInterest'])

ですかね。ですので求めたい答えは

Python

1sum(freq_table[freq_table['# index'] >= 5]['JobRoleInterest']) / len(df)

で 0.10140302613480055
つまり約10.1%となります。「1つだけ」も同様なので試してみてください。

投稿2020/10/10 03:26

aokikenichi

総合スコア2240

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問