Sunteți pe pagina 1din 5

Temă Seminar 2

MongoDB:

1) Să se afișeze toți clienții care au leasing în EUR.

Script:
db.clienti_leasing.find({ MONEDA: "EUR" }).projection({NUME_CLIENT:1,
MONEDA:1,PROFESIA:1,VARSTA:1, _id:0})

2) Să se afișeze numele, profesia, varsta și suma din depozit pentru clienții care au
în depozite mai mult de 10000 lei.

Script:
db.clienti_leasing.find({SUMA_DEPOZIT:{$gt:1000}}).projection({NUME_CLIENT:1,
PROFESIA:1, SUMA_DEPOZIT:1,_id:0}).sort({SUMA_DEPOZIT:1})

3) Afișați clienții (nume, varsta, suma credit, descriere) care au credite de tipul
“DIVERS”.

Script:
db.clienti_leasing.find({DESCRIERE:/DIVERS/}).projection({NUME_CLIENT:1, VARSTA:1,
VAL_CREDITE_RON:1, DESCRIERE:1,_id:0}).sort({NUME_CLIENT:1})

4) Afișați clienții cu vârsta cuprinsă între 25 si 35 de ani care au credite mai mari
decât 20.000 lei.

Script:
db.clienti_leasing.find({$and:[{VARSTA:{$gt: 25, $lt: 35}},{VAL_CREDITE_RON:{$gt:
-20000}}]}).projection({NUME_CLIENT:1, VARSTA:1, VAL_CREDITE_RON:1,
DESCRIERE:1,_id:0})

5) Să se afișeze numele, profesia, suma solicitată pentru clienții care au gradul de


fidelitate =2. Ordonați crescător în funcție de vârstă.

Script:
db.clienti_leasing.find({FIDELITATE:2}).projection({NUME_CLIENT:1,
PROFESIA:1,SUMA_SOLICITATA:1,FIDELITATE:1, _id:0}).sort({VARSTA:1})

6) Afișați valoarea totală a creditelor pe fiecare profesie. Ordonați descrescător în


funcție de valoarea totată a creditelor.
Script:
db.clienti_leasing.aggregate( [
        {$group:{
            _id:{profesia:"$PROFESIA"}, 
            valoare_total_credite:{$sum:"$VAL_CREDITE_RON"}
        }},
        {$sort:{valoare_totala_credite:1}}
])

7) Afișați numărul de clienți și valoarea medie solicitată în funcție de starea civilă


pentru clienții cu vârsta între 30 – 40 de ani.

Script:
db.clienti_leasing.aggregate( [
        {$match: {VARSTA:{$gte:30,$lte:40}}},
        {$group:{
            _id:{stare_civila:"$STARE_CIVILA"}, 
            valoare_medie:{$avg:"$VAL_CREDITE_RON"},
            numar_clienti:{$sum: 1}
        }}
])

8) Grupați clienții în 5 containere de tip bucket în funcție de suma solicitată.

Script:
db.clienti_leasing.aggregate( [
 {
    $bucketAuto: {
      groupBy: "$SUMA_SOLICITATA",
      buckets: 5
      output: {
        "Nr_total": { $sum: 1 }
   }
  }
 }
])

9) Realizați 2 fluxuri de agregare (cu comanda $facet) prin care clienții să fie
grupați în funcție de starea civilă și separat în funcție de sex.

Script:
db.clienti_leasing.aggregate(
    [{
        $facet:{
            "Stare civila":[{
                $group: { _id: "$STARE_CIVILA",
                    numar_total:{$sum:1}
        }
            }],
            "Sex":[{
                $group: {_id: "$SEX",
                    numar_total: {$sum:1}
        }
            }]
    }
    }])

Python – Oracle:

1) Să se returneze într-un df componenta, anul de fabricatie și pretul manoperei


pentru autoturismele Ford și Jeep. Pe setul din df, majorați cu 10% pretul
manoperei pentru autoturismele fabricate inainte de 2010 și care au componenta
BATTERY defectă. Salvați modificările într-un fișier .csv.

