概要
ブログの投稿頻度等を分析したいと思ったので、手間のかからないdjango-pandasを使用してQuerysetから一発でDataFrameに変換をして、CSVファイルに保存してからローカル環境にデータを転送する。
実行環境 |
---|
Windows Subsystem for Linux |
Python 3.6.9 |
pip 21.3.1 |
使用ライブラリ | ライセンス |
---|---|
Django==2.2.5 | BSD |
django-pandas==0.6.2 | BSD |
$ pip install django==2.2.5 django-pandas==0.6.2
今回QuerysetからDataFrameにするモデルは、ブログ記事作成のためのテーブルを例に実装します。
class Category(models.Model):
"""
カテゴリーモデル
title : カテゴリーのタイトル
"""
title = models.CharField('カテゴリー', max_length=20)
class Blog(models.Model):
"""
記事作成モデル
title : ブログ記事のタイトル
text : ブログ記事の内容
category : ブログ記事のカテゴリーで、Categoryモデルと紐づく
created_at : 記事の作成日
updated_at : 記事の更新日
is_publick : 記事を公開するか非公開とするか
"""
title = models.CharField('タイトル', max_length=150)
text = MarkdownxField('テキスト', help_text='Markdown形式で書いてください。')
category = models.ForeignKey(Category, on_delete=models.PROTECT)
created_at = models.DateField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
is_publick = models.BooleanField('選択', choices=((True, '公開'), (False, '非公開')))
管理コマンドである「shell」を実行します。
※リモートの場合データを取得するので恐らくスーパーユーザーで実行する必要があります。
$ sudo python3 manage.py shell
対話モードに入ったら必要なモジュールをインポートします。
# blogsアプリ内にあるmodels.pyで定義しているモデルをインポート
from blogs.models import Blog
from django_pandas.io import read_frame
BlogモデルのQuerysetを取得します。
queryset = Blog.objects.all()
print(queryset)
"""
<QuerySet [<Blog: 【初投稿】当Webサイト管理者の簡単な紹介!>, '...(remaining elements truncated)...']>
"""
Blogモデルで定義されている各フィールドの情報が格納されているので、そのままdjango-pandasからインポートした「read_frame」に変数を渡します。
df = read_frame(queryset)
# 上から5行目を表示する
df.head()
"""
id title ... updated_at is_publick
0 1 【初投稿】当Webサイト管理者の簡単な紹介! ... 2020-08-02 公開
1 2 【保護されていない通信http://】NginxとCertbotで無料SSL証明書(Lets... ... 2020-08-02 公開
2 3 LetsEncryptの無料SSL証明書をCertbotを使って自動発行 ... 2020-08-02 公開
3 4 【簡単】Python3で仮想環境を構築する(venv) ... 2020-08-02 公開
4 5 【Webサーバー】Nginxが正常に起動されているか確認する ... 2020-08-02 公開
[5 rows x 7 columns]
"""
type(df)
"""
<class 'pandas.core.frame.DataFrame'>
"""
DataFrameに変換されたら、CSVファイルとしてカレントディレクトリに保管します。
df.to_csv('pandas_dframe.csv')
「quit()」もしくわ「exit()」で対話モードを抜けて、ファイルの有無を確認します。
$ ls
... ... pandas_dframe.csv ...
リモート環境のファイルをローカル環境に転送する場合は、ホームディレクトリからファイルが配置されているディレクトリまでのフルパス情報が必要なので、「pwd」コマンドでフルパスを確認します。
pwd
/home/username/project
フルパスをコピーしたらローカル環境を起動し、作業を行いたいディレクトリへと移動します。
そこにいるディレクトリへファイルを転送(コピー)してくる場合のコマンドは以下です。
※ローカル環境での作業です。
$ scp -P 1234 username@django-project.com:/home/username/project/pandas_dframe.csv pandas_dframe.csv
補足
リモート先のパスワードを入力すると転送(コピー)が開始されます。
それでは以上となります。
最後までご覧いただきありがとうございました。