LogoMark.png

データサイエンス/07

第7回 Python による統計処理

データサイエンス/2024受講生一覧汎用シート


Pythonによるデータ解析

Python言語を用いたデータ解析には、Pandas という定番のライブラリーがあります。今回の演習は、これを使ってデータ解析を行います。

DataFrame

Pandas を使用するにあたって重要な概念が DataFrame と呼ばれる表構造です。 そこでは「表」を data、index、columns で把握しています。

一般にデータフレームは、CSV や Excel 等のデータを読み込んで生成しますが、直接書いて定義する場合は、以下のように書きます。

# pandasをインポート
import pandas as pd

df = pd.DataFrame(
     data = [ [ '佐藤', 170, 60 ] , ['田中', 160, 50 ] , [ '鈴木', 165, 58 ] ] ,
     index = ['S01', 'S02', 'S03'],
     columns =[ 'name' , 'height', 'weight']
)
df

データ解析のためのコード

Python による統計解析は、以下のように1行のコードで実現します。
後の演習事例に含めているので、ここでは見るだけでOKです。




演習7|データ解析

統計データのサンプルとして有名な Tips を使って、統計処理を体験します。 Tipsでは、レストラン利用者の支払総額、チップの額、性別、喫煙の有無などが一覧表になっています(インターネット上に公開されています)。


サンプルデータの事前確認

ノートブックの新規作成

サンプルコード


学科サイトにリンク掲載

ノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。

演習7|プログラムの解説

以下、上記のサンプルプログラムの説明です。

ライブラリの読み込み

import pandas as pd

CSVデータの読み込み

df = pd.read_csv('(URL)')

データフレームの基本情報を表示

print('行数・列数:', df.shape)
print('項目名:', df.columns)
print('各列のデータ型:\n', df.dtypes)

要約統計量を表示|describe( )

df.describe()

相関係数を表示|df.corr( )

df.corr(numeric_only=True)

データを total_bill の順で並べ替え|sort_values( )

df_sort = df.sort_values('total_bill', ascending=False )
df_sort

女性の行のみ抽出|query( )

df_female = df.query( " sex == 'Female'  ")
df_female

Dinner に 5名以上で来た客のみ抽出

df_male_smoker = df.query( ' time == "Dinner" and size >= 5 ' )
df_male_smoker

クロス集計|曜日別の男女の数|crosstab( )

cross_table = pd.crosstab( df['day'] , df['sex'] )
cross_table

以下、データフレーム上のデータへのアクセス方法の事例です。
様々な書き方がありますが、こうした話は、覚えるのではなく、必要に応じてマニュアルで書き方を参照しながら使います。


曜日別のデータ件数|value_counts( )

df_day_counts = df['day'].value_counts()
df_day_counts

曜日別の平均|groupby( ) , mean(numeric_only=True)

df_day_mean = df.groupby('day').mean()
df_day_mean

関連リンク

https://pandas.pydata.org/
https://github.com/pandas-dev
https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf
https://ja.wikipedia.org/wiki/Pandas

自主演習のススメ

今回の演習では、Web上に公開されている既存のCSVデータを利用しましたが、GitHubのアカウントや、Webサーバーがあれば、そこへ、ご自身がアンケート等で取得したデータをアップロードして解析することが可能です。




以下は、GoogleDrive上の Excelデータの活用した事例です
参考情報なので、取り組みは任意です。




演習7+|データ解析体験+

架空の大学の成績情報を一覧にした Excel データを使って、データ解析を体験します。1300名ほどの学生について、学部、性別、成績(GPA)、出席率、国語、英語、数学の得点が一覧になっています。

前回の事例との違いは、データを GoogleDrive に置いて利用する・・ということです。この方法を知れば、みなさんが自分で入手したデータを使って統計処理を行うことができるようになります。

基本的には、前回と同様の解析演習となりますが、今回のデータには 欠損値 が存在します。データに欠損があると、統計解析上様々な問題が生じるため、それを除去するプロセスが含まれています。

ノートブックの新規作成

サンプルデータ

サンプルコード

学科サイトにリンク掲載(任意)

ノートを、学科サイトの個人ページからリンクして下さい。以下、手順です。




演習7+|プログラムの解説

解説済みの、要約統計量、相関、クロス集計等に関する説明は省略して、この事例ではじめて登場するコードについて説明します。

GoogleDrive 上のデータを読み込むための準備

from google.colab import drive
drive.mount('/content/drive')

あなたのGoogleDrive上のマイドライブにアクセスするための準備です。
アクセス許可を求められるメッセージが表示されるので許可して下さい。

Excel データの読み込み

df = pd.read_excel('/content/drive/My Drive/Colab Notebooks/StudentsData.xlsx')

Excel データを読み込んで、DataFrame として df という変数に渡しています。Colab Notebooks フォルダ内に StudentsData.xlsx があることが前提です。

ID の列を削除

df.drop( columns='ID', inplace=True )

ID は単なる通し番号で、統計処理の対象とする意味がないため削除。inplace=Trueというのは、元の df 自体を破壊的に更新することを意味します。

欠損値の確認

df.isnull().sum()

表の中に欠損値(NaN:Not a Number)がないか確認しています。

欠損値を含む行を削除

df = df.dropna( how='any' )

このサンプルデータには欠損値があるので「どこかに1つでも欠損がある場合はその行を削除する」という処理を行っています。このタイミングで df は削除後の状態に更新されます。

理工学部生かつ福岡県出身の行のみ抽出(複数の条件で絞り込む例)

df_select = df.query( ' 学部 =="理工" and 出身県 == "福岡県" ' )








APPENDIX

表形式のデータから見えてくるもの

大量の表データからは、何らかの「グループ」や、フィールド項目間の「関係」を見出すことができます。それらは判別や予測に活用することが可能です。

コンピュータがなかった時代は、みんな年長者の勘(つまり過去の経験の蓄積)を頼りに、物事の計画や準備を行っていました。

と、こんな感じです。しかし現在では、過去の購買行動や犯罪事象などのデータが大量に蓄積(データベース化)されています。

例えば、購買行動については、日時、場所、購入商品、年齢、性別等、購入時点の複数のフィールド項目にデータが入る形で、購買行動1件(1レシート)がひとつのレコードとして記録されます。

さらに、その日の天候や気温、道路交通情報などの時系列データなども別のテーブルに記録されているので、複数のテーブルを時刻をキーとして照合すると、天候や気温のデータと売れる商品との関係を調べることも可能になります。

人間が経験的に参照・蓄積できるデータには限りがありますが、コンピュータを使えば、大量のデータを一括処理して、これまでは気づかなかったような「知見」を得ることが可能になります。まずは、データに潜む「グループの存在」や「項目間の関係」を人間の目に見えるかたちに「視覚化」すること。これがデータサイエンスの第一歩です(ここまでは、従来の「統計」の延長にあると言えます)。

で、さらにそれをもとに、自動的な判別(パターン認識)や予測を行うことができるようになります。これが A.I. ということになります。今日の A.I. やロボットの多くは、この大量のデータをもとに得られた「知見」にもとづいて、自動的に判断して行動しています。 データサイエンスと A.I. はその意味で、切っても切れない関係にあると言えます。





PAGES

GUIDE

DATA

Last-modified: 2024-10-28 (月) 12:54:31