sagantaf-佐賀んタフ-

なんでも自分の思ったこと、経験したことを書いて生きます。

働く時に必要なことは、気楽に会話できる環境と適度な緊張感だと思うんです。

 

様々な部署やチームで仕事する経験が増えると、同じ社内でも、所属するチームによっては働きやすさや気持ちが全然変わるんだな、ということがわかる。

 

一緒に働く人たちが、とても話しやすく、しっかりと自分の仕事に責任感をもって取り組んでいれば、自分もとても働きやすかった。

 

逆に、一緒に働いている人たちが、暗くてあまり話さなかったり、文句ばっかり言って自分の仕事をおろそかにしていたら、自分のモチベーションも下がり、働きにくかった。

 

 

だから、働く時に大切なのは、「気楽に会話できる環境」「適度な緊張感、責任感」なんだな、と思ったんです。

 

誰でもずっと同じ、現状のままはつまらないと感じる。そんな時、「気楽に会話できる環境」があれば、自然と、"改善したい部分"や"新しく取り組みたいこと"が出てくる。イノベーションに繋がるし、何より仕事が楽しくなる。

 

また、「適度な緊張感、責任感」をみんなが持って仕事をすることで、いい加減に仕事をしたりロボットのように機械的に仕事をすることはなくなる。

社内の雰囲気が緩すぎると、いい加減な仕事をしたり、ミスをしたりすることになる。

逆に、厳しすぎるとみんなが緊張して本来の実力を発揮できず、機械的な仕事をしてしまう。

緩すぎず、厳しすぎず、要所要所で締めていく環境であれば、ミスをすることなく、それぞれが最高の実力を発揮して、仕事に取り組める。

 

「気楽に会話できる環境」「適度な緊張感、責任感」

 

この二つをどんな現場でも実現するには、やはり自分から動いて周りに「こういう職場にしたい」と説いていかないとなかなか難しい。

 

この二つを兼ね備えた現場に出会えたらラッキー、気合いをいれて仕事をする。

逆にどちらもない現場だったら、自分がこの環境を変える!と意気込んで周りに説いていく。

 

こんなことを考えて自分から動かないと、いつまでも同じ現場で働くとは限らないし、最悪な環境だった時に自分も周りとともに落ちて言ってしまうからな〜…

 

社会人5年目のいつも意識しておくべき仕事の進め方

 

社会人になり5年も経つと、様々な業務・仕事を経験している人が大半なはず。 

 

5年もたつと新人の頃のようにガムシャラに仕事をする、というよりも、今までの経験を元に、この後の将来について考え始める時期でもある。

 

そんな中、これを意識して仕事をすることで、仕事が格段にしやすくなる上、周りからも評価・信頼を得ることができる、といういくつかの"仕事術"がある。

 

"仕事術"と書くと安っぽく聞こえるが、具体的な内容まで理解して実践する仕事術はとても強い武器になる。

 

ではその"仕事術"とは何か。

 

大きく分けると、

  

「仕事をスムーズに進めるための仕事術」

「質の高い成果を出すための仕事術」

 

 

の二つある。

 

 

 

今回はこのうち、一つ目の「仕事をスムーズに進める方法」について書き残しておく。

 

 

仕事をスムーズに進めるための仕事術

 

具体的には次の5つある。

 

  1. 上段の目線を持つ
  2. 組織を優先する
  3. 会話系を先に進める
  4. 話を分ける
  5. ストーリーを立てる

 

 

 

1. 上段の目線を持つ

 

これは、仕事で人と会話する時に、相手の一つ上・奥・先の人を意識するということ。

 

たとえば、相手が上司ならその上司を意識する。

相手が顧客ならその顧客の上司、もしくはその顧客の顧客を意識する。(小売業界を相手にしているIT企業であれば、買い物をする客、など) 

 

この一つ上を意識した会話、つまり上段の目線を持った会話を心がけることで、スムーズに仕事が進むようになる。

 

 

担当者同士、悪く言うと下っ端同士で会話を進めていた場合、意図した内容が伝わっていなかったりして、仕事のやり直しや修正が必要になる時がある。

 

たとえば、顧客からある依頼を受けたとする。こちらは特に気にすることなく、依頼されたことを実施し、返答した。ところが、その後依頼する内容が間違っていたことが分かり、もう一度作業を依頼されてしまった。理由を聞くと、その顧客自身も上司から依頼を受けた話であって、こちらに依頼を出したが、実は顧客同士での認識齟齬があり、依頼する作業が間違ってしまったんだとか。

 

