array_count_values(); 配列の値(value)の数を数える

配列の値の数を数える

<?php

$array = array(
	"投資家1" => "強く買いたい",
	"投資家2" => "売りたい",
	"投資家3" => "強く買いたい",
	"投資家4" => "買いたい",
	"投資家5" => "様子見",
	"投資家6" => "買いたい",
	"投資家7" => "買いたい",
	"投資家8" => "買いたい"
);

$board = array_count_values($array);
arsort($board);

var_dump($board);

array(4) { [“買いたい”]=> int(4) [“強く買いたい”]=> int(2) [“様子見”]=> int(1) [“売りたい”]=> int(1) }

アナリストレポートの頻出単語を形態素分析で比較

フィーチャーベンチャーキャピタルの2/9と2/6のレポートで、2回以上書かれている単語を見てみます。
http://www.jpx.co.jp/listing/ir-clips/analyst-report/detail/tvdivq0000023hz1-att/ana_re_8462_20180209_1.pdf
http://www.jpx.co.jp/listing/ir-clips/analyst-report/detail/tvdivq0000023hz1-att/ana_up_8462_20180206_2.pdf

<?php

$text = "レポート内容(略)";
$appearances = 2;

$meishiPosIdArr = array(38, 41, 42, 43, 44, 45, 46, 47);

$meishiArr = &#91;&#93;;

$mecab = new MeCab_Tagger();
$nodes = $mecab->parseToNode($text);


foreach($nodes as $node){
	if($node->getStat() === MECAB_BOS_NODE || $node->getStat() === MECAB_EOS_NODE){
		continue;
	}
	if (in_array($node->getPosId(), $meishiPosIdArr)){
		$meishiArr[] = $node->getSurface();
	}
}

$retArr = array_count_values($meishiArr);
$retArr = array_filter($retArr, function($v) use($appearances){
	return ($v >= $appearances);
});

arsort($retArr, SORT_NUMERIC);
print_r($retArr);

2/9のレポート
Array ( [月] => 10 [Q] => 10 [利益] => 8 [赤字] => 7 [業績] => 5 [経常] => 3 [パラグラフ] => 2 [持分] => 2 [会社] => 2 [株式] => 2 [ファンドレイズ] => 2 [ZMP] => 2 [特] => 2 [子会社] => 2 [利] => 2 [売上] => 2 [幅] => 2 [最終] => 2 [段階] => 2 [ファンド] => 2 [ANEW] => 2 )

2/6のレポート
Array ( [IPO] => 5 [ZMP] => 3 [会社] => 3 [利益] => 3 [株式] => 2 [A] => 2 [ファンド] => 2 [収益] => 2 [M] => 2 [キャピタルゲイン] => 2 [期間] => 2 [黒字] => 2 [株] => 2 [月] => 2 [負] => 2 [経費] => 2 [Q] => 2 [事業] => 2 [状況] => 2 )

頻出単語から推察するに、2/6はIPOが話題に上がっているようですが、2/9は業績に関するレポートに変わっているようですね。

アナリストレポートを形態素分析

では、ベガコーポレーションのレポートを形態素分析してみましょう。ここでは冒頭のみ。

<?php

