2016年11月21日月曜日

PandasでSeriesオブジェクトとDataFrameオブジェクトを作る

Pandasのデータ構造


Pandasでは、データの入出力、抽出、並べ替えなどの処理をすることができる。
Pandasでは、主に以下の2つのデータ構造が定義されている。
- Series:ラベル付きの1次元配列
- DataFrame:ラベル付きの2次元配列。スプレッドシートやデータベースのテーブルや辞書のようなもの。

pandas.Series()


まず、Seriesオブジェクトを作ってみる

import pandas as  pd

s = pd.Series([10 , 4, 7, 34, 6])
s

#結果
#0    10
#1     4
#2     7
#3    34
#4     6
#dtype: int64

date_range()を使って日付をインデックスにすることもできる。

import pandas as  pd

s = pd.Series([10 , 4, 7, 34, 6], index=date_range('1/1/2016', periods=5))
s

#結果
#2016-01-01    10
#2016-01-02     4
#2016-01-03     7
#2016-01-04    34
#2016-01-05     6
#Freq: D, dtype: int64

pandas.DataFrame()


次に、DataFrameオブジェクトを作ってみる。
適当に果物屋さんの売上のようなものでやってみましょうか。

import pandas as  pd

fruit_sales = {'Fruits': ['Apple', 'Orange', 'Grape', 'Peach', 'Lemon'],
                'Price': [100, 120, 150, 130, 90],
                'Sold': [14, 40, 23, 25, 12]}

df = pd.DataFrame(fruit_sales)
df

#結果
#   Fruits  Price  Sold
#0   Apple    100    14
#1  Orange    120    40
#2   Grape    150    23
#3   Peach    130    25
#4   Lemon     90    12

もちろん、インデックスを指定することもできる。
set_index()を使って、Fruitsをインデックスにしてみましょう。

import pandas as  pd

fruit_sales = {'Fruits': ['Apple', 'Orange', 'Grape', 'Peach', 'Lemon'],
                'Price': [100, 120, 150, 130, 90],
                'Sold': [14, 40, 23, 25, 12]}

df = pd.DataFrame(fruit_sales)
df.set_index('Fruits', inplace=True)
df

#結果
#        Price  Sold
#Fruits             
#Apple     100    14
#Orange    120    40
#Grape     150    23
#Peach     130    25
#Lemon      90    12

指定したカラムだけを抽出することもできる。

df = pd.DataFrame(fruit_sales)
df['Price']
#df.Price ←このようにドットでつなげても同じ結果が得られる

#結果
#0    100
#1    120
#2    150
#3    130
#4     90
#Name: Price, dtype: int64

複数のカラムを抽出することもできる。

df = pd.DataFrame(fruit_sales)
df[['Price', 'Sold']]

#結果
#   Price  Sold
#0    100    14
#1    120    40
#2    150    23
#3    130    25
#4     90    12

1次元配列(Series)であれば、tolist()を使って、指定したカラムの値をリストにすることが可能。

df = pd.DataFrame(fruit_sales)
df.Price.tolist()

#結果
#[100, 120, 150, 130, 90]

しかし、以下のように2次元配列(DataFrame)にはtolist()を使うことはできない。
DataFrameオブジェクトにはtolistという属性はないと怒られます。

df = pd.DataFrame(fruit_sales)
print(df[['Price', 'Sold']].tolist())

AttributeError: 'DataFrame' object has no attribute 'tolist'

こういった多次元のデータセットを扱うにはNumpyを使うのがいい。Numpyをインポートして、np.array()でN次元配列を扱うことができる。

import numpy as np

df = pd.DataFrame(fruit_sales)
print(np.array(df[['Price', 'Sold']]))

#結果
#[[100  14]
 #[120  40]
 #[150  23]
 #[130  25]
 #[ 90  12]]

2016年10月28日金曜日

pythonでリストの各要素の四則演算をする

以下のリスト内にある全ての要素を掛け算する(足し算でも引き算でもいい)方法をメモります。
言語はpython3です。

