とんてき

Ruby, Ruby on Railsやその周辺技術を中心に。ときどき趣味のことも。

Ruby on Railsでデータの並び順を変えて表示する

1. はじめに

普段SQLを書く機会があるのですが、Railsを勉強し始めた時は逆にActiveRecordという概念がわかりにくかったです。

2. 並び順の変更

select * from post order by updated_at desc

例えば、上記のSQLは以下のようになります。

Post.order('updated_at desc')
or
Post.order(updated_at: :desc)

短いですが以上です。

Ruby on Railsの環境変数管理にFigaroを使用する

初めに

アプリケーションを開発している時に「username」や「password」、「api_key」等をどのように管理すればいいのか疑問に思ったのでメモ。
まずそれらの環境変数を直接設定ファイルに記入して、パブリックなリポジトリに公開するのは大切な情報が外部から丸見えなので危険です。
今回は環境変数を簡単に管理することができる「Figaro」というライブラリ(gem) を使って変数管理をしたいと思います。

1. Figaro gemのインストール

Gemfileに以下を追記

gem 'figaro'

以下のコマンドを実行し 、figaroをインストールする

bundle exec figaro install

そうすると、新しく「config/application.yml」というファイルが生成され、
それと同時に上記ファイルがリモートリポジトリにpushされるのを防ぐため「.gitignore」に追記されます。

2. 「config/application.yml」に環境変数を設定する

USERNAME: sample_username

development:
  USERNAME: dev_sample_username

production:
  USERNAME: prd_sample_username

※上記のように環境に応じて設定しておくと、同じ変数を使い分けてくれます。
使用する時は、ENV["USERNAME"]のような形で使用することができます。

3. Herokuに環境変数を設定する

Heroku等を使用している場合は、以下のコマンドを実行することで、Herokuに環境変数を設定することが可能です。

Figaro heroku:set

私の場合は、ActionMailer機能をHerokuで使用する際に、Sendgridの環境変数を設定しました。

以上ですー

numpyとpandasのデータ変換がややこしいので整理する

numpyとかpandasとかややこしいので簡単に整理します。

はじめに

先々月くらいから突然機械学習にハマり、独学で勉強をしているtontekiです。
一通り基礎的な内容は勉強したので、kaggle(データサイエンスのコンペサイト)でデータ予測をする中で、より実践的な内容を勉強しようと思っています。

で早速有名な「Digit Recognizer」と呼ばれる、0〜9の数字を認識するコンペに参加したのですが、
実際自分で考えながらやってみるとnumpyとpandasのデータの変換に苦戦したので、学んだことを纏めたいと思います。

pandasからnumpyへの変換

# 0 ~ 9 のnumpy配列を生成
[In]
numpy_array = np.arange(10)p
numpy_array

[Out]
[0 1 2 3 4 5 6 7 8 9]

# データの型を表示
[In]
type(numpy_array)

[Out]
<class 'numpy.ndarray'>

# numpy配列をpandasのseriesに変換
[In]
series_array = pd.Series(numpy_array_1)
series_array

[Out]
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64

# データの型を表示
[In]
type(series_array)

[Out]
pandas.core.series.Series

# 0 ~ 19 の2次元のnumpy配列を生成
[In]
numpy_array_2 = np.arange(20).reshape(4, 5)

# 2次元のnumpy配列をpandasのDataFrameへ変換
[In]
pandas_array = pd.DataFrame(numpy_array_2)
pandas_array

[Out]
        0	1	2	3	4

0	0	1	2	3	4
1	5	6	7	8	9
2	10	11	12	13	14
3	15	16	17	18	19

numpyからpandasへの変換

# pandasのDataFrameからnumpyへ変換
[In]
numpy_array = pandas_array.values
numpy_array

[Out]
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

# データの型を表示
[In]
type(numpy_array)

[Out]
numpy.ndarray

終わりに

自分が今どっちのデータを扱っているかわからなくなった時は、「typeメソッド」を使うといいですね。
ものすごい基礎中の基礎な内容ですが、今後いろんなデータを扱う中で、意識せずにスムーズにデータ変換できるようになりたいです。