csvファイルをxamppに上げてpythonで取得できるようにしてみた

# 目次
-はじめに
-XAMPPの導入
-データベース作成
-Pythonからpandasで取得する
-参考記事

# はじめに

初めまして!

初投稿になります。自分が作ったものを備忘録的に投稿していこうと思います。

よろしくお願いします。

さて、自分は趣味であるcsvデータをpythonを用いて分析をしているのですが、データ量が多いため、読み込むのに時間が掛かるということが悩みになっています。

そのため、データをすべて読み込むのではなく、SQLを用いて必要な情報だけ取得できるようにしたいと思い立ちました。

今回は、ローカル環境下で、CSVデータをXAMPPに上げ、pythonでSQLを叩き、pandasのデータフレームとして取得できる環境を構築しました。

今回使用するcsvは以下のものを使用します。

```test.csv
A,B,C
1,a,あ
2,b,い
3,c,う
4,d,え
```

何番煎じか分りませんが、お付き合い頂けますと幸いです。

## 環境

OS: windows 11 
xampp: XAMPP for Windows 8.0.28
jupyterlab: 3.6.3
python: 3.11.3

# XAMPPの導入

xamppとは

> XAMPP（ザンプ、シャンプ）は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージとしてまとめたもので~(中略)~ Apache（Webサーバ）、MariaDB（SQLデータベースサーバ；旧バージョンはMySQL）とWebプログラミング言語であるPHPや同目的で使われるPerlの4つの主要ソフトウェアとphpMyAdminなどの管理ツール、さらにSQLiteなど、いくつかの補助的なソフトウェアとライブラリモジュールが含まれている。現在、Windows、Linux、macOS、Solarisで利用可能である。(Wikipediaより)
> 

とのことで、webサーバーやSQLデータサーバーの環境構築がお手軽に出来る便利なものです。

ダウンロードはxampp公式のこちらから↓

https://www.apachefriends.org/jp/download.html

お使いのOSの最新バージョンをダウンロードするので問題ないと思います。

ダウンロードしたインストーラーに従うだけで、起動できます。

起動したら、コントローラーパネルから、ApachとMySQLのstartボタンを押します。

![xampp_start.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2598378/333619ee-851d-deb0-0fee-e7453451002b.png)

MySQLのAdminを押して、phpMyAdminが出れば成功です。

![admin画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2598378/a3d842d0-7428-b28a-a955-7a934b4129bb.png)


# データベース作成

phpMyAdminの画面が出たらデータベースと書いてあるボタンをクリック

![phomyadmin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2598378/c7ddaca1-dc58-572f-2e08-469e581a3e40.png)

データベースの画面が開けたら「データベースを作成する」の欄に作成したいデータベース名を打ち込んで作成するを押します。今回はtestというデータベース名で行きます。

![データベース作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2598378/65f56b35-4717-83fa-cba9-35aa779ff550.png)

作成ボタンを押したら、まだテーブルは出来ていないのでcsvのインポートをするために、インポートボタンから「インポートするファイル」からアップロードしたいファイルを選択

![タイトルなし (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2598378/1a8cd5d7-8958-ff3e-47a4-750ab3ab8272.png)


今回のcsvは一行目にカラムが含まれているので、

「ファイルの最初の行にテーブルのカラム名が含まれている。」にチェックをしてインポート。

他の設定はデフォルトで大丈夫だと思います。

![スクリーンショット 2023-07-17 150535.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2598378/f55deef0-fe58-81b1-f737-041a521d1629.png)
![スクリーンショット 2023-07-17 150733.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2598378/f89ba0bf-e443-92b8-840e-62e5dd66efb9.png)

左側のデータベース名のtestをクリックして以下のようになっていれば成功です!
![スクリーンショット 2023-07-17 150943.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2598378/02a77d08-9dd1-d538-730f-f18875e9b968.png)


# Pythonからpandasで取得する

今回はmysql-connector-pythonを使用するのでコンソールから
```
pip install mysql-connector-python
```
をした後、pythonから以下のプログラムを打ちます。

(ちなみにcondaはpythonの3.11に対応していないようです。)

```Python:test.py
import mysql.connector
import pandas as pd


def get_data_from_database():
    # MySQLに接続するための情報
    config = {
        'user': 'root',  # ユーザー名
        'password': '',  # パスワード
        'host': 'localhost',  # ホスト名
        'database': 'test'  # データベース名
    }

    # MySQLに接続
    cnx = mysql.connector.connect(**config)

    # Pandasのデータフレームを作成
    query = "SELECT * FROM test"
    df = pd.read_sql_query(query, cnx)

    # 接続をクローズする
    cnx.close()

    return df

data_frame = get_data_from_database()
print(data_frame)
```

configはユーザー名やパスワードは今回は設定していないですが、設定していたらそちらに変更してください。

queryでSQL文を自由に記述できます。

無事データフレームが表示されたら成功です!!

# 参考記事

https://qiita.com/RS2324/items/88098444e3018b7d0b65

https://qiita.com/zaburo/items/55347181be742b5109ea