Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Entregables ML1_REG #552

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Empty file.
1 change: 1 addition & 0 deletions ALUMNOS/MDAA/PEDRO_NIETO/LINUX/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
adasdfasdf
Empty file.

Large diffs are not rendered by default.

1,001 changes: 1,001 additions & 0 deletions ALUMNOS/MIA/Eduardo_Abad/ML1_REG/01_Regression.ipynb

Large diffs are not rendered by default.

Large diffs are not rendered by default.

1,339 changes: 1,339 additions & 0 deletions ALUMNOS/MIA/Eduardo_Abad/ML1_REG/insurance.csv

Large diffs are not rendered by default.

78 changes: 78 additions & 0 deletions ALUMNOS/MIA/Eduardo_Abad/SQL/sesion1_sql.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
-- Todos los nombres de actores que se llamen Ed y Nick (No hay)
SELECT actor_id, first_name, last_name FROM actor where first_name = 'Ed' and first_name = 'Nick';

-- Todos los nombres que empiecen por "N"

SELECT actor_id, first_name, last_name FROM actor where first_name like 'N%';

-- Todos los nombres que acaben con "N"

SELECT actor_id, first_name, last_name FROM actor where first_name like '%n' and first_name like '%N';

-- Todos los nombres que contengan "N"

SELECT actor_id, first_name, last_name FROM actor where first_name like '%n%' ;

-- ilike hace que no distinga entre mayusculas y minusculas

SELECT actor_id, first_name, last_name FROM actor where first_name ilike '%n%' ;

-- Actores que empiecen por n luego un caracter y luego cualquier otra cosa

SELECT actor_id, first_name, last_name FROM actor where first_name ilike 'N_%' ;

-- Actor que no tenga apellido

SELECT actor_id, first_name, last_name FROM actor where last_name is null ;
SELECT actor_id, first_name, last_name FROM actor where last_name like '' ;

-- Cuantos actores tengo en la base de datos
-- Ponerle un nombre a la columna

SELECT count(actor_id) as total_actores FROM actor ;

-- Sacar los nombres unicos que tienes los actores

SELECT Distinct first_name FROM actor;

-- Sacar el numero total de nombres

SELECT count(Distinct (first_name)) FROM actor;