nums = [1, 2, 3, 4, 5]

使うモジュール


実行結果


では、実際にnumsの積を求めてみる。
operatorモジュールからmul関数をインポートする。
functoolsモジュールからreduce関数をインポートする。
reduce関数は関数とイテラブルを引数にとって、イテラブルの要素に対して、左から右に累積的に関数を適用する。

from operator import mul
from functools import reduce

nums = [1,2,3,4,5]
print(reduce(mul, nums)) #結果=>120

関数を作ってみる


次に、任意の数だけ引数を与えて、その積を返してくれる関数を作ってみます。

from operator import mul
from functools import reduce

def mul_nums(*args):
nums = []
for i in args:
    nums.append(i)
return reduce(mul, nums)

mul_num(1,2,3,4,5)  #結果=>120

もちろん足し算、引き算、割り算もできる。

足し算

from operator import add
from functools import reduce

def add_nums(*args):
nums = []
for i in args:
    nums.append(i)
return reduce(add, nums)

add_num(1,2,3,4,5)  #結果=>15

引き算

from operator import sub
from functools import reduce

def sub_nums(*args):
nums = []
for i in args:
    nums.append(i)
return reduce(sub, nums)

sub_num(1,2,3,4,5)  #結果=>-13

割り算

from operator import truediv
from functools import reduce

def div_nums(*args):
nums = []
for i in args:
    nums.append(i)
return reduce(truediv, nums)

div_num(1,2,3,4,5)  #結果=>0.008333333333333333

無名関数

ちなみにlambdaを使うと一行でいける。

from operator import add, mul, sub,truediv, floordiv
from functools import reduce

reduce(lambda x, y: x*y, [1, 2, 3, 4, 5])   #結果=>120

2016年9月6日火曜日

作りました!前回記事のパターンを使ったコート

前回書いたオーバーコートの我流パターンメイキングで作成したパターンで実際に作りました。
まだボタンはつけてないんですけどね。


サイズ詳細は以下です。

サイズ
着丈 113cm
肩幅 64cm
身幅 70cm
袖丈 54cm

正面から見るとこんな感じ。
フリーサイズでゆったりしています。
袖の内側や縫い目などの見せたくない部分は身頃のゆとりで隠すのが鉄則でしたね。(鉄則とまでは言ってない)
オーバーコート正面


前身頃は2パーツに分けて、切替上にシームポケット作って、右前立てのみアテをつけました。
シームポケットの作り方は以前書いたこの記事と同じです。

シームポケット

前立てアテ


サイドスタイルはこんな感じ。
ポイントは袖です。最近この袖にハマってます。
オーバーコートサイドスタイル


バックスタイルはこんな感じ。
後ろも袖の縫い目などの見せたくない部分は身頃のゆとりで隠すのが鉄則でしたね。(鉄則とまでは言ってない)

まあ右は縫い目見えちゃってますけどね。
これはボディへの着せ付け方の問題です。

裾はベンツ明きの仕様にしました。
オーバーコートバックスタイル

後中心と肩とアームホールと袖の縫い代はパイピング始末。
パイピングにするとやっぱり見栄えがよくなりますね。
あとは素材が固めなので肌にあたった時に痛くないようにするという理由もあります。

パイピングの図

2016年8月31日水曜日

オーバーコートの我流パターンメイキング


オーバーコートのトワル


正面から見るとこんな感じ。
袖をきれいに見せることを意識して作ってます。
具体的には見える部分には変なシワなどが入らないようにすること、袖の内側や縫い目などの見せたくない部分は身頃のゆとりで隠してしまうことを意識してます。
enter image description here

サイドスタイルはこんな感じです。
袖の前振りが大事。
enter image description here

バックスタイルも前同様、身頃のゆとりで見せたくない部分を隠す感じ。

enter image description here


パターン解説


パターンの要点をさらっと解説します。
ただし、独学の我流理論なので絶対正しいというものではないです。

では、解説スタート。
肩幅64cmのオーバードロップ。

