Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Lab3/Lab3_python_spyder.py
2710 views
1
# -*- coding: utf-8 -*-
2
"""
3
4
@author: Roberto
5
"""
6
7
'''
8
Importar librerias
9
- numpy para operaciones de vectores y matrices
10
- pandas para manipular DataFrame (base de datos)
11
- Series para manipular columnas de DataFrame
12
'''
13
14
import numpy as np
15
import pandas as pd
16
from pandas import DataFrame,Series
17
import os # for usernanme y set direcotrio
18
19
# Debemos construir el directorio donde se trabajará
20
#
21
22
user = os.getlogin() # Username
23
print(user)
24
25
# Set directorio
26
27
os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Lab3") # Set directorio
28
29
netflix = pd.read_csv("../data/netflix_titles.csv") # Subir base de datos
30
netflix
31
32
netflix.info() # varaible's type
33
34
print( netflix.shape ) # filas y columnas
35
36
'''
37
Equivalent sum de Stata, solo la variable release_year es numerica
38
'''
39
40
netflix.describe()
41
42
43
## Verificando ID
44
45
46
print( netflix.show_id.unique() )
47
48
print( len( netflix.show_id.unique() ) )
49
50
print( netflix.show_id.is_unique )
51
52
53
##################################
54
55
print( len(netflix['show_id'].unique() ) )
56
57
netflix['show_id'].unique()
58
59
netflix['show_id'].is_unique # verificando repeticiones
60
61
#%% Exploring DataFrame
62
63
# Series en Python
64
65
print(type(netflix['director']))
66
netflix['director']
67
68
## revisado missing values (NaN in Python)
69
70
print( netflix.director.unique() )
71
72
## isnull() and isna() son similares
73
74
print( netflix['director'].isnull() )
75
76
print( netflix['director'].isna() )
77
78
79
# cantidad de missing values en la variables director
80
netflix['director'].isna().sum()
81
82
# Borrar missing values
83
84
netflix.dropna() # borra todas las filas o columnas con al menos un missing value
85
netflix.dropna(axis = 0) # borras filas con missing value
86
netflix.dropna(axis = 1) # columnas con al menos un missign values
87
88
'''
89
- Notese que la base de datos Netflix no ha sido alterada. Para que la base de datos se altere debe ocurrir dos cosas:
90
1. Asignarse a una nueva base de datos
91
2. Si la función lo permite, incluir el input ***Inplace = True***
92
'''
93
94
netflix.dropna(subset = ['director']) # drop observaciones que presentan missing values en la columna director
95
96
netflix.dropna(subset = ['director'])
97
98
# Reemplazar missing values de la columna director con la palabra "Sin director"
99
netflix.director = netflix.director.fillna("Sin director")
100
101
# Alrerar la misma base de datos sin la necesidad de asignar a uno nuevo
102
103
netflix.director.fillna("Sin director", inplace = True)
104
105
106
# Qué funciones admiten Inplace = True: drop, fillna, rename y otros.
107
108
109
# Create new variable
110
netflix['new_col'] = np.arange(0, netflix.shape[0]) # creat new varaible
111
112
#%% Filter DataFrame
113
114
115
# Filter rows
116
117
netflix.loc[0:100]
118
netflix.loc[210:500]
119
netflix.loc[210:] # desde la fila posición 210 hasta al final
120
121
# filter columns
122
123
netflix.loc[:,['show_id','type','description']]
124
125
netflix.loc[1000:2000,['show_id','type','description']]
126
127
netflix2 = netflix.set_index( [ 'show_id' ] )
128
129
# filter filas usando index
130
131
netflix2.loc[['s1','s100','s7000'],:]
132
133
134
# Reset index
135
136
netflix2.reset_index()
137
138
'''
139
iloc usa las posiciones de filas y columnas
140
'''
141
142
# Filter rows
143
144
netflix.iloc[0:100]
145
netflix.iloc[210:500]
146
147
# filter columns
148
149
netflix.iloc[:,[0,1,12]]
150
151
152
netflix.iloc[1000:2000,[0,1,12]]
153
154
155
# Column names in a list
156
list(netflix.columns)
157
158
#%% Sorting and Subsetting
159
160
# sort ascendet
161
net_old = netflix.sort_values("release_year")
162
163
# sort de manera descendente
164
net_new = netflix.sort_values("release_year", ascending = False)
165
166
# crear nueva variable
167
168
netflix['number'] = np.random.randint(1, 10, netflix.shape[0])
169
170
171
netflix.sort_values(["release_year","number"])
172
net_two_sort = netflix.sort_values(["release_year","number"], ascending = [True,False])
173
174
#%% Subsetting columns
175
176
netflix.director
177
178
netflix[["director","cast"]]
179
180
181
#%% Subsetting rows
182
183
netflix[netflix["release_year"] < 2011].head(10)
184
185
netflix[(netflix["release_year"] < 2011) & (netflix["number"] > 5)]
186
netflix[( netflix.release_year < 2011 ) & (netflix.number > 5)]
187
netflix[['director']].iloc[0:10]
188
189
#%% Subsetting based on text data
190
191
net_peru = netflix[netflix.country == "Peru"]
192
net_mex = netflix[netflix["country"] == "Mexico"]
193
194
netflix[(netflix["type"] == "TV Show") & (netflix["country"] == "Peru")]
195
# No hay series peruanas en Netflix
196
197
len(netflix[(netflix["country"] == "Brazil") | (netflix["country"] == "Peru")])
198
netflix[(netflix["type"] == "TV Show") | (netflix["country"] == "Peru")]
199
200
netflix.loc[(netflix["type"] == "Movie") & (netflix["country"] == "United States")
201
& (netflix["release_year"] > 2019)]
202
203
# .isin()
204
#If you want to filter by multiple values of a categorical variable,
205
# the easiest way is to use the isin() method.
206
207
208
# Peliculas de Perú y Chile
209
210
net_per_ch = netflix[netflix["country"].isin(["Peru","Chile"])] # filter by variables's values
211
212
213
# Peliculas diferentes de Perú y Chile
214
215
netflix[~netflix["country"].isin(["Peru","Chile"])] # ~ negación en Python ALT + 126
216
217
"""
218
Alternative methods to filter
219
"""
220
221
movie = netflix["type"] == "Movie"
222
m_usa = netflix["country"] == "United States"
223
m_actual = netflix["release_year"] > 2019
224
225
movie_usa = netflix[movie & m_usa & m_actual]
226
227
228
229
movie_usa = netflix.loc[ ( netflix[ "type" ] == "Movie" )
230
& ( netflix[ "country" ] == "United States")
231
& ( netflix[ "release_year" ] > 2019 ) ]
232
233
234
235
movie_usa.drop(['show_id', 'director'], axis=1 ) # axis = 1 , drop por columna
236
237
movie_usa[movie_usa.release_year != 2020]
238
239
#Rename variables
240
241
movie_usa.rename(columns = {'title':'Tituto_movie', 'duration':'Duration_movie'}, inplace = True)
242
243
244
### Export data
245
246
movie_usa.to_csv("../movie_usa.csv")
247
248
movie_usa.to_excel("../movie_usa.xlsx")
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266