Hope is a Dream. Dream is a Hope.

非公開ブログは再開しました。

有限要素法で格子分割 for Python

有限要素法の勉強中。3日目。 これまで研究で有限要素法(FEM)や有限体積法(FVM)をやってきた。しかし、それらは汎用コードの恩恵を受けて、GUI上で操作するだけであった。しかし、エンジニアたるもの自分でコーディングしなければという趣味的な衝動を受け、実装を試みている。

有限要素法の基本

  1. GEOMETRY: 領域設定
  2. MESHER: 格子生成
  3. BC: 境界条件・初期条件の設定
  4. SOLVE: 解析
  5. POST PROSSECE: 結果の表示

格子生成

まず初めにつまづいたのが、格子生成である。これが出来なければなにもはじまらない。 hollow_cylinder

格子(メッシュ)というのは、解析する形状を細かい領域に分割することである。格子には(二次元では)三角形や四角形が主に使われる。物理シミュレーションの分野以外にも、3Dのイメージ等で使われる。

ドロネー線図を使っての、格子分割が重要なようだ。

計算幾何講義」 http://www.kanenko.com/~kanenko/KOUGI/CompGeo/cpgeoc.pdf

実装してみる

有限要素法では、要素(エレメント)とそれを形成する節点(ポイント)が必要である。自動格子分割では、要素と節点の管理をどうするかがキモである。とりあえず四角要素で格子分割してみた。

https://gist.github.com/peace098beat/d4738a60e9c9e2e63c23

とりあえず、四角形要素に対して、各要素を保持しながら四角形を作ることができた。コーディング初心者の僕では難しかった。

 

pixmap

 

 

次回は、この四角系を三角要素に分割したい。分割では要素の削除・追加等の更新作業が必要になるのでまたややこしくなりそう。

 

 

参考

「基本的な有限要素法」 http://hplgit.github.io/INF5620/doc/notes/fem-sphinx/main_fem.html 1ページだが、非常にたくさんの資料が詰め込まれている。 「人工環境設計解析工学 メッシュ生成と アダプティブリメッシング」 http://www.nasl.t.u-tokyo.ac.jp/katsu/lectures/ee-analysis/adaptive.pdf 「2次元の階層メッシュを用いた高速なアダプティブ解析」 http://mps.q.t.u-tokyo.ac.jp/~muro/ResearchAreas5_J.htm

理論と実務がつながる 実践有限要素法シミュレーション―汎用コードで正しい結果を得るための実践的知識

理論と実務がつながる 実践有限要素法シミュレーション―汎用コードで正しい結果を得るための実践的知識

<解析塾秘伝>有限要素法のつくり方! -FEMプログラミングの手順とノウハウ-

<解析塾秘伝>有限要素法のつくり方! -FEMプログラミングの手順とノウハウ-

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

Pythonでスクレイピングする | youtube動画のヒット数を調べる

BeautifulSoup

images

題名のとおり。以前から興味を持っていたスクレイピングを試してみました。

結構簡単。

今回は、youtubeの検索結果のヒット数が知りたかった。いちいち手で打ってしらべるのが面倒だったので、Pythonでやってみる。Webページをコードからいじるのは楽しいです。

図1

URLはこうなっている

https://www.youtube.com/results?search_query=lock+dance

"search_query="の後を変更すればいいわけだ。

コードはこうなった。

試したコード

# -*- coding: utf-8 -*-
import urllib2
from bs4 import BeautifulSoup

# 検索先
youtube_url = 'https://www.youtube.com/results?search_query='

# 検索ワード格納用バッファ
search_querys = []
search_querys.append('dance')
search_querys.append('ダンス')
search_querys.append('ヒップホップダンス')
search_querys.append('ヒップホップ+ダンス')
search_querys.append('hiphopdance')
search_querys.append('hiphop+dance')
search_querys.append('lockdance')
search_querys.append('lock+dance')
search_querys.append('housedance')
search_querys.append('house+dance')
search_querys.append('breakdance')
search_querys.append('break+dance')
search_querys.append('breaking')

# 検索結果格納用バッファ
result = []
for search_query in search_querys:

# アクセス先を生成
URL = youtube_url + search_query

# htmlを取得
res = urllib2.urlopen(URL)

# 料理する
soup = BeautifulSoup(res.read())

# 予め取得したい要素を指定する
a = soup.find('p', attrs={'class':'num-results'})
b = a.find('strong')

# 結果の表示
print '--Result--'
print u'検索ワード = ' + search_query.decode('utf-8')
print u'約'+ b.string + u'件'

# 結果の格納
result_child = {search_query, b.string}
result.append(result_child)

print result

 

結果

