matplotlibを使って折れ線グラフを完成させる
日本の人口を年代別に折れ線グラフで表現したいと考えています。
西暦と人口についての情報はスクレイピング済で、グラフにする際にX,Y軸の目盛りにデータの内容が適用されないことや折れ線グラフ上に折れ線がなく白紙状態です。
〜〜〜〜〜やろうとしていること〜〜〜〜〜
0. X軸に西暦を含む情報 (関数yearより)
0. Y軸に人口の数(下記のデータの出力からわかります。8〜9桁の数字です)(関数nomal_dealより)
この二軸からなる折れ線グラフの作成をしようとしています。
python
1import requests 2import re 3import matplotlib.pyplot as plt 4import numpy as np 5from bs4 import BeautifulSoup 6url = 'https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E4%BA%BA%E5%8F%A3%E7%B5%B1%E8%A8%88' 7 8r = requests.get(url) 9html_soup = BeautifulSoup(r.text,'html.parser') 10 11base_locate = html_soup.find('table',class_='wikitable') 12 13def year(): 14 body = base_locate.find_next('tbody') 15 for year in body.find_all('th'): 16 text = year.get_text(strip=True) 17 make_list = [] 18 jp = re.sub('[年総人口前年比増減率]','',text) 19 make_list.append(jp) 20 print(make_list) 21 return make_list 22 23def nomal_deal(): 24 for num in base_locate.find_all('tr'): 25 for deal in num.find_all('td'): 26 text = deal.get_text(strip=True) 27 sea = re.sub('[^0-9]','',text) 28 bre = re.sub(',','',sea) 29 core = re.findall('^[0-9]{8,}',bre) 30 core_int = [int(s) for s in core] 31 print(core_int) 32 return core_int 33 34year() 35nomal_deal() 36 37year = year() 38nomal = nomal_deal() 39 40 41left = np.array(year) 42height = np.array(nomal) 43 44fig,ax = plt.subplots() 45plt.plot(left,height) 46 47ax.set(xlabel = 'year',ylabel ='deal', 48 title='number of birth') 49ax.grid() 50 51fig.savefig("number_of_birth.png") 52plt.show() 53 54
試したこと
調べた結果、リストやタプルなどを引数にとって出力するが可能??となっていました。
re.findallはパターンに重複しない形でリストの形式で返すため最初はうまくいくと考えたのですが、
折れ線グラフ上やX,Y軸の目盛りに西暦や人口数などのデータが反映されません。
自分なりに考えたこととしては、リストが現時点でバラバラの状態のために上手く反映されない?
(つまり、一つのリストにデータの一覧が格納されているのではなく、一つ一つ取得データをリストとしていることが問題?)
と考え。。。一つのリストにデータを全て格納しまとめれば良いのではないかと考えました。そしてappendを使ってリストを格納しようとしたのですが、そのためには新規のリストを作成する必要がありこれでは手の打ちようがないと。。勝手に思ってます。
上記の__リストが今回表を作成する際のネックになっている__という考察は自分の推察であり、これが今回の問題の根底にあるものだとは言い切れません。。
*以下は折れ線グラフの引数にとっているデータの内容です。二回出力された状態でそれぞれデータの内容は変わりません。
[''] [''] [''] ['1910(明治43)'] ['1915(大正4)'] ['1920(大正9)'] ['1925(大正14)'] ['1930(昭和5)'] ['1935(昭和10)'] ['1940(昭和15)'] ['1945(昭和20)'] ['1950(昭和25)'] ['1955(昭和30)'] ['1960(昭和35)'] ['1965(昭和40)'] ['1970(昭和45)'] ['1975(昭和50)'] ['1980(昭和55)'] ['1985(昭和60)'] ['1990(平成2)'] ['1995(平成7)'] ['2000(平成12)'] ['2005(平成17)'] ['2010(平成22)'] ['2015(平成27)'] ['2016'] ['2017'] ['2018'] [50984840] [] [54935755] [] [55963053] [] [59736822] [] [64450005] [] [69254148] [] [73075071] [] [71998104] [] [83199637] [] [89275529] [] [93418501] [] [98274961] [] [103720060] [] [111939643] [] [117060396] [] [121048923] [] [123611167] [] [125570246] [] [126925843] [] [127767994] [] [128057352] [] [127094745] [] [126932772] [] [126706210] [] [126443180] [] [''] [''] [''] ['1910(明治43)'] ['1915(大正4)'] ['1920(大正9)'] ['1925(大正14)'] ['1930(昭和5)'] ['1935(昭和10)'] ['1940(昭和15)'] ['1945(昭和20)'] ['1950(昭和25)'] ['1955(昭和30)'] ['1960(昭和35)'] ['1965(昭和40)'] ['1970(昭和45)'] ['1975(昭和50)'] ['1980(昭和55)'] ['1985(昭和60)'] ['1990(平成2)'] ['1995(平成7)'] ['2000(平成12)'] ['2005(平成17)'] ['2010(平成22)'] ['2015(平成27)'] ['2016'] ['2017'] ['2018'] [50984840] [] [54935755] [] [55963053] [] [59736822] [] [64450005] [] [69254148] [] [73075071] [] [71998104] [] [83199637] [] [89275529] [] [93418501] [] [98274961] [] [103720060] [] [111939643] [] [117060396] [] [121048923] [] [123611167] [] [125570246] [] [126925843] [] [127767994] [] [128057352] [] [127094745] [] [126932772] [] [126706210] [] [126443180] []
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/27 15:08
2020/05/27 15:18
2020/05/27 15:29
2020/05/27 15:47