ドロップショルダーなんですが、肩線は前のみ下げて後は肩先で若干あげています。そして、後肩線には肩甲骨のゆとりを5mm程度残し、イセで処理するようにしています。
このようにしたのは主に以下の理由があります。

  • 肩線を前方向に落とし、袖の前振りをつけやすくするため
  • 肩線を肩の形状に合わせるため
  • 後肩先を上げることで後アームホールが体から離れ、袖を前方向にひねらせるため

前見頃のパターンはこんな感じ。
前身頃のパターン



後身頃
後身頃のパターン



次は袖です。
肩幅が広いので袖山は低めで作ります。
もちろん素材に応じて変える必要はありますが、袖山には1mmずつ伸ばしを入れています。
シルエットを作る上でこの伸ばしは必要ではないのですが、同寸にすると縫いにくいので、この伸ばし分量にしています。

袖のパターン



ドロップだからといって伸ばし過ぎると肩先の面がすぼめられて、あまりきれいにならないので、あまり伸ばし分量は多くしない方がいいというのが僕の考えです。


まとめ


以上のような感じで見えるところには変なシワを入れない、見せたくない部分は隠す、体の形状に合わせる(肩とか腕とかね)。というようなことに気をつけてパターン作成してます。
とはいえ、パターンに絶対のルールはないと思いますし、僕の考えもこじつけといえばこじつけです。
あまり考えすぎてもストレス溜まるだけなので、ある程度適当にいってしまっいましょう。
ぶっちゃけ1mmとか2mmのことで大した違いは出てこないし、裁断とか縫製とかでもずれていきますからね。
ということで、ご参考になる部分があれば、ご参考にしていただければ幸いです!

2016年8月30日火曜日

JINS PCのラバーモダンを交換してきた


ラバーモダンは無料で交換してもらえる


以前購入したJINS PCのラバーモダンが劣化してベタベタになってきました。
ラバーモダンとはなにかというと、メガネの耳に引っ掛ける部分のパーツのことです。眼鏡によって樹脂だったり、ラバーだったりしますよね。

まあ安いし、また買えばいいかと思っていたんですが、実はこれ無料で交換してもらえます。
ということで交換してもらいました。


交換するにはどうすればいいの?


店舗に直接持って行く必要があります。
なので、まずはJINSのHPで最寄りの店舗をチェックして行ってみましょう。
   
自分の持っているメガネに合うモダンの在庫があるかどうかがわからないので、最悪2回行かなければいけないことになります。

交換は自分でやってもいいですが、店員さんにやってもらうのが無難でしょう。タダなので。

以上で終わりです。


JINSの店員さんの接客がよかった!


モダンの交換とは直接は関係ないですが、対応していただいた店員さんの接客がとてもよかったです。
丁寧なんだけどお堅いわけじゃなく、フレンドリーなんだけど馴れ馴れしいわけでもなく、なんというか絶妙で話してて楽しかった。
また、この人に接客してもらいたいなと店員さんに対して思ったのは久しぶりです。
さすがJINS!

商品もオシャレで機能的なものが多いし、商品の見せ方も上手ですよね。

また、ラバーが劣化したら行ってみよ(いつの話だよ)。

2016年8月29日月曜日

BeautifulSoupではまったこと

はまったこと


http://hoge.com/” というサイトから、以下のHTMLのhrefとimg srcの絶対パスを抽出したかった。

<article>
    <figure><a href="/hogehoge?id=abcde"><img src="http://hoge.com/1/hoge.jpg"></figure>
</article>

しかし、a hrefは相対パスで記載されているので、普通にスクレイピングすると相対パスしか抽出できない。
img srcの方はうまく抽出できず、以下のようになってしまった。

[<img src="http://hoge.com/1/hoge.jpg">]    

使ったもの


  • Python3
  • Beautifulsoup4.5.1

BeautifulSoupをインストール


BeautifulSoup4はpipでインストール

pip install beautifulsoup4    

実行サンプル


urllib.requestモジュール、urllib.parseモジュールのurljoinメソッド、BeautifulSoupをインポートする。