--Result--
検索ワード = dance
約124,000,000件
--Result--
検索ワード = ダンス
約3,250,000件
--Result--
検索ワード = ヒップホップダンス
約4,630,000件
--Result--
検索ワード = ヒップホップ+ダンス
約4,620,000件
--Result--
検索ワード = hiphopdance
約176,000件
--Result--
検索ワード = hiphop+dance
約558,000件
--Result--
検索ワード = lockdance
約22,600件
--Result--
検索ワード = lock+dance
約507,000件
--Result--
検索ワード = housedance
約254,000件
--Result--
検索ワード = house+dance
約7,950,000件
--Result--
検索ワード = breakdance
約1,710,000件
--Result--
検索ワード = break+dance
約3,100,000件
--Result--
検索ワード = breaking
約15,300,000件

 

 

非常に参考になった資料

PythonによるWebスクレイピング入門

http://www.slideshare.net/checkpoint77/pythonweb-38279221

BeautifulSoupでスクレイピングのまとめ

http://taichino.com/programming/1531

Pythonらしいコードの書き方

http://kesin.hatenablog.com/entry/2013/05/12/004541

PythonによるWebスクレイピング

PythonによるWebスクレイピング

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

wordpressへhatenaブログ記事の自動投稿

wordpressへhatenaブログ記事の自動投稿

hatenaブログでは登校データをMT(MovableType)形式で書き出すことができます。

 調査

Movable Type 3.2 マニュアル - Movable Typeの読み込みフォーマット

WordPressへの移行 – はてなからのデータ移行

問題

  • 画像は、はてなフォロライフのリンクになってる
  • はてダPlusで過去にアップしたファイルのリンクは変になってる
  • 同日投稿の記事の順番が変になってるケースあり => 見逃せる
大筋良いけど、微妙に駄目。そんな状況でした。リンクが変になってるのは、プラグインで後から見つけられるんで、今のところ放置。

Step5 リンク切れをチェック

  • WordPressプラグインで「Broken Links」ってのがあるんですが、入れて暫く放置しとくと、サイト内のリンク切れを勝手に探してくれます。「はてダPlusで過去にアップしたファイルのリンクは変になってる」ってのは、このプラグインで知りました。
  • はてなの場合、「はてなキーワード」ってのがあって、勝手にリンクが貼られているケースがあるんで、そういったリンクは全部「Unlink」でリンク解除。
過去にアップしたファイルのリンクが変になっているのは、その場で修正。たまたま私は、アップしたファイルは1つだけだったので、すぐに修正できました。 後は、純粋にリンク切れをしているURLがあったんですが、それは追々直していく予定です。

開発用のwordpressを作成

僕が使っているレンタルサーバにはwordpressインストール機能がついているので、wordpressは1分で作れます。とても楽。

開発用Wordpress

http://fififactory.com/wp-dev/

SnapCrab_NoName_2015-2-14_9-54-25_No-00

とりあえずインポート

hatena記事をwordpressにインポートする。

SnapCrab_NoName_2015-2-14_9-56-10_No-00

ツールを調べると、結構沢山でてきた。MVインポーター風のツールをインストール。

SnapCrab_NoName_2015-2-14_9-58-35_No-00

 

記事は特に問題ないです。

自動投稿

本当にしたいのはこっちなのです。

自動投稿用環境

研究用Wordpress

http://www.fififactory.com/rd-wp/

SnapCrab_NoName_2015-2-14_9-54-33_No-00

 調査

[python] [twitter] WordPressに自動投稿するスクリプトを作ってみた

  • HTMLの実体参照文字をUnicode文字へ変換する
  • twilog.org からデータを取得し,返す
  • WordPress へ記事を投稿する
  • 前日のつぶやきを投稿する

[Python]xmlrpclibを使ってブログにエントリ投稿する方法

重要なのは以下の箇所である。 import xmlrpcself.server = xmlrpclib.ServerProxy(url)entry_id = server.metaWeblog.newPost(...) 非常にスッキリとした仕様であることが分かる。

調べていると、xmlrpc.phpというwordpressAPIをたたくみたい。これは/wp/フォルダにあった。ためしにブラウザで直接アクセスするとおこられる。

http://fififactory.com/rd-wp/wp/xmlrpc.php

さて上の方法を使って実際にためしたら、とても簡単にできた。

SnapCrab_NoName_2015-2-14_10-27-6_No-00

あとは、元の記事を切り貼りして、日付毎に投稿するだけだ。

ロードマップ

  1. はてなブログの記事をMT形式でエクスポート
  2. MT形式から各要素をパース・整形
    1. 文字コードの学習
  3. 自動投稿用プログラムの作成
    1. wordpressのカテゴリ情報付加方法の調査
  4. cronに登録して自動投稿

 

非常に参考になった記事

 

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)