echo (new MeCab\Tagger())->parse('・ベガコーポレーション(以下、同社)は、家具・インテリア分野でEC を展開
している。自社企画の商品を海外の協力工場で製造し、日本に輸入して
ユーザーに供給するビジネスモデルを有するのが特徴である。また、越
境 EC プラットフォームの運営も手掛けている。');
?>

見やすくします。

<?php

$result = explode("\n", rtrim((new MeCab\Tagger())->parse('・ベガコーポレーション(以下、同社)は、家具・インテリア分野でEC を展開
している。自社企画の商品を海外の協力工場で製造し、日本に輸入して
ユーザーに供給するビジネスモデルを有するのが特徴である。また、越
境 EC プラットフォームの運営も手掛けている。')));

print_r('<pre>');
var_dump($result);
print_r('</pre>');

mecab, mecab-phpをインストール

epelはyumのリポジトリ。
rpmコマンドは、RPMパッケージ(コンパイル済みのバイナリとファイル群)をインストールするもの。

[vagrant@localhost ~]$ mkdir mecab
[vagrant@localhost ~]$ cd mecab
[vagrant@localhost mecab]$ sudo yum install epel-release
[vagrant@localhost mecab]$ sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
[vagrant@localhost mecab]$ sudo yum install mecab mecab-devel mecab-ipadic
[vagrant@localhost mecab]$ mecab --version
mecab of 0.996


[vagrant@localhost mecab]$ git clone https://github.com/rsky/php-mecab.git
[vagrant@localhost mecab]$ cd php-mecab/mecab
[vagrant@localhost mecab]$ sudo yum install libtool
[vagrant@localhost mecab]$ phpize
[vagrant@localhost mecab]$ make
[vagrant@localhost mecab]$ sudo make install
[vagrant@localhost mecab]$ sudo php -r "\$h=fopen('/etc/php.ini','a');fwrite(\$h,'extension=mecab.so'.\"\n\");"
[vagrant@localhost mecab]$ php -m | grep mecab
mecab

複数の配列の構造化マークアップ

例えば、コード、名称、取引値をそれぞれ配列に持っていて、jsonで吐き出したい場合。

<?php

$code = array("4579", "3758", "3825");
$name = array("ラクオリア創薬", "アエリア", "リミックスポイント");
$price = array("1728", "1805", "899");

?>
<script type="application/ld+json">
<?php

$items = array();
for($i=0; $i<3; $i++){
	array_push($items, &#91;
		"code" => "$code[$i]",
		"name" => "$name[$i]",
		"price" => "$price[$i]"
		]);
}
print(json_encode($items, JSON_UNESCAPED_UNICODE));
?>
</script>

テストデータは、Googleの構造化チェックツールで確認
https://search.google.com/structured-data/testing-tool?hl=ja

配列の構造化マークアップ

例えば、以下のように株価の配列を書き出す。

<?php

$array = array(
  "code" => "4779",
  "name" => "ラクオリア創薬",
  "price" => "1728"
);
?>
<script type="application/ld+json">
{
	"code" : "<?php echo $array&#91;code&#93;; ?>",
	"name" : "<?php echo $array&#91;name&#93;; ?>",
	"price" : "<?php echo $array&#91;price&#93;; ?>",
}
</script>

jsonにencodeすれば、吐き出す必要はなし。

<?php
$array = array(
  "code" => "4779",
  "name" => "ラクオリア創薬",
  "price" => "1728"
);
$json = json_encode($array, JSON_UNESCAPED_UNICODE);
?>

<script type="application/ld+json">
<?php print $json; ?>
</script>

/httpd/conf.d/

ヴァーチャルホストの設定

<VirtualHost *:80>
DocumentRoot /var/www/html/hoge
DirectoryIndex index.html index.php
ServerName www.hoge.com
ServerAlias hoge.com
CustomLog logs/hoge.com-access.log common
ErrorLog  logs/hoge.com-error.log
AddDefaultCharset UTF-8
<Directory "/var/www/html/hoge/">
AllowOverride All
</Directory>
</VirtualHost>

vpsインストール後の鍵認証の設定

まず、yum update

Loaded plugins: fastestmirror, security
Setting up Update Process
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
No Packages marked for Update

1.公開鍵の転送先ディレクトリの作成

# mkdir .ssh
# chmod 700 .ssh

ssh-keygenで、id_rsa id_rsa.pubを作成します。

MySQL 中国語も”varchar”でOK?

mysql> create table **.**(
    ->     id int,
    ->     word1 varchar(255),
    ->     word2 varchar(255),
    ->     word3 varchar(255),
    ->     word4 varchar(255),
    ->     word5 varchar(255),
    ->     word6 varchar(255),
    ->     word7 varchar(255),
    ->     word8 varchar(255),
    ->     word9 varchar(255),
    ->     word10 varchar(255)
    ->     );
Query OK, 0 rows affected (0.22 sec)

mysql> insert into **.** values
    -> (1, '关键词01','关键词02','关键词03','关键词04','关键词05','关键词06','关键词07','关键词08','关键词09','关键词10');
Query OK, 1 row affected (0.05 sec)

mysql> select * from **;
+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
| id   | word1       | word2       | word3       | word4       | word5       | word6       | word7       | word8       | word9       | word10      |
+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
|    1 | 关键词01    | 关键词02    | 关键词03    | 关键词04    | 关键词05    | 关键词06    | 关键词07    | 关键词08    | 关键词09    | 关键词10    |
+------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
1 row in set (0.00 sec)

大丈夫そうです。CHARは固定長、VARCHARは可変長ですね。

weibo 微博 api 登録までの流れ

まず、Weiboに登録します。
「weibo english」で検索すると、英語のregistrationページがあるので、スマホの番号を入れ、送られてきたパスコードを入力して完了です。

次に、ログインした状態で、http://open.weibo.com/ に行き、右上のプルダウンから、「编辑开发者信息」を選択します。「开发者」kaifa zhe が開発者という意味ですね。

邮编 youbian: 郵便番号
邮箱 youxiang: e-mail
联系电话 lianxi dianhua: 連絡先電話番号 81+ :
聊天工具: チャットツール

ちょっと待て、チャットがない。「MSN,QQ,Gtalk至少填写一项」
「聊天工具格式错误,请修改」qing xiugai 修正と出ている。とのことで、QQに登録。

网站:http://192.168.33.10:8000
紧急联系人姓名:

发送验证邮件 Fasong yanzheng youjian:確認メールが飛ぶ