初心者エンジニアの理論と実践メモ

本や授業のスライドをかみ砕いたメモ。機械学習メインで。

Python環境構築

手順

pyenvとpythonのインストール

# rootディレクトリへ移動
cd /
# もしoptディレクトリがなければ
mkdir opt
cd /opt

# pyenvのインストール
sudo git clone git://github.com/yyuu/pyenv.git ./python

# pythonをバージョン別にインストールするディレクトリの作成
sudo mkdir python/versions python/shims

# pythonの場所をシステムに教える
export PYENV_ROOT=/opt/python
# 
eval "$(/opt/python/bin/pyenv init -)"

# Python3.6のインストール(versionは何でも良い)
sudo -E /opt/python/bin/pyenv install -v 3.6.4

# Python2.7のインストール
sudo -E /opt/python/bin/pyenv install -v 2.7.6

仮想環境を作ってみる

# 適当にホームディレクトリ下にdevディレクトリを作ってみる

cd ~
mkdir dev
cd dev

# Python3系の場合
/opt/python/versions/3.6.4/bin/python -m venv venv
source venv/bin/activate

pip install -U pip

# Python2系の場合
# venvが無いのでvirtualenvで代替
sudo /opt/python/versions/2.7.6/bin/pip install -U pip
sudo /opt/python/versions/2.7.6/bin/pip install virtualenv
/opt/python/versions/2.7.6/bin/virtualenv venv27
source venv27/bin/activate
# 必要なモジュールをpip installで入れる
# データ分析系
numpy 
pandas 
scipy 
jupyter  
matplotlib

# 機械学習系
scikit-learn
tensorflow
keras

# クローリング系
beautifulsoup4 
requests 
scrapy
celery

# Webフレームワーク
django
aiohttp

# データベース系
mysql-connector-python
mysql-connector-python-rf
pymongo
psycopg2

PythonからMysqlを操作[2018/07/20]

ドキュメント

MySQL Connector/Python公式ドキュメント https://dev.mysql.com/doc/connector-python/en/

インストール

pip install mysql-connector-python-rf

起動

mysql.server start
mysql -u root -p
# macOSの場合、パスワードは設定されてないのでEnter押すだけ

データベースの作成、権限を付与したユーザーの作成

CREATE DATABASE scraping DEFAULT CHARACTER SET utf8b4;

CREATE USER scraper@localhost;

GRANT ALL ON scraping.* TO scraper@localhost IDENTIFIED BY 'password';

ちなみにユーザーが作成できているか確認する場合は

select Host, User from mysql.user;

pythonから接続

# 別ファイルに記述
USER = 'scraper'
DBNAME = 'scraping'
PASSWORD = 'password'
HOST = 'localhost'
PORT = 3306

import mysql.connector


config = {
    'user': USER,
    'password': PASSWORD,
    'host': HOST,
    'database' : DBNAME,
    'port': PORT
}
cnx = mysql.connector.connect(**config)
# 疎通確認
cnx.is_connected()

cursor = cnx.cursor()

cursor.execute('show databases;')

cursor.fetchall()

# [('information_schema',), ('scraping',)]出力

上場企業情報を保持するテーブルを作る

銘柄コード 銘柄名 市場名 created_at updated_at

元データの取得先 東京証券取引所東証上場銘柄一覧 http://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls

初心に帰るpython~1

最近numpy,pandasに依存しすぎてるので初心に帰るためまとめる。

リスト

リストの概要

  • 掛け算はリピート
[1, 3]*3
>>> [1, 3, 1, 3, 1, 3]

numpyの場合

np.array([1, 2])*2
>>> array([2, 4])

なので注意

リストのコピー

辞書

辞書の概要

  • キーや値に関数を指定できる

辞書の作成

  • キーのリストから作る
dict.fromkeys(シーケンス, デフォルト値)

dict.fromkeys(['python', 'java'])
>>> {'java': None, 'python': None}

辞書の読み込み

  • keyの指定
a = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

a['key4']
>>> KeyError

a.get('key4')
>>> 

dict.get(キー, default)に注意。デフォルトNoneを返す * key, value, (key, value)の取得 python3からリストではなくイテレータを返すようになった

a.keys()
>>> dict_keys(['key1', 'key2', 'key3'])

a.values()
>>> dict_values(['value1', 'value2', 'value3'])
a.items()
>>> dict_items([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])

タプル

セット

Pythonで機械学習[2018/07/15版]

データセットの特徴の外観

欠損

data.isnull().sum()

カラムの型

data.dtypes.value_counts()

カテゴリカル変数の種類

data.select_dtypes('object').apply(pd.Series.nunique, axis = 0)

前処理

カテゴリカル変数のエンコード

Label Encoding

from sklearn.preprocessing import LabelEncoder

# Create a label encoder object
le = LabelEncoder()
le_count = 0

# Iterate through the columns
for col in app_train:
    if app_train[col].dtype == 'object':
        # If 2 or fewer unique categories
        if len(list(app_train[col].unique())) <= 2:
            # Train on the training data
            le.fit(app_train[col])
            # Transform both training and testing data
            app_train[col] = le.transform(app_train[col])
            app_test[col] = le.transform(app_test[col])
            
            # Keep track of how many columns were label encoded
            le_count += 1
            
print('%d columns were label encoded.' % le_count)

One Hot Encoding

# one-hot encoding of categorical variables
app_train = pd.get_dummies(app_train)
app_test = pd.get_dummies(app_test)

東京公共交通オープンデータ API返り値をデータフレームに入れるまで

下準備

import json
import urllib
import urllib.request
import pandas as pd

API_KEY = 'xxxxxx'
endpoint = 'https://api-tokyochallenge.odpt.org/api/v4/'

APIを叩く

request_url = endpoint + 'odpt:Train' + '?' + 'acl:consumerKey=' + API_KEY
response = urllib.request.urlopen(request_url)
response.read()
>>> b'[{"@id":"urn:ucode:_00001C000000000000010000030FCB14","@type":"odpt:Train","dc:date":"2018-02-11T13:06:19+09:00","@context":"http://vocab.odpt.org/context_odpt.jsonld

byteをutf-8に変換

response.read().decode()

>>>'[{"@id":"urn:ucode:_00001C000000000000010000031018B0","@type":"odpt:Train","dc:date":"2018-02-11T13:11:54+09:00","@context":"http://vocab.odpt.org/context_odpt.jsonld

utf-8の文字列をjsonライクな辞書のリストに変換

text = response.read().decode()
json.loads(text)

>>>  [{'@context': 'http://vocab.odpt.org/context_odpt.jsonld',
  '@id': 'urn:ucode:_00001C000000000000010000031018B0',
  '@type': 'odpt:Train',
  'dc:date': '2018-02-11T13:11:54+09:00',
  'dct:valid': '2018-02-11T13:12:24+09:00',
  'odpt:delay': 0,
  'odpt:frequency': 30,

辞書からdataframeに変換

pd.DataFrame.from_records(json.loads(text))

f:id:satoumemo:20180211141222p:plain