pandasの基本的な統計分析とデータ操作の実践
pandasの基本的な統計分析と実践問題
1. データの読み込みと書き込み
(1)データベースからのデータ読み込み
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://user:pass@localhost:3306/database_name?charset=utf8')
data = pd.read_sql_table('order_details', con=engine)
data_query = pd.read_sql_query('SELECT * FROM order_details', con=engine)
data_read = pd.read_sql('order_details', con=engine)
data_sql = pd.read_sql('SELECT * FROM order_details', con=engine)
| 関数名 | 説明 |
| read_sql_table | 特定のテーブルのみを読み込む。クエリは実行できない。 |
| read_sql_query | SQLクエリを実行し、その結果を読み込む。 |
| read_sql | テーブル名またはSQLクエリの両方に対応。テーブル名またはクエリを指定してデータを読み込む。 |
| パラメータ名 | 説明 |
| sqlまたはtable_name | テーブル名またはSQLクエリを指定します。 |
| con | データベース接続情報。 |
| index_col | 行インデックスとして使用する列を指定します。 |
| coerce_float | 小数点データをfloat64に変換します。 |
| columns | 読み込む列名を指定します。 |
(2)テキストファイルの読み込みと書き込み
import pandas as pd
data = pd.read_table('./data/job_info.txt', encoding='utf-8', sep=',')
csv_data = pd.read_csv('./data/job_info.csv')
| パラメータ名 | 説明 |
| filepath | ファイルパスを指定します。 |
| sep | 区切り文字を指定します。 |
| header | ヘッダー行を指定します。 |
| names | 列名を指定します。 |
| index_col | インデックス列を指定します。 |
| dtype | 列のデータ型を指定します。 |
| engine | データ解析エンジンを指定します。 |
(3)Excelファイルの読み込みと書き込み
import pandas as pd
excel_data = pd.read_excel('./data/chipotle.xlsx')
| パラメータ名 | 説明 |
| io | ファイルパスを指定します。 |
| sheet_name | 読み込むシート名を指定します。 |
| header | ヘッダー行を指定します。 |
| names | 列名を指定します。 |
| index_col | インデックス列を指定します。 |
| dtype | 列のデータ型を指定します。 |
2. DataFrameの基本操作
(1)DataFrameの基本属性
| 属性名 | 戻り値 |
| values | データの値 |
| index | 行インデックス |
| columns | 列名 |
| dtypes | データ型 |
| size | 要素数 |
| ndim | 次元数 |
| shape | 行数×列数 |
(2)データのアクセス
import pandas as pd
df = pd.read_excel('./data/chipotle.xlsx')
print(df['quantity'])
print(df[['order_id', 'item_name']])
print(df['quantity'][:5])
(3)locとilocの違い
print(df.iloc[2:5, 2])
print(df.loc[2:5, 'item_name'])
| メソッド | 説明 |
| loc | 行または列の名前を指定してデータを取得します。 |
| iloc | 行または列の位置を指定してデータを取得します。 |
(4)データの追加と削除
| パラメータ名 | 説明 |
| labels | 削除する行または列を指定します。 |
| axis | 0: 行削除, 1: 列削除 |
| inplace | Trueの場合、元のデータフレームが変更されます。 |
3. 時間系列データの処理
| クラス名 | 説明 |
| Timestamp | 特定の時刻を表す基本クラス。 |
| Period | 一定期間を表すクラス。 |
| Timedelta | 期間の差を表すクラス。 |
| DatetimeIndex | Timestampのインデックス。 |
| PeriodIndex | Periodのインデックス。 |
| TimedeltaIndex | Timedeltaのインデックス。 |
4. 実践問題
チポトレのデータを分析します。
| 問題番号 | 内容 |
| 1 | データをchipoという名前のデータフレームに読み込む。 |
| 2 | 最初の10行を表示する。 |
| 3 | データフレームの列数を表示する。 |
| 4 | 全ての列名を表示する。 |
| 5 | データフレームのインデックスを表示する。 |
| 6 | 最も注文数の多い商品を表示する。 |
| 7 | item_name列のユニークな商品数を表示する。 |
| 8 | 全ての商品の注文数を合計する。 |
| 9 | item_priceを浮動小数点数に変換する。 |
| 10 | 収入を計算する。 |
| 11 | 注文の総数を表示する。 |
| 12 | 各注文の平均金額を表示する。 |
import pandas as pd
# 問題1
chipotle_df = pd.read_table('./data/chipotle.tsv')
chipotle_df.to_excel('./data/chipotle.xlsx')
# 問題2
print("最初の11行:\n", chipotle_df.head(10))
# 問題3
print("列数:", chipotle_df.shape[1])
# 問題4
print("列名:", chipotle_df.columns.tolist())
# 問題5
print("インデックス:", chipotle_df.index)
# 問題6
most_ordered_item = chipotle_df.groupby('item_name')['quantity'].sum().idxmax()
print("最も注文数の多い商品:", most_ordered_item)
# 問題7
unique_items = chipotle_df['item_name'].nunique()
print("ユニークな商品数:", unique_items)
# 問題8
total_orders = chipotle_df['quantity'].sum()
print("商品の総注文数:", total_orders)
# 問題9
chipotle_df['item_price'] = chipotle_df['item_price'].str.replace('$', '').astype(float)
print("item_priceの型:", chipotle_df['item_price'].dtype)
# 問題10
revenue = (chipotle_df['quantity'] * chipotle_df['item_price']).sum()
print("収入:", round(revenue, 2), "$")
# 問題11
order_count = chipotle_df['order_id'].nunique()
print("注文数:", order_count)
# 問題12
average_order = chipotle_df.groupby('order_id')['item_price'].sum().mean()
print("平均注文金額:", round(average_order, 2), "$")
タグ:
Pandas
データフレーム
時系列データ
8月2日 17:54 投稿