これは明らかに時間の無駄である。

このようにならないためにも、相手はなぜ依頼をしてきたのか、何かその背景には上司や別の人の思惑があるのではないか、といった意図を事前に確認することが大切になってくる。

 

 

また、逆も然りである。

契約しているベンダーの担当者に、ある質問を出し、回答を得ていたとする。その回答がベンダー内部の共通認識としてこちらは認識していた。しかし、後日別の担当者と会話している時にその回答が間違っていることが判明。実は回答した担当者がひとりで考えて回答してきたのであった。やむなくもう一度、丁寧に質問することになってしまい、時間をロスしてしまった。

 

これも同じく時間がもったいない。

このようにならないためにも、こちらの意図は相手に正確に伝わったか、相手の周りにいる人の共通認識なのか、を確認することが大切。

 

 

何を確認すればよいのか、何を依頼すればよいのか、この点を考えて会話することで、後々に面倒なことにならず、スムーズに仕事を進めることができる。

また、先の人を見据えた依頼や会話をすることは、相手もスムーズに仕事ができるようになるのである。

こうなると「信頼」を勝ち得たも同然だ。

 

 

 

2. 組織を優先する

 

若いうちは自分の仕事を精一杯やろうとする。

頑張って仕事をして、きっちり終わらせることでそれなりに周りから高評価を受ける。

 

しかし年を追うごとに、それでは済まなくなる。むしろ逆効果にもなりうる。

 

どういうことかと言うと、会社は組織であるから多数の人が絡んでいる。組織として目標に向かって日々動いているのである。

そんな中、自分ひとり、自分の仕事を終わらせることだけに集中して頑張っていても、組織としては嬉しくないのである。

 

例えば、部として新規事業に取り組んで、新たな顧客を開拓していこう!となっている時に、既存の顧客の相手ばかりして仕事を終わらせた気になっている人がいたりする。

それで自分が楽になったとしても、部としての目標(この場合、新たな顧客を開拓すること)には向かっていないので、周りから白い目で見られるし、評価にも繋がらない。

 

そんなヤツにならないためにも、

 

 部署外 → チーム外 → チーム → 自分 という優先順位で仕事を進め、

 自分のいまの立場と組織が向かう方向に注意を注ぐ。

 

このような態度で仕事をし、組織を優先することで、「誰が何をしているのか」「何を考えているのか」をキャッチアップできるようになり、広い範囲が見える。

 

広い範囲を認識しているからこそ、自分の行動や言葉に説得力が生まれ、周りから「あいつは組織として仕事をしている」「信用できる」といった評価を得ることができるのである。 

 

 

 

3. 会話系を先に進める

(来週中に加筆する!)

 

 

 

 

 

 

4. 話を分ける

(来週中に加筆する!)

 

 

 

5. ストーリーを立てる

(来週中に加筆する!)

 

 

【Python3】pyautoguiで日本語入力する方法

 
最近、pyautoguiを使って会社の業務を自動化している。
 
そんな中、Webページに日本語を送って面倒な申請業務等を自動化しよう!
って思ったが、
作っていくうちに日本語入力ができない問題にぶち当たった。。。
 
