2023年12月27日水曜日

Bakery Sales Dataset : (1) 基本分析

 Bakery Sales Dataset (https://www.kaggle.com/datasets/akashdeepkuila/bakery)を使って基本分析をしていきます。このデータセットは、「The Bread Basket」というエディンバラにあるベーカリーのオンライン注文取引の詳細を提供しています。2011年1月26日から2003年12月27日までの期間にわたり、20507件のエントリー、9000回以上の取引、4つの列を含んでいます。今回はこのデータセットの基本分析を行なっていきます。データはkaggleのアカウントでログインしてダウンロードしてください。分析環境はGoogle Colaboratoryを使っていきいます。またコードはchatGPTにて生成したものを活用しています。今回は基本分析をしていきますが、流れとしては

(1) データの取り込みと基本統計量の算出

(2) グラフ描画によるデータ特徴把握と相関係数行列によるデータの関係性の把握

(3) 主成分分析による特徴の絞り込みとクラスタリング

の順にやっていきます。ここまでやることで、データが持つ基本的な特徴は掴めると思います。

(1) データの取り込みと基本統計量の算出

csvを取り込んで表示すると、次のようなItems、DateTime、Daypart、DayTypeの項目があり、商品が売られた状況が記録されています。TransactionNOは取引番号(一度での取引、全部で9,465取引)、Itemsは商品名(94種類)、DaypartはMorning, Afternoon, Evening, Nightの4つ、DayTypeはWeekendとWeekdayの2つです。



このデータを以下の方針で集計していきます。
・日毎のトランザクション数
・日毎の販売個数
・DayType (weedday -> 0, weekend -> 1)
・Daypartのそれぞれの販売個数/日(Morning, afternoon, evening, nightそれぞれの販売個数)
・それぞれのItemでの販売個数/日
159日分の集約されたデータがデータフレームとして算出されました。基本統計量を出していきます。これを見ると、1日あたりの注文数は59.5件、1日あたりの販売個数は約129個となっています。

(2) グラフ描画によるデータ特徴把握と相関係数行列によるデータの関係性の把握
グラフを書いて、データの特性を確認していきます。データの特性をグラフから確認してください。
・販売個数と注文数のヒストグラム
販売個数と注文数は同じような分布に見えるので、一つの注文に対して、2個程度が平均的に販売されているようです。
・DaypartとDayTypeの出現回数

Daypartでは、AfternoonとMorningの出現回数が多いです。
・Daypartごとの販売個数の分布
MorningとAfternoonの販売個数が多く、Evening, Nightはかなり少ないです。
・DayTypeでの販売個数の分布
Weekendの方が売れている日が多そうです。
・販売個数の時系列変化(Weekendは×印)
・商品の販売個数ランキングと累積販売個数が80%を超える上位商品
左の上位数商品が全体の販売個数の80%を占めていることがわかります。パレートの法則で、商品の20%が販売個数の80%を占めているということです。
・Daypartでの販売個数/日と総販売個数/日の相関係数行列
MorningとAfternoonでの販売個数が総販売個数と関係が高いことがわかります。
・販売個数の上位20%(累積販売個数の20%)の商品の販売個数/日と総販売個数/日の相関係数行列を作成
CoffeeとBreadとの関係性、総販売個数の関係性が高いことがわかります。

(3) 主成分分析による特徴の絞り込みとクラスタリング
次に主成分分析を行います。今回は商品数が多いので、販売個数の多いものから並べ替えをして、累積販売個数が全体の販売個数の80%を超えるまでの商品で実施します。今回選ばれたのは、'Coffee', 'Bread', 'Tea', 'Cake', 'Pastry', 'Sandwich', 'Medialuna', 'Hot chocolate', 'Cookies', 'Brownie', 'Farm House', 'Muffin', 'Alfajores' の13商品です。
これに1日の販売数を加えた14要素で主成分分析を行います。
(課題) このbiplotのそれぞれの点が日付を表しているが、平日と休日を区別して表示しなさい。

次に、それぞれの主成分がどの商品に影響を受けているかをヒストグラムで可視化します。



以下省略。主成分の名前をつけるのですが、今回はGPTでの出力を載せておきます。
  1. PC0 - "総合的な販売トレンド": この主成分は、ほとんどの商品(特に「Coffee」や「Total_Daily_Sales」)に高い荷重を持っており、全体的な販売トレンドや人気商品の影響を捉えている可能性があります。

  2. PC1 - "スナック類の傾向": この成分は、「Cake」や「Cookies」などのスナック類に負の荷重を持ち、これらの商品の販売パターンを反映している可能性があります。

  3. PC2 - "朝食・軽食アイテムの影響": 「Brownie」、「Medialuna」、「Hot chocolate」などの朝食や軽食向け商品に高い荷重を持っていることから、これらの商品群の販売動向を示している可能性があります。

  4. PC3 - "特定アイテムの特異性": 特定の商品(例えば「Farm House」や「Sandwich」)に高い荷重を持つことから、これらの商品の特異な販売傾向を捉えている可能性があります。

  5. PC4 - "パン類の影響": 「Bread」に正の荷重を、「Pastry」や「Sandwich」に負の荷重を持っていることから、パン類の販売動向とその他の商品群との関連性を示しているかもしれません。

主成分分析の結果を用いて、クラスタリングをしていきます。今回は4つのクラスタに分類します。
(課題) この分類されたクラスタに特徴とともに名前をつけましょう。
ここまでの基本分析をやることで、データの特徴を捉えることができます。

2023年12月8日金曜日

EC2でWordpressをインストールする

 前回の続きです。

Wordpressとは?
chatGPT:WordPressはWebサイト構築用のオープンソースの内容管理システム(CMS)です。PHP言語とMySQLデータベースを使って、複数のユーザーがサイトのコンテンツを管理、更新、作成できるようにするものです。WordPressを使うことで、プログラミングの知識を必要とせずに、ウェブサイトを作成することができます。WordPressは何千ものオープンソース資産として提供されており、高度なソフトウェアを含むことも非常に容易になっています。

[前提条件]
・今までのEC2の設定ができていること


1. phpMyAdminにWordpress用のデータベースを作成する
http://ecX-XX-XXX-XXX-XX.compute-1.amazonaws.com/phpMyAdmin/ にアクセスし、Wordpress用のデータベースを作成します
データベース>作成をクリック
データベース名:wordpress
照合順序:utf8mb4_general_ci とします


作成すると、テーブルの作成が求める画面が出てきますが、スルーしてください

2. Wordpressダウンロードためにwgetをインストール(EC2ではすでにインストール済みのため不要
前提:root権限のあるユーザ(ec2-user)になっておいてください。
   そのほかのユーザの場合は、exitをしてec2-userになってください。

 wgetとは?
 chatGPT:wgetはウェブサイトからファイルを取得するコマンドラインプログラムである。 
 wgetはHTTP、HTTPS、FTPプロトコルを使用してファイルを取得することができ、定期的にファイルを取得できる便利なオプションも備えている。

$ sudo yum install wget


3. Wordpressインストール
ここでは、Wordpressをインストールしたいユーザで作業していきます。
今回はlinuxユーザ内にインストールしたいため、linuxユーザに移動しておきます。
$ su - linux

wwwフォルダに移動し、学籍番号名のディレクトリの中に環境を作成してこうと思います。
今回学籍番号はdsXXXXXXXとしておきます。
$ cd www/
$ mkdir dsXXXXXXX
$ cd dsXXXXXXX/

ここでwordoressをダウンロードします。
$ wget https://ja.wordpress.org/latest-ja.tar.gz

ダウンロードしたもの圧縮ファイルのため展開していきます。
$ tar xzvf latest-ja.tar.gz 
chatGTP:tar xzvf latest-ja.tar.gz は、tar形式のファイル latest-ja.tar.gz を展開するコマンドです。x、z、およびvオプションを利用することで、圧縮ファイルの解凍を行える他、詳細な展開情報を表示することができます。


4.wordpressの設定
wordpressにアクセスします
http://ecX-XX-XXX-XXX-XX.compute-1.amazonaws.com/~linux/dsXXXXXXX/wordpress

さあ、始めましょう!を選択して情報を入力していきます。
データベース名:1で作成したデータベース名としてください
ユーザ名:root (データベースでログインするときのユーザ名)
パスワード:データベースに設定したパスワード(今回の場合はLinuxOS99@)

wp-config.php ファイル(wordpressの設定ファイル)に書き込み
書き込みができないとの表示がされます。でできた表示を、wordpressフォルダ内にwp-config.php を作成し書き込みをしてください。
※行数が多いので忘れすべてコピーしてください

$ cd wordpress/
$ vi wp-config.php
  ※この中に画面表示されている内容をコピペして保存
  このとき、編集モードに入って貼り付けるとEC2側で自動インデントが入り、意図した通りの貼り付けができません。
  そのため編集モード(i)に入る前に、自動インデントモードではなくペーストモードに変更しておきましょう。
  :set paste にて自動インデントモードになり、編集モードになった際には-- INSERT (paste) --  の表示になります。


貼り付けができたら、wordpressに戻ってインストール実行します。
ここでサイト情報を入力し、wordpressをインストールします。
今回は下記の内容とします。
サイトのタイトル、ユーザ名:学籍番号
パスワード:LinuxOS99@
        脆弱なパスワードの使用を確認にチェックをつける
メールアドレス:自分のメールアドレス(大学のもの)
検索エンジンがサイトをインデックスしないようにする:チェックをつける

インストールが完了すると次のような画面が出てきます。

5. ログインしてブログ記事を追加(情報公開)する
ユーザー名、パスワードを入力してログイン

ダッシュボード画面の左にある投稿>新規投稿を追加を選択

ブロックエディタにようこそ が出てきたら×を選択して画面表示を消す

何かブログを作成する※試験では指定されたものを入力してください
入力して右上の[公開]ボタンを押してから、wordpressを再読み込みするとブログが追加されています。※wordpressのサイトをスクロールすると現れます。

画像をアップロードするには、フォルダ権限の設定が必要となります。

そこでwordpressフォルダ内のwp-contentフォルダの中に、uploadsフォルダを作成し権限を付与します。
 前提:
  wordpressをインストールしているユーザであること
  wordpressフォルダ内にいること
$ cd wp-content/
$ mkdir uploads
$ chmod 777 uploads/

上記の設定が完了したら、画像を投稿してみましょう。

次のように画像が投稿できていたらOKです

試験では、このとき管理画面のアドレスではなく、外部からアクセスできるアドレスを投稿してください
例(アクセスできません):http://ecX-XX-XXX-XXX-XX.compute-1.amazonaws.com/~linux/dsXXXXXXX/wordpress/index.php/2023/12/08/dsxxxxxxx/
投稿画面の右側にも記載されています



以上

2023年11月24日金曜日

EC2でDirectoryIndexを廃止する

 ディレクトリインデックス(DirectoryIndex)とは、ウェブサイト内のディレクトリやファイルの一覧として収録されているインデックスページのことです。単にインデックスとして示されている物の事で、ディレクトリの中を探索して、個々のファイルを見つけるための一番簡単な手段となります。

例えば今、
http://ec**-**-**-**.compute-1.amazonaws.com/~linux/security/
にアクセスしてみるとlinuxユーザの公開フォルダ内のsecurityフォルダの中身が見えています。

このようにフォルダの中身が見えていると、見せるはずではなかったものもユーザに見られてしまいます。なので、 ディレクトリインデックス(DirectoryIndex)を廃止し、フォルダの中身一覧が見られないようにしていきます。


前提
・ec2-userの状態であること
 もしもlinuxユーザの場合は、exitでec2-userになっておいてください



ユーザディレクトリの設定ファイルを変更
$ sudo  vi /etc/httpd/conf.d/userdir.conf 

33行目にあるIndexesを削除する
before
after

webサーバを再起動
$ sudo systemctl restart httpd.service 

もう一度アクセスして下記のような画面が出ていればOK



EC2でbasic認証をつける