kaggleのデータを用いてplotlyで可視化してみた

##はじめに##
この記事ではpython初学者がデータの可視化の手法としてplotlyを使い、様々な形式で可視化する過程を記事にしたものです。
自分なりの理解で進めているため間違っているところありましたら指摘してもらえますとありがたいです。

##データの取得##
```python 
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from IPython.display import HTML,display
from plotly.subplots import make_subplots

data = pd.read_csv('../input/videogamesales/vgsales.csv')
```
今回はkaggleのVideo Game Salesというデータセットを使っていきます。

```python
data.info()
```
.info()でデータの中身が簡単に見れるのでおすすめです。
![スクリーンショット 2021-04-05 11.20.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/2f525cbe-a983-fdbe-002c-0d268e2cecfd.png)

```python
data = data.dropna().reset_index(drop=True)
```
NaN値の削除、indexの振りなおし

```python
data.head(10)
```
![スクリーンショット 2021-04-07 11.48.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/6ba545af-a04a-898a-b496-ef64b440eda2.png)


```python
data.describe()
```
.describe()で統計量の確認ができます。
![スクリーンショット 2021-04-05 11.32.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/710e0ce1-6166-2fc5-da8f-37ca1073ce7e.png)

```python
data.corr()
```
.corr()で相関係数が確認できます。
![スクリーンショット 2021-04-05 11.32.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/2764b39c-6d2a-d3bf-36c1-e1afb9a02828.png)
0.7~1.0　かなり強い正の相関がある
0.4~0.7　正の相関がある
0.2~0.4　弱い正の相関がある
-0.2~0~0.2　ほとんど相関がない
-0.4~ -0.2　弱い負の相関がある
-0.7~ -0.4　負の相関がある
-1.0~ -0.7　かなり強い負の相関がある

##折れ線グラフ##

```python
data_n = data.query('Publisher=="Nintendo"', engine='python')
data_n.head()
```
PublisherがNintendoの物だけ抽出します。

```python
new_data = data_n.groupby(data_n['Year'])[['Publisher']].count().rename(columns={'Publisher':'Nintendo'})
```
カラム名のPublisherをNintendoに変更
Yearでグループ化してNintendoの数を返す

```python
fig = px.line(new_data, height=400, width=800, title='Number of Nintendo releases by year')
fig.show()

#本来はpx.line(df, x='', y='')みたいに指定
```
![スクリーンショット 2021-04-05 16.20.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/68a31cb5-ae6c-2b36-1da2-f46eefe40613.png)

##円グラフ##
```python
pub_100 = data[:100].groupby(data['Publisher'])[['Rank']].count()
```

```python
fig = px.pie(pub_100, names=pub_100.index, values='Rank', title='top100 publishers')
fig.update_traces(pull=[], textinfo="percent+label")
fig.show()
#fig.update_tracesにpull=[ , , , , ]を指定すると指定した数字で間隔が空く
```
![スクリーンショット 2021-04-06 11.28.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/982a739e-29d3-c5ca-8d0d-e786c375980d.png)
売上TOP１００のゲーム販売会社の割合を円グラフにしたものです。任天堂が圧倒的ですね。

```python
pub_100 = data[:100].groupby(data['Publisher'])[['Rank']].count()
fig = px.pie(pub_100, names=pub_100.index, values='Rank', title='top100 publishers')
fig.update_traces(pull=[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1], textinfo="percent+label")
fig.show()
```
↓pull指定
![スクリーンショット 2021-04-06 11.30.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/cfa8c537-37ac-3cbe-ea4b-d70a38453d20.png)

##ヒストグラム##

```python
fig = px.histogram(data['Year'], x='Year',template='plotly_white', color_discrete_sequence=["rgb(127,232,186)"])
fig.show()
```
color_discrete_sequence=["rgb( , , )"]でグラフ色を指定
![スクリーンショット 2021-04-05 17.41.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/18973e86-595a-f451-ed34-50af925007db.png)

##棒グラフ##
```python
pub_rank = data.groupby(data['Platform'])[['Rank']].count().rename(columns={'Rank':'counts'}).sort_values('counts', ascending=False)
```

```python
fig = px.bar(pub_rank, x=pub_rank.index, y='counts', color='counts', color_continuous_scale=['rgba(17, 211, 122, 0.6)', 'rgba(17, 141, 171, 0.6)'])
fig.show()
```
![スクリーンショット 2021-04-06 14.46.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/dd7c7f7f-2dd9-6095-1552-21fcb6ec4288.png)


##共通項目（引数）##
```python
height=400 #グラフの高さ
width=800 #グラフの横幅
template=' ' #グラフの背景
color_discrete_sequence=["rgb( , , )"] #グラフの色
title=' ' #グラフのタイトル名
```

##棒グラフ＋折れ線グラフ##
```python
yearcount = data.groupby(data['Year'])[['Rank']].count().rename(columns={'Rank':'counts'})
yearsales = data.groupby(data['Year'])[['Global_Sales']].sum()
```

```python
fig = make_subplots(specs=[[{"secondary_y": True}]])

fig.add_trace(
    go.Bar(x=yearcount.index, y=yearcount['counts'], name='counts'),
    secondary_y=False
)

fig.add_trace(
    go.Scatter(x=yearsales.index, y=yearsales['Global_Sales'], name='Global_Sales'),
    secondary_y=True
)
fig.update_xaxes(title_text='Year')
fig.update_yaxes(title_text='Yearcounts', secondary_y=False)
fig.update_yaxes(title_text='Global_sales', secondary_y=True)

fig.show()

```
![スクリーンショット 2021-04-06 12.04.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1056096/45c49863-4f75-ec69-e802-db8f1caa3324.png)

##まとめ##
今回は基本的なグラフの実装だったので今後は統計量を用いて色んな形で可視化していければと思っています。