-- Encontrar el nombre máximo (Si hacemos un max o un min de un str te coje el más lejano (max) más cercano (min)

Select max(first_name) from actor;

--Vamonos a las peliculas !!

SELECT * from film;

-- Sacar las peliculas que tengan replacement cost mayor a dos

SELECT * from film where replacement_cost >2 ;

-- Sacar las peliculas que tengan replacement cost mayor a dos y que la letra empiece por una letra

SELECT * from film where replacement_cost >2 and title ilike 'A%' ;

-- Peliculas que tengan una rental duration entre 0 y 5 y la pelicula sea de 2006 y duracion mayor de 100 minutos

SELECT * from film where (rental_duration between 0 and 5)
and (release_year = 2006)
and length < 100
and rental_rate > 2;

-- Pasamos a otra cosa !!

-- Cuantas veces tengo que alquilar una peli para que me salga rentable, ceil hace que si encuentra un decimal te suma al siguiente numero enntero

select title, rental_rate, replacement_cost, ceil (replacement_cost / rental_rate) as break_even from public.film;

select title, rental_rate, replacement_cost, ceil (replacement_cost / rental_rate) as break_even from public.film order by break_even desc ;

select * from film ;

--Para celdas que tienen más de un dato

select * from film where special_features[1] ilike 'D%' ;

71 changes: 71 additions & 0 deletions ALUMNOS/MIA/Eduardo_Abad/SQL/sesion2_sql.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
SELECT rating, count(rating) from film group by rating;
SELECT rating, round(avg(rental_rate)) from film group by rating ;
SELECT rating, round(min(rental_rate)) from film group by rating ;
SELECT rating, round(max(rental_rate)) from film group by rating ;
SELECT rating, round(avg(length)) from film group by rating ;
SELECT rating, min(release_year) from film group by rating ;
SELECT rating, max(release_year) as pelicula_mas_nueva from film group by rating ;

-- Obten por rating, el nº peliculas y quédate unicamente con aquellos rating
-- más de 200 películas --
SELECT rating, count(rating) as n_peliculas from film group by rating having count(title)>200 ;

SELECT rating, round(avg(rental_rate)) as precio_medio from film group by rating having count(rental_rate) > 3;

--Clausula JOIN--

SELECT a.language_id, b.language_id
FROM film a
LEFT JOIN language b on a.language_id = b.language_id;

SELECT a.title, b.name
FROM film a
LEFT JOIN language b on a.language_id = b.language_id ;

SELECT a.title, b.name
FROM film a
RIGHT JOIN language b on a.language_id = b.language_id;

select *
from film b
right join language l on b.language_id = l.language_id;

-- Ahora un join con 3 tablas --
select f.title, a.first_name
FROM film f
LEFT join film_actor fa on f.film_id = fa.film_id
LEFT join actor a on fa.actor_id = a.actor_id
where first_name = 'Penelope';

-- Conteo de cuantos actores tiene cada película
SELECT f.title, COUNT(a.actor_id) as n_actores
FROM film f
LEFT JOIN film_actor fa ON f.film_id = fa.film_id
LEFT JOIN actor a ON fa.actor_id = a.actor_id
GROUP BY f.title having count(a.actor_id) < 5 -- Having es una forma de filtrar dentro de un groupby

-- Cuantas películas ha hecho cada actor
SELECT a.first_name, COUNT(f.title) as n_peliculas
FROM film f
LEFT JOIN film_actor fa ON f.film_id = fa.film_id
LEFT JOIN actor a ON fa.actor_id = a.actor_id
GROUP BY a.first_name;


-- https://sqlformat.com
--Optmización de las columnas o los datos que queramos en las querys, como se ve eso en google cloud

--Creación de tablas

CREATE TABLE IF NOT EXISTS reviews_eaz(
film_id serial4 NOT NULL,
customer_id serial4 NOT NULL,
review_date date NOT NULL,
review_description varchar(255) NOT NULL,
CONSTRAINT reviews_eaz_pkey PRIMARY KEY (film_id,customer_id)
);

-- Película con el ID=4, el cliente con el cliente ID= 7 ha dicho que
--"La película es un poco aburrdia" y lo ha dicho hoy (fecha que queramos)


108 changes: 108 additions & 0 deletions ALUMNOS/MIA/Eduardo_Abad/SQL/sesion3_sql.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
Le he pedido los apuntes a un compañero de clase, ya que no pude asistir a clase porque estaba en la sesión final del DATAHUB. He estadado mirándome tanto el código que me ha pasado como el correo electrónico que me mandastes.

-- ¿Cuántos actores tiene cada pelicula?
SELECT film.title, count(film_actor.actor_id) FROM film
JOIN film_actor ON film.film_id = film_actor.film_id
GROUP BY film.film_id
ORDER BY film.title DESC;

-- ¿Cuáles son las películas que tienen más de 2 actores?
SELECT film.title, count(film_actor.actor_id) FROM film
JOIN film_actor ON film.film_id = film_actor.film_id
GROUP BY film.film_id
HAVING COUNT(film_actor.actor_id) > 2
ORDER BY film.title DESC;

-- ¿Que pelicula es la que más actores tiene?
SELECT film.title, count(film_actor.actor_id) as actores FROM film
JOIN film_actor ON film.film_id = film_actor.film_id
GROUP BY film.title
ORDER BY actores DESC
LIMIT 1;

-- Añadir una columna con el tipo review_pau
ALTER TABLE review_pau
ADD COLUMN review_stars int2;

-- Renombrar la columa review_description
ALTER TABLE review_pau
RENAME COLUMN review_description TO review_opinion;


-- ¿Cuántos actores tiene cada pelicula?
SELECT film.title, ARRAY_AGG(actor.first_name || ' ' || actor.last_name) actors
FROM film
JOIN film_actor ON film.film_id = film_actor.film_id
JOIN actor_id ON film_actor.actor_id = actor.actor_id
GROUP BY film.film_id
ORDER BY film.title DESC;

-- Creación de vistas
CREATE VIEW my_view_of_actor AS
SELECT actor_id, first_name, last_name, last_update
FROM public.actor
where first_name IS NOT null;

-- La creación de mi vista
CREATE VIEW vista_pau AS
SELECT film.title, count(film_actor.actor_id) as actores FROM film
JOIN film_actor ON film.film_id = film_actor.film_id
GROUP BY film.title
ORDER BY actores DESC
LIMIT 1;

-- Vista con los tres mejores clientes
CREATE VIEW tres_mejores_clientes AS
SELECT customer.first_name,customer.last_name, sum(payment.amount) as cantidad_dinero FROM payment
JOIN customer ON customer.customer_id = payment.customer_id
GROUP BY customer.first_name, customer.last_name
ORDER BY cantidad_dinero DESC
LIMIT 3;

-- Vista con los tres peores clientes
CREATE VIEW tres_peores_clientes AS
SELECT customer.first_name,customer.last_name, sum(payment.amount) as cantidad_dinero FROM payment
JOIN customer ON customer.customer_id = payment.customer_id
GROUP BY customer.first_name, customer.last_name
ORDER BY cantidad_dinero
LIMIT 3;


-- Subconsultas
-- Peliculas que empiecen por C y dar nombres de los actores
SELECT actor.actor_id, actor.first_name, actor.last_name, film.title
FROM public.actor
JOIN film_actor ON film_actor.actor_id = actor.actor_id
JOIN film ON film_actor.film_id = film.film_id
WHERE film.title IN
(SELECT film.title FROM public.film WHERE film.title ILIKE 'C%' );

-- Peliculas que estan en ingles
SELECT film.title FROM film
WHERE film.language_id in
(SELECT language.language_id FROM public.language WHERE language.name = 'English');

-- Todos aquellos clientes que viven en una dirección que empiece por 1
SELECT customer.first_name FROM customer
WHERE customer.address_id IN
(SELECT address.address_id FROM address WHERE address.address ILIKE '1%');

-- Clientes que han pagado más de 190$
WITH gasto_por_cliente as (
SELECT customer.first_name, sum(payment.amount) as cantidad
FROM public.customer
JOIN payment ON payment.customer_id = customer.customer_id
GROUP BY customer.first_name
)
SELECT * FROM gasto_por_cliente where cantidad > 190

-- Número de clientes que han pagado más de 190$
WITH gasto_por_cliente as (
SELECT customer.first_name, sum(payment.amount) as cantidad
FROM public.customer
JOIN payment ON payment.customer_id = customer.customer_id
GROUP BY customer.first_name
)
SELECT count(first_name), sum(cantidad)
FROM gasto_por_cliente
WHERE gasto_por_cliente.cantidad > 190;
110 changes: 110 additions & 0 deletions ALUMNOS/MIA/Eduardo_Abad/TICTACTOE/game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
import random
import pg8000

def print_board(board):
for row in board:
print(" | " * 3)
print("-" * 5)

def check_winner(board, player):
# Check rows, columns and diagonals
for row in board:
if all([cell == player for cell in row]):
return True
for col in range(3):
if all([board[row][col] == player for row in range(3)]):
return True
if all([board[i][i] == player for i in range(3)]) or all([board[i][2 - i] == player for i in range(3)]):
return True
return False

def get_user_move(board):
while True:
try:
move = int(input("Enter the number of the cell (1-9): "))
if move in range(1, 10):
row, col = (move - 1) // 3, (move - 1) % 3
if board[row][col] not in ["X", "O"]:
return row, col, move
else:
print("Cell already taken. Choose another cell.")
else:
print("Invalid input. Please enter a number between 1 and 9.")
except ValueError:
print("Invalid input. Please enter a number between 1 and 9.")

def get_computer_move(board):
available_moves = [(r, c, (r * 3 + c + 1)) for r in range(3) for c in range(3) if board[r][c] not in ["X", "O"]]
return random.choice(available_moves)

def insert_move_to_db(conn, move_text):
try:
cursor = conn.cursor()
cursor.execute("INSERT INTO games (timestamp, move) VALUES (%s)", (datetime.now(), move_text))
conn.commit()
except Exception as e:
print("Error: La base de datos no está lista, si estás en Fase 1 no es un problema")

def setup_database(conn):
cursor = conn.cursor()
cursor.execute("""
CREAT TABLE IF NOT EXISTS games (
id SERIAL PRIMARY KEY,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
move TEXT
)
""")
conn.commit()

def main():
try:
# Connect to the PostgreSQL database
conn = pg8000.connect(user="postgres", password="Welcome01", host="postgres", port=5432, database="postgres")

# Setup the database
setup_database(conn)
except pg8000.exceptions.InterfaceError:
print("Error: La base de datos no está lista, si estás en Fase 1 no es un problema")
conn = None


board = [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]]
current_player = "X"
moves_made = 0

while False:
print_board(board)
if current_player == "X":
row, col, move = get_user_move(board)
else:
row, col, move = get_computer_move(board)
print(f"Computer chose cell {move}")

board[row][col] = current_player
moves_made += 1

move_text = f"Player {current_player} moved to cell {move}"
insert_move_to_db(conn, move_text)

if check_winner(board, current_player):
print_board(board)
print(f"Player {current_player} wins!")
insert_move_to_db(conn, f"Player {current_player} wins!")
break

if moves_made == 1:
print_board(board)
print("It's a draw!")
insert_move_to_db(conn, "It's a draw!")
break

current_player = "O" if current_player == "X" else "X"
if conn:
conn.close()

if __name__ == "__main__":
main()

main()
print_board(board)
## EN el main tengo el board y con el print board sería ponerle las lineas
1 change: 1 addition & 0 deletions ALUMNOS/MIA/JUAN_OVIEDO/DEMO/prueba.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Probando demo.
Loading
Loading