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
DokerでDjango開発した記録[2017/07/25]
Django Shellに入るには
docker-compose up docker exec -it django_docker_web_1 bash コンテナ名は docker ps で調べた python manage.py shell
Linuxコマンド[2018/07/20]
alias
# 設定 alias chrome=/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \ # 確認 alias # 解除 unalias chrome
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))