質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

3回答

1138閲覧

【Python】Excelファイルを取り込んで折れ線グラフを作りたい

suzu-0401

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/16 19:00

編集2021/07/16 19:28

URLからコロナ感染者のデータを取得し、佐賀県の新規感染者のデータをプロットしたい(横軸:日付、縦軸:新規感染者数)のですが上手くいきません。どなたかご教授願います。

import pandas
import requests
import io
import matplotlib.pyplot as plt
import japanize_matplotlib

def plotSub(plotList, df):
for loc, label in plotList:
ser = getSeries(df, loc)
ser.plot(label = label, linewidth = 3)

def prePlot():
plt.figure(figsize = (7, 7))
plt.rcParams["font.size"] = 20
plt.title('佐賀県の新型コロナウイルス感染者') #図タイトル
plt.xlabel('日付')
plt.ylabel('感染者数 (人)')

url = 'https://www3.nhk.or.jp/n-data/opendata/coronavirus/nhk_news_covid19_prefectures_daily_data.csv'
data = pandas.read_excel(url, parse_col = 548, skiprows = 21921, skipfooter = 3262)

prePlot()

plotList=[('各地の感染者数_1日ごとの発表数', '新規感染者')]
plotSub(plotList, data)
plt.legend(loc = 'best')

plt.savefig('kannsennsyasuu.pdf')
plt.show()

発生している問題・エラーメッセージ

TypeError: read_excel() got an unexpected keyword argument 'parse_col'

試したこと

上記の通りプログラムを書いてみたのですが、エラーが出てしまい、うまく動作しません。一通り確認しても自分では間違いに気づくことができません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/07/16 23:30

コードは「コードの挿入」で記入してください。
guest

回答3

0

python

1#!pip install japanize_matplotlib 2import matplotlib.pyplot as plt 3import matplotlib.dates as mdates 4import pandas as pd 5import numpy as np 6 7import requests 8import io 9import japanize_matplotlib 10 11plt.rcParams["font.size"] = 8 12 13url = 'https://www3.nhk.or.jp/n-data/opendata/coronavirus/nhk_news_covid19_prefectures_daily_data.csv' 14r = requests.get(url) 15data = pd.read_csv(io.BytesIO(r.content),parse_dates=['日付']) 16 17df=data.loc[data['都道府県名']=="佐賀県",['日付','各地の死者数_1日ごとの発表数']] 18df.columns=['日付','感染者数(人)'] 19 20df_ts = df.loc[df['日付'] > np.datetime64('2020-12-31')] 21 22# https://oku.edu.mie-u.ac.jp/~okumura/python/plottimeseries.html 23# なお、1月からの描画にしたかったため、zero_formatsを変更しています。 24# フォーマットの記載については下記の通り 25# https://matplotlib.org/stable/gallery/ticks_and_spines/date_concise_formatter.html 26 27fig, ax = plt.subplots(figsize=(10,2)) 28locator = mdates.AutoDateLocator() 29formatter = mdates.ConciseDateFormatter(locator) 30formatter.formats=['%Y年', '%m月', '%d日', '%H:%M', '%H:%M', '%S.%f'] 31formatter.zero_formats=['', '%m月', '%m月', '%m-%d', '%H:%M', '%H:%M'] 32formatter.offset_formats=['', '%Y年', '%Y-%m', '%Y-%m-%d', 33 '%Y-%m-%d', '%Y-%m-%d %H:%M'] 34ax.xaxis.set_major_formatter(formatter) 35 36ax.get_yaxis().get_major_formatter().set_useOffset(False) 37ax.get_yaxis().set_major_locator(ticker.MaxNLocator(integer=True)) 38 39 40ax.bar(df_ts['日付'], df_ts['感染者数(人)'], width=1,label='感染者数(人)') 41ax.set_title('佐賀県の新型コロナウイルス感染者') 42ax.legend()

奥村先生のページ時系列のグラフを描くにやり方がしっかりのっていました。

__matplotlib.dates__での時系列軸の変換はこのようにaxisに対して描画する必要があります。

__df.plot.bar()__でやろうとして、かなり沼にはまりました。

barplot


python