ググっても、やはりできないようで…
 
 
import pyautogui as auto
auto.typewrite("日本語送りたい”)
 
typewriteで英数字ならきちんと入力されるのに、日本語にした途端、何も入力されなくなる。
 
 
なんとかならないものか…と試行錯誤していたら、
 
コピペでできることが判明!
 
 
どういうことかというと、
pyperclipモジュールのcopyメソッド と pyautoguiのhotkeyメソッド を利用すると、うまく日本語を入力できる!
 
 
import pyautogui
import pyperclip
 
pyperclip.copy("これでいける") ←これでクリップボードに引数を保存できる
pyautogui.hotkey('ctrl', 'v’) ←これでその場にペーストする
 
 
 
こうすれば、しっかりと日本語が意図した通りに入力される。
 
上記のように直接copyメソッドの引数として書き込む以外にも、
変数を別途用意してファイルを読み込んで入力させたり、tkinterで入力ウィンドウを用意して、入力した日本語を利用することもできる。
 
 
何度も利用する場合はメソッド化しておけば非常に便利↓
 
def copipe(string):
    paperclip.copy(string)
    pyautogui.hotkey('ctrl', 'v’)
 
 
 
すごい簡単な例だが、以下のような使い方をする。
import pyautogui
import pyperclip
 
input_string =input("何か日本語を入力してください:")
copipe(input_string)
 
 
 
 
 

Pythonで地球に引っ張られる力を計算するプログラムを作ってみた

 
物体同士が引っ張り合う力、万有引力
 
その計算式を元に、
 「地球からどのくらい離れたら、どのくらいの力が働くか」
を計算するプログラムをPythonで作成してみた。
 
入出力は次のようにしている。
 入力:物体の重さ(kg)
 出力:距離ごとの引っ張られる力(万有引力)の大きさのグラフ
 
万有引力の計算式は以下のようになる。
 
 F = G * ( m1 * m2 ) / ( r * 1000 )^2 
  F:万有引力(N)
  G:重力定数(N*m^2/kg^2)
  m1, m2:質量(kg)
  r:物体間の距離(km)
 
 
この式を地球との距離の計算として使う。
 
スタート地点は、地面から地球の中心までの距離である約6400kmとする。
約10倍離れることになる64000kmを最大距離とする。
グラフでのプロットは見やすさのために6400kmごとにする。
重力定数Gは 6.67 × 10^-11 である。
地球の重さは 5.972 × 10^24 kg である。
 
 
以下、コード例:
 
 

"""
万有引力の計算
F = G * (m1 * m2) / r^2
万有引力 = 重力定数G × (物体1の質量 × 物体2の質量) ÷ (物体間の距離)の2乗
"""


# グラフを描くためにmatplotlibをインポート
import matplotlib.pyplot as plt

 

# グラフを描くための関数
def draw_graph(x, y):
     plt.plot(x, y, marker="o")
     plt.title("Gravity force")
     plt.xlabel("Distance(km)")
     plt.ylabel("Gravitational force(N)")
     plt.show()

 

# 万有引力の計算をするための関数
def calculate_F():
     r = range(6400,64001,5000)
     F = [] # 一旦、万有引力Fを空リストで作っておく
     G = 6.672 * (10**-11) # 重力定数
     m1 = 5.972 * (10**24) # 地球の重さ

     

     # 以下で物体の重さを入力させる
     # floatに変換しているため、文字を入力するとエラー終了する
     m2 = float(input("Please enter mass:"))

 

     # 先ほどrangeで作成した距離のリストrを一つずつ取り出して、forceとして万有引力を計算
     for distance in r:
          force = G*(m1*m2)/((distance*1000)**2)
          F.append(force) # 作成しておいたリストFにひとつずつ追加(append)していく

     

     #グラフを描画

     draw_graph(r, F)

 

# メイン関数
if __name__ == '__main__':

     calculate_F()

 
 
 
たとえば、
60kgの人の体重を入力すると以下のようなグラフになる。

f:id:sagantaf:20171012222413p:plain

 
 
地上では600N近くの力が働いているが、高度約3600km(※)だと3分の1である200Nになっている。
(※ 地球の中心から10000kmは地上から3600kmになるので)
 
つまり、体感で体重が20kgになっているということになる。
 
ちなみに高度3600kmというと、人工衛星ISS(高度400km)よりも遥か高いところになる…
 
 
 
 

【Python3入門まとめ】3.文字列

 

要約

 

文字列

・文字列はダブルクオート( “ )もしくはシングルクオート( ' )で囲む
エスケープ処理は¥もしくは\をつかうか、” と ’ を組み合わせることで可能
・改行とタブは\nと\tで実現可能
・文字列の結合、繰り返し、抽出は、+、*、をつかう
はスライス処理といい、[2:4:2]、[:-1:2]といった使い方が可能
 
 
 

詳細と実行例

(具体例の中の赤字は、説明です。実際に打ち込むコマンドではありません。)
 
 
超基本
ダブルクオート( “ )もしくはシングルクオート( ' )で囲むと文字列として扱われる。
>>> "hello"
'hello'
>>> 'hello'
'hello'
>>>
>>> a = “hello"
>>> a
'hello'
>>> print(a)
hello
 
  
クオートが無い場合は変数として判断され、宣言していないのでエラーになる。
>>> hello
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'hello' is not defined
>>> 
 
 
 
スケープ文字を入れて記号や改行を文字列に入れる
文字列の中でダブルクオート( “ )もしくはシングルクオート( ' )を利用したい場合は、¥もしくは\エスケープする。’を使いたいときは、”で文字を囲む、といった方法でもエスケープ可能。
>>> 'I'm Japanese.'
  File "<stdin>", line 1
    'I'm Japanese.'
       ^
SyntaxError: invalid syntax
>>>
>>> 'I\'m Japanese.’     ←コードの中にあると、少し読みにくくなってしまう。
"I'm Japanese."
>>>
>>> "I'm Japanese.”     ←”と’を組み合わせることで、見え方がそのままになり読みやすい。
"I'm Japanese."
>>> 'This is "Sushi"!'
'This is "Sushi"!'
>>> 
 
コードが長くなってくると、ひとつひとつの読みやすさ、理解のしやすさは重要になってくる。その点で、文字列宣言において”と’のどちらも利用できるようになっているのは、Pythonのとても便利な点。 
 
 
 
文字列の中に改行を入れたい場合は、\nを利用するか、””"で文字列を囲めばよい。
>>> x = "line1\nline2\nline3"
>>> print(x)
line1
line2
line3
>>> 
>>> y = """abc
... efg
... hij"""
>>> print(y)     ←print関数だと\nが改行として処理される
abc
efg
hij
>>> y     ←一方で自動エコー機能を使うと、\nはそのまま表示される
‘abc\nefg\nhij 
 
 
 
タブを入れたい場合は、\tを利用する。
>>> print("abc\tefg”)
abc    efg
 
 
いちいちエスケープをつけるのが面倒な場合は、文字列を表現する前にrをつけることで、エスケープ不要になる。 
>>> path = r"C:\home\name"
>>> print(path)
C:\home\name
>>>
 
 
 
文字列をいろいろいじる(結合、繰り返し、抽出)
文字列を結合するには、+をつかう。
>>> s1 = "hello"
>>> s2 = "world"
>>> s1 + s2
'helloworld'
 
 
繰り返し表示するには、*をつかう。
>>> "hello " *10
'hello hello hello hello hello hello hello hello hello hello '
>>>
>>> 2 * “Hi”     ←前後どちらに数値をもってきてもOK
‘HiHi'
 
 
 
文字列は[]を使って抽出できる。(スライス処理)
>>> s = "String"
>>> s[0]
'S'
>>> s[3]
‘i'
 
 
マイナスをつけると文字列の後ろから数えて抽出してくれる。 
>>> s = "qwertyuiopasdfghjkl"
>>> s[-3]
'j'
>>> s[-0]     ←[-0]は[0]と同じと判断される。
‘q'
>>> s[-1]     ←一番後ろの文字を抽出したい時は[-1]となることに注意。
'l'
 
  
マイナスをつかうことで、なが〜い文字列のときに文字数を数える手間が省ける。
(真ん中の方の文字を抽出したいときは数えないといけないけど…。簡単な文字数の表示方法は後述)
 
 
[X:Y:Z]で位置を利用した表現もできる。
これは、”X以上Y未満の数値をZステップで文字列をとりだす”という意味をあらわす。
ステップ数とは、飛び飛びに値を抽出することを意味する。2つ飛びにとか5つ飛びにとか。
>>> s = "abcdef"
>>> s[0:3]
‘abc'
>>> s[2:-2]
'cd'
>>> s[0:5:2]     ←ひたつ飛びなので、0番目・2番目・4番目の文字列を取り出し
'ace'
 
 
X、Y、Zはそれぞれ省略できる。
XとYは省略したら、最初からもしくは最後までと判断される。
>>> s = "abcdef"
>>> s[:4]     ←最初から3番目までの文字列をひとつ飛びに取り出す
'abcd'
>>> s[4:]    ←4番目から最後までの文字列をひとつ飛びに取り出す
‘ef'
>>> s[:]     ←最初から最後までの文字列をひとつ飛びに取り出す=そのまま表示(つかう機会はない…)
'abcdef'
>>> 
 
 
 
ステップに−1を指定した場合、文字列を逆から順に取り出していくことになるので、文字列を反転できる。
>>> s
'abcdef'
>>> s[::-1]
'fedcba'
>>> 
 
 
文字列検索
in を使うことでbool型としてTrueもしくはFalseの判定をしてくれる。
このとき、大文字小文字の区別までしてくれる。
>>> "e" in "Hello"
True
>>> type("e" in "Hello")
<type 'bool’>     ←タイプがboolになっていることがわかる
>>> 
>>> "world" in "hello world"
True
>>> "world" in "hello World"
False
 
文字列検索に利用することができる。
 
 
 
 
 
 
 

【Python3入門まとめ】2.変数

 

要約

 

変数

・変数の宣言は = を使う。
・型 (int, float, strなど) は自動的に判断される。
・変数は2回同じものを宣言すると上書きされる。
・宣言していない変数を呼ぶとエラーになる。
・数値から始まる変数や、Pythonで予約されている言語を利用した変数は宣言できない。
 
 
 

詳細と実行例

(具体例の中の赤字は、説明です。実際に打ち込むコマンドではありません。)
 
変数の宣言は = を使う。
型(int, float, strなど)は自動的に判断される。
>>> num = 10     ←変数numに数値10を格納
>>> num
10
>>> type(num)     ←型(タイプ)を確認すると int になっている
<class 'int'>
>>>
>>> var = "hello"
>>> type(var)     ←文字列を格納すると str になっている
<class 'str'>
>>> var
'hello'
 
 
変数は上書きされる。
>>> num
10
>>> num = 20
>>> num
20
 
 
宣言していない変数を呼ぶと、当然ながらエラーになる。
>>> bum
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'bum' is not defined
 
 
数値から始まる変数や、Pythonで予約されている言語を利用した変数は宣言できない。
>>> x1 = 1
>>> x_1 = 2
>>> 1x = 2     ←数値から始まる変数を宣言すると invalid syntax エラーとなる
  File "<stdin>", line 1
    1x = 2
     ^
SyntaxError: invalid syntax
>>>
>>> break = 3    ←breakはif文で利用するため、Pythonで予約されている
  File "<stdin>", line 1
    break = 3
          ^
SyntaxError: invalid syntax
>>> 
>>> bread = 3     ←breakは予約語だからエラーになるが、breadは予約されていないので問題なく宣言できる
>>> bread
3
 
 

AstropyでFITSデータを読み込んで表示させる方法

 
 
天文データの解析をやってみたい、と思い、
まずは天文画像をPythonに取り込み、表示させるにはどうするか、調べて実践してみた。
 
 

天文データはFITS形式

 
天文データはFITSというファイル形式で扱われることが多いらしい。
 
 
PythonでFITSファイルを扱うには、astropyというライブラリを使う。
 
 
最初に調べた時は、pyfits というライブラリが使われている例が多く見つかったので、インストールして、公式ページ(http://www.stsci.edu/institute/software_hardware/pyfits(英文))を読んでみたら、もう開発していないとのこと。。。
現在はastropyに移行されており、pyfitsは利用非推奨になっていた。
 
 
 
Astropyとmatplotlibを使って天文画像を表示
 
ということでまずはastropyをインストール
 
$ pip install astropy
 
 
FITSファイルのサンプルをネットで探して、sample.fitsという名前に変更しておいた。
 
そのダウンロードしたファイルがある場所で、インタラクティブシェルに入り、astropyを使ってみる。
 
 
以下のページがまとまっていたので、参考にしながら実践:
Astro : 解析によく使う python モジュール/関数
 
 
 
 
①まずはそれぞれ利用するライブラリをimportする
$ python3
>>> import astropy.io.fits as iofits
>>> import matplotlib.pyplot as plt
 
 
②ファイルをopen()で開く。
>>> list = iofits.open("sample.fits")
>>> list
[<astropy.io.fits.hdu.image.PrimaryHDU object at 0x10a4c6cc0>, <astropy.io.fits.hdu.table.TableHDU object at 0x10a4cdf98>]    
 
↑imageとtableがリスト形式で格納されていることがわかる。
 
 
③imageを使って表示させるため、リストの0番目の要素だけ取り出す。
>>> pic = list[0]
 
 
④FITSファイルにはヘッダ部とデータ部があるため、分けておく必要がある。
>>> header = pic.header
>>> data = pic.data
 print(header) とするとヘッダ部の中身を確認することができる。
 
 
⑤imshow()で表示させたい画像(data)を認識させ、show()で表示させる。
>>> plt.imshow(data)
<matplotlib.image.AxesImage object at 0x10a2fd9b0>
>>> plt.show()
 
これで画像が表示される。
 
 
 
APLpyライブラリで画像表示
 
matplotlibと同じくaplpyでも画像を表示することができる。 
 
 
まずはインストール。
$ pip install aplpy
 
 
①利用するライブラリをimport
>>> import astropy.io.fits as iofits
>>> import aplpy
 
 
②ファイルを開くところまでは同じ。 
>>> file = iofits.open("sample.fits") 
 
 
③FITSFigure()を使って画像として認識させ、show_colorscalse()でカラーで表示させることを指定する。
>>> pic = aplpy.FITSFigure(file)
>>> pic.show_colorscale()
>>> plt.show()
 
show_grayscale()を利用することで白黒で画像を表示させることも可能。
 
 
以上!
今回はただ天文データを表示させただけ…
 
実際に天文データ解析は、本やらネットやらを探して、やっていきたいところ。