2016-11-06 3 views
1

テーブルをウェブサイトから取り出し、それをテーブルではなくグラフに変換することは可能です(簡単な方法です)?グラフをテーブルに入れる(美しいPythonで)

ここでコードはテーブルをテーブルに抽出するコードです。

あなたはパンダreadhtml機能を使用することができるウェブサイト

import urllib2 

#specify the url 
wiki = "https://en.wikipedia.org/wiki/List_of_state_and_union_territory_capitals_in_India" 

#Query the website and return the html to the variable 'page' 
page = urllib2.urlopen(wiki) 


#import the Beautiful soup functions to parse the data returned from the website 
from bs4 import BeautifulSoup 


#Parse the html in the 'page' variable, and store it in Beautiful Soup format 
soup = BeautifulSoup(page) 



all_tables=soup.find_all('table') 


right_table=soup.find('table', class_='wikitable sortable plainrowheaders') 
right_table 





#Generate lists 
A=[] 
B=[] 
C=[] 
D=[] 
E=[] 
F=[] 
G=[] 
for row in right_table.findAll("tr"): 
    cells = row.findAll('td') 
    states=row.findAll('th') #To store second column data 
    if len(cells)==6: #Only extract table body not heading 
     A.append(cells[0].find(text=True)) 
     B.append(states[0].find(text=True)) 
     C.append(cells[1].find(text=True)) 
     D.append(cells[2].find(text=True)) 
     E.append(cells[3].find(text=True)) 
     F.append(cells[4].find(text=True)) 
     G.append(cells[5].find(text=True)) 

#import pandas to convert list to data frame 
import pandas as pd 
df=pd.DataFrame(A,columns=['Number']) 
df['State/UT']=B 
df['Admin_Capital']=C 
df['Legislative_Capital']=D 
df['Judiciary_Capital']=E 
df['Year_Capital']=F 
df['Former_Capital']=G 
df 
+0

?いくつかのプロットを意味しますか? pandasにはプロットする機能があります。ドキュメントをチェックしてください。 – furas

+0

はい簡​​単なプロットです。 –

+0

'df.plot()'? 'pandas'は' matplotlib'を使用していますので、 'matplotlib'のドキュメンテーションでもっと見つけることができます。 – furas

答えて

0

あなたはDataFrame.plotで(WebページのすべてのテーブルからDataFramesread_htmlリターンlist[1]read_htmlを使用し、第二のテーブルを選択することができますどのようなグラフ

df = pd.read_html('https://en.wikipedia.org/wiki/List_of_state_and_union_territory_capitals_in_India', header=0, index_col=0)[1] 
print (df) 

import matplotlib.pyplot as plt 
#there are 2 values of year, if need first add [0] if secind add [1] after split() 
df.loc[2, 'Year capital was established'] = df.loc[2, 'Year capital was established'].split()[0] 
df.loc[21, 'Year capital was established'] = df.loc[21, 'Year capital was established'].split()[0] 
#convert to number years 
df['Year capital was established'] = df['Year capital was established'].astype(int) 
df.plot(x='Judiciary capitals', y='Year capital was established') 
plt.show() 

graph

+0

これは完璧な答えです。 df.loc [2、df.loc [21これらの数字はどうやって取得しましたか? –

+0

良い質問です。 1つのセルに複数年いるhtmlページのチェックテーブルが簡単です。より一般的な解決策は、エラー= 'coerce'を使用するto_numeric関数を使用することです.Nanを数値valusで返し、isnull関数でindecesをチェックできます。 index: – jezrael

+0

これは、感謝の意を表します。Mr jezrael(y)のように動作します。 –

0

を照会するために使用されるライブラリをインポートし、あなただけのいくつかの良い数値データ(以下スニペットの1を参照)を持つテーブルを必要としています。その後、plot関数を使用して、あなたは良い出発点を持っています。

import pandas as pd 
import matplotlib.pyplot as plt 
df = pd.read_html('https://en.wikipedia.org/wiki/List_of_U.S._states_and_territories_by_area', header=0, index_col=0, skiprows=1)[1] 
df.plot(x='sq mi', y='sq mi.2', kind='scatter') 
plt.xlabel('Total area [sq mi]') 
plt.ylabel('Water [sq mi]') 
plt.show() 
+0

Thatsも私にとって非常に明確な例です。新しい初心者の皆さんに感謝します。Maximilian Peters(y) –

関連する問題