import urllib.request
from urllib.parse import urljoin
from bs4 import BeautifulSoup

hrefの絶対パスを取得するときにurljoinを使うので、該当HPのurlを変数に入れておく。

url = "http://hoge.com/"

urllib.requestモジュールのurlopenメソッドでurlを開く。
BeautifulSoupを使ってスクレイピングするときに使いたいので、インスタンスを作成。

html = urllib.request.urlopen(url)

BeautifulSoupのインスタンスを作成。

soup = BeautifulSoup(html, "lxml")

HTMLからarticleタグを取得

for item in soup.find_all("article"): 

hrefの絶対パスはurlとhrefの相対パスをurljoinでつなげて作成する

    link = urljoin(url, item.a.get("href"))

img srcの絶対パスは以下のようにすれば取得できる。
絶対パスはimg_path。

    img = item.find("img")
    img_path = img["src"]

2016年8月23日火曜日

両玉縁ポケットの作り方(裏なしの場合)

必要なパターン


以下のパターンが必要になります。

  • 本体
  • 袋布
  • 上側玉縁布(全面芯)
  • 下側玉縁布(全面芯)
  • 向こう布
  • ポケット口

両玉縁ポケットで使うパターン(型紙)の画像


ポケットの幅は14cm。玉縁は上も下も5mmにします。
両玉縁ポケットパターン説明1


本体裏に貼り付ける口芯はポケット口より上下左右1cmずつ大きく作ります。
なので、幅を16cm、高さを3cmにします。
両玉縁ポケットパターン説明2


上下玉縁布は地の目をバイアスで取り、全面芯を貼ります。
今回は袋布を袋縫いするので、両端の縫い代は付けません。そうした方が縫い代がごわつかず、すっきり綺麗に仕上がります。
両玉縁ポケットパターン説明3


袋布はポケット口から18cmの深さで作ってみます。
両端の縫い代は5mm付けて袋縫いをする仕様です。
両玉縁ポケットパターン説明4


向こう布のパターン。
こちらも両端には縫い代はつけません。理由は上記と同じです。
両玉縁ポケットパターン説明5


縫製手順


まず、本体のポケット口の裏にポケット口芯を貼ります。
両玉縁ポケット縫製手順1


袋布の内側に向こう布を叩きつけます。
向こう布なので、手のひら側です。
両玉縁ポケット縫製手順2


玉縁布の口を三折しておきます。
下側玉縁布の下端は二折して袋布に叩きつけるので、このときに二折しておきましょう。
両玉縁ポケット縫製手順3


ポケット口の出来上がり位置を合わせて、以下の図のように布を重ねます。
上から玉縁布、本体、袋布の三枚重ねになっていることになります。
両玉縁ポケット重ね順


上下玉縁布をポケット口の出来上がりに叩きつけます。
両玉縁ポケット縫製手順4


以下の写真のように切り込み(赤い線)を入れます。
切り込みを入れるのは本体と袋布だけでOKです。
この時ステッチの端ギリギリの位置まで切り込まないと綺麗に仕上がらないので注意してください。
両玉縁ポケット縫製手順5


玉縁布を切り込みから裏側に引き出します。
両玉縁ポケット縫製手順6


上側玉縁布の縫い代を割ります。
以下の写真のシャーペン先のところです。
両玉縁ポケット縫製手順8


下側玉縁布も同様に割ります。
両玉縁ポケット縫製手順9


表も整えてアイロンをかけておきましょう。
両玉縁ポケット縫製手順10


次はポケット口の端の三角布を玉縁布に止める作業なのですが、その前に一手間入れておきます。
三角布をよけて上下玉縁布をピッタリと合わせ、ステッチをかけます。
こうすることで上下玉縁布が重なって汚く仕上がってしまうのを避けることができます。
両玉縁ポケット縫製手順11


その後、三角布を玉縁布に止めます。2,3回返し縫いをしておくと良いでしょう。
両玉縁ポケット縫製手順12


