C100の頒布数を可視化する
from C100 1日目感想
https://colab.research.google.com/drive/1BEwCq0YKgQ19YFyf8xwqX3h9WkQ7zCXE?usp=sharing
maptlotlibで販売数の時系列データを描画する
PandasとNumPyの違いと使い分け方 - DeepAge
Pythonのスライスによるリストや文字列の部分選択・代入 | note.nkmk.me
google spread sheetを読み込むには認証情報が必要
gspread APIv4対応 - ておくれるままに...
Authentication — gspread 5.4.0 documentation
https://note.nkmk.me/python-pandas-dataframe-values-columns-index/
時系列の集計はpandas.DataFrame.resampleかpandas.Series.resample使えばよさそう
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.resample.html#pandas-dataframe-resample
https://pandas.pydata.org/docs/reference/api/pandas.Series.resample.html#pandas.Series.resample
描画はデフォルトではMatplotlibが使われる
https://pandas.pydata.org/docs/dev/reference/api/pandas.Series.plot.html
pandasのplotメソッドでグラフを作成しデータを可視化 | note.nkmk.me
累積和も追加したい
cumsum
https://note.nkmk.me/python-numpy-cumsum-cumprod/
x軸はbarにするとなぜか間引いてくれない
step sizeの指定ができない
https://pandas.pydata.org/docs/reference/api/pandas.Series.plot.html
やり方不明なのでいったん飛ばす
seriesのindexのdatatypeをdatetime64[ns]にすると棒グラフ描画がバグる
同じ問題が2020年に報告されている
Unfortunately, matplotlib's bar plots don't seem to play along very happily with pandas dates.
https://stackoverflow.com/questions/59707035/matplotlib-pandas-quarterly-bar-chart-with-datetime-as-index-not-working
widthが異様に大きくなっているようだったので、widthをものすごく小さくすることで解決
最大の値でそれ以降が入力値0の場合に塗りつぶされてしまう
strでdatetimeを入力すると正常になる。なぜ?
日時がずれていると正常表示されるが、同日の時刻だとダメらしい
そもそも時刻が変なので修正する
matplotlibでx軸がdatetimeの場合に表示形式を変更する方法
修正した結果、想定した時刻と違う場所にプロットされていることがわかった
表示期間がおかしい
https://stackoverflow.com/questions/5902371/matplotlib-bar-chart-with-dates
https://gyazo.com/f5b1e63bc2165458cf9cd4adf411f263https://gyazo.com/f9fe8f769cdcae339a1c02335aa7f49d
左:plotだと正常、右:barだと完全にイカれたグラフになる
https://gyazo.com/c37c72622cea82a3112022658c4bb0fe
code:py
val = 1, 0, 5
datetimeList = "2022-08-13 00:00:00", "2022-08-13 00:10:00", "2022-08-13 00:10:01"
datetimes = pd.to_datetime(datetimeList)
series = pd.Series(1 * len(datetimes), index = datetimes)
fig, ax = plt.subplots()
ax.bar(series.index, val)
ax.set_xlim(xmin=pd.to_datetime("2022-08-13"))で直すことができるが、↓の問題でグラフはイカれたままになる。むしろ下を直したらこっちは修正しなくてもいいかもしれない
indexで指定した(x, y)=(時刻,値)のペアになっていない`
pandas.DataFrameにまとめた後描画したら描画できるようになった...と思ったらplt.plot()では正常なのにplt.bar()ではC100 1日目感想#62fe0a6e774b1700005213bdになる
matplotlib.axes.Axes
https://matplotlib.org/stable/api/axes_api.html#matplotlib.axes.Axes
重ねたい→軸コピー
軸を別にしたい→軸コピーすればよかった
secondary_yを指定すればよさそう
サブプロットの軸だけ消したい(ラベルは残したい)
https://qiita.com/supersaiakujin/items/e2ee4019adefce08e381 だとラベルも消える
https://stackoverflow.com/questions/14908576/how-to-remove-frame-from-matplotlib-pyplot-figure-vs-matplotlib-figure-frame 役に立たず
https://gyazo.com/596b99deef6ba484a9762fbab1905c07
axis.twinx()でコピーした軸のset_tickxlabels()をするとコピー元のlabelも消える
pyplotではxticks()、Axesではset_xticklabels()を使うんだって。 - Qiita
python - How to change the step size matplotlib uses when plotting timestamp objects? - Stack Overflow
知人との会話
matplotlibはpython描画ライブラリのデファクトスタンダード
matplotlibは難しい(n=3)
同じことが複数の方法でできるように見えて、方法によってできないことがある
「pandasのplotはその場ですぐ確認したい時にしか使わない」
matplotlibが内部的に使われているが、matplotlibともまた違う
matplotlib自体が複雑なのにpandasのplotの複雑性が加わると訳がわからなくなる
numpy.datetime64 型または datetime.datetime 型 のリストを使えば matplotlib 側が日時を名義尺度ではなく間隔尺度として扱ってくれる
https://blog.sgry.jp/entry/2020/08/12/000850