Spaces:
Runtime error
Runtime error
test commit
Browse files- .gitattributes +0 -35
- Overall.py +6 -0
- README.md +52 -12
- module/__custom__.py +379 -0
- module/__pycache__/__custom30__.cpython-310.pyc +0 -0
- module/__pycache__/__custom__.cpython-310.pyc +0 -0
- module/__pycache__/__home__.cpython-310.pyc +0 -0
- module/__pycache__/__homemax__.cpython-310.pyc +0 -0
- module/__pycache__/__selectpage__.cpython-310.pyc +0 -0
- module/__selectpage__.py +17 -0
- notebook/.ipynb_checkpoints/03_joined_110623-checkpoint.ipynb +0 -0
- notebook/.ipynb_checkpoints/04_pageNames_112923-checkpoint.ipynb +77 -0
- notebook/.ipynb_checkpoints/Untitled-checkpoint.ipynb +6 -0
- notebook/00_test_110323.ipynb +0 -0
- notebook/01_test_110323.ipynb +0 -0
- notebook/02_joined_110523.ipynb +0 -0
- notebook/03_joined_110623.ipynb +0 -0
- notebook/04_pageNames_112923.ipynb +1043 -0
- pages/01 Category.py +10 -0
- pages/02 Genre.py +12 -0
- pages/03 DLC_Counts.py +18 -0
- pages/04 Price.py +19 -0
- pages/05 Age_Restriction.py +7 -0
- pages/06 Settings.py +12 -0
- pages/07 OS.py +12 -0
- pages/08 Publisher.py +8 -0
- pages/09 Developer.py +8 -0
- requirements.txt +6 -0
.gitattributes
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Overall.py
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "Overall"
|
6 |
+
exec_page_home(theme)
|
README.md
CHANGED
@@ -1,12 +1,52 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Predictive Analysis and Feature Importance of Successful Video Games
|
2 |
+
|
3 |
+
## Team Details:
|
4 |
+
**Team:** KAP Team
|
5 |
+
**Members:**
|
6 |
+
- Artem Guz
|
7 |
+
- Kevin Dsouza
|
8 |
+
- Peter Wong
|
9 |
+
|
10 |
+
## Overview:
|
11 |
+
**Framework:** streamlit
|
12 |
+
|
13 |
+
**Objective:**
|
14 |
+
To analyze various video game datasets to determine the characteristics of successful games and develop a Machine Learning model that can predict the success of a video game based on its features, primarily focusing on Genre.
|
15 |
+
|
16 |
+
**Datasets:**
|
17 |
+
- Popular Video Games
|
18 |
+
- Video Games Data
|
19 |
+
- Best Year for Video Games
|
20 |
+
|
21 |
+
## Project Outline:
|
22 |
+
Depending on our final datasets, we will extract and compare the various variables, such as Genre, Developer, Release Date, and compare with variables commonly used to measure success for video games. This would be Total Sales, Region Sales, Ratings and more. Then, we will use this data to develop a model to determine if a game would be successful based on user input and idea.
|
23 |
+
|
24 |
+
## Practical Application:
|
25 |
+
This project can provide valuable insights to game developers by highlighting the features and genres that are most likely to yield successful games, allowing them to make more informed decisions during the game development process.
|
26 |
+
|
27 |
+
### 1.0 Overall Concept:
|
28 |
+
Depending on our final datasets, we will extract and compare the various variables, such as Genre, Developer, Release Date, and compare with variables commonly used to measure success for video games. This would be Total Sales, Region Sales, Ratings and more. Then, we will use this data to develop a model to determine if a game would be successful based on user input and idea.
|
29 |
+
|
30 |
+
### 1.0.1 Elevator Pitch:
|
31 |
+
To analyze various video game datasets to determine the characteristics of successful games and develop a Machine Learning model that can predict the success of a video game based on its features, primarily focusing on Genre.
|
32 |
+
|
33 |
+
### 1.0.2 Minimum Viable Product:
|
34 |
+
*Details to be added*
|
35 |
+
|
36 |
+
### 1.1 Group Members:
|
37 |
+
Since the group is just formed, we are still in the progress of finding position.
|
38 |
+
|
39 |
+
**Group leader:** Artem Guz
|
40 |
+
|
41 |
+
**Members:**
|
42 |
+
- **Artem Guz | College of Staten Island**
|
43 |
+
- *Primary role:* Data collector and cleaner
|
44 |
+
- *Secondary role:* Model integration and testing
|
45 |
+
|
46 |
+
- **Kevin Dsouza | College of Staten Island**
|
47 |
+
- *Primary role:* Data collector and cleaner
|
48 |
+
- *Secondary role:* Model integration and testing
|
49 |
+
|
50 |
+
- **Peter Wong | Brooklyn College**
|
51 |
+
- *Primary role:* Data collector and cleaner
|
52 |
+
- *Secondary role:* Documentation and Documentation Review
|
module/__custom__.py
ADDED
@@ -0,0 +1,379 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
########## LIBRARIES ##########
|
2 |
+
import streamlit as st
|
3 |
+
import pandas as pd
|
4 |
+
import numpy as np
|
5 |
+
import plotly.graph_objects as go
|
6 |
+
from streamlit_searchbox import st_searchbox
|
7 |
+
from module.__selectpage__ import st_page_selectbox
|
8 |
+
|
9 |
+
########## DATASET ##########
|
10 |
+
df = pd.read_csv('./data/join_02.csv')
|
11 |
+
df['date'] = pd.to_datetime(df['date']) # Format preparation
|
12 |
+
df['release_date'] = pd.to_datetime(df['release_date'])
|
13 |
+
df['avg_peak_perc'] = df['avg_peak_perc'].str.rstrip('%').astype('float')
|
14 |
+
df = df.dropna()
|
15 |
+
|
16 |
+
|
17 |
+
########## FUNCTION ##########
|
18 |
+
##### Adding single-player feature
|
19 |
+
def add_opp_features(genre):
|
20 |
+
df[genre[0]] = (df[genre[1]]==0)*1
|
21 |
+
|
22 |
+
##### Adding feature depending on range of a base feature
|
23 |
+
"""Scenario of using this function
|
24 |
+
For example, if we want a feature of price
|
25 |
+
between $10 to $30
|
26 |
+
"""
|
27 |
+
def add_range_features(arg):
|
28 |
+
lower = arg[0]; upper = arg[1]
|
29 |
+
name = arg[2]; genre = arg[3]
|
30 |
+
|
31 |
+
condition = (df[genre]>=lower) & (df[genre]<upper)
|
32 |
+
df[name] = condition*1
|
33 |
+
|
34 |
+
# Returning title version of feature name
|
35 |
+
def name(target):
|
36 |
+
return target.replace('_', ' ').title()
|
37 |
+
|
38 |
+
##### Searchbox Functions
|
39 |
+
# Appending favorite game selected by user to filtered list
|
40 |
+
"""use after search box
|
41 |
+
"""
|
42 |
+
def add_top_games(top_games, favorite_game, ranges, df_ax):
|
43 |
+
if favorite_game in top_games:
|
44 |
+
top_games = df_ax.gamename.unique()[ranges[0]-1:ranges[1]+1]
|
45 |
+
elif favorite_game!=None:
|
46 |
+
top_games = np.append(top_games, favorite_game)
|
47 |
+
return top_games
|
48 |
+
|
49 |
+
# Linear search over all gamenames
|
50 |
+
def search(target):
|
51 |
+
gamenames = df['gamename'].unique() # all unique gamenames
|
52 |
+
result = []
|
53 |
+
for gamename in gamenames:
|
54 |
+
if target.lower() in gamename.lower(): # games that contains the searching keyword
|
55 |
+
result.append(gamename)
|
56 |
+
return result
|
57 |
+
|
58 |
+
# Streamlit search box
|
59 |
+
def searchbox():
|
60 |
+
selected_game = st_searchbox(
|
61 |
+
search_function=search,
|
62 |
+
key="gamename_searchbox",
|
63 |
+
default_options=None,
|
64 |
+
placeholder="Compare with your Favorite Game...",
|
65 |
+
)
|
66 |
+
return selected_game
|
67 |
+
|
68 |
+
|
69 |
+
########## PAGE SECTION ##########
|
70 |
+
# Datafram Section
|
71 |
+
"""Dataframe
|
72 |
+
together with Title
|
73 |
+
"""
|
74 |
+
def dfbox(ax_name, y_name, df_ax):
|
75 |
+
title = f"1.1 Dataset of :blue[{ax_name}] Games Sorted by :blue[{y_name}]:"
|
76 |
+
st.subheader(title)
|
77 |
+
st.dataframe(df_ax)
|
78 |
+
|
79 |
+
# plot 1 Section
|
80 |
+
"""Plot contains the top ranked games
|
81 |
+
based on the selected features,
|
82 |
+
within selected genre
|
83 |
+
"""
|
84 |
+
def plot1_box(ax, y, order_name, ranges, df_ax, top_games):
|
85 |
+
ax_name = name(ax) # formating strings
|
86 |
+
y_name = name(y) # formeting strings
|
87 |
+
|
88 |
+
title = f"1.3 Rank {ranges[0]} to {ranges[1]} :blue[{ax_name}] Games with the :red[{order_name}] :blue[{y_name}]"
|
89 |
+
st.subheader(title)
|
90 |
+
|
91 |
+
# Plot 1 - select box
|
92 |
+
favorite_game = searchbox() # search box to add a user favorite game on Plot 1
|
93 |
+
top_games = add_top_games(top_games, favorite_game, ranges, df_ax)
|
94 |
+
options = top_games
|
95 |
+
selected_options = st.multiselect('Select Video Games', options)
|
96 |
+
|
97 |
+
# Plot 1
|
98 |
+
title_names = ','.join(selected_options)
|
99 |
+
plot_title = f"Monthly {y_name} of {title_names} Over Time"
|
100 |
+
gb = df.sort_values(by='date')
|
101 |
+
gb_list = {game: gb[gb["gamename"] == game] for game in selected_options}
|
102 |
+
|
103 |
+
fig_1 = go.Figure()
|
104 |
+
fig_1.update_layout(
|
105 |
+
title = plot_title,
|
106 |
+
xaxis_title = 'Date',
|
107 |
+
yaxis_title = y_name,
|
108 |
+
)
|
109 |
+
for game, gb in gb_list.items():
|
110 |
+
fig_1 = fig_1.add_trace(go.Scatter(x=gb["date"], y=gb[y], name=game, mode='lines'))
|
111 |
+
st.plotly_chart(fig_1)
|
112 |
+
|
113 |
+
def plot2_box(theme, y, genres, df_bx):
|
114 |
+
y_name = name(y)
|
115 |
+
|
116 |
+
title = f"2.0 Comparison Among :blue[{theme}] on Monthly :blue[{y_name}]:"
|
117 |
+
st.subheader(title)
|
118 |
+
|
119 |
+
# Plot 2 - Multiselect box
|
120 |
+
options = genres
|
121 |
+
selected_options = st.multiselect('Select Comparing Categories', options)
|
122 |
+
selected_names = ','.join(selected_options) # formating titles
|
123 |
+
plot_title = f"Monthly {y_name} of {selected_names} Over Time"
|
124 |
+
|
125 |
+
|
126 |
+
# Plot 2
|
127 |
+
|
128 |
+
# Tab 1 - Mean Line Plot
|
129 |
+
gb = df_bx.sort_values(by='date') # New copy of df
|
130 |
+
mean_list = {genre: gb[gb[genre] == 1].groupby('date').mean(y).reset_index() for genre in selected_options}
|
131 |
+
|
132 |
+
fig_mean = go.Figure()
|
133 |
+
for genre, gb in mean_list.items():
|
134 |
+
fig_mean = fig_mean.add_trace(go.Scatter(x=gb['date'], y=gb[y], name=genre, mode='lines'))
|
135 |
+
fig_mean.update_layout(
|
136 |
+
title = 'Mean of ' + plot_title,
|
137 |
+
xaxis_title = 'Date',
|
138 |
+
yaxis_title = 'Mean of '+y_name,
|
139 |
+
)
|
140 |
+
|
141 |
+
|
142 |
+
# Tab 2 - Sum Line Plot
|
143 |
+
gb = df_bx.sort_values(by='date')
|
144 |
+
sum_list = {genre: gb[gb[genre] == 1].groupby('date').sum(y).reset_index() for genre in selected_options}
|
145 |
+
|
146 |
+
fig_sum = go.Figure()
|
147 |
+
for genre, gb in sum_list.items():
|
148 |
+
fig_sum = fig_sum.add_trace(go.Scatter(x=gb['date'], y=gb[y], name=genre))
|
149 |
+
fig_sum.update_layout(
|
150 |
+
title = 'Sum of ' + plot_title,
|
151 |
+
xaxis_title='Date',
|
152 |
+
yaxis_title='Sum of '+y_name,
|
153 |
+
)
|
154 |
+
|
155 |
+
# Tab 3 - Scatter / Marker Plot
|
156 |
+
gb = df_bx.sort_values(by='date')
|
157 |
+
gb_list = {genre: gb[gb[genre] == 1] for genre in selected_options}
|
158 |
+
|
159 |
+
fig_sc = go.Figure()
|
160 |
+
for genre, gb in gb_list.items():
|
161 |
+
fig_sc = fig_sc.add_trace(go.Scatter(x=gb["date"], y=gb[y], name=genre, mode='markers'))
|
162 |
+
fig_sc.update_traces(
|
163 |
+
marker=dict(size=4, opacity=0.5)
|
164 |
+
)
|
165 |
+
fig_sc.update_layout(
|
166 |
+
title = plot_title,
|
167 |
+
xaxis_title='Date',
|
168 |
+
yaxis_title=y_name,
|
169 |
+
)
|
170 |
+
|
171 |
+
|
172 |
+
# Showing Plot
|
173 |
+
tab1, tab2, tab3 = st.tabs(['Line Plot', 'Sum Plot', 'Scatter Plot'])
|
174 |
+
with tab1:
|
175 |
+
st.plotly_chart(fig_mean)
|
176 |
+
with tab2:
|
177 |
+
st.plotly_chart(fig_sum)
|
178 |
+
with tab3:
|
179 |
+
st.plotly_chart(fig_sc)
|
180 |
+
|
181 |
+
|
182 |
+
##### Execute Page #####
|
183 |
+
def exec_page(emoji, theme, page_genres):
|
184 |
+
# Select Page
|
185 |
+
st_page_selectbox(theme)
|
186 |
+
|
187 |
+
# Header
|
188 |
+
st.header(emoji)
|
189 |
+
st.title(f"Customized Plot on :blue[{theme}]")
|
190 |
+
|
191 |
+
##### FILTER #####
|
192 |
+
# Featuer for both axis
|
193 |
+
features = ['avg', 'gain', 'peak', 'avg_peak_perc']
|
194 |
+
features += ['metacritic_score', 'positive', 'negative']
|
195 |
+
genres = page_genres
|
196 |
+
##################
|
197 |
+
|
198 |
+
|
199 |
+
# User Menu
|
200 |
+
order = st.toggle(label='Rank the Worst Games', value=False) # descending order toggle switch
|
201 |
+
left_col, right_col = st.columns(2) # Columns dividing
|
202 |
+
with left_col: y = st.selectbox("Select a Feature (y-axis)", features) # feature select box (y axis of Plots)
|
203 |
+
with right_col: ax = st.selectbox("Select a Genre (legend)", genres) # category select box (filtering game basse on genre)
|
204 |
+
|
205 |
+
order_name='Worst' if order else 'Highest' # string formating
|
206 |
+
y_name = name(y) # string of names that would be used on Plot title
|
207 |
+
ax_name = name(ax)
|
208 |
+
|
209 |
+
# Data - sorting and filtering
|
210 |
+
df_ax = df[df[ax]==1]
|
211 |
+
df_ax = df_ax[['gamename', 'date', y, ax]].sort_values(by=y, ascending=order).reset_index() # Data for Plot 1
|
212 |
+
df_bx = df[['gamename', 'date', y]+genres].sort_values(by=y, ascending=order).reset_index() # Data for Plot 2
|
213 |
+
|
214 |
+
|
215 |
+
# Slider
|
216 |
+
max = df_ax.gamename.unique().tolist() # max number of games
|
217 |
+
max = len(max)-1
|
218 |
+
ranges = st.slider(
|
219 |
+
label=f'Select range of the {order_name.lower()} games',
|
220 |
+
value = (1, 5),
|
221 |
+
min_value=1, max_value=30,
|
222 |
+
# min_value=1, max_value=max,
|
223 |
+
)
|
224 |
+
top_games = df_ax.gamename.unique()[ranges[0]-1:ranges[1]]
|
225 |
+
|
226 |
+
|
227 |
+
# Dataframe preview
|
228 |
+
dfbox(ax_name, y_name, df_ax)
|
229 |
+
|
230 |
+
##### PLOT 1 #####
|
231 |
+
# Plot 1 - markdown
|
232 |
+
st.markdown("""***""")
|
233 |
+
plot1_box(ax, y, order_name, ranges, df_ax, top_games)
|
234 |
+
|
235 |
+
##### PLOT 2 #####
|
236 |
+
# Plot 2 - markdown
|
237 |
+
st.markdown("""***""")
|
238 |
+
plot2_box(theme, y, genres, df_bx)
|
239 |
+
|
240 |
+
##### HOME PAGE #####
|
241 |
+
def exec_page_home(theme):
|
242 |
+
st_page_selectbox(theme)
|
243 |
+
|
244 |
+
# Header
|
245 |
+
st.header(f"👋 ForcaSteam")
|
246 |
+
st.title("Customized Plot on :blue[General Features]")
|
247 |
+
|
248 |
+
##### FILTER #####
|
249 |
+
# Featuer for both axis
|
250 |
+
features = ['avg', 'gain', 'peak', 'avg_peak_perc']
|
251 |
+
genres = features
|
252 |
+
|
253 |
+
|
254 |
+
left_col, right_col = st.columns(2)
|
255 |
+
order = st.toggle(label='Rank the Worst Games', value=False) # descending order toggle switch
|
256 |
+
y = st.selectbox("Select a Feature (y-axis)", features) # feature select box
|
257 |
+
order_name='Worst' if order else 'Highest' # string formating
|
258 |
+
y_name = name(y)
|
259 |
+
|
260 |
+
# Data - sorting and filtering
|
261 |
+
df_ax = df[['gamename', 'date', y]].sort_values(by=y, ascending=order).reset_index() # Data - Plot 1
|
262 |
+
# df_bx = df[['gamename', 'date']+features].sort_values(by=y, ascending=order).reset_index() # Data - Plot 2
|
263 |
+
|
264 |
+
# Slider
|
265 |
+
max = df_ax.gamename.unique().tolist()
|
266 |
+
max = len(max)-1
|
267 |
+
ranges = st.slider(
|
268 |
+
label=f'Select range of the {order_name.lower()} games',
|
269 |
+
value = (1, 5),
|
270 |
+
min_value=1, max_value=30,
|
271 |
+
# min_value=1, max_value=max,
|
272 |
+
)
|
273 |
+
top_games = df_ax.gamename.unique()[ranges[0]-1:ranges[1]]
|
274 |
+
|
275 |
+
# Dataframe preview
|
276 |
+
dfbox("", y_name, df_ax)
|
277 |
+
|
278 |
+
|
279 |
+
##### PLOT 1 #####
|
280 |
+
# Plot 1 - markdown
|
281 |
+
st.markdown("""***""")
|
282 |
+
title = f"1.3 Rank {ranges[0]} to {ranges[1]} Games with the Overall :red[{order_name}] :blue[{y_name}]"
|
283 |
+
st.subheader(title)
|
284 |
+
|
285 |
+
|
286 |
+
# Plot 1 - select box
|
287 |
+
favorite_game = searchbox() # search box to add a user favorite game on Plot 1
|
288 |
+
top_games = add_top_games(top_games, favorite_game, ranges, df_ax)
|
289 |
+
options = top_games
|
290 |
+
selected_options = st.multiselect('Select Video Games', options)
|
291 |
+
|
292 |
+
# Plot 1
|
293 |
+
title_names = ','.join(selected_options)
|
294 |
+
plot_title = f"Monthly {y_name} of {title_names} Over Time"
|
295 |
+
gb = df_ax.sort_values(by='date')
|
296 |
+
gb_list = {game: gb[gb["gamename"] == game] for game in selected_options}
|
297 |
+
|
298 |
+
fig_1 = go.Figure()
|
299 |
+
fig_1.update_layout(
|
300 |
+
title = plot_title,
|
301 |
+
xaxis_title = 'Date',
|
302 |
+
yaxis_title = y_name,
|
303 |
+
)
|
304 |
+
for game, gb in gb_list.items():
|
305 |
+
fig_1 = fig_1.add_trace(go.Scatter(x=gb["date"], y=gb[y], name=game, mode='lines'))
|
306 |
+
st.plotly_chart(fig_1)
|
307 |
+
|
308 |
+
##### PUBLISHERS PAGE #####
|
309 |
+
def exec_page_pub(emoji, theme, main_genre):
|
310 |
+
st_page_selectbox(theme)
|
311 |
+
|
312 |
+
# Header
|
313 |
+
st.header(emoji)
|
314 |
+
st.title(f"Customized Plot on :blue[{theme}]")
|
315 |
+
|
316 |
+
##### FILTER #####
|
317 |
+
# Featuer for both axis
|
318 |
+
features = ['avg', 'gain', 'peak', 'avg_peak_perc']
|
319 |
+
features += ['metacritic_score', 'positive', 'negative']
|
320 |
+
genres = []
|
321 |
+
|
322 |
+
left_col, right_col = st.columns(2)
|
323 |
+
order = st.toggle(label='Find the Worst Games', value=False) # descending order toggle switch
|
324 |
+
with left_col:
|
325 |
+
y = st.selectbox("Select a Feature", features) # feature select box
|
326 |
+
with right_col:
|
327 |
+
if (main_genre=='publishers'):
|
328 |
+
genres = df.sort_values(by=y, ascending=order).publishers.unique()[0:5].tolist()
|
329 |
+
elif (main_genre=='developers'):
|
330 |
+
genres = df.sort_values(by=y, ascending=order).developers.unique()[0:5].tolist()
|
331 |
+
|
332 |
+
for genre in genres:
|
333 |
+
df[genre] = (df[main_genre]==genre)*1
|
334 |
+
ax = st.selectbox("Select a Category", genres) # category select box
|
335 |
+
order_name='Worst' if order else 'Highest' # string formating
|
336 |
+
y_name = y.replace('_', ' ').title()
|
337 |
+
ax_name = ax.title().replace('_', ' ')
|
338 |
+
|
339 |
+
# ### adding best publisher features feature ###
|
340 |
+
|
341 |
+
# Data - sorting and filtering
|
342 |
+
df_ax = df[df[ax]==1]
|
343 |
+
df_ax = df_ax[['gamename', 'date', y, ax]].sort_values(by=y, ascending=order).reset_index() # Data - Plot 1
|
344 |
+
df_bx = df[['gamename', 'date', y]+genres].sort_values(by=y, ascending=order).reset_index() # Data - Plot 2
|
345 |
+
|
346 |
+
# Slider
|
347 |
+
max = df_ax.gamename.unique().tolist()
|
348 |
+
max = len(max)
|
349 |
+
if(max < 2):value_r = 0
|
350 |
+
elif(max > 4):value_r = 5
|
351 |
+
else: value_r = max
|
352 |
+
|
353 |
+
ranges = st.slider(
|
354 |
+
label=f'Select range of the {order_name.lower()} games',
|
355 |
+
value = (1, value_r),
|
356 |
+
# min_value=0, max_value=30,
|
357 |
+
min_value=1, max_value=max,
|
358 |
+
)
|
359 |
+
top_games = df_ax.gamename.unique()[ranges[0]-1:ranges[1]]
|
360 |
+
|
361 |
+
# Dataframe preview
|
362 |
+
dfbox(ax_name, y_name, df_ax)
|
363 |
+
|
364 |
+
title = f"1.2 {ranges[1]} :blue[{ax_name}] Games with the :red[{order_name}] Monthly :blue[{y_name}]:"
|
365 |
+
st.subheader(title)
|
366 |
+
st.write(top_games)
|
367 |
+
|
368 |
+
|
369 |
+
|
370 |
+
##### PLOT 1 #####
|
371 |
+
# Plot 1 - markdown
|
372 |
+
st.markdown("""***""")
|
373 |
+
plot1_box(ax, y, order_name, ranges, df_ax, top_games)
|
374 |
+
|
375 |
+
|
376 |
+
##### PLOT 2 #####
|
377 |
+
# Plot 2 - markdown
|
378 |
+
st.markdown("""***""")
|
379 |
+
plot2_box(theme, y, genres, df_bx)
|
module/__pycache__/__custom30__.cpython-310.pyc
ADDED
Binary file (8.81 kB). View file
|
|
module/__pycache__/__custom__.cpython-310.pyc
ADDED
Binary file (8.58 kB). View file
|
|
module/__pycache__/__home__.cpython-310.pyc
ADDED
Binary file (2.6 kB). View file
|
|
module/__pycache__/__homemax__.cpython-310.pyc
ADDED
Binary file (2.6 kB). View file
|
|
module/__pycache__/__selectpage__.cpython-310.pyc
ADDED
Binary file (704 Bytes). View file
|
|
module/__selectpage__.py
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
from streamlit_extras.switch_page_button import switch_page
|
3 |
+
import os
|
4 |
+
|
5 |
+
pages = ["Overall"]
|
6 |
+
|
7 |
+
files = os.listdir('.\pages')
|
8 |
+
for name in files:
|
9 |
+
name = name.split()[1].replace('.py', '').replace('_', ' ')
|
10 |
+
pages.append(name)
|
11 |
+
|
12 |
+
|
13 |
+
def st_page_selectbox(current_page):
|
14 |
+
current_index = pages.index(current_page)
|
15 |
+
selected_page = st.selectbox("Select a category", pages, index=current_index)
|
16 |
+
if selected_page != current_page:
|
17 |
+
switch_page(selected_page)
|
notebook/.ipynb_checkpoints/03_joined_110623-checkpoint.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
notebook/.ipynb_checkpoints/04_pageNames_112923-checkpoint.ipynb
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 2,
|
6 |
+
"id": "7c7ced02",
|
7 |
+
"metadata": {},
|
8 |
+
"outputs": [],
|
9 |
+
"source": [
|
10 |
+
"import os"
|
11 |
+
]
|
12 |
+
},
|
13 |
+
{
|
14 |
+
"cell_type": "code",
|
15 |
+
"execution_count": 7,
|
16 |
+
"id": "165abc6d",
|
17 |
+
"metadata": {},
|
18 |
+
"outputs": [
|
19 |
+
{
|
20 |
+
"data": {
|
21 |
+
"text/plain": [
|
22 |
+
"['1 Home_max_slidebar.py',\n",
|
23 |
+
" '10 Publisher.py',\n",
|
24 |
+
" '11 ForcaSteam.py',\n",
|
25 |
+
" '12 Tensorflow.py',\n",
|
26 |
+
" '13 switch_page_text.py',\n",
|
27 |
+
" '2 Category.py',\n",
|
28 |
+
" '3 Genre.py',\n",
|
29 |
+
" '4 DLC_Counts.py',\n",
|
30 |
+
" '5 Price.py',\n",
|
31 |
+
" '6 Age_Restriction.py',\n",
|
32 |
+
" '7 Settings.py',\n",
|
33 |
+
" '8 OS.py',\n",
|
34 |
+
" '9 Developer.py']"
|
35 |
+
]
|
36 |
+
},
|
37 |
+
"execution_count": 7,
|
38 |
+
"metadata": {},
|
39 |
+
"output_type": "execute_result"
|
40 |
+
}
|
41 |
+
],
|
42 |
+
"source": [
|
43 |
+
"# os.listdir('.\\pages')\n",
|
44 |
+
"os.listdir('..\\pages')"
|
45 |
+
]
|
46 |
+
},
|
47 |
+
{
|
48 |
+
"cell_type": "code",
|
49 |
+
"execution_count": null,
|
50 |
+
"id": "d7b8a756",
|
51 |
+
"metadata": {},
|
52 |
+
"outputs": [],
|
53 |
+
"source": []
|
54 |
+
}
|
55 |
+
],
|
56 |
+
"metadata": {
|
57 |
+
"kernelspec": {
|
58 |
+
"display_name": "Python 3 (ipykernel)",
|
59 |
+
"language": "python",
|
60 |
+
"name": "python3"
|
61 |
+
},
|
62 |
+
"language_info": {
|
63 |
+
"codemirror_mode": {
|
64 |
+
"name": "ipython",
|
65 |
+
"version": 3
|
66 |
+
},
|
67 |
+
"file_extension": ".py",
|
68 |
+
"mimetype": "text/x-python",
|
69 |
+
"name": "python",
|
70 |
+
"nbconvert_exporter": "python",
|
71 |
+
"pygments_lexer": "ipython3",
|
72 |
+
"version": "3.11.5"
|
73 |
+
}
|
74 |
+
},
|
75 |
+
"nbformat": 4,
|
76 |
+
"nbformat_minor": 5
|
77 |
+
}
|
notebook/.ipynb_checkpoints/Untitled-checkpoint.ipynb
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [],
|
3 |
+
"metadata": {},
|
4 |
+
"nbformat": 4,
|
5 |
+
"nbformat_minor": 5
|
6 |
+
}
|
notebook/00_test_110323.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
notebook/01_test_110323.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
notebook/02_joined_110523.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
notebook/03_joined_110623.ipynb
ADDED
The diff for this file is too large to render.
See raw diff
|
|
notebook/04_pageNames_112923.ipynb
ADDED
@@ -0,0 +1,1043 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"id": "12d5e6b1",
|
7 |
+
"metadata": {},
|
8 |
+
"outputs": [],
|
9 |
+
"source": [
|
10 |
+
"import os\n",
|
11 |
+
"import pandas as pd"
|
12 |
+
]
|
13 |
+
},
|
14 |
+
{
|
15 |
+
"cell_type": "code",
|
16 |
+
"execution_count": 27,
|
17 |
+
"id": "c1bf2ce1",
|
18 |
+
"metadata": {},
|
19 |
+
"outputs": [
|
20 |
+
{
|
21 |
+
"data": {
|
22 |
+
"text/plain": [
|
23 |
+
"['01 Home_max_slidebar.py',\n",
|
24 |
+
" '02 Category.py',\n",
|
25 |
+
" '03 Genre.py',\n",
|
26 |
+
" '04 DLC_Counts.py',\n",
|
27 |
+
" '05 Price.py',\n",
|
28 |
+
" '06 Age_Restriction.py',\n",
|
29 |
+
" '07 Settings.py',\n",
|
30 |
+
" '08 OS.py',\n",
|
31 |
+
" '09 Developer.py',\n",
|
32 |
+
" '10 Publisher.py',\n",
|
33 |
+
" '11 ForcaSteam.py',\n",
|
34 |
+
" '12 Tensorflow.py',\n",
|
35 |
+
" '13 switch_page_text.py']"
|
36 |
+
]
|
37 |
+
},
|
38 |
+
"execution_count": 27,
|
39 |
+
"metadata": {},
|
40 |
+
"output_type": "execute_result"
|
41 |
+
}
|
42 |
+
],
|
43 |
+
"source": [
|
44 |
+
"# os.listdir('.\\pages')\n",
|
45 |
+
"files = os.listdir('..\\pages')\n",
|
46 |
+
"files.sort()\n",
|
47 |
+
"files"
|
48 |
+
]
|
49 |
+
},
|
50 |
+
{
|
51 |
+
"cell_type": "code",
|
52 |
+
"execution_count": 20,
|
53 |
+
"id": "e7b90f67",
|
54 |
+
"metadata": {},
|
55 |
+
"outputs": [
|
56 |
+
{
|
57 |
+
"data": {
|
58 |
+
"text/plain": [
|
59 |
+
"['Home max slidebar',\n",
|
60 |
+
" 'Publisher',\n",
|
61 |
+
" 'ForcaSteam',\n",
|
62 |
+
" 'Tensorflow',\n",
|
63 |
+
" 'switch page text',\n",
|
64 |
+
" 'Category',\n",
|
65 |
+
" 'Genre',\n",
|
66 |
+
" 'DLC Counts',\n",
|
67 |
+
" 'Price',\n",
|
68 |
+
" 'Age Restriction',\n",
|
69 |
+
" 'Settings',\n",
|
70 |
+
" 'OS',\n",
|
71 |
+
" 'Developer']"
|
72 |
+
]
|
73 |
+
},
|
74 |
+
"execution_count": 20,
|
75 |
+
"metadata": {},
|
76 |
+
"output_type": "execute_result"
|
77 |
+
}
|
78 |
+
],
|
79 |
+
"source": [
|
80 |
+
"names = []\n",
|
81 |
+
"for name in files:\n",
|
82 |
+
" name = name.split()[1].replace('.py', '').replace('_', ' ')\n",
|
83 |
+
" names.append(name)\n",
|
84 |
+
" \n",
|
85 |
+
"names"
|
86 |
+
]
|
87 |
+
},
|
88 |
+
{
|
89 |
+
"cell_type": "code",
|
90 |
+
"execution_count": 24,
|
91 |
+
"id": "7372f9fc",
|
92 |
+
"metadata": {},
|
93 |
+
"outputs": [
|
94 |
+
{
|
95 |
+
"data": {
|
96 |
+
"text/plain": [
|
97 |
+
"'ipykernel_launcher.py'"
|
98 |
+
]
|
99 |
+
},
|
100 |
+
"execution_count": 24,
|
101 |
+
"metadata": {},
|
102 |
+
"output_type": "execute_result"
|
103 |
+
}
|
104 |
+
],
|
105 |
+
"source": [
|
106 |
+
"import sys\n",
|
107 |
+
"os.path.basename(sys.argv[0])"
|
108 |
+
]
|
109 |
+
},
|
110 |
+
{
|
111 |
+
"cell_type": "code",
|
112 |
+
"execution_count": 2,
|
113 |
+
"id": "59b468b7",
|
114 |
+
"metadata": {},
|
115 |
+
"outputs": [
|
116 |
+
{
|
117 |
+
"data": {
|
118 |
+
"text/html": [
|
119 |
+
"<div>\n",
|
120 |
+
"<style scoped>\n",
|
121 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
122 |
+
" vertical-align: middle;\n",
|
123 |
+
" }\n",
|
124 |
+
"\n",
|
125 |
+
" .dataframe tbody tr th {\n",
|
126 |
+
" vertical-align: top;\n",
|
127 |
+
" }\n",
|
128 |
+
"\n",
|
129 |
+
" .dataframe thead th {\n",
|
130 |
+
" text-align: right;\n",
|
131 |
+
" }\n",
|
132 |
+
"</style>\n",
|
133 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
134 |
+
" <thead>\n",
|
135 |
+
" <tr style=\"text-align: right;\">\n",
|
136 |
+
" <th></th>\n",
|
137 |
+
" <th>gamename</th>\n",
|
138 |
+
" <th>year</th>\n",
|
139 |
+
" <th>month</th>\n",
|
140 |
+
" <th>avg</th>\n",
|
141 |
+
" <th>gain</th>\n",
|
142 |
+
" <th>peak</th>\n",
|
143 |
+
" <th>avg_peak_perc</th>\n",
|
144 |
+
" <th>date</th>\n",
|
145 |
+
" <th>release_date</th>\n",
|
146 |
+
" <th>required_age</th>\n",
|
147 |
+
" <th>...</th>\n",
|
148 |
+
" <th>genre_sports</th>\n",
|
149 |
+
" <th>genre_racing</th>\n",
|
150 |
+
" <th>genre_rpg</th>\n",
|
151 |
+
" <th>genre_simulation</th>\n",
|
152 |
+
" <th>indie</th>\n",
|
153 |
+
" <th>full_audio</th>\n",
|
154 |
+
" <th>full_controller_support</th>\n",
|
155 |
+
" <th>age_0_plus</th>\n",
|
156 |
+
" <th>age_13_plus</th>\n",
|
157 |
+
" <th>age_18_plus</th>\n",
|
158 |
+
" </tr>\n",
|
159 |
+
" </thead>\n",
|
160 |
+
" <tbody>\n",
|
161 |
+
" <tr>\n",
|
162 |
+
" <th>0</th>\n",
|
163 |
+
" <td>100% Orange Juice</td>\n",
|
164 |
+
" <td>2021</td>\n",
|
165 |
+
" <td>February</td>\n",
|
166 |
+
" <td>278.67</td>\n",
|
167 |
+
" <td>-25.23</td>\n",
|
168 |
+
" <td>645</td>\n",
|
169 |
+
" <td>43.2047%</td>\n",
|
170 |
+
" <td>2021-02-01</td>\n",
|
171 |
+
" <td>2014-05-16</td>\n",
|
172 |
+
" <td>0</td>\n",
|
173 |
+
" <td>...</td>\n",
|
174 |
+
" <td>0</td>\n",
|
175 |
+
" <td>0</td>\n",
|
176 |
+
" <td>0</td>\n",
|
177 |
+
" <td>0</td>\n",
|
178 |
+
" <td>1</td>\n",
|
179 |
+
" <td>1</td>\n",
|
180 |
+
" <td>0</td>\n",
|
181 |
+
" <td>1</td>\n",
|
182 |
+
" <td>0</td>\n",
|
183 |
+
" <td>0</td>\n",
|
184 |
+
" </tr>\n",
|
185 |
+
" <tr>\n",
|
186 |
+
" <th>1</th>\n",
|
187 |
+
" <td>100% Orange Juice</td>\n",
|
188 |
+
" <td>2021</td>\n",
|
189 |
+
" <td>January</td>\n",
|
190 |
+
" <td>303.89</td>\n",
|
191 |
+
" <td>-4.16</td>\n",
|
192 |
+
" <td>614</td>\n",
|
193 |
+
" <td>49.4935%</td>\n",
|
194 |
+
" <td>2021-01-01</td>\n",
|
195 |
+
" <td>2014-05-16</td>\n",
|
196 |
+
" <td>0</td>\n",
|
197 |
+
" <td>...</td>\n",
|
198 |
+
" <td>0</td>\n",
|
199 |
+
" <td>0</td>\n",
|
200 |
+
" <td>0</td>\n",
|
201 |
+
" <td>0</td>\n",
|
202 |
+
" <td>1</td>\n",
|
203 |
+
" <td>1</td>\n",
|
204 |
+
" <td>0</td>\n",
|
205 |
+
" <td>1</td>\n",
|
206 |
+
" <td>0</td>\n",
|
207 |
+
" <td>0</td>\n",
|
208 |
+
" </tr>\n",
|
209 |
+
" <tr>\n",
|
210 |
+
" <th>2</th>\n",
|
211 |
+
" <td>100% Orange Juice</td>\n",
|
212 |
+
" <td>2020</td>\n",
|
213 |
+
" <td>December</td>\n",
|
214 |
+
" <td>308.05</td>\n",
|
215 |
+
" <td>23.02</td>\n",
|
216 |
+
" <td>743</td>\n",
|
217 |
+
" <td>41.4603%</td>\n",
|
218 |
+
" <td>2020-12-01</td>\n",
|
219 |
+
" <td>2014-05-16</td>\n",
|
220 |
+
" <td>0</td>\n",
|
221 |
+
" <td>...</td>\n",
|
222 |
+
" <td>0</td>\n",
|
223 |
+
" <td>0</td>\n",
|
224 |
+
" <td>0</td>\n",
|
225 |
+
" <td>0</td>\n",
|
226 |
+
" <td>1</td>\n",
|
227 |
+
" <td>1</td>\n",
|
228 |
+
" <td>0</td>\n",
|
229 |
+
" <td>1</td>\n",
|
230 |
+
" <td>0</td>\n",
|
231 |
+
" <td>0</td>\n",
|
232 |
+
" </tr>\n",
|
233 |
+
" <tr>\n",
|
234 |
+
" <th>3</th>\n",
|
235 |
+
" <td>100% Orange Juice</td>\n",
|
236 |
+
" <td>2020</td>\n",
|
237 |
+
" <td>November</td>\n",
|
238 |
+
" <td>285.03</td>\n",
|
239 |
+
" <td>-7.41</td>\n",
|
240 |
+
" <td>621</td>\n",
|
241 |
+
" <td>45.8986%</td>\n",
|
242 |
+
" <td>2020-11-01</td>\n",
|
243 |
+
" <td>2014-05-16</td>\n",
|
244 |
+
" <td>0</td>\n",
|
245 |
+
" <td>...</td>\n",
|
246 |
+
" <td>0</td>\n",
|
247 |
+
" <td>0</td>\n",
|
248 |
+
" <td>0</td>\n",
|
249 |
+
" <td>0</td>\n",
|
250 |
+
" <td>1</td>\n",
|
251 |
+
" <td>1</td>\n",
|
252 |
+
" <td>0</td>\n",
|
253 |
+
" <td>1</td>\n",
|
254 |
+
" <td>0</td>\n",
|
255 |
+
" <td>0</td>\n",
|
256 |
+
" </tr>\n",
|
257 |
+
" <tr>\n",
|
258 |
+
" <th>4</th>\n",
|
259 |
+
" <td>100% Orange Juice</td>\n",
|
260 |
+
" <td>2020</td>\n",
|
261 |
+
" <td>October</td>\n",
|
262 |
+
" <td>292.45</td>\n",
|
263 |
+
" <td>46.68</td>\n",
|
264 |
+
" <td>900</td>\n",
|
265 |
+
" <td>32.4944%</td>\n",
|
266 |
+
" <td>2020-10-01</td>\n",
|
267 |
+
" <td>2014-05-16</td>\n",
|
268 |
+
" <td>0</td>\n",
|
269 |
+
" <td>...</td>\n",
|
270 |
+
" <td>0</td>\n",
|
271 |
+
" <td>0</td>\n",
|
272 |
+
" <td>0</td>\n",
|
273 |
+
" <td>0</td>\n",
|
274 |
+
" <td>1</td>\n",
|
275 |
+
" <td>1</td>\n",
|
276 |
+
" <td>0</td>\n",
|
277 |
+
" <td>1</td>\n",
|
278 |
+
" <td>0</td>\n",
|
279 |
+
" <td>0</td>\n",
|
280 |
+
" </tr>\n",
|
281 |
+
" </tbody>\n",
|
282 |
+
"</table>\n",
|
283 |
+
"<p>5 rows × 42 columns</p>\n",
|
284 |
+
"</div>"
|
285 |
+
],
|
286 |
+
"text/plain": [
|
287 |
+
" gamename year month avg gain peak avg_peak_perc \\\n",
|
288 |
+
"0 100% Orange Juice 2021 February 278.67 -25.23 645 43.2047% \n",
|
289 |
+
"1 100% Orange Juice 2021 January 303.89 -4.16 614 49.4935% \n",
|
290 |
+
"2 100% Orange Juice 2020 December 308.05 23.02 743 41.4603% \n",
|
291 |
+
"3 100% Orange Juice 2020 November 285.03 -7.41 621 45.8986% \n",
|
292 |
+
"4 100% Orange Juice 2020 October 292.45 46.68 900 32.4944% \n",
|
293 |
+
"\n",
|
294 |
+
" date release_date required_age ... genre_sports genre_racing \\\n",
|
295 |
+
"0 2021-02-01 2014-05-16 0 ... 0 0 \n",
|
296 |
+
"1 2021-01-01 2014-05-16 0 ... 0 0 \n",
|
297 |
+
"2 2020-12-01 2014-05-16 0 ... 0 0 \n",
|
298 |
+
"3 2020-11-01 2014-05-16 0 ... 0 0 \n",
|
299 |
+
"4 2020-10-01 2014-05-16 0 ... 0 0 \n",
|
300 |
+
"\n",
|
301 |
+
" genre_rpg genre_simulation indie full_audio full_controller_support \\\n",
|
302 |
+
"0 0 0 1 1 0 \n",
|
303 |
+
"1 0 0 1 1 0 \n",
|
304 |
+
"2 0 0 1 1 0 \n",
|
305 |
+
"3 0 0 1 1 0 \n",
|
306 |
+
"4 0 0 1 1 0 \n",
|
307 |
+
"\n",
|
308 |
+
" age_0_plus age_13_plus age_18_plus \n",
|
309 |
+
"0 1 0 0 \n",
|
310 |
+
"1 1 0 0 \n",
|
311 |
+
"2 1 0 0 \n",
|
312 |
+
"3 1 0 0 \n",
|
313 |
+
"4 1 0 0 \n",
|
314 |
+
"\n",
|
315 |
+
"[5 rows x 42 columns]"
|
316 |
+
]
|
317 |
+
},
|
318 |
+
"execution_count": 2,
|
319 |
+
"metadata": {},
|
320 |
+
"output_type": "execute_result"
|
321 |
+
}
|
322 |
+
],
|
323 |
+
"source": [
|
324 |
+
"df = pd.read_csv('../data/join_02.csv')\n",
|
325 |
+
"df.head()"
|
326 |
+
]
|
327 |
+
},
|
328 |
+
{
|
329 |
+
"cell_type": "code",
|
330 |
+
"execution_count": 3,
|
331 |
+
"id": "6e7bbe77",
|
332 |
+
"metadata": {},
|
333 |
+
"outputs": [],
|
334 |
+
"source": [
|
335 |
+
"# Format preparation\n",
|
336 |
+
"df['date'] = pd.to_datetime(df['date'])\n",
|
337 |
+
"df['release_date'] = pd.to_datetime(df['release_date'])\n",
|
338 |
+
"df['avg_peak_perc'] = df['avg_peak_perc'].str.rstrip('%').astype('float') \n",
|
339 |
+
"df = df.dropna()"
|
340 |
+
]
|
341 |
+
},
|
342 |
+
{
|
343 |
+
"cell_type": "code",
|
344 |
+
"execution_count": 16,
|
345 |
+
"id": "a4482277",
|
346 |
+
"metadata": {},
|
347 |
+
"outputs": [
|
348 |
+
{
|
349 |
+
"data": {
|
350 |
+
"text/plain": [
|
351 |
+
"'100% Orange Juice'"
|
352 |
+
]
|
353 |
+
},
|
354 |
+
"execution_count": 16,
|
355 |
+
"metadata": {},
|
356 |
+
"output_type": "execute_result"
|
357 |
+
}
|
358 |
+
],
|
359 |
+
"source": [
|
360 |
+
"gamenames = df['gamename'].unique()\n",
|
361 |
+
"\n",
|
362 |
+
"def search(target):\n",
|
363 |
+
" result = []\n",
|
364 |
+
" for gamename in gamenames:\n",
|
365 |
+
" if target.lower() in gamename.lower():\n",
|
366 |
+
" result.append(gamename)\n",
|
367 |
+
" return result \n",
|
368 |
+
"\n",
|
369 |
+
"favorite_game = search(\"orange\")[0]\n",
|
370 |
+
"favorite_game"
|
371 |
+
]
|
372 |
+
},
|
373 |
+
{
|
374 |
+
"cell_type": "code",
|
375 |
+
"execution_count": 20,
|
376 |
+
"id": "00cf591f",
|
377 |
+
"metadata": {},
|
378 |
+
"outputs": [
|
379 |
+
{
|
380 |
+
"data": {
|
381 |
+
"text/html": [
|
382 |
+
"<div>\n",
|
383 |
+
"<style scoped>\n",
|
384 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
385 |
+
" vertical-align: middle;\n",
|
386 |
+
" }\n",
|
387 |
+
"\n",
|
388 |
+
" .dataframe tbody tr th {\n",
|
389 |
+
" vertical-align: top;\n",
|
390 |
+
" }\n",
|
391 |
+
"\n",
|
392 |
+
" .dataframe thead th {\n",
|
393 |
+
" text-align: right;\n",
|
394 |
+
" }\n",
|
395 |
+
"</style>\n",
|
396 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
397 |
+
" <thead>\n",
|
398 |
+
" <tr style=\"text-align: right;\">\n",
|
399 |
+
" <th></th>\n",
|
400 |
+
" <th>gamename</th>\n",
|
401 |
+
" <th>year</th>\n",
|
402 |
+
" <th>month</th>\n",
|
403 |
+
" <th>avg</th>\n",
|
404 |
+
" <th>gain</th>\n",
|
405 |
+
" <th>peak</th>\n",
|
406 |
+
" <th>avg_peak_perc</th>\n",
|
407 |
+
" <th>date</th>\n",
|
408 |
+
" <th>release_date</th>\n",
|
409 |
+
" <th>required_age</th>\n",
|
410 |
+
" <th>...</th>\n",
|
411 |
+
" <th>genre_sports</th>\n",
|
412 |
+
" <th>genre_racing</th>\n",
|
413 |
+
" <th>genre_rpg</th>\n",
|
414 |
+
" <th>genre_simulation</th>\n",
|
415 |
+
" <th>indie</th>\n",
|
416 |
+
" <th>full_audio</th>\n",
|
417 |
+
" <th>full_controller_support</th>\n",
|
418 |
+
" <th>age_0_plus</th>\n",
|
419 |
+
" <th>age_13_plus</th>\n",
|
420 |
+
" <th>age_18_plus</th>\n",
|
421 |
+
" </tr>\n",
|
422 |
+
" </thead>\n",
|
423 |
+
" <tbody>\n",
|
424 |
+
" <tr>\n",
|
425 |
+
" <th>0</th>\n",
|
426 |
+
" <td>100% Orange Juice</td>\n",
|
427 |
+
" <td>2021</td>\n",
|
428 |
+
" <td>February</td>\n",
|
429 |
+
" <td>278.67</td>\n",
|
430 |
+
" <td>-25.23</td>\n",
|
431 |
+
" <td>645</td>\n",
|
432 |
+
" <td>43.2047</td>\n",
|
433 |
+
" <td>2021-02-01</td>\n",
|
434 |
+
" <td>2014-05-16</td>\n",
|
435 |
+
" <td>0</td>\n",
|
436 |
+
" <td>...</td>\n",
|
437 |
+
" <td>0</td>\n",
|
438 |
+
" <td>0</td>\n",
|
439 |
+
" <td>0</td>\n",
|
440 |
+
" <td>0</td>\n",
|
441 |
+
" <td>1</td>\n",
|
442 |
+
" <td>1</td>\n",
|
443 |
+
" <td>0</td>\n",
|
444 |
+
" <td>1</td>\n",
|
445 |
+
" <td>0</td>\n",
|
446 |
+
" <td>0</td>\n",
|
447 |
+
" </tr>\n",
|
448 |
+
" <tr>\n",
|
449 |
+
" <th>1</th>\n",
|
450 |
+
" <td>100% Orange Juice</td>\n",
|
451 |
+
" <td>2021</td>\n",
|
452 |
+
" <td>January</td>\n",
|
453 |
+
" <td>303.89</td>\n",
|
454 |
+
" <td>-4.16</td>\n",
|
455 |
+
" <td>614</td>\n",
|
456 |
+
" <td>49.4935</td>\n",
|
457 |
+
" <td>2021-01-01</td>\n",
|
458 |
+
" <td>2014-05-16</td>\n",
|
459 |
+
" <td>0</td>\n",
|
460 |
+
" <td>...</td>\n",
|
461 |
+
" <td>0</td>\n",
|
462 |
+
" <td>0</td>\n",
|
463 |
+
" <td>0</td>\n",
|
464 |
+
" <td>0</td>\n",
|
465 |
+
" <td>1</td>\n",
|
466 |
+
" <td>1</td>\n",
|
467 |
+
" <td>0</td>\n",
|
468 |
+
" <td>1</td>\n",
|
469 |
+
" <td>0</td>\n",
|
470 |
+
" <td>0</td>\n",
|
471 |
+
" </tr>\n",
|
472 |
+
" <tr>\n",
|
473 |
+
" <th>2</th>\n",
|
474 |
+
" <td>100% Orange Juice</td>\n",
|
475 |
+
" <td>2020</td>\n",
|
476 |
+
" <td>December</td>\n",
|
477 |
+
" <td>308.05</td>\n",
|
478 |
+
" <td>23.02</td>\n",
|
479 |
+
" <td>743</td>\n",
|
480 |
+
" <td>41.4603</td>\n",
|
481 |
+
" <td>2020-12-01</td>\n",
|
482 |
+
" <td>2014-05-16</td>\n",
|
483 |
+
" <td>0</td>\n",
|
484 |
+
" <td>...</td>\n",
|
485 |
+
" <td>0</td>\n",
|
486 |
+
" <td>0</td>\n",
|
487 |
+
" <td>0</td>\n",
|
488 |
+
" <td>0</td>\n",
|
489 |
+
" <td>1</td>\n",
|
490 |
+
" <td>1</td>\n",
|
491 |
+
" <td>0</td>\n",
|
492 |
+
" <td>1</td>\n",
|
493 |
+
" <td>0</td>\n",
|
494 |
+
" <td>0</td>\n",
|
495 |
+
" </tr>\n",
|
496 |
+
" <tr>\n",
|
497 |
+
" <th>3</th>\n",
|
498 |
+
" <td>100% Orange Juice</td>\n",
|
499 |
+
" <td>2020</td>\n",
|
500 |
+
" <td>November</td>\n",
|
501 |
+
" <td>285.03</td>\n",
|
502 |
+
" <td>-7.41</td>\n",
|
503 |
+
" <td>621</td>\n",
|
504 |
+
" <td>45.8986</td>\n",
|
505 |
+
" <td>2020-11-01</td>\n",
|
506 |
+
" <td>2014-05-16</td>\n",
|
507 |
+
" <td>0</td>\n",
|
508 |
+
" <td>...</td>\n",
|
509 |
+
" <td>0</td>\n",
|
510 |
+
" <td>0</td>\n",
|
511 |
+
" <td>0</td>\n",
|
512 |
+
" <td>0</td>\n",
|
513 |
+
" <td>1</td>\n",
|
514 |
+
" <td>1</td>\n",
|
515 |
+
" <td>0</td>\n",
|
516 |
+
" <td>1</td>\n",
|
517 |
+
" <td>0</td>\n",
|
518 |
+
" <td>0</td>\n",
|
519 |
+
" </tr>\n",
|
520 |
+
" <tr>\n",
|
521 |
+
" <th>4</th>\n",
|
522 |
+
" <td>100% Orange Juice</td>\n",
|
523 |
+
" <td>2020</td>\n",
|
524 |
+
" <td>October</td>\n",
|
525 |
+
" <td>292.45</td>\n",
|
526 |
+
" <td>46.68</td>\n",
|
527 |
+
" <td>900</td>\n",
|
528 |
+
" <td>32.4944</td>\n",
|
529 |
+
" <td>2020-10-01</td>\n",
|
530 |
+
" <td>2014-05-16</td>\n",
|
531 |
+
" <td>0</td>\n",
|
532 |
+
" <td>...</td>\n",
|
533 |
+
" <td>0</td>\n",
|
534 |
+
" <td>0</td>\n",
|
535 |
+
" <td>0</td>\n",
|
536 |
+
" <td>0</td>\n",
|
537 |
+
" <td>1</td>\n",
|
538 |
+
" <td>1</td>\n",
|
539 |
+
" <td>0</td>\n",
|
540 |
+
" <td>1</td>\n",
|
541 |
+
" <td>0</td>\n",
|
542 |
+
" <td>0</td>\n",
|
543 |
+
" </tr>\n",
|
544 |
+
" <tr>\n",
|
545 |
+
" <th>...</th>\n",
|
546 |
+
" <td>...</td>\n",
|
547 |
+
" <td>...</td>\n",
|
548 |
+
" <td>...</td>\n",
|
549 |
+
" <td>...</td>\n",
|
550 |
+
" <td>...</td>\n",
|
551 |
+
" <td>...</td>\n",
|
552 |
+
" <td>...</td>\n",
|
553 |
+
" <td>...</td>\n",
|
554 |
+
" <td>...</td>\n",
|
555 |
+
" <td>...</td>\n",
|
556 |
+
" <td>...</td>\n",
|
557 |
+
" <td>...</td>\n",
|
558 |
+
" <td>...</td>\n",
|
559 |
+
" <td>...</td>\n",
|
560 |
+
" <td>...</td>\n",
|
561 |
+
" <td>...</td>\n",
|
562 |
+
" <td>...</td>\n",
|
563 |
+
" <td>...</td>\n",
|
564 |
+
" <td>...</td>\n",
|
565 |
+
" <td>...</td>\n",
|
566 |
+
" <td>...</td>\n",
|
567 |
+
" </tr>\n",
|
568 |
+
" <tr>\n",
|
569 |
+
" <th>63848</th>\n",
|
570 |
+
" <td>theHunter Classic</td>\n",
|
571 |
+
" <td>2014</td>\n",
|
572 |
+
" <td>November</td>\n",
|
573 |
+
" <td>844.43</td>\n",
|
574 |
+
" <td>-65.03</td>\n",
|
575 |
+
" <td>1683</td>\n",
|
576 |
+
" <td>50.1741</td>\n",
|
577 |
+
" <td>2014-11-01</td>\n",
|
578 |
+
" <td>2014-06-03</td>\n",
|
579 |
+
" <td>0</td>\n",
|
580 |
+
" <td>...</td>\n",
|
581 |
+
" <td>1</td>\n",
|
582 |
+
" <td>0</td>\n",
|
583 |
+
" <td>0</td>\n",
|
584 |
+
" <td>1</td>\n",
|
585 |
+
" <td>0</td>\n",
|
586 |
+
" <td>1</td>\n",
|
587 |
+
" <td>0</td>\n",
|
588 |
+
" <td>1</td>\n",
|
589 |
+
" <td>0</td>\n",
|
590 |
+
" <td>0</td>\n",
|
591 |
+
" </tr>\n",
|
592 |
+
" <tr>\n",
|
593 |
+
" <th>63849</th>\n",
|
594 |
+
" <td>theHunter Classic</td>\n",
|
595 |
+
" <td>2014</td>\n",
|
596 |
+
" <td>October</td>\n",
|
597 |
+
" <td>909.46</td>\n",
|
598 |
+
" <td>258.77</td>\n",
|
599 |
+
" <td>2293</td>\n",
|
600 |
+
" <td>39.6625</td>\n",
|
601 |
+
" <td>2014-10-01</td>\n",
|
602 |
+
" <td>2014-06-03</td>\n",
|
603 |
+
" <td>0</td>\n",
|
604 |
+
" <td>...</td>\n",
|
605 |
+
" <td>1</td>\n",
|
606 |
+
" <td>0</td>\n",
|
607 |
+
" <td>0</td>\n",
|
608 |
+
" <td>1</td>\n",
|
609 |
+
" <td>0</td>\n",
|
610 |
+
" <td>1</td>\n",
|
611 |
+
" <td>0</td>\n",
|
612 |
+
" <td>1</td>\n",
|
613 |
+
" <td>0</td>\n",
|
614 |
+
" <td>0</td>\n",
|
615 |
+
" </tr>\n",
|
616 |
+
" <tr>\n",
|
617 |
+
" <th>63850</th>\n",
|
618 |
+
" <td>theHunter Classic</td>\n",
|
619 |
+
" <td>2014</td>\n",
|
620 |
+
" <td>September</td>\n",
|
621 |
+
" <td>650.69</td>\n",
|
622 |
+
" <td>-63.60</td>\n",
|
623 |
+
" <td>1717</td>\n",
|
624 |
+
" <td>37.8969</td>\n",
|
625 |
+
" <td>2014-09-01</td>\n",
|
626 |
+
" <td>2014-06-03</td>\n",
|
627 |
+
" <td>0</td>\n",
|
628 |
+
" <td>...</td>\n",
|
629 |
+
" <td>1</td>\n",
|
630 |
+
" <td>0</td>\n",
|
631 |
+
" <td>0</td>\n",
|
632 |
+
" <td>1</td>\n",
|
633 |
+
" <td>0</td>\n",
|
634 |
+
" <td>1</td>\n",
|
635 |
+
" <td>0</td>\n",
|
636 |
+
" <td>1</td>\n",
|
637 |
+
" <td>0</td>\n",
|
638 |
+
" <td>0</td>\n",
|
639 |
+
" </tr>\n",
|
640 |
+
" <tr>\n",
|
641 |
+
" <th>63851</th>\n",
|
642 |
+
" <td>theHunter Classic</td>\n",
|
643 |
+
" <td>2014</td>\n",
|
644 |
+
" <td>August</td>\n",
|
645 |
+
" <td>714.29</td>\n",
|
646 |
+
" <td>-337.67</td>\n",
|
647 |
+
" <td>1181</td>\n",
|
648 |
+
" <td>60.4818</td>\n",
|
649 |
+
" <td>2014-08-01</td>\n",
|
650 |
+
" <td>2014-06-03</td>\n",
|
651 |
+
" <td>0</td>\n",
|
652 |
+
" <td>...</td>\n",
|
653 |
+
" <td>1</td>\n",
|
654 |
+
" <td>0</td>\n",
|
655 |
+
" <td>0</td>\n",
|
656 |
+
" <td>1</td>\n",
|
657 |
+
" <td>0</td>\n",
|
658 |
+
" <td>1</td>\n",
|
659 |
+
" <td>0</td>\n",
|
660 |
+
" <td>1</td>\n",
|
661 |
+
" <td>0</td>\n",
|
662 |
+
" <td>0</td>\n",
|
663 |
+
" </tr>\n",
|
664 |
+
" <tr>\n",
|
665 |
+
" <th>63852</th>\n",
|
666 |
+
" <td>theHunter Classic</td>\n",
|
667 |
+
" <td>2014</td>\n",
|
668 |
+
" <td>July</td>\n",
|
669 |
+
" <td>1051.96</td>\n",
|
670 |
+
" <td>-110.53</td>\n",
|
671 |
+
" <td>2059</td>\n",
|
672 |
+
" <td>51.0908</td>\n",
|
673 |
+
" <td>2014-07-01</td>\n",
|
674 |
+
" <td>2014-06-03</td>\n",
|
675 |
+
" <td>0</td>\n",
|
676 |
+
" <td>...</td>\n",
|
677 |
+
" <td>1</td>\n",
|
678 |
+
" <td>0</td>\n",
|
679 |
+
" <td>0</td>\n",
|
680 |
+
" <td>1</td>\n",
|
681 |
+
" <td>0</td>\n",
|
682 |
+
" <td>1</td>\n",
|
683 |
+
" <td>0</td>\n",
|
684 |
+
" <td>1</td>\n",
|
685 |
+
" <td>0</td>\n",
|
686 |
+
" <td>0</td>\n",
|
687 |
+
" </tr>\n",
|
688 |
+
" </tbody>\n",
|
689 |
+
"</table>\n",
|
690 |
+
"<p>62567 rows × 42 columns</p>\n",
|
691 |
+
"</div>"
|
692 |
+
],
|
693 |
+
"text/plain": [
|
694 |
+
" gamename year month avg gain peak \\\n",
|
695 |
+
"0 100% Orange Juice 2021 February 278.67 -25.23 645 \n",
|
696 |
+
"1 100% Orange Juice 2021 January 303.89 -4.16 614 \n",
|
697 |
+
"2 100% Orange Juice 2020 December 308.05 23.02 743 \n",
|
698 |
+
"3 100% Orange Juice 2020 November 285.03 -7.41 621 \n",
|
699 |
+
"4 100% Orange Juice 2020 October 292.45 46.68 900 \n",
|
700 |
+
"... ... ... ... ... ... ... \n",
|
701 |
+
"63848 theHunter Classic 2014 November 844.43 -65.03 1683 \n",
|
702 |
+
"63849 theHunter Classic 2014 October 909.46 258.77 2293 \n",
|
703 |
+
"63850 theHunter Classic 2014 September 650.69 -63.60 1717 \n",
|
704 |
+
"63851 theHunter Classic 2014 August 714.29 -337.67 1181 \n",
|
705 |
+
"63852 theHunter Classic 2014 July 1051.96 -110.53 2059 \n",
|
706 |
+
"\n",
|
707 |
+
" avg_peak_perc date release_date required_age ... genre_sports \\\n",
|
708 |
+
"0 43.2047 2021-02-01 2014-05-16 0 ... 0 \n",
|
709 |
+
"1 49.4935 2021-01-01 2014-05-16 0 ... 0 \n",
|
710 |
+
"2 41.4603 2020-12-01 2014-05-16 0 ... 0 \n",
|
711 |
+
"3 45.8986 2020-11-01 2014-05-16 0 ... 0 \n",
|
712 |
+
"4 32.4944 2020-10-01 2014-05-16 0 ... 0 \n",
|
713 |
+
"... ... ... ... ... ... ... \n",
|
714 |
+
"63848 50.1741 2014-11-01 2014-06-03 0 ... 1 \n",
|
715 |
+
"63849 39.6625 2014-10-01 2014-06-03 0 ... 1 \n",
|
716 |
+
"63850 37.8969 2014-09-01 2014-06-03 0 ... 1 \n",
|
717 |
+
"63851 60.4818 2014-08-01 2014-06-03 0 ... 1 \n",
|
718 |
+
"63852 51.0908 2014-07-01 2014-06-03 0 ... 1 \n",
|
719 |
+
"\n",
|
720 |
+
" genre_racing genre_rpg genre_simulation indie full_audio \\\n",
|
721 |
+
"0 0 0 0 1 1 \n",
|
722 |
+
"1 0 0 0 1 1 \n",
|
723 |
+
"2 0 0 0 1 1 \n",
|
724 |
+
"3 0 0 0 1 1 \n",
|
725 |
+
"4 0 0 0 1 1 \n",
|
726 |
+
"... ... ... ... ... ... \n",
|
727 |
+
"63848 0 0 1 0 1 \n",
|
728 |
+
"63849 0 0 1 0 1 \n",
|
729 |
+
"63850 0 0 1 0 1 \n",
|
730 |
+
"63851 0 0 1 0 1 \n",
|
731 |
+
"63852 0 0 1 0 1 \n",
|
732 |
+
"\n",
|
733 |
+
" full_controller_support age_0_plus age_13_plus age_18_plus \n",
|
734 |
+
"0 0 1 0 0 \n",
|
735 |
+
"1 0 1 0 0 \n",
|
736 |
+
"2 0 1 0 0 \n",
|
737 |
+
"3 0 1 0 0 \n",
|
738 |
+
"4 0 1 0 0 \n",
|
739 |
+
"... ... ... ... ... \n",
|
740 |
+
"63848 0 1 0 0 \n",
|
741 |
+
"63849 0 1 0 0 \n",
|
742 |
+
"63850 0 1 0 0 \n",
|
743 |
+
"63851 0 1 0 0 \n",
|
744 |
+
"63852 0 1 0 0 \n",
|
745 |
+
"\n",
|
746 |
+
"[62567 rows x 42 columns]"
|
747 |
+
]
|
748 |
+
},
|
749 |
+
"execution_count": 20,
|
750 |
+
"metadata": {},
|
751 |
+
"output_type": "execute_result"
|
752 |
+
}
|
753 |
+
],
|
754 |
+
"source": [
|
755 |
+
"df"
|
756 |
+
]
|
757 |
+
},
|
758 |
+
{
|
759 |
+
"cell_type": "code",
|
760 |
+
"execution_count": 21,
|
761 |
+
"id": "ad7114d2",
|
762 |
+
"metadata": {},
|
763 |
+
"outputs": [
|
764 |
+
{
|
765 |
+
"data": {
|
766 |
+
"text/html": [
|
767 |
+
"<div>\n",
|
768 |
+
"<style scoped>\n",
|
769 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
770 |
+
" vertical-align: middle;\n",
|
771 |
+
" }\n",
|
772 |
+
"\n",
|
773 |
+
" .dataframe tbody tr th {\n",
|
774 |
+
" vertical-align: top;\n",
|
775 |
+
" }\n",
|
776 |
+
"\n",
|
777 |
+
" .dataframe thead th {\n",
|
778 |
+
" text-align: right;\n",
|
779 |
+
" }\n",
|
780 |
+
"</style>\n",
|
781 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
782 |
+
" <thead>\n",
|
783 |
+
" <tr style=\"text-align: right;\">\n",
|
784 |
+
" <th></th>\n",
|
785 |
+
" <th>gamename</th>\n",
|
786 |
+
" <th>year</th>\n",
|
787 |
+
" <th>month</th>\n",
|
788 |
+
" <th>avg</th>\n",
|
789 |
+
" <th>gain</th>\n",
|
790 |
+
" <th>peak</th>\n",
|
791 |
+
" <th>avg_peak_perc</th>\n",
|
792 |
+
" <th>date</th>\n",
|
793 |
+
" <th>release_date</th>\n",
|
794 |
+
" <th>required_age</th>\n",
|
795 |
+
" <th>...</th>\n",
|
796 |
+
" <th>genre_sports</th>\n",
|
797 |
+
" <th>genre_racing</th>\n",
|
798 |
+
" <th>genre_rpg</th>\n",
|
799 |
+
" <th>genre_simulation</th>\n",
|
800 |
+
" <th>indie</th>\n",
|
801 |
+
" <th>full_audio</th>\n",
|
802 |
+
" <th>full_controller_support</th>\n",
|
803 |
+
" <th>age_0_plus</th>\n",
|
804 |
+
" <th>age_13_plus</th>\n",
|
805 |
+
" <th>age_18_plus</th>\n",
|
806 |
+
" </tr>\n",
|
807 |
+
" </thead>\n",
|
808 |
+
" <tbody>\n",
|
809 |
+
" <tr>\n",
|
810 |
+
" <th>84</th>\n",
|
811 |
+
" <td>12 is Better Than 6</td>\n",
|
812 |
+
" <td>2021</td>\n",
|
813 |
+
" <td>February</td>\n",
|
814 |
+
" <td>5.24</td>\n",
|
815 |
+
" <td>-0.70</td>\n",
|
816 |
+
" <td>13</td>\n",
|
817 |
+
" <td>40.3077</td>\n",
|
818 |
+
" <td>2021-02-01</td>\n",
|
819 |
+
" <td>2015-11-20</td>\n",
|
820 |
+
" <td>0</td>\n",
|
821 |
+
" <td>...</td>\n",
|
822 |
+
" <td>0</td>\n",
|
823 |
+
" <td>0</td>\n",
|
824 |
+
" <td>0</td>\n",
|
825 |
+
" <td>0</td>\n",
|
826 |
+
" <td>1</td>\n",
|
827 |
+
" <td>0</td>\n",
|
828 |
+
" <td>1</td>\n",
|
829 |
+
" <td>1</td>\n",
|
830 |
+
" <td>0</td>\n",
|
831 |
+
" <td>0</td>\n",
|
832 |
+
" </tr>\n",
|
833 |
+
" <tr>\n",
|
834 |
+
" <th>85</th>\n",
|
835 |
+
" <td>12 is Better Than 6</td>\n",
|
836 |
+
" <td>2021</td>\n",
|
837 |
+
" <td>January</td>\n",
|
838 |
+
" <td>5.94</td>\n",
|
839 |
+
" <td>0.78</td>\n",
|
840 |
+
" <td>18</td>\n",
|
841 |
+
" <td>33.0000</td>\n",
|
842 |
+
" <td>2021-01-01</td>\n",
|
843 |
+
" <td>2015-11-20</td>\n",
|
844 |
+
" <td>0</td>\n",
|
845 |
+
" <td>...</td>\n",
|
846 |
+
" <td>0</td>\n",
|
847 |
+
" <td>0</td>\n",
|
848 |
+
" <td>0</td>\n",
|
849 |
+
" <td>0</td>\n",
|
850 |
+
" <td>1</td>\n",
|
851 |
+
" <td>0</td>\n",
|
852 |
+
" <td>1</td>\n",
|
853 |
+
" <td>1</td>\n",
|
854 |
+
" <td>0</td>\n",
|
855 |
+
" <td>0</td>\n",
|
856 |
+
" </tr>\n",
|
857 |
+
" <tr>\n",
|
858 |
+
" <th>86</th>\n",
|
859 |
+
" <td>12 is Better Than 6</td>\n",
|
860 |
+
" <td>2020</td>\n",
|
861 |
+
" <td>December</td>\n",
|
862 |
+
" <td>5.16</td>\n",
|
863 |
+
" <td>-0.08</td>\n",
|
864 |
+
" <td>21</td>\n",
|
865 |
+
" <td>24.5714</td>\n",
|
866 |
+
" <td>2020-12-01</td>\n",
|
867 |
+
" <td>2015-11-20</td>\n",
|
868 |
+
" <td>0</td>\n",
|
869 |
+
" <td>...</td>\n",
|
870 |
+
" <td>0</td>\n",
|
871 |
+
" <td>0</td>\n",
|
872 |
+
" <td>0</td>\n",
|
873 |
+
" <td>0</td>\n",
|
874 |
+
" <td>1</td>\n",
|
875 |
+
" <td>0</td>\n",
|
876 |
+
" <td>1</td>\n",
|
877 |
+
" <td>1</td>\n",
|
878 |
+
" <td>0</td>\n",
|
879 |
+
" <td>0</td>\n",
|
880 |
+
" </tr>\n",
|
881 |
+
" <tr>\n",
|
882 |
+
" <th>87</th>\n",
|
883 |
+
" <td>12 is Better Than 6</td>\n",
|
884 |
+
" <td>2020</td>\n",
|
885 |
+
" <td>November</td>\n",
|
886 |
+
" <td>5.24</td>\n",
|
887 |
+
" <td>0.89</td>\n",
|
888 |
+
" <td>18</td>\n",
|
889 |
+
" <td>29.1111</td>\n",
|
890 |
+
" <td>2020-11-01</td>\n",
|
891 |
+
" <td>2015-11-20</td>\n",
|
892 |
+
" <td>0</td>\n",
|
893 |
+
" <td>...</td>\n",
|
894 |
+
" <td>0</td>\n",
|
895 |
+
" <td>0</td>\n",
|
896 |
+
" <td>0</td>\n",
|
897 |
+
" <td>0</td>\n",
|
898 |
+
" <td>1</td>\n",
|
899 |
+
" <td>0</td>\n",
|
900 |
+
" <td>1</td>\n",
|
901 |
+
" <td>1</td>\n",
|
902 |
+
" <td>0</td>\n",
|
903 |
+
" <td>0</td>\n",
|
904 |
+
" </tr>\n",
|
905 |
+
" <tr>\n",
|
906 |
+
" <th>88</th>\n",
|
907 |
+
" <td>12 is Better Than 6</td>\n",
|
908 |
+
" <td>2020</td>\n",
|
909 |
+
" <td>October</td>\n",
|
910 |
+
" <td>4.35</td>\n",
|
911 |
+
" <td>0.64</td>\n",
|
912 |
+
" <td>38</td>\n",
|
913 |
+
" <td>11.4474</td>\n",
|
914 |
+
" <td>2020-10-01</td>\n",
|
915 |
+
" <td>2015-11-20</td>\n",
|
916 |
+
" <td>0</td>\n",
|
917 |
+
" <td>...</td>\n",
|
918 |
+
" <td>0</td>\n",
|
919 |
+
" <td>0</td>\n",
|
920 |
+
" <td>0</td>\n",
|
921 |
+
" <td>0</td>\n",
|
922 |
+
" <td>1</td>\n",
|
923 |
+
" <td>0</td>\n",
|
924 |
+
" <td>1</td>\n",
|
925 |
+
" <td>1</td>\n",
|
926 |
+
" <td>0</td>\n",
|
927 |
+
" <td>0</td>\n",
|
928 |
+
" </tr>\n",
|
929 |
+
" </tbody>\n",
|
930 |
+
"</table>\n",
|
931 |
+
"<p>5 rows × 42 columns</p>\n",
|
932 |
+
"</div>"
|
933 |
+
],
|
934 |
+
"text/plain": [
|
935 |
+
" gamename year month avg gain peak avg_peak_perc \\\n",
|
936 |
+
"84 12 is Better Than 6 2021 February 5.24 -0.70 13 40.3077 \n",
|
937 |
+
"85 12 is Better Than 6 2021 January 5.94 0.78 18 33.0000 \n",
|
938 |
+
"86 12 is Better Than 6 2020 December 5.16 -0.08 21 24.5714 \n",
|
939 |
+
"87 12 is Better Than 6 2020 November 5.24 0.89 18 29.1111 \n",
|
940 |
+
"88 12 is Better Than 6 2020 October 4.35 0.64 38 11.4474 \n",
|
941 |
+
"\n",
|
942 |
+
" date release_date required_age ... genre_sports genre_racing \\\n",
|
943 |
+
"84 2021-02-01 2015-11-20 0 ... 0 0 \n",
|
944 |
+
"85 2021-01-01 2015-11-20 0 ... 0 0 \n",
|
945 |
+
"86 2020-12-01 2015-11-20 0 ... 0 0 \n",
|
946 |
+
"87 2020-11-01 2015-11-20 0 ... 0 0 \n",
|
947 |
+
"88 2020-10-01 2015-11-20 0 ... 0 0 \n",
|
948 |
+
"\n",
|
949 |
+
" genre_rpg genre_simulation indie full_audio full_controller_support \\\n",
|
950 |
+
"84 0 0 1 0 1 \n",
|
951 |
+
"85 0 0 1 0 1 \n",
|
952 |
+
"86 0 0 1 0 1 \n",
|
953 |
+
"87 0 0 1 0 1 \n",
|
954 |
+
"88 0 0 1 0 1 \n",
|
955 |
+
"\n",
|
956 |
+
" age_0_plus age_13_plus age_18_plus \n",
|
957 |
+
"84 1 0 0 \n",
|
958 |
+
"85 1 0 0 \n",
|
959 |
+
"86 1 0 0 \n",
|
960 |
+
"87 1 0 0 \n",
|
961 |
+
"88 1 0 0 \n",
|
962 |
+
"\n",
|
963 |
+
"[5 rows x 42 columns]"
|
964 |
+
]
|
965 |
+
},
|
966 |
+
"execution_count": 21,
|
967 |
+
"metadata": {},
|
968 |
+
"output_type": "execute_result"
|
969 |
+
}
|
970 |
+
],
|
971 |
+
"source": [
|
972 |
+
"df_filter = df[df['gamename']!=favorite_game]\n",
|
973 |
+
"df_filter.head()"
|
974 |
+
]
|
975 |
+
},
|
976 |
+
{
|
977 |
+
"cell_type": "code",
|
978 |
+
"execution_count": 35,
|
979 |
+
"id": "2ceb810a",
|
980 |
+
"metadata": {},
|
981 |
+
"outputs": [],
|
982 |
+
"source": [
|
983 |
+
"import numpy"
|
984 |
+
]
|
985 |
+
},
|
986 |
+
{
|
987 |
+
"cell_type": "code",
|
988 |
+
"execution_count": 37,
|
989 |
+
"id": "073ede90",
|
990 |
+
"metadata": {
|
991 |
+
"scrolled": true
|
992 |
+
},
|
993 |
+
"outputs": [
|
994 |
+
{
|
995 |
+
"data": {
|
996 |
+
"text/plain": [
|
997 |
+
"array(['100% Orange Juice', '12 is Better Than 6', '140', '60 Seconds!',\n",
|
998 |
+
" '7 Days to Die', '100% Orange Juice'], dtype=object)"
|
999 |
+
]
|
1000 |
+
},
|
1001 |
+
"execution_count": 37,
|
1002 |
+
"metadata": {},
|
1003 |
+
"output_type": "execute_result"
|
1004 |
+
}
|
1005 |
+
],
|
1006 |
+
"source": [
|
1007 |
+
"top_games = df.gamename.unique()[0:5]\n",
|
1008 |
+
"# top_games.append(favorite_game)\n",
|
1009 |
+
"top_games = numpy.append(top_games, favorite_game)\n",
|
1010 |
+
"top_games"
|
1011 |
+
]
|
1012 |
+
},
|
1013 |
+
{
|
1014 |
+
"cell_type": "code",
|
1015 |
+
"execution_count": null,
|
1016 |
+
"id": "cc15f96c",
|
1017 |
+
"metadata": {},
|
1018 |
+
"outputs": [],
|
1019 |
+
"source": []
|
1020 |
+
}
|
1021 |
+
],
|
1022 |
+
"metadata": {
|
1023 |
+
"kernelspec": {
|
1024 |
+
"display_name": "Python 3 (ipykernel)",
|
1025 |
+
"language": "python",
|
1026 |
+
"name": "python3"
|
1027 |
+
},
|
1028 |
+
"language_info": {
|
1029 |
+
"codemirror_mode": {
|
1030 |
+
"name": "ipython",
|
1031 |
+
"version": 3
|
1032 |
+
},
|
1033 |
+
"file_extension": ".py",
|
1034 |
+
"mimetype": "text/x-python",
|
1035 |
+
"name": "python",
|
1036 |
+
"nbconvert_exporter": "python",
|
1037 |
+
"pygments_lexer": "ipython3",
|
1038 |
+
"version": "3.11.5"
|
1039 |
+
}
|
1040 |
+
},
|
1041 |
+
"nbformat": 4,
|
1042 |
+
"nbformat_minor": 5
|
1043 |
+
}
|
pages/01 Category.py
ADDED
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "Category"
|
6 |
+
page_genres = ['multi_player', 'pvp', 'co-op', 'single_player']
|
7 |
+
add_genre = ['single_player', 'multi_player']
|
8 |
+
|
9 |
+
add_opp_features(add_genre)
|
10 |
+
exec_page('🤼', theme, page_genres)
|
pages/02 Genre.py
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "Genre"
|
6 |
+
page_genres = ['genre_action', 'genre_adventure', 'genre_casual',
|
7 |
+
'genre_sexual_content', 'genre_strategy', 'genre_sports',
|
8 |
+
'genre_racing', 'genre_rpg', 'genre_simulation', 'indie', 'mainstream']
|
9 |
+
add_genre = ['mainstream', 'indie']
|
10 |
+
|
11 |
+
add_opp_features(add_genre)
|
12 |
+
exec_page('🦹♀️', theme, page_genres)
|
pages/03 DLC_Counts.py
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "DLC Counts"
|
6 |
+
page_genres = ['dlc_0', 'dlc_5', 'dlc_15', 'dlc_40', 'dlc_100', 'dlc_300', 'dlc_most']
|
7 |
+
add_genres = [[0, 1, 'dlc_0', 'dlc_count'],
|
8 |
+
[1, 6, 'dlc_5', 'dlc_count'],
|
9 |
+
[6, 16, 'dlc_15', 'dlc_count'],
|
10 |
+
[16, 41, 'dlc_40', 'dlc_count'],
|
11 |
+
[41, 101, 'dlc_100', 'dlc_count'],
|
12 |
+
[101, 301, 'dlc_300', 'dlc_count'],
|
13 |
+
[301, 9999, 'dlc_most', 'dlc_count']]
|
14 |
+
|
15 |
+
# ### adding single-player feature ###
|
16 |
+
for add in add_genres:
|
17 |
+
add_range_features(add)
|
18 |
+
exec_page('🪜', theme, page_genres)
|
pages/04 Price.py
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "Price"
|
6 |
+
page_genres = ['price_free', 'price_5', 'price_15', 'price_20', 'price_40', 'price_60', 'price_most']
|
7 |
+
add_genres = [[0, 0.001, 'price_free', 'price'],
|
8 |
+
[0.001, 5.001, 'price_5', 'price'],
|
9 |
+
[5.001, 10.001, 'price_10', 'price'],
|
10 |
+
[10.001, 15.001, 'price_15', 'price'],
|
11 |
+
[15.001, 20.001, 'price_20', 'price'],
|
12 |
+
[20.001, 40.001, 'price_40', 'price'],
|
13 |
+
[40.001, 60.001, 'price_60', 'price'],
|
14 |
+
[60.001, 9999, 'price_most', 'price']]
|
15 |
+
|
16 |
+
# ### adding single-player feature ###
|
17 |
+
for add in add_genres:
|
18 |
+
add_range_features(add)
|
19 |
+
exec_page('💸', theme, page_genres)
|
pages/05 Age_Restriction.py
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import exec_page
|
4 |
+
|
5 |
+
theme = "Age Restriction"
|
6 |
+
page_genres = ['age_0_plus', 'age_13_plus', 'age_18_plus']
|
7 |
+
exec_page('👴', theme, page_genres)
|
pages/06 Settings.py
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "Settings"
|
6 |
+
page_genres = ['full_audio', 'full_controller_support', 'not_full_audio', 'not_full_controller']
|
7 |
+
add_genres = [['not_full_audio', 'full_audio'], ['not_full_controller', 'full_controller_support'] ]
|
8 |
+
|
9 |
+
# ### adding single-player feature ###
|
10 |
+
for add in add_genres:
|
11 |
+
add_opp_features(add)
|
12 |
+
exec_page('🎧', theme, page_genres)
|
pages/07 OS.py
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "OS"
|
6 |
+
page_genres = ['windows', 'mac', 'linux', 'not_windows', 'not_mac', 'not_linux']
|
7 |
+
add_genres = [['not_windows', 'windows'], ['not_mac', 'mac'], ['not_linux', 'linux'] ]
|
8 |
+
|
9 |
+
# ### adding single-player feature ###
|
10 |
+
for add in add_genres:
|
11 |
+
add_opp_features(add)
|
12 |
+
exec_page('🖥', theme, page_genres)
|
pages/08 Publisher.py
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "Publisher"
|
6 |
+
main_genre = "publishers"
|
7 |
+
|
8 |
+
exec_page_pub('🛒', theme, main_genre)
|
pages/09 Developer.py
ADDED
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
|
3 |
+
from module.__custom__ import *
|
4 |
+
|
5 |
+
theme = "Developer"
|
6 |
+
main_genre = "developers"
|
7 |
+
|
8 |
+
exec_page_pub('💽', theme, main_genre)
|
requirements.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
numpy==1.24.4
|
2 |
+
pandas==1.5.3
|
3 |
+
plotly==5.17.0
|
4 |
+
streamlit==1.28.2
|
5 |
+
streamlit_extras==0.3.5
|
6 |
+
streamlit_searchbox==0.1.6
|