• Skip to main content
  • Skip to primary sidebar

学習記録

グラフ

過去数か月分のデータをDFに追加していく

2018年9月22日 by 河副 太智 Leave a Comment

APIが混雑している際に再取得するdef fetch_url(url):を追加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import pandas as pd
import plotly.offline as pyo
import plotly.graph_objs as go
import urllib.request
from time import sleep
from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
 
#パラメーターの作成
#trade data type C Commodities S Services
datatype = "type=C"
#china=156,UK=826,US=842,jp=392or all
reporting_area = "&r=842"
#Annual=A,Monthly=M
frequency = "&freq=M"
#YYYY or YYYYMM or now or recent 
time_period = "&ps=201201"
# Harmonized System (HS)
classification = "&px=H4"
#china=156,UK=826,US=842,or all
partner_area = "&p=all"
# 1 (imports) and 2 (exports),
import_or_export = "&rg=1"
#HS CODE
classification_code = "&cc=610910"
#csv or json
fmt = "&fmt=csv"
#取得する相手国の数
amount_country = 6
#取得期間(年or月)
term=72
# term = 72
#一番古いデータの年月(更新あり)
oldest = "201201"
 
url = ("https://comtrade.un.org/api/get?"+datatype + reporting_area+frequency+time_period+classification+partner_area+
      import_or_export+classification_code+fmt)
 
 
#csvをdfに入れる
 
res = urllib.request.urlopen(url)
df = pd.read_csv(res)
 
#最新年を取得
newest = (df["Period"].max())
 
 
#最新年のデータのみを取得
df_n = df[df["Period"] == newest]
 
#valueが高い順に並べ替え
df_s = df_n.sort_values('Trade Value (US$)', ascending=False)
 
#上位10件を取得してリスト化
partner = []
for var in range(1, amount_country):
    partner.append(df_s.iat[var, 12])
 
    
 
 
 
    
#ここに過去の日付のcsvを追加するコードを入れる
def get_oldtime(tdatetime):
    tdatetime = datetime.strptime(str(oldest),"%Y%m")
    tdatetime =(tdatetime + relativedelta(months=1))  
    return tdatetime.strftime('%Y%m')
 
 
 
#一か月ごとのパラメータを生成
def add_old(old):
    addurl = ("https://comtrade.un.org/api/get?"+datatype + reporting_area+frequency+old+classification+partner_area+
      import_or_export+classification_code+fmt)
    sleep(2)
    return addurl
 
 
 
 
#APIが混雑している際に再取得する
def fetch_url(url):
    max_times=10
    sleep_sec=5
    retry_count = 0
    while True:
        f = urllib.request.urlopen(url)
        
        try:
            retry_count += 1
            if f.getcode() == 200 or retry_count >= max_times:
                # 200が返ってくるか、最大試行回数に到達した場合ループを抜ける
                return f
                break
            time.sleep(sleep_sec)
        except ValueError:
            print("Oops!  That was no valid number.  Try again...")  
 
 
 
for i in range(1,term):
    oldest = get_oldtime(oldest)
    time_period = "&ps=" + str(oldest)
    added_url = add_old(time_period)
    added_res = fetch_url(added_url)
    print(added_res.getcode())
    added_df = pd.read_csv(added_res)
    df = pd.concat([df,added_df])
    print(oldest)
 
 
 
data = []
for i in partner:
    
    df2 = df[df["Partner"] == i]
    trace = go.Scatter(x=df2["Period Desc."],
                       y=df2["Trade Value (US$)"],
                       mode = 'lines',
                       name = i)
    data.append(trace)
 
    
layout = go.Layout(
    title="アメリカが輸入するTシャツ等HS6109.10該当貨物"
)
 
fig = go.Figure(data=data, layout=layout)
 
pyo.plot(fig,filename="ustshirt.html")

 

Filed Under: グラフ

Prophetの時系列分析でTwitterの株価予想

2018年9月21日 by 河副 太智 Leave a Comment

Prophetを使用するとハードルの高い時系列分析がサラッとできます。
あくまでも簡易的な分析ですので期待度は微妙ですが
ちょっとした目安にする程度であれば便利かと思います。

Twitter社の株価データはYahooFinanceから取得しています。

黒い点が実際の株価の動きを表しており、大概は水色のゾーンに包括されて
おりますが、予想外の出来事(ファンダメンタル系)が起きると水色ゾーン
から外れてしまいます。

2018年8月27日の米株式市場でのツイッター株が前日終値比21%減の急落は
facebookの株価に引っ張られた為なのか予測の範囲から外れておりますが、
今後はよほどのことがなければ上昇するだろうとの予想です。
(※利益の保証は一切致しませんのでご了承ください。あくまで目安です。)