Script:
import cx_Oracle
import pandas as pd
from pprint import pprint
connection = cx_Oracle.connect("student_ps", "oracle", "37.120.250.20/oracle")
query = """SELECT componenta, an_fabricatie, pret_manopera from t_clienti_daune where
marca in ('FORD', 'JEEP')"""
df = pd.read_sql(query, con=connection, params={})
pprint (df.loc[(df['AN_FABRICATIE'] < 2010) & (df['COMPONENTA'] =='BATTERY'),
'PRET_MANOPERA'])
df.loc[(df['AN_FABRICATIE'] < 2010) & (df['COMPONENTA'] =='BATTERY'),
'PRET_MANOPERA']=df.loc[(df['AN_FABRICATIE'] < 2010) & (df['COMPONENTA']
=='BATTERY'), 'PRET_MANOPERA']*1.10
pprint(df.loc[(df['AN_FABRICATIE'] < 2010) & (df['COMPONENTA'] =='BATTERY'),
'PRET_MANOPERA'])
df.to_csv('clienti_daune_mod.csv')

2) Încărcați într-un df marca, modelul, valoarea medie și numărul de daune pe fiecare


model și marcă. Afișați numărul de autoturisme pentru care valoarea medie
depășește 400 lei. Reprezentați grafic modelele care au înregistrat mai mult de 200
de daune.

Script:
import matplotlib.pyplot as plt
query = """SELECT marca, model, avg(valoare_dauna) as valoare_medie, count(dauna) as
nr_dauna from t_clienti_daune group by marca, model"""
dfex2 = pd.read_sql(query, con=connection, params={})
print(dfex2)
print(dfex[dfex2["VALOARE_MEDIE"] > 400].count())
print(dfex2['VALOARE_MEDIE'][dfex2['VALOARE_MEDIE'] > 400].count())
df = dfex2.loc[:,["MODEL","NR_DAUNA"]][dfex2['NR_DAUNA'] > 200]
df.sort_values().plot(kind='bar', color = 'lightpink')
plt.show()

3) Încărcați într-un df numele, suma solicitată, suma din depozite și fidelitatea


clienților cu vârsta > 30 de ani care au solicitat un credit mai mare de 10.000 lei.
Verificați în df dacă suma din depozit este mai mare decât suma solicitată și pentru
acești clienți modificați fidelitatea în 5 (doar în df).

Script:
import cx_Oracle
import pandas as pd
from pprint import pprint
connection = cx_Oracle.connect("student_ps", "oracle", "37.120.250.20/oracle")
query = """SELECT nume_client, suma_solicitata, suma_depozit, fidelitate from
t_clienti_leasing where varsta>30 AND val_credite_ron>10.000"""
df = pd.read_sql(query, con=connection, params={})
pprint (df.loc[(df['suma_depozit'] > df['suma_solicitata']), 'fidelitate'])
df.loc[(df['suma_depozit'] > df['suma_solicitata']) ,'fidelitate']=df.loc[(df['suma_depozit'] >
df['suma_solicitata']), 5
pprint(df.loc[(df['suma_depozit'] > df['suma_solicitata', 'fidelitate'])
df.to_csv('clienti_leasing_mod.csv')

4) Încărcați într-un df profesia, venitul anual, suma din depozite și suma solicitată pe
fiecare profesie. În df adăugați o nouă coloană pentru a calcula gradul de îndatorare
pe fiecare profesie (suma_solicitata/(venit_anual+suma_depozit)*100).

Script:
import cx_Oracle
import pandas as pd
query = """SELECT profesia, avg(suma_solicitata) as avg_suma, avg(venit_anual) as
avg_venitAnual, avg(suma_depozit) as avg_sumaDepozit from t_clienti_leasing group by
profesia"""
df4 = pd.read_sql(query, con=connection, params={})
print(df4)
df['Grad_Indatorare]=df['avg_suma'] / (df['avg_venitAnual']+df['avg_sumaDepozit]*100
5) Încărcați într-un df starea civilă, profesia și suma totală solicitată grupată în
funcție de aceste atribute. Introduceți de la tastatură profesia și vizualizați
înregistrările returnate.
Script:
query = """SELECT stare_civila, profesia, sum(suma_solicitata) as total_suma from
t_clienti_leasing group by stare_civila, profesia"""
dfex3 = pd.read_sql(query, con=connection, params={})
print(dfex3)
print('Introduceti profesia: ')
string = input()
print(dfex3[dfex3['PROFESIA'] == string])