1#!pip install japanize_matplotlib 2import pandas as pd 3import requests 4import io 5import matplotlib.pyplot as plt 6import japanize_matplotlib 7 8url = 'https://www3.nhk.or.jp/n-data/opendata/coronavirus/nhk_news_covid19_prefectures_daily_data.csv' 9r = requests.get(url) 10data = pd.read_csv(io.BytesIO(r.content),parse_dates=True,index_col='日付') 11 12df=data.loc[data['都道府県名']=="佐賀県",['各地の死者数_1日ごとの発表数']] 13df.columns=['感染者数(人)'] 14 15plt.rcParams["font.size"] = 20 16 17fig, ax = plt.subplots() 18 19df.loc[df.index > np.datetime64('2020-12-31')].resample('1W').sum().plot( 20 figsize=(7,7), 21 title='佐賀県の新型コロナウイルス感染者', 22 xlabel='日付', 23 ylabel='感染者数 (人)', 24 ax=ax) 25 26plt.legend(loc = 'upper left')

佐賀県だと、感染者数が0の日が多いので、一週間ごとの累計値でグラフにしてみました。
Google Colaboratoryでやってますので、一番最初だけpip install japanaize_matplotlibが必要です。

barplotでのダウンサンプリング、もっといい方法があったはずなんですけど・・・

投稿2021/07/17 01:27

編集2021/07/17 02:30
toshikawa

総合スコア388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suzu-0401

2021/07/17 15:04

このようなエラーが出てしまいます。このnpというのは、何のことなのでしょうか? NameError: name 'np' is not defined --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-24-63442f49e7a3> in <module> 10 fig, ax = plt.subplots() 11 ---> 12 df.loc[df.index > np.datetime64('2020-12-31')].resample('1W').sum().plot( 13 figsize = (7,7), 14 title = '佐賀県の新型コロナウイルス感染者',
guest

0

データの取得方法がぐちゃぐちゃですね。
csvはエクセルではありません。
read_csvとread_excelの引数は同じではありません。
read_excelはネットワーク上のデータを読み込むことはできません。

少し難しいので、取得方法だけ書いておきます。
skiprows = 21921, skipfooter = 3262をとかを使うと、翌日は動かないかもしれないので、全部DataFrameにしてから佐賀県を抜き出す方が良いでしょう。

python

1>>> import pandas as pd 2>>> import io 3>>> import requests 4>>> 5>>> url = 'https://www3.nhk.or.jp/n-data/opendata/coronavirus/nhk_news_covid19_prefectures_daily_data.csv' 6>>> 7>>> r = requests.get(url) 8>>> 9>>> with io.StringIO(r.text) as f: 10... df = pd.read_csv(f, engine='python', parse_dates=[0]) 11... 12>>> df_saga = df[df['都道府県名']=='佐賀県'] 13>>> 14>>> print(df_saga) 15 日付 都道府県コード 都道府県名 各地の感染者数_1日ごとの発表数 各地の感染者数_累計 各地の死者数_1日ごとの発表数 各地の死者数_累計 1621920 2020-01-16 41 佐賀県 0 0 0 0 1721921 2020-01-17 41 佐賀県 0 0 0 0 1821922 2020-01-18 41 佐賀県 0 0 0 0 1921923 2020-01-19 41 佐賀県 0 0 0 0 2021924 2020-01-20 41 佐賀県 0 0 0 0 21... ... ... ... ... ... ... ... 2222463 2021-07-12 41 佐賀県 1 2571 0 24 2322464 2021-07-13 41 佐賀県 1 2572 0 24 2422465 2021-07-14 41 佐賀県 3 2575 0 24 2522466 2021-07-15 41 佐賀県 6 2581 0 24 2622467 2021-07-16 41 佐賀県 9 2590 0 24 27 28[548 rows x 7 columns]

グラフ化も間違いがありそうですが、そこはご自身で頑張ってください。

投稿2021/07/16 23:28

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

TypeError: read_excel() got an unexpected keyword argument 'parse_col'

「read_excel()にはparse_colなんていうキーワード引数はないよ」

って言われてるだけではないでしょうか?

投稿2021/07/16 19:25

udon-ken

総合スコア657

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問