切り込みを入れて割っておいた縫い代を玉縁布に叩きつけます(上下玉縁布両方とも)。
極力ステッチの際を縫うようにします。
両玉縁ポケット縫製手順13
GIF画像を作ってみました。
こんな感じで際を縫います。
両玉縁ポケット縫製手順14


裏から見るとこういう状態になっています。
両玉縁ポケット縫製手順15


下側玉縁布の下端を袋布にコバステッチで叩きつけます。
両玉縁ポケット縫製手順16


ここまできたら袋布を袋縫いしていきます。
袋布の内側が表になるように折り、縫い代を5mmで縫っていきます。
このとき、玉縁布と向こう布にステッチがかからないように注意してください。
両玉縁ポケット縫製手順17


袋布をひっくり返し、アイロンをかけて整えます。
両玉縁ポケット縫製手順18

そして、7mm幅で袋布の周囲にステッチをかければ完成です。
両玉縁ポケット縫製手順19


表から見るとこんな感じ。
あとは必要に応じて閂など入れてください。
両玉縁ポケット縫製手順20

2016年7月28日木曜日

シームポケットの作り方(袋布を袋縫い)

今回はシームポケットの作り方をご紹介します!
タイトルにあるように袋布は袋縫いで処理します。ロックで処理するよりきれいに見えるのでおすすめです。

必要なパターン


今回は中〜厚めの生地を想定して、袋布はスレキを使い、手の平側袋布には向こう布を付ける方法で作ります。薄地であれば、袋布も表地で作れば基本的には大丈夫だと思います。この場合は向こう布も必要ありません。

ということで、今回は以下のパターンが必要になります。
枚数はポケット1つ分なので、左右にポケットを付ける場合は×2してくださいね。

  • 本体
  • ポケット袋布
  • 向こう布(手の平側袋布に付ける)
  • ポケット口芯

シームポケットで使うパターン(型紙)の画像


袋布のサイズは以下のような感じです。

ポケット口は15cm。
ポケット口の上下に2cmずつ余分を設ける。
ポケット口から下の深さが14cm。
幅が19cm

縫い代は付いていないので、別途付けてください。

袋布のサイズ画像

縫製手順


本体のポケット口の裏面に口芯を貼り付けます。
シームポケット縫製手順1


手の平側袋布の内側に向こう布を叩きつけます。
向こう布は袋縫いした時にごわつかないようにするために袋縫いする部分の縫い代は付けません。
シームポケット縫製手順2


本体表と手の甲側袋布の内側を合わせ、ポケット口の出来上がりを縫います。
シームポケット縫製手順3


以下の写真のようにポケット口の縫い目端ギリギリの所まで切り込みを入れます。
シームポケット縫製手順4


手の甲側袋布を開き、手の甲側袋布のポケット口に内コバステッチをかけておきます。
シームポケット縫製手順5


手の甲側袋布を反対側に返し、ポケット口に7mm幅でステッチをかけます。
このとき、裏側にある手の甲側袋布までぶち抜いてください。
シームポケット縫製手順6


手の平側袋布の外側と手の甲側袋布の外側を合わせます。
シームポケット縫製手順7


袋布の周囲を5mm幅で縫います。
向こう布にステッチがかからないように注意してください。
シームポケット縫製手順8


裏からみるとこういう状態です。
シームポケット縫製手順9


袋布をひっくり返し、しっかりアイロンをかけてから、袋布の周囲を7mm
幅で縫います。
これで、袋布の周囲を袋縫いできましたね。
シームポケット縫製手順10


後身頃と前見頃を縫い合わせます。
このとき、ポケット口はしっかりよけておかないとポケット口ごと縫ってしまうので注意が必要です。
シームポケット縫製手順11


縫い合わせたら、ポケット口がちゃんと開くか念のため確認しておきましょう。
シームポケット縫製手順12


最後に、ポケット口の両端にステッチ or 閂をかければ完成です。
シームポケット縫製手順13


こんな感じでとても簡単で見た目もきれいになるので是非試してみてください!