一年後、実際のtwitter株がどれほどこのグラフと合うのか??
Prophetの能力検証が楽しみです。

 

コード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from fbprophet import Prophet
 
data = pd.DataFrame()
data2 = pd.read_csv("twitter.csv", skiprows=2, encoding="cp932",header=None,
        names=['ds','Open','High','Low','Close','Volume','y'])
data = data.append(data2)
 
model = Prophet()
model.fit(data)
 
future_data = model.make_future_dataframe(periods=200, freq = 'd')
future_data = future_data[future_data['ds'].dt.weekday < 5]
forecast_data = model.predict(future_data)
 
fig = model.plot(forecast_data)
model.plot_components(forecast_data)
plt.show()

上記コードはカラムの名前と順番をProphetに合わせてアレンジして
いるので、YahooFinanceのcsvファイルを少し調整する必要があります

Filed Under: グラフ

BokehとHoloViewsを学ぶ

2018年5月10日 by 河副 太智 Leave a Comment

HoloViews.orgにて学んだ内容をまとめていきます。

HoloViewsとはオープンソースpythonライブラリーで
データ分析、ビジュアライゼーションを簡単に素早く行う事が可能

HoloViewsサンプル

HoloViews.orgに掲載されているサンプル
コードは驚くほどシンプルな構造

更にGalleryページにはBoken,Matplotlib,Plotlyを使用した
サンプルグラフがある

各グラフのコードのサンプルもHoloViews.orgにて紹介している




 

 

Holoviewのインストール

condaがお勧め

1
conda install -c ioam holoviews bokeh

 

上記で紹介したサンプルのグラフも含まれている

1
2
holoviews --install-examples
cd holoviews-examples

 

 

NY地下鉄の駅名情報を可視化

pandas,numpyを使用する
hv.extension(“bokeh”)でBokehのエクステンションをロードし
Bokehを使った可視化ができるようになる

他のプロットライブラリーも組み合わせ可能(matplotlib等)

1
2
3
4
import pandas as pd
import numpy as np
import holoviews as hv
hv.extension('bokeh')

 

次にニューヨークの地下鉄の駅名やその他情報を
含むデータセットを読み込む
csvファイルはこちら

1
2
station_info = pd.read_csv('/station_info.csv')
station_info.head()

 

 

可視化の為のオブジェクト

スキャッタープロット

hv.Scatterオブジェクトを使用して
駅の数と利用者数(百万単位)の2つをスキャッタープロット表示

1
2
scatter = hv.Scatter(station_info, 'services', 'ridership')
scatter

 

※画像のリンク先でグラフをドラッグで動かせる

 

csvのデータ(station_info)をhv.Scatterに渡し、scatterオブジェクトを作成
これ以外のエレメントはReference Galleryにて紹介

ヒストグラム

hv.Histogramオブジェクトを使用して地下鉄の駅開設日を
ヒストグラムにする

1
2
layout = hv.Histogram(np.histogram(station_info['opened'], bins=24), kdims=['opened'])
layout

 

 

 

+を使用して複数のグラフ表示

スキャッタープロットとヒストグラムなど複数のオブジェクトを
使用したグラフを横並びに表示する

1
2
layout = scatter + hv.Histogram(np.histogram(station_info['opened'], bins=24), kdims=['opened'])
layout

 

 

以下ここまでのコードまとめ

1
2
3
4
5
6
7
8
9
10
import pandas as pd
import numpy as np
import holoviews as hv
hv.extension('bokeh')
 
station_info = pd.read_csv('holoviews-master/examples/assets/station_info.csv')
scatter = hv.Scatter(station_info, 'services', 'ridership')
 
layout = scatter + hv.Histogram(np.histogram(station_info['opened'], bins=24), kdims=['opened'])
layout

 

神経スパイク列を可視化

脳のニューロン発火現象を記録したデータセットを用いて
発火時間(milliseconds)
神経細胞が発火する頻度をヘルツ(Hertz)
の2つのデータセットを可視化

csvファイル(spike_train.csv.gz)はこちら

 

pandasとholoviewsをインポートし、spike_trainにcsvを読み込ませる

1
2
3
import pandas as pd
import holoviews as hv
spike_train = pd.read_csv('/spike_train.csv.gz')

データフレームを表示

1
spike_train

 

hv.Curveでグラフ作成

可視化のオブジェクトにhv.Curveを使用
先ほど使用したhv.Scatter やhv.Histogramの仲間

hv.Curveの引数を左からcsv格納変数、インデックス名2つ、group=でグラフタイトル

1
curve = hv.Curve(spike_train, 'milliseconds', 'Hertz', group='Firing Rate')

bokehとmatplotlibをロード

1
2
hv.extension('bokeh', 'matplotlib')
curve

hv.Spikesでグラフ作成

1
2
spikes = hv.Spikes(spike_train.sample(300), kdims='milliseconds', vdims=[], group='Spike Train')
spikes

2つのグラフを並べる

1
curve + spikes

 

更にカスタマイズして見やすいグラフ作成
グラフ上にカーソルを合わせると各データをインタラクティブに表示

1
2
3
4
5
6
7
8
9
10
11
%%output size=150
 
%%opts Curve  [height=100 width=600 xaxis=None tools=['hover']]
 
%%opts Curve (color='red' line_width=1.5)
 
%%opts Spikes [height=100 width=600 yaxis=None] (color='grey' line_width=0.25)
 
curve  = hv.Curve( spike_train, 'milliseconds', 'Hertz')
spikes = hv.Spikes(spike_train, 'milliseconds', [])
(curve + spikes).cols(1)

%%output size=150で全体のサイズ
%%opts Curve でcurveグラフ個別の詳細設定

以下のグラフは画像ですのでインタラクティブ操作できません
実際に動かすにはこちらのグラフをご覧ください。

Filed Under: Bokeh, HoloViews, グラフ

Bokeh と Holoviewsで月食グラフをhtmlに変換

2018年5月7日 by 河副 太智 Leave a Comment

Bokeh と Holoviewsで月食グラフをhtmlに変換

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pandas as pd
import holoviews as hv
from bokeh.io import output_file, save, show
hv.extension('bokeh', 'matplotlib')
 
eclipses = pd.read_csv('../data/eclipses_21C.csv', parse_dates=['date'])
eclipses.head()
 
hv.Curve(eclipses)
 
curve= hv.Curve(eclipses)
renderer = hv.renderer('bokeh')
# rendererで保存
renderer.save(curve, 'graph')
# boken形式に変換
plot = renderer.get_plot(curve).state
 
# graph.htmlの名でhtmlファイルを出力
output_file('graph.html')
 
# プロット
show(plot)

 

Filed Under: Bokeh, グラフ, 作成実績

BokehとHoloviewsでグラフをhtmlにする

2018年4月23日 by 河副 太智 Leave a Comment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import holoviews as hv
curve = hv.Curve(range(10)) # Could be any HoloViews object
 
renderer = hv.renderer('bokeh')
 
# Using renderer save
renderer.save(curve, 'graph.html')
 
# Convert to bokeh figure then save using bokeh
plot = renderer.get_plot(curve).state
 
from bokeh.io import output_file, save, show
 
output_file("graph.html")
show(plot)

 

 

 

Filed Under: Bokeh, グラフ

曼荼羅の壁画

2018年4月22日 by 河副 太智 Leave a Comment

1.母ピンの本数
2.角度
3.リストの素数

によって曼荼羅模様が変わるプログラム

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
%matplotlib inline
 
 
import matplotlib.pyplot as plt
import math
 
n = 35#母ピンの本数
 
kaku = 360 / n #角度
 
 
x = [] #ピンの位皿
y = [] #ピンの位皿
 
 
pnum = [11,81,101, 3, 17 ] # (1)素数のリスト
 
#索数番目のピンに糸をかける
 
plt.figure(figsize=(8, 8))
for p in pnum:
    for i in range(n+1):
        th = math.radians(kaku*i*p)
        x.append(100 * math.cos(th))
        y.append(100 * math.sin(th))
    plt.plot(x,y)#模様を壁画
    x.clear() # をクリア
    y.clear() #
plt. show()

Filed Under: グラフ

  • Page 1
  • Page 2
  • Page 3
  • Page 4
  • Go to Next Page »

Primary Sidebar

カテゴリー

  • AWS
  • Bootstrap
  • Dash
  • Django
  • flask
  • GIT(sourcetree)
  • Plotly/Dash
  • VPS
  • その他tool
  • ブログ
  • プログラミング
    • Bokeh
    • css
    • HoloViews
    • Jupyter
    • Numpy
    • Pandas
    • PosgreSQL
    • Python 基本
    • python3
      • webアプリ
    • python3解説
    • scikit-learn
    • scipy
    • vps
    • Wordpress
    • グラフ
    • コマンド
    • スクレイピング
    • チートシート
    • データクレンジング
    • ブロックチェーン
    • 作成実績
    • 時系列分析
    • 機械学習
      • 分析手法
      • 教師有り
    • 異常値検知
    • 自然言語処理
  • 一太郎
  • 数学
    • sympy
      • 対数関数(log)
      • 累乗根(n乗根)
    • 暗号学

Copyright © 2025 · Genesis Sample on Genesis Framework · WordPress · Log in